You have 20 files to create. Check them off as you complete each one:
-
package.json(File #1) -
next.config.js(File #2) -
tailwind.config.js(File #3) -
postcss.config.js(File #4) -
.gitignore(File #13) -
README.md(File #14)
-
app/layout.js(File #5) -
app/globals.css(File #6) -
app/page.js(File #12)
-
app/player/page.js(File #19)
-
lib/config.js(File #7) -
lib/api.js(File #8) -
lib/utils.js(File #9)
-
components/Modal.js(File #10) -
components/EmptyState.js(File #11) -
components/SetupWizard.js(File #15) -
components/AuthScreen.js(File #16) -
components/SuperAdminDashboard.js(File #17) -
components/CustomerDashboard.js(File #18)
-
public/sw.js(File #20)
On your computer, create this exact folder structure:
digital-signage-saas/
βββ app/
β βββ player/
βββ components/
βββ lib/
βββ public/
How to do this:
- Right-click on Desktop β New β Folder
- Name it:
digital-signage-saas - Open that folder
- Right-click inside β New β Folder (name it
app) - Right-click inside β New β Folder (name it
components) - Right-click inside β New β Folder (name it
lib) - Right-click inside β New β Folder (name it
public) - Open the
appfolder - Right-click inside β New β Folder (name it
player)
- Open Finder
- Go to Desktop
- File β New Folder (name it
digital-signage-saas) - Open that folder
- Create folders:
app,components,lib,public - Inside
app, create folder:player
For each file, you'll:
- Create a new text file in the correct folder
- Name it exactly as shown (including the extension)
- Copy the content from the artifact
- Save it
- Right-click in the folder β New β Text Document
- Name it with the correct extension (e.g.,
package.json) - Right-click the file β Edit with Notepad (or your text editor)
- Copy content from artifact
- Paste into file
- Save (Ctrl+S)
- Open TextEdit
- Format β Make Plain Text
- Copy content from artifact
- Paste
- File β Save (save to correct folder with correct name)
Create these files in the main digital-signage-saas folder:
Location: digital-signage-saas/package.json
Content: Copy from Artifact #1
Location: digital-signage-saas/next.config.js
Content: Copy from Artifact #2
Location: digital-signage-saas/tailwind.config.js
Content: Copy from Artifact #3
Location: digital-signage-saas/postcss.config.js
Content: Copy from Artifact #4
Location: digital-signage-saas/.gitignore
Content: Copy from Artifact #13
Note: On Windows, you may need to name it .gitignore. (with dot at end), then rename in Git Bash
Location: digital-signage-saas/README.md
Content: Copy from Artifact #14
Create these inside the app folder:
Location: digital-signage-saas/app/layout.js
Content: Copy from Artifact #5
Location: digital-signage-saas/app/globals.css
Content: Copy from Artifact #6
Location: digital-signage-saas/app/page.js
Content: Copy from Artifact #12
Create this inside the app/player folder:
Location: digital-signage-saas/app/player/page.js
Content: Copy from Artifact #19
Create these inside the lib folder:
Location: digital-signage-saas/lib/config.js
Content: Copy from Artifact #7
IMPORTANT: After deploying your Cloudflare Worker, you MUST update these lines:
export const API_URL = 'https://your-actual-worker-url.workers.dev';
export const INSTANTDB_APP_ID = 'your-actual-instantdb-app-id';Location: digital-signage-saas/lib/api.js
Content: Copy from Artifact #8
Location: digital-signage-saas/lib/utils.js
Content: Copy from Artifact #9
Create these inside the components folder:
Location: digital-signage-saas/components/Modal.js
Content: Copy from Artifact #10
Location: digital-signage-saas/components/EmptyState.js
Content: Copy from Artifact #11
Location: digital-signage-saas/components/SetupWizard.js
Content: Copy from Artifact #15
Location: digital-signage-saas/components/AuthScreen.js
Content: Copy from Artifact #16
Location: digital-signage-saas/components/SuperAdminDashboard.js
Content: Copy from Artifact #17
Location: digital-signage-saas/components/CustomerDashboard.js
Content: Copy from Artifact #18
Create this inside the public folder:
Location: digital-signage-saas/public/sw.js
Content: Copy from Artifact #20
-
Go to GitHub.com
- Log in to your account
-
Create New Repository
- Click the "+" button (top right)
- Click "New repository"
- Repository name:
digital-signage-saas - Description: "Multi-tenant digital signage platform"
- Choose Public or Private
- DO NOT check "Add a README file" (we already have one)
- Click "Create repository"
-
Upload Your Files
- On the repository page, click "uploading an existing file"
- Drag and drop your entire
digital-signage-saasfolder - IMPORTANT: Make sure you're uploading the contents, not the folder itself
- The files should appear in the root, like:
package.json app/ components/ lib/ public/ - Add commit message: "Initial commit - complete SaaS platform"
- Click "Commit changes"
-
Download GitHub Desktop
- Go to: https://desktop.github.com/
- Download and install
-
Sign In
- Open GitHub Desktop
- File β Options β Sign In
- Sign in with your GitHub account
-
Create Repository
- File β New Repository
- Name:
digital-signage-saas - Local Path: Choose where to save (e.g., Documents)
- Click "Create Repository"
-
Copy Your Files
- Open the repository folder (File β Show in Explorer/Finder)
- Copy ALL your files from your
digital-signage-saasfolder - Paste them into this repository folder
- Your structure should look like:
package.json app/layout.js app/page.js components/Modal.js etc...
-
Commit and Push
- Go back to GitHub Desktop
- You'll see all files listed
- Summary: "Initial commit - complete platform"
- Click "Commit to main"
- Click "Publish repository" (top right)
- Choose Public or Private
- Click "Publish repository"
-
Go to Vercel.com
- Sign up or log in
- Use "Continue with GitHub" (easiest)
-
Import Project
- Click "Add New..." β "Project"
- You'll see your GitHub repositories
- Find
digital-signage-saas - Click "Import"
-
Configure Project
- Framework Preset: Next.js (should auto-detect)
- Root Directory:
./(leave as default) - Build Command: (leave as default)
- Output Directory: (leave as default)
- DON'T add environment variables yet
- Click "Deploy"
-
Wait for Deployment
- This takes 2-3 minutes
- You'll see build logs
- When complete, you'll get a URL like:
https://your-project.vercel.app
-
Visit Your Site
- Click "Visit" or copy the URL
- You should see the Setup Wizard!
Before the setup wizard will work, you need:
See the separate Cloudflare Worker artifact (Artifact #1 from earlier conversation)
- Install Wrangler:
npm install -g wrangler - Create project folder
- Add worker code to
src/index.js - Create
wrangler.tomlwith your credentials - Deploy:
wrangler deploy - Note your worker URL
- In your GitHub repository, edit
lib/config.js - Change these lines:
export const API_URL = 'https://signage-api.YOUR-SUBDOMAIN.workers.dev'; export const INSTANTDB_APP_ID = 'your-actual-app-id-from-instantdb';
- Commit the changes
- Vercel will automatically redeploy (takes 1 minute)
- Visit your Vercel URL
- You should now see the Setup Wizard
- Click through Step 1 (service checklist)
- Step 2: Create your super admin account
- Enter your name
- Enter email
- Enter password (min 8 characters)
- Click "Complete Setup"
- You're now logged in as super admin!
- Open incognito/private window
- Go to your Vercel URL
- Click "Sign up"
- Create a test customer account
- Verify you can see the customer dashboard
- On Firestick, open Silk Browser
- Go to:
https://your-project.vercel.app/player - You should see a 6-character pairing code
- In customer dashboard, click "Pair Screen"
- Enter the code
- Screen should update to "Waiting for content"
- Upload a test image in Media tab
- Create a playlist in Playlists tab
- Add the image to the playlist
- Go to Screens tab
- Assign the playlist to your screen
- Screen should start displaying the image!
- Make sure all files are in the correct folders
- Check file names match exactly (case-sensitive)
- Verify folder structure matches the guide
- Check
lib/config.jshas correct API_URL - Open browser console (F12) to see actual error
- Verify Cloudflare Worker is deployed and accessible
- Check the build logs for specific error
- Most common: Missing files or wrong folder structure
- Solution: Re-check file locations
- Make sure you're uploading file contents, not the parent folder
- Try GitHub Desktop if website upload isn't working
- Check you have permissions on the repository
- All 20 files created in correct locations
- Files uploaded to GitHub successfully
- Vercel deployment successful and live
- Cloudflare Worker deployed
-
lib/config.jsupdated with correct URLs - Setup wizard completed
- Super admin account created
- Can log in as super admin
- Test customer account created
- Firestick player shows pairing code
- Successfully paired a screen
- Uploaded media file
- Created playlist
- Assigned playlist to screen
- Content playing on screen
If you get stuck:
- Check the error message carefully - it usually tells you what's wrong
- Verify file locations - most issues are from files in wrong folders
- Check the browser console - Press F12 to see JavaScript errors
- Review Vercel build logs - shows exactly where build failed
- Double-check configuration - API_URL and InstantDB App ID must be correct
Once everything is working:
- Add your custom domain in Vercel settings
- Configure multiple Firesticks with the player URL
- Test offline mode (disconnect Firestick WiFi)
- Create more customer test accounts
- Adjust customer limits from super admin dashboard
- Plan your Stripe integration for paid tiers
Congratulations! You now have a fully functional SaaS platform! π