A monorepo for the System Design Interview: a GraphQL web app for managing nurse
availability, plus a Python ETL pipeline that ingests partner clinic feeds into the
same users table.
The candidate-facing PRD lives in PRD.md (also shared as a Google
Doc at the start of the interview).
The scaffold ships the legacy
Usermodel ({ availableDays: string[] }jsonb) end-to-end. Extending it is the exercise.
| Component | Path | What it does |
|---|---|---|
| Web app | packages/ |
React UI + GraphQL server for viewing and editing nurse availability |
| ETL pipeline | etl/ |
Ingests partner clinic CSV/JSON feeds into the shared users table |
Both components read and write the same file-backed SQLite database
(data/app.sqlite by default), so rows ingested by the ETL show up immediately
in the running app.
Web app — Node 22, pnpm 10:
pnpm install
pnpm devWeb: http://localhost:5173 · GraphQL: http://localhost:4000/graphql
ETL — Python 3.12+, uv:
cd etl
uv sync
uv run etlSee the component READMEs for full setup, configuration, and layout details:
packages/README.md— web app and GraphQL serveretl/README.md— partner clinic feed ingestion pipeline
packages/
server/ GraphQL Yoga + Knex (better-sqlite3, file-backed)
web/ Vite + React 18 + Apollo Client
etl/ Standalone Python pipeline that ingests partner clinic feeds into `users`
| Env var | Default | What it does |
|---|---|---|
PORT |
4000 |
GraphQL server port |
DB_FILE |
data/app.sqlite |
SQLite file path shared by the server and ETL. Set DB_FILE=:memory: for an ephemeral database. |