Open source project management for teams that ship.
Kanban boards, team collaboration, time tracking, and real-time notifications — self-hostable and free forever.
- Kanban Boards — Drag & drop tasks across customizable columns with board, list, and table views
- Team Collaboration — Invite members via email, assign tasks, set roles (Owner, Admin, Member)
- Rich Comments — Notion-style rich text editor with @mentions, formatting, and code blocks
- Analytics Dashboard — Track project progress with visual charts and team productivity metrics
- Calendar View — Visualize all deadlines and milestones on a monthly calendar
- Time Tracking — Built-in timer and manual time entries per task
- Smart Notifications — Email, browser push, and webhook notifications for mentions, assignments, and deadlines
- Task Labels & Dependencies — Color-coded labels and task blocking/dependency tracking
- File Attachments — Upload files to tasks via Cloudflare R2 / S3-compatible storage
- Checklists — Subtask checklists within tasks with progress tracking
- Project Templates — Save and reuse task templates across projects
- Favorites & Bookmarks — Quick access to frequently used projects
- Admin Panel — User management dashboard with ban/delete capabilities and platform stats
- PWA Support — Install as a desktop/mobile app with service worker
- Dark Mode — Beautiful dark theme by default
- Fully Responsive — Works on desktop, tablet, and mobile
| Layer | Technology |
|---|---|
| Framework | Next.js 16 (App Router) |
| Language | TypeScript |
| Database | PostgreSQL + Prisma ORM |
| Auth | NextAuth.js v5 (Credentials) |
| Styling | Tailwind CSS v4 + Radix UI |
| Data Fetching | SWR with optimistic updates |
| Rich Text | TipTap with extensions |
| Drag & Drop | @hello-pangea/dnd |
| Charts | Recharts |
| Nodemailer | |
| Push Notifications | web-push (VAPID) |
| File Storage | Cloudflare R2 / S3-compatible |
| Icons | Lucide |
-
Clone the repository
git clone https://github.com/taskflow-pm/taskflow.git cd taskflow npm install -
Set up environment variables
cp .env.example .env
Open
.envand fill in the required values. See Environment Variables for details. -
Set up the database
npx prisma db push
-
Start the development server
npm run dev
Open http://localhost:3000 in your browser.
Copy .env.example to .env and configure:
| Variable | Required | Description |
|---|---|---|
DATABASE_URL |
Yes | PostgreSQL connection string |
AUTH_SECRET |
Yes | NextAuth secret (run openssl rand -base64 32) |
NEXTAUTH_URL |
Yes | App URL (e.g., http://localhost:3000) |
SMTP_HOST |
Yes | SMTP server host for emails |
SMTP_PORT |
Yes | SMTP port (587 for TLS, 465 for SSL) |
SMTP_USER |
Yes | SMTP username |
SMTP_PASS |
Yes | SMTP password |
SMTP_FROM |
No | From address (default: TaskFlow <noreply@taskflow.app>) |
NEXT_PUBLIC_VAPID_PUBLIC_KEY |
No | VAPID public key for push notifications |
VAPID_PRIVATE_KEY |
No | VAPID private key for push notifications |
R2_ENDPOINT |
No | Cloudflare R2 / S3 endpoint URL |
R2_ACCESS_KEY_ID |
No | R2 / S3 access key |
R2_SECRET_ACCESS_KEY |
No | R2 / S3 secret key |
R2_BUCKET |
No | Storage bucket name (default: taskflow) |
R2_PUBLIC_URL |
No | Public URL for uploaded files |
NEXT_PUBLIC_SITE_URL |
No | Public site URL |
CRON_SECRET |
No | Secret for authenticating cron job requests |
npx web-push generate-vapid-keysAfter registering an account, promote it to admin:
ADMIN_EMAIL=your@email.com npx prisma db seed| Script | Description |
|---|---|
npm run dev |
Start development server |
npm run build |
Build for production |
npm start |
Start production server |
npm run lint |
Run ESLint |
npx prisma studio |
Open Prisma database GUI |
npx prisma db push |
Push schema changes to database |
npx prisma db seed |
Seed admin user |
taskflow/
├── prisma/
│ ├── schema.prisma # Database schema
│ └── seed.ts # Admin seed script
├── public/
│ ├── sw.js # Service worker (PWA)
│ └── icons/ # App icons
├── src/
│ ├── app/
│ │ ├── page.tsx # Landing page
│ │ ├── login/ # Login page
│ │ ├── signup/ # Registration with OTP
│ │ ├── dashboard/ # Main app pages
│ │ │ ├── page.tsx # Dashboard home
│ │ │ ├── projects/ # Project management & Kanban
│ │ │ ├── analytics/ # Analytics dashboard
│ │ │ ├── calendar/ # Calendar view
│ │ │ ├── favorites/ # Bookmarked projects
│ │ │ ├── notifications/ # Notification center
│ │ │ └── settings/ # User settings & categories
│ │ ├── admin/ # Admin panel
│ │ └── api/ # API routes
│ ├── components/
│ │ ├── ui/ # shadcn/ui components
│ │ ├── layout/ # Sidebar, mobile header
│ │ ├── comments.tsx # Comment system with @mentions
│ │ ├── task-extras.tsx # Labels, attachments, dependencies
│ │ └── time-tracker.tsx # Time tracking component
│ ├── hooks/ # Custom React hooks (SWR)
│ ├── lib/
│ │ ├── auth.ts # NextAuth configuration
│ │ ├── prisma.ts # Prisma client
│ │ ├── fetcher.ts # SWR fetcher
│ │ └── notifications.ts # Email & push helpers
│ └── middleware.ts # Route protection
├── .env.example # Environment variable template
├── CONTRIBUTING.md # Contribution guidelines
├── LICENSE # MIT License
└── package.json
- Push your code to GitHub
- Import the repository on Vercel
- Add your environment variables in the Vercel dashboard
- Deploy — Vercel auto-detects Next.js
-
Clone and install dependencies
-
Set up a PostgreSQL database
-
Configure
.envwith production values -
Build and start:
npm run build npm start
The app runs on port 3000 by default.
Docker support is planned. Track progress in this issue.
We welcome contributions of all kinds! Please see our Contributing Guide for details on:
- Setting up the development environment
- Our coding standards
- The pull request process
Quick links:
- Open an issue — report bugs or request features
- Start a discussion — questions or ideas
- Submit a PR — contribute code
This project is licensed under the MIT License — free for personal and commercial use.
- Next.js — The React framework
- shadcn/ui — Beautiful UI components
- Prisma — Type-safe database ORM
- TipTap — Headless rich text editor
- Radix UI — Accessible component primitives
- Lucide — Beautiful open source icons
Made with ❤️ by the TaskFlow community
If TaskFlow helps you, consider giving it a ⭐ on GitHub!