A modern, full-stack task board application built with Next.js 15, React 19, TypeScript, and PostgreSQL. This application provides a beautiful and intuitive interface for managing tasks, boards, and columns with drag-and-drop functionality.
- π Authentication System: JWT-based authentication with secure password hashing
- π Multiple Boards: Create and manage multiple task boards
- π Task Management: Create, edit, and delete tasks with descriptions
- β Subtasks: Break down tasks into smaller, manageable subtasks
- π¨ Customizable Columns: Create custom columns with different colors
- π±οΈ Drag & Drop: Intuitive drag-and-drop interface for task management
- π Dark Mode: Built-in dark mode support with next-themes
- π± Responsive Design: Fully responsive UI that works on all devices
- π Server Actions: Utilizes Next.js 15 server actions for optimal performance
- π― Type-Safe: Full TypeScript support throughout the application
- Next.js 15 - React framework with App Router
- React 19 - Latest React with concurrent features
- TypeScript 5 - Type-safe JavaScript
- Tailwind CSS 4 - Utility-first CSS framework
- Radix UI - Accessible component primitives
- dnd-kit - Modern drag-and-drop toolkit
- React Hook Form - Performant form validation
- Zod - TypeScript-first schema validation
- Sonner - Beautiful toast notifications
- Lucide React - Icon library
- Next.js API Routes - RESTful API endpoints
- Drizzle ORM - TypeScript ORM for PostgreSQL
- PostgreSQL - Relational database
- JWT - JSON Web Tokens for authentication
- bcryptjs - Password hashing
- Pino - Fast JSON logger
- Repository Pattern - Data access layer abstraction
- Controller Pattern - Business logic separation
- Service Layer - Reusable business logic
- Type-Safe API - End-to-end type safety
task-board/
βββ app/ # Next.js App Router
β βββ actions/ # Server actions
β β βββ auth.ts # Authentication actions
β βββ api/ # API routes
β β βββ boards/ # Board endpoints
β β βββ columns/ # Column endpoints
β β βββ tasks/ # Task endpoints
β β βββ subtasks/ # Subtask endpoints
β βββ auth/ # Authentication pages
β β βββ login/
β β βββ register/
β βββ dashboard/ # Main dashboard
β βββ layout.tsx # Root layout
β βββ page.tsx # Home page
βββ components/ # React components
β βββ dashboard/ # Dashboard-specific components
β β βββ board-view.tsx
β β βββ column-view.tsx
β β βββ header.tsx
β β βββ sidebar.tsx
β β βββ task-card.tsx
β βββ modals/ # Modal dialogs
β β βββ board-modal.tsx
β β βββ column-modal.tsx
β β βββ task-modal.tsx
β β βββ task-details-modal.tsx
β β βββ delete-modal.tsx
β βββ ui/ # Reusable UI components
β βββ providers.tsx # App providers
βββ controllers/ # Business logic controllers
β βββ board.controller.ts
β βββ column.controller.ts
β βββ task.controller.ts
β βββ subtask.controller.ts
β βββ index.ts
βββ repositories/ # Data access layer
β βββ board.repository.ts
β βββ column.repository.ts
β βββ task.repository.ts
β βββ subtask.repository.ts
β βββ user.repository.ts
βββ db/ # Database configuration
β βββ schemas/ # Database schemas
β β βββ users.schema.ts
β β βββ boards.schema.ts
β β βββ columns.schema.ts
β β βββ tasks.schema.ts
β β βββ subtasks.schema.ts
β β βββ relations.ts
β β βββ index.ts
β βββ schema.ts # Schema exports
β βββ index.ts # Database connection
βββ hooks/ # Custom React hooks
β βββ use-boards.ts
β βββ use-columns.ts
β βββ use-tasks.ts
β βββ use-subtasks.ts
βββ lib/ # Utility libraries
β βββ auth.ts # Server-side auth
β βββ auth-client.ts # Client-side auth
β βββ jwt.ts # JWT utilities
β βββ logger.ts # Logging utilities
β βββ types.ts # TypeScript types
β βββ utils.ts # Helper functions
β βββ validations.ts # Zod schemas
βββ scripts/ # Utility scripts
β βββ seed.ts # Database seeding
βββ drizzle.config.ts # Drizzle ORM config
βββ middleware.ts # Next.js middleware
βββ next.config.ts # Next.js configuration
βββ package.json # Dependencies
βββ tailwind.config.ts # Tailwind configuration
βββ tsconfig.json # TypeScript configuration
See QUICKSTART.md for detailed setup instructions.
- Node.js 20.x or higher
- PostgreSQL 14.x or higher
- npm or yarn package manager
-
Clone the repository
git clone <repository-url> cd task-board
-
Install dependencies
npm install
-
Setup environment variables
cp .env.example .env.local
Edit
.env.localand add your database URL:DATABASE_URL=postgresql://user:password@localhost:5432/taskboard JWT_SECRET=your-secret-key-here
-
Setup database
# Generate migrations npm run db:generate # Push schema to database npm run db:push # (Optional) Seed with sample data npm run db:seed
-
Run development server
npm run dev
-
Open your browser Navigate to http://localhost:3000
- Quick Start Guide - Get up and running quickly
- Architecture Documentation - Detailed system architecture
- API Documentation - API endpoints and usage (if created)
This application follows a clean, layered architecture:
-
Presentation Layer (Components & Pages)
- React components with TypeScript
- Custom hooks for state management
- Form handling with React Hook Form
-
API Layer (Next.js API Routes)
- RESTful endpoints
- Authentication middleware
- Request validation with Zod
-
Controller Layer
- Business logic orchestration
- Data transformation
- Error handling
-
Repository Layer
- Database operations
- Query abstraction
- Data access patterns
-
Database Layer
- PostgreSQL with Drizzle ORM
- Type-safe queries
- Relational data modeling
For detailed architecture information, see ARCHITECTURE.md.
The application uses JWT (JSON Web Tokens) for authentication:
- Server-side: Validates tokens in API routes
- Client-side: Stores tokens in localStorage
- Token expiration: 7 days
- Password hashing: bcryptjs with salt rounds of 10
The database consists of 5 main tables:
- users - User accounts
- boards - Task boards
- columns - Board columns
- tasks - Tasks within columns
- subtasks - Subtasks within tasks
All relationships are enforced at the database level with foreign keys and cascade deletes.
npm run dev # Start development server with Turbopack
npm run build # Build for production
npm run start # Start production server
npm run db:generate # Generate Drizzle migrations
npm run db:migrate # Run migrations
npm run db:push # Push schema to database
npm run db:studio # Open Drizzle Studio (database GUI)
npm run db:seed # Seed database with sample dataContributions are welcome! Please feel free to submit a Pull Request.
This project is licensed under the MIT License.
- Next.js - The React Framework
- Drizzle ORM - TypeScript ORM
- Radix UI - Accessible components
- dnd-kit - Drag and drop toolkit
- Tailwind CSS - CSS framework
For support, email gooduru.vineeth@gmail.com or open an issue in the repository.
Made with β€οΈ using Next.js and React