The repository has a minimal Django scaffold, a React/Vite landing-page prototype, a local PostgreSQL service, and pull-request checks. The landing page accepts a local search term but does not query medical information. The initial account API provides session-based registration, login, logout, CSRF protection, and current-user status; no medical domain models or persistent product workflow exists yet.
docker/backend.Dockerfile— non-root Python and uv tooling image; it is not a runnable application image until a backend entrypoint is implemented.docker-compose.yml— local PostgreSQL 17.6 service with a named volume and readiness health check.scripts/docker-smoke.sh— disposable PostgreSQL readiness andSELECT 1smoke test.backend/— Django project scaffold, account API, Python/Django tooling, locked dependencies, and tests; no medical business code exists yet.web/— React/Vite landing-page prototype, locked dependencies, infrastructure probes, and Playwright browser tests..github/workflows/pr-checks.yml— secret scanning plus backend and web quality checks, including the web build and Playwright tests..github/dependabot.yml— weekly dependency-update configuration.infrastructure_plan.md— the approved infrastructure plan and source of truth for future configuration..agents/skills/— local agent skills.docs/specs/— implementation specifications and scope boundaries.- Production API and domain application packages — not created yet.
-
Install Docker Desktop or Docker Engine with Compose v2, uv, and Node.js 22.23.3 with Corepack. The version is recorded in
.node-version. Install Python 3.13 or allow uv to install its managed Python 3.13 runtime. The Docker image supplies Python and uv only for Docker work; host tools support editor and local quality-check workflows. -
Copy the non-secret local defaults and export them for Django commands:
cp .env.example .env set -a source .env set +a
Docker Compose reads
.envautomatically. Django reads environment variables from the shell, so source the file again in each new shell before running Django commands. Never place a production secret in this file. -
Install the locked tooling dependencies:
(cd backend && uv sync --all-groups --frozen) (cd web && corepack enable && pnpm install --frozen-lockfile) (cd web && pnpm exec playwright install chromium)
-
Build the development-tooling image:
docker build --file docker/backend.Dockerfile --tag medcheck-backend-tooling . -
Start PostgreSQL locally:
docker compose up --detach postgres
-
Start the local application and account service together:
./scripts/dev.sh
Open
http://127.0.0.1:5173. Press Ctrl+C in that terminal to stop both the Django API and Vite web server. The script runs Django migrations using.envwhen available, or the safe values in.env.example. -
Run the available backend, web, and browser checks, then clean up the Docker foundation:
(cd backend && uv run python manage.py check && uv run ruff format --check . && uv run ruff check . && uv run pyright && uv run pytest --cov=tests && uv run bandit --quiet --recursive accounts config) (cd web && pnpm format:check && pnpm lint && pnpm typecheck && pnpm test && pnpm build && pnpm test:e2e) ./scripts/docker-smoke.sh docker compose down --volumes
The local database is exposed only on 127.0.0.1:5432 by default. Change
POSTGRES_PORT in an untracked .env if that port is occupied. Reset local
database data with docker compose down --volumes.
Playwright currently verifies the landing-page layout and local search-form behavior. A production release workflow remains deferred until a hosting provider is selected.
For local account flows, run ./scripts/dev.sh, then open the Vite URL. Choose
Account, then Sign in or Create account. My Medication appears in the menu
after authentication and the session survives a reload. The current Django
development scaffold stores accounts in local SQLite. Production PostgreSQL
configuration remains pending.
Browser UI tests use controlled API responses. To also run the real account
workflow against a Django server using an isolated test database on port 8000,
run cd web && MEDCHECK_LIVE_AUTH=1 pnpm test:e2e.
- Docker socket permission denied: ensure Docker Desktop/Engine is running and that your user has permission to use the Docker daemon.
- Port 5432 is occupied: set
POSTGRES_PORT=127.0.0.1:5433in.envand restart the Compose service. - A stale database is causing unexpected results: run
docker compose down --volumesbefore starting again. - Django reports a missing
DJANGO_SECRET_KEY: source the untracked.envinto the current shell as shown above. - Node reports an unsupported engine: select Node 22.23.3 from
.node-version; Node 24 is outside the supported project range. Homebrew'snode@22is keg-only, so add/opt/homebrew/opt/node@22/bintoPATHwhen using that installation. uvorpnpmis missing: install uv or runcorepack enableunder Node 22, then rerun the locked install command../scripts/dev.shreports a missing command: run the dependency installation commands from Getting Started. On Apple Silicon Homebrew setups, the script automatically adds Node 22'spnpmlocation to its PATH.