A full-stack Kanban board application built with modern technologies.
Backend:
- Bun - JavaScript runtime
- ElysiaJS - Web framework
- GraphQL Yoga - GraphQL server
- Drizzle ORM - TypeScript ORM
- PostgreSQL - Database
Frontend:
- React - UI library
- Vite - Build tool
- Apollo Client - GraphQL client
- shadcn/ui - Component library
- dnd-kit - Drag and drop
- Tailwind CSS - Styling
- Create and manage multiple boards
- Add, edit, and delete columns
- Create tasks with titles and descriptions
- Drag and drop tasks between columns
- Real-time updates with polling
- Board statistics and analytics
- Task search functionality
- Bun installed
- PostgreSQL running locally
- Clone the repository and install dependencies:
bun install- Create the database:
createdb kanban- Push the schema to the database:
bun run db:push- (Optional) Seed the database with sample data:
bun run db:seed- Start the development servers:
bun run devThe application will be available at:
- Frontend: http://localhost:3000
- GraphQL Playground: http://localhost:4000/graphql
kanban-basic/
├── backend/
│ ├── src/
│ │ ├── db/
│ │ │ ├── schema.ts # Drizzle schema definitions
│ │ │ └── index.ts # Database connection
│ │ ├── graphql/
│ │ │ ├── schema.ts # GraphQL type definitions
│ │ │ └── resolvers.ts # GraphQL resolvers
│ │ └── index.ts # Server entry point
│ ├── drizzle.config.ts
│ └── package.json
├── frontend/
│ ├── src/
│ │ ├── components/
│ │ │ ├── ui/ # shadcn components
│ │ │ ├── TaskCard.tsx
│ │ │ ├── KanbanColumn.tsx
│ │ │ └── KanbanBoard.tsx
│ │ ├── graphql/
│ │ │ └── queries.ts # GraphQL queries/mutations
│ │ ├── lib/
│ │ │ └── utils.ts
│ │ ├── App.tsx
│ │ └── main.tsx
│ └── package.json
└── package.json
From the root directory:
bun run dev- Start both frontend and backend in development modebun run dev:backend- Start only the backendbun run dev:frontend- Start only the frontendbun run db:push- Push schema changes to databasebun run db:seed- Seed database with sample databun run db:studio- Open Drizzle Studio
boards- List all boards with statsboard(id: ID!)- Get a single board with columns and taskssearchTasks(query: String!, boardId: ID)- Search tasks
createBoard(title: String!)- Create a new boardcreateColumn(boardId: ID!, title: String!)- Add a column to a boardcreateTask(columnId: ID!, title: String!, description: String)- Create a taskmoveTask(taskId: ID!, targetColumnId: ID!, targetPosition: Int!)- Move a task between columnsdeleteTask(id: ID!)- Delete a taskdeleteColumn(id: ID!)- Delete a columndeleteBoard(id: ID!)- Delete a board
Create a .env file in the backend directory:
DATABASE_URL=postgresql://postgres:postgres@localhost:5432/kanbanMIT