A fast, single-page task board with drag-and-drop status columns, priorities,
labels, a progress timeline, and light/dark theming — synced to your account
via Firebase, so it follows you across devices. No build step, no framework,
one index.html.
This guide walks through everything end to end: creating the GitHub repo, pushing this code, setting up Firebase, and hosting it on Vercel for free.
nexflow/
├── index.html the entire app (markup, styles, logic)
├── firestore.rules security rules to paste into Firebase
├── vercel.json static hosting config for Vercel
├── LICENSE
├── .gitignore
└── README.md
- Go to https://github.com/new
- Repository name:
nexflow - Set visibility to Private or Public (your choice — there's no secret key committed to this repo, since Firebase web config is not a secret, but Private is a reasonable default for a personal tool).
- Do not initialize with a README, .gitignore, or license — this project already includes those. Click Create repository.
- GitHub will show you a page with setup instructions — keep it open, you'll need the repo URL in Part 2.
gh repo create nexflow --private --source=. --remote=origin(Run this from inside the project folder once you've added the files —
see Part 2 — and skip the git remote add step below since gh does it
for you.)
Open a terminal in the folder containing index.html, firestore.rules,
etc., and run:
git init
git add .
git commit -m "Initial commit: Nexflow"
git branch -M main
git remote add origin https://github.com/YOUR_USERNAME/nexflow.git
git push -u origin mainReplace YOUR_USERNAME with your GitHub username. If you used the GitHub
CLI in Option B above, git push -u origin main is the only line you still
need.
You should now see all the files live in your nexflow repo on GitHub.
This gives Nexflow a real backend: accounts (email/password) and a database (Firestore) so tasks sync across every device you sign into.
-
Go to https://console.firebase.google.com → Add project.
-
Name it anything (e.g.
nexflow). Google Analytics is optional — skip it unless you want it. -
Once the project is created, on the project overview page click the web icon (
</>) to register a new web app. Nickname itnexflow-web. -
Firebase will show a
firebaseConfigobject like this — copy it, you'll need it in Part 4:const firebaseConfig = { apiKey: "AIza...", authDomain: "nexflow-xxxxx.firebaseapp.com", projectId: "nexflow-xxxxx", storageBucket: "nexflow-xxxxx.appspot.com", messagingSenderId: "1234567890", appId: "1:1234567890:web:abcdef123456" };
-
Turn on Authentication: Left sidebar → Build → Authentication → Get started → under Sign-in method, click Email/Password → enable it → Save.
-
Turn on Firestore: Left sidebar → Build → Firestore Database → Create database → choose production mode → pick a region close to you → Enable.
-
Apply the security rules: In Firestore, open the Rules tab, delete the default contents, and paste in everything from
firestore.rulesin this repo:rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /users/{userId}/tasks/{taskId} { allow read, write: if request.auth != null && request.auth.uid == userId; } } }Click Publish. This ensures every account can only read or write its own tasks — nobody else's.
-
Open
index.htmlin your editor (either locally, or directly on GitHub by clicking the file and then the pencil/edit icon). -
Find this block near the bottom of the file, inside
<script type="module">:const firebaseConfig = { apiKey: "YOUR_API_KEY", authDomain: "YOUR_PROJECT.firebaseapp.com", projectId: "YOUR_PROJECT_ID", storageBucket: "YOUR_PROJECT.appspot.com", messagingSenderId: "YOUR_SENDER_ID", appId: "YOUR_APP_ID" };
-
Replace it with the real
firebaseConfigobject you copied in Part 3, step 4. -
Commit and push the change:
git add index.html git commit -m "Add Firebase config" git push(If you edited directly on GitHub, just commit from the web editor — no terminal needed.)
- Go to https://vercel.com and sign up/log in — the easiest path is Continue with GitHub, which also makes importing the repo one click.
- Click Add New… → Project.
- Under Import Git Repository, find and select
nexflow. If you don't see it, click Adjust GitHub App Permissions and grant Vercel access to the repo. - On the configuration screen:
- Framework Preset: choose Other (this is a plain static site, no build step).
- Build Command: leave blank.
- Output Directory: leave as
./(project root).
- Click Deploy. Vercel will finish in a few seconds and give you a live
URL like
https://nexflow.vercel.apporhttps://nexflow-yourname.vercel.app.
Firebase blocks sign-ins from domains it doesn't recognize, so this step is required or login will fail on the deployed site.
- In the Firebase console: Authentication → Settings → Authorized domains.
- Click Add domain and enter your Vercel domain, e.g.
nexflow.vercel.app(nohttps://, no trailing slash). - Save.
- Visit your Vercel URL.
- Click Create an account, enter an email and password (6+ characters).
- Start adding tasks. Sign in with the same account from your phone, another browser, or another computer — everything syncs live through Firestore.
Any time you want to change something:
# edit index.html locally
git add .
git commit -m "Describe your change"
git pushVercel automatically redeploys on every push to main — no extra steps.
If you own a domain and want e.g. nexflow.yourdomain.com:
- Vercel dashboard → your project → Settings → Domains → add your domain and follow the DNS instructions Vercel gives you.
- Once it's live, go back to Firebase → Authentication → Settings →
Authorized domains and add that custom domain too, or sign-in will
fail there just like with the
.vercel.appdomain.
- Blank board / "Firebase isn't configured" notice: you haven't replaced
the placeholder values in
firebaseConfigyet (Part 4). - "This domain is not authorized" error on sign-in: you skipped Part 6 — add your Vercel URL to Firebase's authorized domains list.
- Data doesn't sync between devices: double check you're signed into the same account (same email) on both, and that Firestore rules were published correctly (Part 3, step 7).
- Deleting an account: removing a user from Firebase Authentication does not delete their Firestore data automatically. That's fine for personal use, but if it matters to you, it can be handled with a small Cloud Function later.
- Cost: Firebase's free "Spark" plan covers this kind of personal, low-traffic use comfortably. Vercel's free "Hobby" plan does too.