Skip to main content

Getting started for developers

Spin up the full GreekManage stack on your machine in under 10 minutes.

Prerequisites

  • Docker Desktop (or Docker Engine + Compose v2)
  • Git
  • Node 20+ and Python 3.13+ if you want to run the frontend or backend outside Docker (optional — Compose handles it)
  • ~10 GB of free disk for images, database, and MinIO storage

Clone

git clone https://github.com/amankundlas/greekmanage.git
cd greekmanage

Configure environment

cp .env.example .env

Edit .env and set the required values:

VariableHow to generate / what to put
POSTGRES_PASSWORDStrong random — openssl rand -hex 32
DJANGO_SECRET_KEYpython -c "from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())"
ENCRYPTION_KEYpython -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())"
ANTHROPIC_API_KEYYour Anthropic key (only required if you want the AI chatbot to work)

The other variables in .env.example have safe defaults for local dev.

Start the stack

docker compose up

This launches:

ServicePortPurpose
frontend3000Vite dev server (React + TypeScript)
backend8000Django + Daphne (ASGI)
db5432PostgreSQL 17 + pgvector
redis6379Celery broker + Channels layer
minio9000 / 9001S3-compatible object storage + console
celeryWorker (concurrency=2)
celery-beatPeriodic task scheduler
celery-backupsIsolated worker for the backups queue

First boot takes a few minutes (image pulls, migrations, MinIO bucket init). Subsequent starts are seconds.

Run migrations + seed data

In a second terminal:

docker compose exec backend python manage.py migrate
docker compose exec backend python manage.py loaddata seed_data
docker compose exec backend python manage.py createsuperuser

The seed_data fixture creates a sample org, region, chapter, and members so the app isn't empty on first sign-in.

Open the app

Sign in with the superuser you just created.

Common dev tasks

Run the test suite

Backend:

docker compose exec backend pytest

Frontend:

docker compose exec frontend npm test

E2E (Playwright):

cd e2e
npm install
npm run test:smoke # quick gate
npm test # full suite

Testing guide

Make a backend code change

The backend container mounts ./backend as a volume. Edits hot-reload via Django's auto-reloader. No restart needed.

For settings changes or new dependencies:

docker compose restart backend

Make a frontend code change

Vite hot-reloads in the browser as you save. For new dependencies:

docker compose exec frontend npm install <package>
docker compose restart frontend

Run a Django management command

docker compose exec backend python manage.py <command>

Useful built-ins:

  • python manage.py shell — interactive Django shell
  • python manage.py dbshell — psql into the dev DB
  • python manage.py spectacular --file openapi.yaml — regenerate the API schema
  • python manage.py check — run system checks

Reset the database

docker compose down -v # removes volumes including postgres data
docker compose up
docker compose exec backend python manage.py migrate
docker compose exec backend python manage.py loaddata seed_data

Inspect Celery tasks

docker compose logs -f celery celery-beat

To trigger a periodic task immediately:

docker compose exec backend python manage.py shell
>>> from apps.compliance.tasks import calculate_compliance_scores
>>> calculate_compliance_scores.delay()

Editor setup

VS Code

Recommended extensions:

  • ms-python.python + ms-python.vscode-pylance
  • ms-azuretools.vscode-docker
  • dbaeumer.vscode-eslint
  • esbenp.prettier-vscode
  • bradlc.vscode-tailwindcss

Workspace settings to set Python interpreter to the container:

{
"python.defaultInterpreterPath": "/usr/local/bin/python"
}

Pre-commit hooks

cd .husky && npm install

Husky runs lint + type-check on every commit. Failures block the commit.

Troubleshooting

SymptomLikely causeFix
db container fails health checkPort 5432 in uselsof -i:5432, kill the offender, or change POSTGRES_PORT
backend exits with ENCRYPTION_KEY errorEmpty keyGenerate one (see above)
Frontend "Network error"Backend not readyWait for backend health check; or docker compose logs backend
pytest collects 0 testsWrong working dirRun from backend/ or cd backend && pytest
MinIO 403 on file uploadsBucket policy not setdocker compose restart minio-init
Hot-reload not workingSaved outside the mounted volumeMake sure you're editing files in ./backend or ./frontend

What's next