Frontend: Next.js, React, Tailwind CSS, Zustand
Backend: Express, Prisma, PostgreSQL
- Node.js 22+
- PostgreSQL
cd task-management-be
npm installCreate .env file:
DATABASE_URL="postgresql://user:password@localhost:5432/task_management?schema=public"
PORT=8080
Then run:
npx prisma migrate dev
npm run dev # http://localhost:8080cd task-management-fe
npm install
cp env/.env.example env/.env.dev
npm run dev # http://localhost:3000Inside env/.env.dev, set NEXT_PUBLIC_TASK_DATA_SOURCE to mock for mock data or api to connect to the backend.
Base URL: /api/v1/tasks
| Method | Path | Description |
|---|---|---|
| GET | / |
List tasks (query: ?status=TODO) |
| POST | / |
Create task |
| PUT | /:id |
Update task |
| DELETE | /:id |
Soft delete |
| GET | /deleted |
List deleted tasks |
| DELETE | /deleted/:id |
Permanent delete |
├── task-management-be/ # Express API
│ ├── src/
│ │ ├── constants/
│ │ ├── lib/
│ │ ├── middlewares/
│ │ ├── tasks/ # route, controller, service, validator
│ │ └── utils/ # response helper
│ └── prisma/ # schema & migrations
├── task-management-fe/ # Next.js frontend
│ └── src/
│ ├── app/ # page, layout
│ │ └── _components/ # Header, MainUI
│ ├── common-components/ # shared UI (Button, Input, Select, etc.)
│ ├── constant/
│ ├── features/tasks/ # components, hooks, store, api, mock
│ └── lib/
├── nginx/
├── docker-compose.prod.yml
└── .github/workflows/