# Hot-reload DEV stack: Postgres + backend (hypercorn --reload) + Vite dev server. # Edit code on the host and changes reload live. Per family rule 12 the agent does # NOT start this — run it yourself: # # docker compose -f docker-compose.dev.yml up # # Then open http://localhost:5173 (the Vite dev server proxies /api to the backend). # (docker-compose.yml, by contrast, builds + runs the production image on :5000.) services: db: image: postgres:16-alpine environment: POSTGRES_USER: thoughtsync POSTGRES_PASSWORD: thoughtsync POSTGRES_DB: thoughtsync volumes: - thoughtsync-dev-db:/var/lib/postgresql/data ports: - "5432:5432" healthcheck: test: ["CMD-SHELL", "pg_isready -U thoughtsync"] interval: 5s timeout: 5s retries: 10 api: image: python:3.12-slim working_dir: /app depends_on: db: condition: service_healthy environment: THOUGHTSYNC_DATABASE_URL: postgresql+asyncpg://thoughtsync:thoughtsync@db:5432/thoughtsync PYTHONPATH: /app/src volumes: - ./pyproject.toml:/app/pyproject.toml - ./alembic.ini:/app/alembic.ini - ./alembic:/app/alembic - ./src:/app/src - thoughtsync-dev-data:/var/thoughtsync ports: - "5000:5000" # Install deps, wait for the DB, run migrations, then serve with live reload. command: > sh -c "pip install --quiet -e . && python -m thoughtsync.dbwait && alembic upgrade head && hypercorn 'thoughtsync.app:create_app()' --bind 0.0.0.0:5000 --reload" web: image: node:22-alpine working_dir: /app depends_on: - api environment: # Vite proxies /api to the backend service (see frontend/vite.config.ts). VITE_API_TARGET: http://api:5000 volumes: - ./frontend:/app - /app/node_modules ports: - "5173:5173" command: sh -c "npm install && npm run dev -- --host 0.0.0.0" volumes: thoughtsync-dev-db: thoughtsync-dev-data: