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 shell
from 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 runserver
Frontend
cd frontend
npm install
npm start
Backend
docker compose exec backend python manage.py test
Frontend
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).