A streamlined, enterprise-grade Kanban board built with Clean Architecture principles. Designed for university students and small teams who need the power of professional tools without the complexity or cost.
๐ Documentation ยท ๐๏ธ Architecture ยท โก Quick Start ยท ๐งช Testing
Most project management tools fall into two camps: too simple (sticky notes) or too complex (enterprise SaaS). FlowState occupies the sweet spotโdelivering real engineering rigor with zero friction.
|
|
FlowState's backend follows Clean Architecture (a.k.a. Hexagonal Architecture), ensuring business logic is completely decoupled from frameworks, databases, and delivery mechanisms.
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ๐ HTTP Request โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ๐ก Routes & Middleware โ
โ โโโโโโโโโโโโ โโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โ
โ โ Morgan โ โ Helmet โ โ Rate Limiter โ โ Auth Guard โ โ
โ โโโโโโโโโโโโ โโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ๐ฎ Controllers Adapters Layer โ
โ Parse requests, invoke use cases, format responses โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ โ๏ธ Use Cases Application Layer โ
โ RegisterUser โ CreateBoard โ MoveTask โ AddMembers โ ... โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ Input validation โข Authorization โข Business rules โข Orchestration โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ๐๏ธ Domain Entities Domain Layer (Pure TypeScript) โ
โ User โ Board โ Column โ Task โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ Repository Interfaces (Contracts) โ Zero framework dependencies โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ๐พ Infrastructure Data Layer โ
โ Mongoose Models โ Repository Implementations โ DB Connection โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ MongoDB Transactions โข Virtual Population โข Pessimistic Locking โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
The Dependency Rule: Inner layers never depend on outer layers. Domain entities know nothing about Express, Mongoose, or HTTP.
| Layer | Technology | Purpose |
|---|---|---|
| Runtime | Node.js + TypeScript | Type-safe server-side JavaScript |
| Framework | Express 5 | Minimal, unopinionated web framework |
| Database | MongoDB + Mongoose 9 | Document store with schema validation |
| Auth | JWT + Bcrypt | Stateless authentication & password hashing |
| Security | Helmet + CORS + Rate Limiting | Defense-in-depth HTTP security |
| Logging | Morgan | HTTP request logging (combined format) |
| Testing | Jest 30 + Supertest | Unit & integration testing |
| DevOps | Docker Compose | Local MongoDB Replica Set |
| Linting | ESLint + TypeScript Parser | Code quality enforcement |
| Frontend (planned) | Next.js 14 + Tailwind CSS | React-based UI with App Router |
kanban-project/
โโโ ๐ README.md โ You are here
โโโ ๐ docs/ โ Comprehensive technical documentation
โ โโโ PRD.md โ Product Requirements Document
โ โโโ TECHNICAL_DESIGN.md โ System architecture & database schema
โ โโโ API_SPECIFICATION.md โ Complete REST API reference
โ โโโ SECURITY.md โ Security policies & threat model
โ โโโ DEVELOPMENT_GUIDE.md โ Setup & contribution guide
โ โโโ INFRASTRUCTURE.md โ Deployment & DevOps
โ โโโ TEST_PLAN.md โ Testing strategy & coverage goals
โ โโโ CHANGELOG.md โ Version history
โโโ ๐ server/ โ Backend application (Clean Architecture)
โ โโโ README.md โ Detailed backend documentation
โ โโโ docker-compose.yml โ MongoDB Replica Set config
โ โโโ src/
โ โ โโโ domain/ โ Entities & repository interfaces
โ โ โโโ use-cases/ โ Application business logic
โ โ โโโ controllers/ โ HTTP request handlers
โ โ โโโ routes/ โ Express route definitions
โ โ โโโ infrastructure/ โ MongoDB models & repository implementations
โ โ โโโ middleware/ โ Auth, error handling, rate limiting
โ โ โโโ constants/ โ Error codes & business rules
โ โ โโโ utils/ โ Shared utilities
โ โโโ tests/ โ Unit & integration tests
โโโ ๐ client/ โ Frontend application (coming soon)
- Node.js โฅ 18
- Docker Desktop (for MongoDB Replica Set)
- npm or yarn
git clone https://github.com/danindu2024/kanban-project.git
cd kanban-project/server
npm installdocker compose up -dThis spins up a MongoDB instance with Replica Set supportโrequired for ACID Transactions used in task ordering.
# Create .env in /server
cp .env.example .envRequired environment variables:
PORT=5000
MONGO_URI=mongodb://localhost:27017/flowstate
JWT_SECRET=your-secret-key-min-32-chars
NODE_ENV=development
FRONTEND_URL=http://localhost:3000npm run devThe API will be available at http://localhost:5000
# Run all tests
npm test
# Unit tests only
npm run test:unit
# Integration tests only
npm run test:integration
# With coverage report
npm run test:coverage
# Watch mode (development)
npm run test:watchTests use MongoDB Memory Server for isolated, in-memory database instancesโno Docker required for testing.
| Method | Endpoint | Description | Auth |
|---|---|---|---|
POST |
/api/auth/register |
Create new account | โ |
POST |
/api/auth/login |
Authenticate & get token | โ |
GET |
/api/auth/me |
Get current user profile | โ |
GET |
/api/boards |
List user's boards | โ |
POST |
/api/boards |
Create new board | โ |
GET |
/api/boards/:id |
Get board with columns & tasks | โ |
PATCH |
/api/boards/:id |
Update board metadata | โ |
DELETE |
/api/boards/:id |
Delete empty board | โ |
POST |
/api/boards/:id/members |
Add members to board | โ |
DELETE |
/api/boards/:id/members/:userId |
Remove member | โ |
POST |
/api/columns |
Create column in board | โ |
PATCH |
/api/columns/:id |
Update column | โ |
PATCH |
/api/columns/:id/move |
Reorder column | โ |
DELETE |
/api/columns/:id |
Delete column | โ |
POST |
/api/tasks |
Create task in column | โ |
PATCH |
/api/tasks/:id |
Update task details | โ |
PATCH |
/api/tasks/:id/move |
Move task (drag & drop) | โ |
DELETE |
/api/tasks/:id |
Delete task | โ |
๐ Full API documentation with request/response schemas available in
docs/API_SPECIFICATION.md
This project is backed by enterprise-grade documentation:
| Document | Description |
|---|---|
| Product Requirements | Vision, personas, functional requirements, MVP scope |
| Technical Design | Architecture, database schema, concurrency strategy |
| API Specification | Complete endpoint reference with examples |
| Security Policy | Authentication, authorization, threat mitigations |
| Development Guide | Setup, conventions, and contribution workflow |
| Infrastructure | Deployment, Docker, and environment configuration |
| Test Plan | Testing strategy, coverage targets, test categories |
| Changelog | Detailed version history and release notes |
- Sprint 1 โ Core backend (Auth, Boards, Columns, Tasks)
- Sprint 1 โ Clean Architecture with full separation of concerns
- Sprint 1 โ ACID transactions for ordering & limits
- Sprint 1 โ Comprehensive documentation suite
- Sprint 2 โ Next.js frontend with drag & drop UI
- Sprint 2 โ Real-time collaboration (Socket.io)
- Sprint 2 โ Token refresh mechanism
- Future โ Email notifications, file attachments, dark mode
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'feat: add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
Please read the Development Guide for coding conventions and architecture decisions.
Built with โค๏ธ by Danindu Ransika
If this project helped you, consider giving it a โญ