Thermograph monorepo: graded-climate API + SSR frontend + infra, domain-specific containerized deploys
homepage.json lives on the appdata volume today, written by whichever process's notifier last refreshed it. Under Swarm each web replica has its own disk, so a file only one replica's notifier ever writes leaves every other replica reading a stale or missing feed indefinitely. On Postgres, refresh()/load() go through store.py's existing derived-payload table instead (a fixed sentinel key, since the feed isn't cell-scoped) - a single upsert is already atomic, and every replica reads the same row. store.IS_POSTGRES is False without THERMOGRAPH_DATABASE_URL, so dev/tests keep the plain file path entirely unchanged; no existing test needed to change. Verified live against real Postgres: refresh() persists into the shared derived table and load() reads the exact same feed back. |
||
|---|---|---|
| accounts | ||
| alembic | ||
| core | ||
| data | ||
| deploy | ||
| notifications | ||
| templates | ||
| tests | ||
| web | ||
| alembic.ini | ||
| app.py | ||
| cities.json | ||
| cities_flavor.json | ||
| gen_cities.py | ||
| gen_flavor.py | ||
| indexnow.py | ||
| migrate.py | ||
| migrate_accounts_to_pg.py | ||
| migrate_cache_to_pg.py | ||
| paths.py | ||
| requirements-dev.txt | ||
| requirements.txt | ||
| warm_cities.py | ||