Dev environment and make targets
Before we start wiring code, let us walk the repo. The workshop is a small monorepo with a backend folder for FastAPI plus Whisper, a frontend folder for the React recorder, and a Makefile that hides the setup and run commands behind clean targets.
setup: ## Install backend and frontend dependencies
@if [ ! -f backend/.env ]; then cp backend/.env.example backend/.env; fi
@cd backend && uv sync
@cd frontend && npm install
dev: setup ## Run backend and frontend together
@$(MAKE) -j 2 backend frontend
backend: ## Run only the FastAPI backend
@cd backend && uv run uvicorn app:app --reload --host 0.0.0.0 --port 8000
frontend: ## Run only the Vite frontend
@cd frontend && npm run devmake setup copies backend/.env.example to backend/.env, installs Python deps with uv, and installs npm packages. make dev runs backend and frontend together using parallel make. You can also run them in separate terminals with make backend and make frontend.
# LLM API Configuration (OpenAI-compatible)
LLM_BASE_URL=https://openrouter.ai/api/v1
LLM_API_KEY=your_openrouter_api_key_here
LLM_MODEL=google/gemini-2.5-flash-lite
# Whisper Configuration (local speech-to-text)
WHISPER_MODEL=base.enbackend/.env.example ships with OpenRouter as the default provider. make setup copies it to backend/.env on first run, and you drop in your own API key. Whisper has no key because it runs locally.
Quiz: Quiz
Loading practice…