Project Name: ProjectFlow Pro Technology Stack: ExpressJS Agent Team Preview URL: https://easycoda.com/explore/projects/66f11676-1766-46d0-addd-f5f463ce5904 This project was built with EasyCoda AI Agent Team. # TaskFlow A **Trello-like project management** application for teams. Organize projects into boards, track tasks with cards, collaborate with team members, and keep everyone aligned โ all in one place. Built with **React 19**, **Express 4**, **PostgreSQL**, and **shadcn/ui**. Online Preview: https://unqann66f116.4c055e81.apps.easycoda.site You can signup a new account or signin with a test account: [email protected]/password123 --- ## โจ Features ### ๐ Boards - Create and manage multiple boards for different projects - Each board has customizable lists (columns) and cards - Invite team members and assign roles (admin / member) ### ๐ Lists & Cards - **Lists** โ Create, rename, delete, and reorder columns to match your workflow - **Cards** โ Add, edit, delete, and move cards between lists - **Native HTML5 Drag & Drop** โ Drag cards between lists and reorder within lists with smooth optimistic updates ### ๐ Card Details - **Title & Description** โ Rich text-like editing with expandable textareas - **Due Dates** โ Set and manage due dates with a calendar picker - **Assignees** โ Assign cards to board members - **Labels** โ Color-coded labels for categorizing cards (10 colors) - **Comments** โ Threaded comments on cards with author info and timestamps ### ๐ฅ Team Collaboration - **Multi-user** โ Multiple team members can work on the same board - **Member Management** โ Add members by email, manage roles (admin/member) - **Share Dialog** โ Easy member invitation and role management ### ๐ Activity Log - **Timeline Feed** โ Track every action: card moves, creates, updates, comments, and more - **Grouped by Date** โ Today, Yesterday, and older entries ### ๐ Authentication - **JWT-based** โ Secure signup and login - **Protected Routes** โ All board operations require authentication - **Profile Management** โ Update your name and profile --- ## ๐ Tech Stack | Layer | Technology | |---|---| | **Frontend** | [React 19](https://react.dev/), [TypeScript](https://www.typescriptlang.org/) (strict), [Vite 7](https://vite.dev/) | | **Styling** | [Tailwind CSS v4](https://tailwindcss.com/), [shadcn/ui](https://ui.shadcn.com/) components | | **State Management** | [Zustand](https://github.com/pmndrs/zustand) (client state), [TanStack Query](https://tanstack.com/query/latest) (server state) | | **Forms** | [React Hook Form](https://react-hook-form.com/) + [Zod](https://zod.dev/) validation | | **Routing** | [React Router v7](https://reactrouter.com/) | | **Backend** | [Node.js 20](https://nodejs.org/), [Express 4](https://expressjs.com/), [TypeScript](https://www.typescriptlang.org/) | | **Database** | [PostgreSQL 17](https://www.postgresql.org/), [Prisma 7](https://www.prisma.io/) (ORM) | | **Auth** | [JWT](https://jwt.io/) + [bcrypt](https://github.com/kelektiv/node.bcrypt.js) | ### Key Packages **Frontend:** - `axios` โ HTTP client with auth interceptor - `date-fns` โ Date formatting and manipulation - `lucide-react` โ Icon library - `sonner` โ Toast notifications - `@tanstack/react-query` โ Data fetching, caching, optimistic updates **Backend:** - `helmet` โ Security headers - `cors` โ Cross-origin resource sharing - `morgan` โ HTTP request logging - `zod` โ Request validation - `jsonwebtoken` โ JWT signing and verification --- ## ๐ Project Structure ``` taskflow/ โโโ client/ # React frontend โ โโโ src/ โ โ โโโ components/ โ โ โ โโโ auth/ # Login, Register forms, route guards โ โ โ โโโ board/ # Kanban board, CardDetail, Share, Activity โ โ โ โโโ boards/ # Board list, Card, CreateDialog โ โ โ โโโ layout/ # AppLayout, AuthLayout, BoardLayout โ โ โ โโโ shared/ # ErrorBoundary โ โ โ โโโ ui/ # shadcn/ui components โ โ โโโ pages/ # Login, Register, BoardList, BoardPage โ โ โโโ schemas/ # Zod validation schemas โ โ โโโ services/ # API client and service modules โ โ โโโ store/ # Zustand stores (auth, board) โ โ โโโ types/ # Shared TypeScript types โ โโโ index.html โโโ server/ # Express backend โ โโโ prisma/ โ โ โโโ models/ # Multi-file Prisma schema (9 models) โ โ โโโ migrations/ # Database migrations โ โ โโโ seed.ts # Database seeder โ โโโ src/ โ โ โโโ config/ # Auth config, database config โ โ โโโ controllers/ # Route handlers โ โ โโโ middleware/ # Auth middleware, error handler โ โ โโโ routes/ # Route definitions โ โ โโโ schemas/ # Zod validation schemas โ โ โโโ services/ # Business logic โ โ โโโ utils/ # AppError utility โ โโโ .env.example โโโ spec/ # Technical specification files ``` --- ## ๐ ๏ธ Quick Start ### Prerequisites - **Node.js** 20+ - **pnpm** (recommended) or npm - **PostgreSQL** 17+ ### 1. Clone the repository ```bash git clone https://github.com/your-username/taskflow.git cd taskflow ``` ### 2. Set up the backend ```bash cd server # Copy environment variables cp .env.example .env # Edit .env with your database credentials # DATABASE_URL="postgresql://user:password@localhost:5432/taskflow" # Install dependencies pnpm install # Run database migrations pnpm prisma:migrate # (Optional) Seed with sample data pnpm prisma:seed # Start the development server pnpm dev ``` ### 3. Set up the frontend ```bash cd client # Copy environment variables cp .env.example .env # Install dependencies pnpm install # Start the development server pnpm dev ``` ### 4. Open the app Navigate to `http://localhost:8080` in your browser. ### Environment Variables **Server** (`server/.env`): | Variable | Description | Default | |---|---|---| | `DATABASE_URL` | PostgreSQL connection string | `postgresql://user:pass@localhost:5432/taskflow` | | `PORT` | Server port | `3000` | | `NODE_ENV` | Environment (development/production) | `development` | | `CORS_ORIGIN` | Allowed CORS origin | `http://localhost:8080` | | `JWT_SECRET` | Secret key for JWT signing | (required) | | `JWT_EXPIRES_IN` | JWT expiration duration | `7d` | | `SALT_ROUNDS` | Bcrypt salt rounds | `10` | **Client** (`client/.env`): | Variable | Description | Default | |---|---|---| | `VITE_API_BASE_URL` | API base URL (proxied in dev) | `/api/v1` | > **Note:** In development, Vite proxies `/api` requests to the Express server at `http://localhost:3000`. No separate CORS configuration is needed for local development. --- ## ๐ก API Overview All API endpoints are prefixed with `/api/v1`. | Method | Endpoint | Auth | Description | |---|---|---|---| | `POST` | `/auth/signup` | No | Register a new user | | `POST` | `/auth/login` | No | Login, returns JWT | | `GET` | `/auth/me` | Yes | Get current user profile | | `GET` | `/boards` | Yes | List user's boards | | `POST` | `/boards` | Yes | Create a new board | | `GET` | `/boards/:id` | Yes | Get board details (lists, cards, members) | | `PUT` | `/boards/:id` | Yes | Update board | | `DELETE` | `/boards/:id` | Yes | Delete board (owner only) | | `POST` | `/boards/:id/members` | Yes | Add member | | `DELETE` | `/boards/:id/members/:userId` | Yes | Remove member | | `GET/POST` | `/boards/:id/lists` | Yes | List/Create lists | | `PUT/DELETE` | `/boards/:id/lists/:listId` | Yes | Update/Delete list | | `POST` | `/boards/:id/lists/:listId/cards` | Yes | Create card | | `PUT/DELETE` | `/cards/:cardId` | Yes | Update/Delete card | | `PUT` | `/cards/:cardId/move` | Yes | Move card to another list | | `GET/POST` | `/cards/:cardId/comments` | Yes | List/Create comments | | `GET/POST` | `/boards/:id/labels` | Yes | List/Create labels | | `GET` | `/boards/:id/activity` | Yes | Get board activity log | --- ## ๐งช Running Tests ```bash # Backend cd server && pnpm run build # Frontend cd client && pnpm run build ``` --- ## ๐ค Contributing Contributions are welcome! Please feel free to submit a Pull Request. 1. Fork the repository 2. Create your feature branch (`git checkout -b feature/amazing-feature`) 3. Commit your changes (`git commit -m 'Add some amazing feature'`) 4. Push to the branch (`git push origin feature/amazing-feature`) 5. Open a Pull Request --- ## ๐ License This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details. --- ## ๐ Acknowledgments - Built by [EasyCoda ExpressJs Agent Team](https://easycoda.com) - Built with [shadcn/ui](https://ui.shadcn.com/) component library - Inspired by [Trello](https://trello.com/) - Icons by [Lucide](https://lucide.dev/)