React Kanban board with a real backend powered by Supabase (Postgres database + auth + realtime).
- Email/password sign up and sign in, plus "Continue with Google"
- Shared board — every signed-in user sees the same tasks
- Real-time sync — changes made by one user appear instantly for everyone else
- Assign tasks to a specific teammate
- Attach an image to a task
- In-app + browser notifications for tasks due today or overdue
- Add / edit / delete tasks
- Drag and drop between columns
- Search tasks
- Filter by priority
- Dark mode
- Command menu (
Ctrl+K/Cmd+K) - Responsive layout
- Keyboard accessible
Real email notifications (e.g. "you were assigned a task") need a separate email-sending service (like Resend) wired up through a Supabase Edge Function — not included here, since it needs its own account/API key. Ask if you want this added later.
- React 18 + Vite
- Supabase (Postgres, Auth, Realtime)
- Plain CSS
- Go to supabase.com, sign up, and create a new project (pick any name/region, set a database password).
- Once the project is ready, open SQL Editor in the left sidebar, click New Query, paste the contents of
supabase-schema.sql(in this repo), and click Run. This creates thetaskstable, security rules, and turns on realtime. - Go to Settings > API. Copy the Project URL and the anon public key.
- In this project, copy
.env.exampleto a new file named.env, and paste in your values:VITE_SUPABASE_URL=https://your-project-id.supabase.co VITE_SUPABASE_ANON_KEY=your-anon-public-key - By default Supabase requires email confirmation for sign-ups. For quick local testing you can turn this off: Authentication > Providers > Email > Confirm email > toggle off. (Keep it on for a real production app.)
- If you already ran the old
supabase-schema.sql, runsupabase-schema-v2.sqlas well (same SQL Editor > New Query > Run) — it adds theprofilestable, task assignment, and attachment columns. If this is a fresh project, runningsupabase-schema-v2.sqlalone is enough — it includes everything. - Enable image attachments: go to Storage in the left sidebar > New bucket > name it exactly
task-attachments> toggle Public bucket on > Create bucket. (The access policies for it were already created by the SQL script.) - Enable "Continue with Google" (optional):
- In Google Cloud Console, create an OAuth 2.0 Client ID (Web application). Add this as an Authorized redirect URI:
https://your-project-id.supabase.co/auth/v1/callback(find the exact value in Supabase under Authentication > Providers > Google once you open it). - Copy the generated Client ID and Client Secret.
- In Supabase: Authentication > Providers > Google, toggle it on, paste the Client ID and Secret, save.
- If you skip this, the email/password login still works fine — the Google button just won't complete sign-in until this is set up.
- In Google Cloud Console, create an OAuth 2.0 Client ID (Web application). Add this as an Authorized redirect URI:
.env is already in .gitignore — never commit real keys to GitHub.
npm install
npm run devOpen the app at:
http://localhost:5173
npm run buildOutput goes to the dist/ folder. Preview it with:
npm run previewThis is a static site (just HTML/CSS/JS after build), so it deploys easily to:
- Vercel: import the GitHub repo, framework preset "Vite" (auto-detects build command
npm run build, output dirdist). In Project Settings > Environment Variables, addVITE_SUPABASE_URLandVITE_SUPABASE_ANON_KEYwith your Supabase values, then redeploy. - Netlify: build command
npm run build, publish directorydist. Add the same two env vars in Site settings > Environment variables. - GitHub Pages: run
npm run build, then push thedistfolder to agh-pagesbranch (or use thegh-pagesnpm package).
- Open this folder in VS Code.
- Open the terminal and run:
git init git add . git commit -m "Initial commit"
- Create a new repository on GitHub, then run:
git remote add origin https://github.com/<your-username>/<repo-name>.git git branch -M main git push -u origin main
- Alternatively, use the built-in Source Control panel in VS Code (the icon on the left sidebar) to initialize, commit, and publish the repo with a few clicks.