A modern, full-stack task management application built with Next.js, featuring authentication, CRUD operations, and intuitive task organization. This portfolio project extends beyond The Odin Project's Todo List, providing a seamless experience for managing tasks and organizing them into groups with a clean and intuitive user interface.
Live Demo: Taskflow
Video Tutorial: Complete Walkthrough on YouTube - Learn how to use all of Taskflow's features
- Taskflow
- Full CRUD Operations: Create, read, update, and delete tasks and groups
- Priority System: Assign and filter tasks by priority levels (low, medium, high)
- Due Date Tracking: Set due dates with smart relative time formatting
- Completion Tracking: Toggle task completion status with visual indicators
- Task Details: View and edit task details in a dedicated dialog
- Group Organization: Organize tasks into custom groups for better structure
- Dashboard Overview: Visual progress tracking with completion statistics
- Advanced Search: Search tasks by title or description
- Smart Filtering: Filter tasks by priority, completion status, and group
- Bulk Operations: Efficiently manage multiple tasks at once:
- Bulk mark complete/incomplete
- Bulk update priority levels
- Bulk move between groups
- Bulk delete
- Progressive Web App (PWA): Install Taskflow on your device for a native app-like experience:
- Install to home screen on mobile and desktop
- Standalone mode with full-screen experience
- Works on iOS, Android, and desktop browsers
- Keyboard Shortcuts: Power user features for faster navigation:
Ctrl/Cmd + B- Toggle sidebarCtrl/Cmd + Alt/Option + T- Add new taskCtrl/Cmd + Alt/Option + C- Toggle selected tasks
- Responsive Design: Seamless experience on desktop, tablet, and mobile devices
- Dark Mode: Built-in theme switching with system preference detection
- Beautiful UI: Modern, clean interface with smooth animations
- Secure Authentication: Powered by Clerk for secure user authentication
- User Isolation: Each user's data is completely isolated and secure
- Next.js 15 - React framework with App Router for full-stack development
- TypeScript - Type-safe JavaScript for better developer experience
- Tailwind CSS - Utility-first CSS framework
- shadcn/ui - Beautiful component library built on Radix UI
- Motion - Production-ready motion library for React (formerly Framer Motion)
- PostgreSQL - Robust relational database
- Prisma - Next-generation ORM for database access
- TanStack Query - Powerful data synchronization for React
- TanStack Table - Headless UI for building tables
- React Hook Form - Performant forms with easy validation
- Zod - TypeScript-first schema validation
- date-fns - Modern JavaScript date utility library
- cmdk - Command menu component
- Sonner - Toast notification library
- Vercel Analytics - Web analytics and performance monitoring
- Clerk - Complete authentication and user management solution
- Vercel - Platform for frontend deployment
This project has evolved through multiple iterations, demonstrating continuous improvement and learning:
-
v1 - Initial vanilla JavaScript, HTML, and CSS implementation
-
v2 - Enhanced version with improved structure using SCSS and Bootstrap, inspired by Todoist. This version became one of the most liked solutions (submitted as GDA) of The Odin Project's Todo List project and served as the foundation for v3.
-
v3 - Full-stack Next.js application with authentication, featuring a solid backend architecture with room for frontend enhancement.
-
v4 - Current version: a comprehensive revamp of v3 with enhanced features, improved UX, and modern UI
Before you begin, ensure you have the following installed:
- Node.js 18.x or higher (Download)
- A package manager: bun, npm, yarn, or pnpm (examples use bun)
- PostgreSQL database (local or cloud instance like Supabase, Neon, Railway, or Prisma Postgres)
- Git (Download)
- A Clerk account for authentication (Sign up)
-
Clone the Repository
git clone https://github.com/gideonadeti/taskflow.git cd taskflow -
Install Dependencies
bun install
-
Set Up Environment Variables
Create a
.envfile in the root directory. You can refer to.env.exampleas a template for the required environment variables:# Database POSTGRES_PRISMA_URL="postgresql://user:password@host:port/database?schema=public&pgbouncer=true" POSTGRES_URL_NON_POOLING="postgresql://user:password@host:port/database?schema=public" # Clerk Authentication NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY="pk_test_..." CLERK_SECRET_KEY="sk_test_..."
See Getting Environment Variables below for detailed instructions on obtaining these values.
-
Set Up PWA Icons (Optional but recommended)
For the app to be installable, you need to add PWA icons to the
/publicdirectory:icon-192x192.png(192x192 pixels)icon-512x512.png(512x512 pixels)icon-192x192-maskable.png(192x192 pixels, with padding)icon-512x512-maskable.png(512x512 pixels, with padding)
See
public/PWA-ICONS-README.mdfor detailed instructions on creating these icons.Note: The app will work without these icons, but users won't be able to install it to their home screen.
-
Set Up the Database
# Run database migrations (automatically generates Prisma Client) bunx prisma migrate dev # (Optional) Open Prisma Studio to view/edit database bunx prisma studio
-
Start the Development Server
bun run dev
The application will be available at http://localhost:3000.
Taskflow can be installed as a Progressive Web App for a native app-like experience:
- Visit the Taskflow website
- Look for the install icon (⊕) in the address bar
- Click "Install" to add Taskflow to your applications
- Open Taskflow in Safari
- Tap the Share button (square with arrow pointing up)
- Scroll down and tap "Add to Home Screen"
- Tap "Add" to install
- Open Taskflow in your browser
- A banner will appear prompting you to install, or
- Tap the menu (three dots) → "Install app"
- Follow the prompts to install
Once installed, Taskflow will open in its own window without browser UI, providing a cleaner, more focused experience.
-
Create a PostgreSQL database (local or cloud)
-
For Local Development: Both URLs can be the same direct connection string
-
Format:
postgresql://username:password@host:port/database?schema=publicNote: For production/Vercel deployments, use connection pooling URL for
POSTGRES_PRISMA_URLand direct URL forPOSTGRES_URL_NON_POOLING.
- Sign up at Clerk
- Create a new application
- Go to API Keys in your Clerk dashboard
- Copy:
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY(starts withpk_test_orpk_live_)CLERK_SECRET_KEY(starts withsk_test_orsk_live_)
To populate the database with sample data for development:
bun run seedThis will create sample groups and tasks. You can optionally set the SEED_USER_ID environment variable to use a specific user ID for seeded data.
Note: The seed script will create data for the user ID specified in SEED_USER_ID (defaults to "seed-user-123" if not set). Make sure you're authenticated with the corresponding user when viewing seeded data.
When deploying Taskflow to production, ensure you complete the following steps for a secure and fully functional application.
Required for Production: This webhook ensures user data is properly deleted when users delete their accounts (GDPR compliance and best practices).
-
Add Webhook Secret to Environment Variables
Add the following to your production environment variables:
CLERK_WEBHOOK_SIGNING_SECRET="whsec_..."
-
Configure Webhook in Clerk Dashboard
- In your Clerk dashboard, go to Webhooks
- Click Add Endpoint
- Enter your production endpoint URL:
https://yourdomain.com/api/webhooks/clerk - Subscribe to the
user.deletedevent - Save the endpoint
- Copy the Signing Secret (starts with
whsec_) - Add it to your production environment variables as
CLERK_WEBHOOK_SIGNING_SECRET
-
Verify Webhook is Working
When a user deletes their account through Clerk, all their tasks and groups will be automatically removed from the database.
Note for Local Development: To test webhooks locally, use a tool like ngrok to expose your local server and configure the ngrok URL in Clerk's webhook settings.
Contributions, issues, and feature requests are welcome! Feel free to:
-
Fork the project
-
Create your feature branch (
git checkout -b feature/AmazingFeature) -
Commit your changes (
git commit -m 'Add some AmazingFeature') -
Push to the branch (
git push origin feature/AmazingFeature) -
Open a Pull Request
Please ensure your code follows the existing style.
If you find this project helpful or interesting, consider supporting me:
This project is continuously evolving, and I plan to keep improving it with new features and enhancements. Some planned additions include:
- Push Notifications: Real-time push notifications for task reminders and due dates (PWA install functionality is complete; push notifications to be added)
- Offline Support: Service worker-based caching for offline access to tasks
- More features coming soon...
The original version of this project was built as part of my web development learning journey using The Odin Project curriculum. Special thanks to them for providing the Todo List project lesson and comprehensive curriculum.

.png)
.png)
.png)
.png)
.png)
.png)
.png)