# Backend Runbook This is a handoff snapshot, not the product SSOT. Product SSOT: mall-docs report-notebooklm docs, snapshot date: 2026-06-03. ## Requirements - Python 3.12 or compatible with the configured project dependencies. - MySQL 8 for local/staging/prod-like runs. - Redis 7 for cache-compatible local/staging/prod-like runs. - A shell environment that can create a Python virtual environment. SQLite is used by the automated tests through `RNB_DATABASE_URL`; production-like local runs should use MySQL. ## Environment Variables Create `.env` in the repository root: ```bash RNB_DATABASE_URL=mysql+asyncmy://:@:/report_notebooklm RNB_REDIS_URL=redis://:/0 RNB_REDIS_KEY_PREFIX=rnb: ``` Do not commit `.env`. ## Install ```bash python -m venv .venv source .venv/bin/activate pip install -e ".[dev]" ``` ## Migrate and Seed ```bash source .venv/bin/activate alembic upgrade head python scripts/import_seed_content.py ``` Seed import is destructive for seed tables. Use it only in local or disposable test data environments unless a production-safe importer is written. ## Run API ```bash source .venv/bin/activate uvicorn app.main:app --reload --host --port ``` API prefix: ```text /api/report-notebooklm/v1 ``` ## Smoke Checks ```bash API_BASE_URL=http://:/api/report-notebooklm/v1 curl "$API_BASE_URL/health" curl "$API_BASE_URL/feed/recommended" curl "$API_BASE_URL/reports/rep_ssga_gold" ``` Expected: - Health returns `{"status":"ok"}`. - Feed returns non-empty `items`. - Report detail returns modules and does not include `display_version`. ## Test ```bash source .venv/bin/activate pytest -q ``` ## App Integration Start this backend first, then run the App with: ```bash flutter run -d chrome --dart-define=RNB_API_BASE= ``` For Android emulator, use an API base URL reachable from that emulator: ```bash flutter run -d --dart-define=RNB_API_BASE= ``` Only use cleartext HTTP for local debug builds. Release builds must use HTTPS. ## Deployment Checks Before staging or production: - Use environment variables for all database, Redis, object storage, auth, and signing settings. - Configure HTTPS at the gateway. - Confirm migrations can run forward and downgrade in staging. - Import reviewed content, not raw/unreviewed NotebookLM artifacts. - Smoke `/health`, `/feed/recommended`, report detail, audio stream, favorites, and outbound event once those APIs exist. - Confirm public responses do not expose local paths, raw payloads, notebook IDs, source IDs, conversation IDs, or secrets. ## Operational Notes - Redis keys must use the `rnb:` prefix or a compatible namespace. - Object storage keys should use `rnb/raw/`, `rnb/modules/`, `rnb/audio/`, and `rnb/images/` style prefixes. - Long NotebookLM operations should live in a resumable runner, not inside HTTP request handlers.