Full-stack task management application with GraphQL API and drag-and-drop interface.
Stack: Next.js 15, Django 4.2, TypeScript, Material UI, Apollo Client, Graphene-Django
- Quick Start
- Features
- Tech Stack
- Project Structure
- Testing
- Pre-commit Hooks
- Continuous Integration
- Development Commands
- π Deployment Roadmap
- Architecture
- MCP Server Integration
- License
# With Docker
docker-compose up --build
# Or separately
cd backend && pip install -r requirements.txt && python manage.py migrate && python manage.py runserver
cd frontend && npm install && npm run dev- Frontend: http://localhost:3000
- GraphQL API: http://localhost:8000/graphql
Task Management:
- Dual view modes: Kanban board + Eisenhower Matrix
- Priority system (P1-P4): Do First β Schedule β Quick Win β Backlog
- Status workflow: TODO β DOING β WAITING β DONE
- Category tagging with # prefix (#frontend, #backend, etc.)
- Drag-and-drop between columns and priority quadrants
Filtering & Search:
- Filter by priority (P1-P4) in both views
- Filter by status (To Do, Doing, Waiting, Done) in both views
- Filter by category with multi-select
- Full-text search across title, description, and category
Technical Stack:
- GraphQL API with type-safe Apollo Client
- TypeScript end-to-end with Material UI
- Docker development environment with hot-reload
- Pre-commit hooks (Ruff, ESLint, Prettier)
- MCP server for Claude AI integration
Backend: Django 4.2, Graphene-Django, SQLite
Frontend: Next.js 15, TypeScript, Apollo Client, Material UI v7, @dnd-kit
Infrastructure: Docker Compose, pre-commit hooks (Ruff, ESLint, Prettier)
.
βββ backend/ # Django backend (modular monolith)
β βββ apps/ # Django apps (OpenHEXA pattern)
β β βββ core/ # Shared base models and utilities
β β β βββ models.py # TimeStampedModel (DRY principle)
β β β βββ apps.py # Core app configuration
β β βββ kanban/ # Kanban feature app
β β βββ models.py # Task model (inherits TimeStampedModel)
β β βββ apps.py # Kanban app configuration
β β βββ schema/ # GraphQL split by concern
β β β βββ types.py # TaskType, TaskStatusEnum, TaskPriorityEnum
β β β βββ queries.py # Query resolvers (allTasks)
β β β βββ mutations.py # Mutation resolvers (CRUD with priority/category)
β β βββ graphql/ # Exported GraphQL schema
β β β βββ schema.graphql # For frontend consumption
β β βββ tests/ # App-specific tests
β β β βββ test_models.py # Model validation tests
β β β βββ test_schema.py # GraphQL API tests
β β βββ management/ # Django management commands
β β β βββ commands/
β β β βββ seed_tasks.py # Sample data generator
β β βββ migrations/ # Database migrations
β βββ config/ # Django configuration
β β βββ settings.py # Single settings file
β β βββ urls.py # URL routing
β β βββ schema.py # Root GraphQL schema (composition)
β βββ integrations/ # External service integrations
β β βββ mcp/ # Model Context Protocol server
β β βββ server.py # FastMCP implementation
β β βββ fastmcp.json # Server configuration
β β βββ mcp_config.example.json # Claude Desktop config template
β β βββ README.md # MCP setup instructions
β βββ scripts/ # Utility scripts
β β βββ export_schema.py # GraphQL schema export
β β βββ README.md # Scripts documentation
β βββ tests/ # Project-wide integration tests
β β βββ integration/
β β β βββ test_mcp_server.py # MCP server async tests
β β βββ conftest.py # Pytest configuration
β βββ data/ # SQLite database directory
β β βββ db.sqlite3
β βββ requirements.txt # Python dependencies
β βββ Dockerfile # Multi-stage Docker build
β βββ manage.py # Django management script
β
βββ frontend/ # Next.js frontend
β βββ src/
β β βββ app/ # Next.js App Router
β β β βββ layout.tsx # Root layout
β β β βββ page.tsx # Home page (redirects to /tasks)
β β β βββ providers.tsx # App providers (Theme, Apollo)
β β β βββ tasks/
β β β βββ page.tsx # Kanban board page
β β βββ components/ # React components
β β β βββ Board.tsx # Main board orchestrator
β β β βββ ApolloWrapper.tsx # Apollo Client provider
β β β βββ kanban/ # Kanban-specific components
β β β βββ types.ts # TypeScript types (TaskStatus, TaskPriority)
β β β βββ TaskCard.tsx # Draggable task card with priority badge
β β β βββ KanbanColumn.tsx # Column with drop zone + sorting
β β β βββ TaskDialog.tsx # Create/edit dialog with priority/category
β β β βββ useTaskDialog.ts # Dialog state hook
β β βββ graphql/ # GraphQL operations
β β β βββ client.ts # Apollo Client config
β β β βββ queries.ts # GET_TASKS query
β β β βββ mutations.ts # CREATE/UPDATE/DELETE mutations
β β βββ theme/ # Material UI theme
β β β βββ theme.ts # Custom theme configuration
β β βββ __tests__/ # Frontend tests
β βββ package.json # Node dependencies
β βββ next.config.ts # Next.js configuration
β βββ Dockerfile # Multi-stage Docker build
β βββ tsconfig.json # TypeScript configuration
β
βββ docker-compose.yml # Services orchestration
βββ Makefile # Development shortcuts
βββ .pre-commit-config.yaml # Code quality hooks (Ruff, ESLint)
βββ .env # Environment variables (ports, URLs)
make test # All tests
docker-compose exec backend python manage.py test # Backend
cd frontend && npm test # FrontendCoverage: Backend (20 tests), Frontend (12 tests)
pip install pre-commit && pre-commit install
pre-commit run --all-files # Manual runChecks: Ruff (Python), ESLint + Prettier (TypeScript), YAML validation
GitHub Actions on push/PR: Backend linting (Ruff), Frontend linting (ESLint), Backend tests (Django), Frontend tests (Jest), Docker build validation.
make up/down # Start/stop services
make test/migrate # Run tests/migrations
make logs/shell # View logs/Django shellGraphQL API (http://localhost:8000/graphql):
- Query:
allTasks { id title status priority category } - Create:
createTask(title: "Task", status: TODO, priority: P1) - Update:
updateTask(id: "1", status: DOING) - Delete:
deleteTask(id: "1")
Development: Docker Compose (configured)
Production: Requires PostgreSQL migration, Gunicorn setup, CORS configuration
Deployment options: Vercel (frontend) + Render/Railway (backend) or self-hosted VPS with Docker Compose.
graph TB
subgraph "Frontend Layer"
UI[Next.js 15 App]
Apollo[Apollo Client]
DnD["@dnd-kit"]
MUI[Material UI v7]
UI --> Apollo
UI --> DnD
UI --> MUI
end
subgraph "API Layer"
GraphQL[GraphQL API<br/>Graphene-Django]
Schema[Schema Composition<br/>Root β Apps]
end
subgraph "Backend Layer - Modular Monolith"
subgraph "Core App"
CoreModels[TimeStampedModel<br/>Shared Base Classes]
end
subgraph "Kanban App"
KanbanSchema[GraphQL Schema<br/>types, queries, mutations]
KanbanModels[Task Model]
KanbanLogic[Business Logic]
end
subgraph "Integration Layer"
MCP[MCP Server<br/>External Integrations]
end
ORM[Django ORM]
end
subgraph "Data Layer"
DB[(SQLite Dev<br/>PostgreSQL Prod)]
end
subgraph "Infrastructure"
Docker[Docker Compose<br/>Hot Reload]
end
%% Data Flow
Apollo -->|GraphQL Queries/Mutations| GraphQL
GraphQL --> Schema
Schema -.inherits.-> KanbanSchema
KanbanSchema --> KanbanLogic
KanbanLogic --> KanbanModels
KanbanModels -.extends.-> CoreModels
KanbanModels --> ORM
ORM --> DB
%% Integration Flow
KanbanLogic -.uses.-> MCP
%% Infrastructure
Docker -.orchestrates.-> UI
Docker -.orchestrates.-> GraphQL
Docker -.orchestrates.-> DB
%% Styling
classDef frontend fill:#61dafb,stroke:#333,stroke-width:2px,color:#000
classDef api fill:#e535ab,stroke:#333,stroke-width:2px,color:#fff
classDef backend fill:#092e20,stroke:#333,stroke-width:2px,color:#fff
classDef data fill:#336791,stroke:#333,stroke-width:2px,color:#fff
classDef infra fill:#2496ed,stroke:#333,stroke-width:2px,color:#fff
class UI,Apollo,DnD,MUI frontend
class GraphQL,Schema api
class CoreModels,KanbanSchema,KanbanModels,KanbanLogic,MCP,ORM backend
class DB data
class Docker infra
Backend: Feature-based apps with split GraphQL schemas, shared base models, schema composition pattern
Frontend: Single-purpose components, custom hooks, TypeScript enums, organized directory structure
Model Context Protocol server for task management through Claude AI.
Setup: Configure Claude Desktop with backend/integrations/mcp/server.py path
Operations: List, create, update, delete tasks via natural language
Deployment: Supports stdio (local) and HTTP/SSE (remote) transport
See backend/integrations/mcp/README.md for configuration details.
MIT License