A professional, elegant web-based task management tool for daily operations. Built with Next.js 16, Supabase, and deployed free on Vercel + Supabase.
| Feature | Description |
|---|---|
| Kanban Board | Drag & drop tasks across Todo → In Progress → Done |
| All Tasks View | Filterable, sortable list with bulk actions |
| Calendar View | Monthly calendar with per-day task planning |
| Analytics | Completion rates, priority charts, category breakdown |
| Pomodoro Timer | Built-in focus sessions with per-task tracking |
| Quick Add | Press ⌘K to instantly add tasks anywhere |
| Command Palette | Navigate and search tasks without leaving keyboard |
| Auth | Email/password + GitHub OAuth via Supabase |
| Responsive | Works on desktop, tablet, and mobile |
| Realtime | Live updates across tabs via Supabase Realtime |
Frontend (Free on Vercel)
- Next.js 14 — App Router + Server Components
- TypeScript — Full type safety
- Tailwind CSS — Utility-first styling
- Framer Motion — Smooth animations
- @hello-pangea/dnd — Drag & drop
- Recharts — Analytics charts
Backend (Free on Supabase)
- Supabase — PostgreSQL + Auth + Realtime + RLS
- Row Level Security — users only see their own data
git clone https://github.com/YOUR_USERNAME/funops.git
cd funops
pnpm install- Go to supabase.com → New Project
- Choose a name, set a database password, select a region
- Go to SQL Editor → paste contents of
supabase/schema.sql→ Run - Go to Settings → API → copy your Project URL and anon key
cp .env.example .env.localEdit .env.local:
NEXT_PUBLIC_SUPABASE_URL=https://your-project.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=your-anon-keynpm run devOpen http://localhost:3000 🎉
npm install -g vercel
vercelOr via vercel.com:
- Import your GitHub repo
- Add environment variables from step 3
- Deploy — done!
Vercel will auto-deploy on every git push main.
- Supabase Dashboard → Authentication → Providers → GitHub
- Create a GitHub OAuth App at github.com/settings/developers
- Homepage URL:
https://your-app.vercel.app - Callback URL:
https://your-project.supabase.co/auth/v1/callback
- Homepage URL:
- Paste Client ID and Secret into Supabase
funops/
├── app/
│ ├── (auth)/ # Login & signup pages
│ ├── api/tasks/ # REST API route handlers
│ ├── auth/callback/ # OAuth callback
│ ├── dashboard/ # Protected app pages
│ │ ├── page.tsx # Main dashboard
│ │ ├── kanban/ # Kanban board
│ │ ├── tasks/ # All tasks list
│ │ ├── calendar/ # Calendar view
│ │ ├── analytics/ # Charts & stats
│ │ ├── timer/ # Pomodoro timer
│ │ └── settings/ # User settings
│ └── page.tsx # Landing page
├── components/
│ ├── analytics/ # Charts, stat cards
│ ├── kanban/ # Board, task cards
│ ├── layout/ # Sidebar, header
│ ├── tasks/ # Modal, pomodoro
│ └── ui/ # Command palette
├── hooks/
│ ├── useTasks.ts # Task CRUD + realtime
│ └── useSidebar.ts # Mobile sidebar
├── lib/
│ ├── supabase/ # Client & server helpers
│ ├── types.ts # TypeScript types
│ └── utils.ts # Helper functions
├── supabase/
│ └── schema.sql # Database schema + RLS
├── middleware.ts # Auth route protection
├── vercel.json # Vercel config
└── .github/
└── workflows/ci.yml # GitHub Actions CI
tasks — id, user_id, title, description, status, priority,
category, tags, due_date, estimated_minutes,
actual_minutes, completed_at, order_index
pomodoro_sessions — id, user_id, task_id, duration_minutes, completed_at
user_preferences — id, user_id, theme, pomodoro_duration,
short_break, long_break, default_viewAll tables have Row Level Security — users can only read/write their own rows.
npm run dev # Start dev server (http://localhost:3000)
npm run build # Production build
npm run lint # ESLint checkMIT License — free to use, modify, and distribute.