This guide provides everything you need to set up, run, and understand the Operant Project Management System
The easiest way to get the database running is via Docker:
docker-compose up -dThis starts a PostgreSQL instance on localhost:5432.
Create a .env file in the backend/ directory:
DEBUG=True
SECRET_KEY=your-secret-key-here
DATABASE_URL=postgres://operant_user:operant_password@localhost:5432/operant_dbcd backend
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install -r requirements.txtpython manage.py makemigrations
python manage.py migratepython manage.py runserverAPI available at: http://localhost:8000/graphql/
Create a .env.local file in the frontend/ directory:
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=your_publishable_key
CLERK_SECRET_KEY=your_secret_key
NEXT_PUBLIC_API_URL=http://localhost:8000/graphql/
NEXT_PUBLIC_CLERK_SIGN_IN_URL="/sign-in"
NEXT_PUBLIC_CLERK_SIGN_UP_URL="/sign-up"
NEXT_PUBLIC_CLERK_AFTER_SIGN_IN_URL="/"
NEXT_PUBLIC_CLERK_AFTER_SIGN_UP_URL="/"cd frontend
pnpm install # or npm installpnpm devApp available at: http://localhost:3000
- Organizations: Managed by
slug - Projects: Linked to Organizations. Supports statuses:
ACTIVE,COMPLETED,ON_HOLD - Tasks: Kanban-style tasks with statuses:
TODO,IN_PROGRESS,DONE - Comments: Comments on tasks
organization(slug: String!): Fetches org info and basic statsprojects(orgSlug: String!): Lists all projects with completion ratesproject(id: ID!): Detailed project view including taskstask(id: ID!): Detailed task view including comments
createProject: Initialize a new projectupdateProject: Edit name, description, or statuscreateTask: Add task to projectupdateTask: Edit title, description, or statuscreateComment: Add feedback to a specific task
- Multi-tenancy: Built this so different companies (tenants) can use the same app securely. Every time someone asks for data, the system double-checks: "Does this user actually belong to this company?" This keeps everything private and separated
- Authentication: Used Clerk to handle accounts and security
- Frontend State: Used Apollo Client to make the app feel instant. When user move a card on the Kanban board, it shifts immediately without a loading spinner, and the server updates in the background
- UI/UX: Built with Shadcn UI and Tailwind CSS to look professional and clean
- Real-time Subscriptions: Use GraphQL subscriptions for live Kanban updates across team members
- File Attachments: Integrate AWS S3 or Supabase storage for task attachments
- Activity Logs: Track Every change (status moves, edits) in a dedicated activity feed.