A simple project management app with multi-tenant support. Organizations own projects, projects have tasks and comments. Backend exposes a GraphQL API; frontend uses React + Apollo.
- Backend: Django, Graphene (GraphQL), PostgreSQL
- Frontend: React, TypeScript, Apollo Client, TailwindCSS
- Infra: Docker Compose (db, backend, frontend)
- Start services
docker compose up -d --build- Create tables (first time only)
docker compose exec backend python manage.py makemigrations organizations projects tasks
docker compose exec backend python manage.py migrate- Open apps
- Frontend: http://localhost:3000
- Backend: http://localhost:8000
- GraphQL: http://localhost:8000/graphql/
- Create an organization (once)
docker compose exec backend python manage.py shellfrom apps.organizations.models import Organization
org, _ = Organization.objects.get_or_create(
name="Demo Company", slug="demo-company",
defaults={"contact_email": "demo@example.com"}
)
print(org.id, org.slug)- Tell the frontend which org to use (browser console)
localStorage.setItem("currentOrganizationSlug", "demo-company");
localStorage.setItem("currentOrganizationId", "<ORG_ID_FROM_PRINT>");
window.location.reload();Use GraphQL Playground at http://localhost:8000/graphql/
mutation {
createProject(organizationId: "<ORG_ID>", name: "My First Project") {
success
errors
project {
id
name
}
}
}Backend
cd backend
python -m venv venv
# Windows: venv\Scripts\activate | macOS/Linux: source venv/bin/activate
pip install -r requirements.txt
python manage.py makemigrations organizations projects tasks
python manage.py migrate
python manage.py runserverFrontend
cd frontend
npm install
npm startBackend
docker compose exec backend python manage.py testFrontend
cd frontend
npm test- "relation 'projects' does not exist" → run
makemigrationsthenmigrate. - Docker must be running (Docker Desktop). Use
docker version,docker compose ps. - If compose warns about
versionbeing obsolete, you can remove that key from docker-compose.yml (optional; harmless).
Basic README prepared for GitHub submission. For a deeper explanation, see your private guide in docs/MY_PROJECT_GUIDE.md (ignored by Git).