← All docs changelog/2026-04-30.md

Apr 30, 2026

Commits

4867061 — Merge static.grizzlebear.io demo centralization into dev

Merged the static_site service from its worktree branch. Consolidates 5 scattered demo pages (ml-comparison, ml-dashboard, mobile-session, model-proxy, websocket-test) under a single TradeSpark-themed shell at static-{env}.grizzlebear.io. Shared CSS design tokens, JS utilities (Site.apiFetch, Site.serviceUrl), header/footer templates, and a Markdown blog engine with YAML frontmatter.

Added:

  • dev/static_site/ — new module: endpoint, templates, content engine, shared CSS/JS assets
  • dev/static_site/templates/demos/ — 5 demo pages with consistent TradeSpark theme

Removed:

  • dev/model_proxy/demo.html — replaced by static_site/templates/demos/model-proxy.html
  • dev/users/mobile_session.html — replaced by static_site/templates/demos/mobile-session.html
  • dev/websocket/websocket_pages.py — routes moved to static_site endpoint

Changed:

  • dev/app.pyapp.include(static_site.app)
  • dev/core/core.pyServiceType.STATIC enum + domain resolution
  • dev/ml/ml_endpoint.py — dropped inline /comparison and /dashboard routes (now served by static_site)
  • dev/model_proxy/model_proxy_endpoint.py — dropped inline /demo route
  • dev/users/users_endpoint.py — dropped inline /mobile-session route
  • dev/websocket/websocket_endpoint.py — dropped inline /test route

e349957 — Allow bash <script>:* form for deploy/test/stop scripts

Adds deploy.sh, test_app.sh, and stop_app.sh to the Claude Code project allowlist so teammates don't get prompted when running them.

Changed:

  • .claude/settings.json — 3 new Bash allow entries

0c93938 — Quarantine tsweb-app Supabase integration into dev/tsweb/ (Phase A)

Moves all code that reads from the external tsweb-app Supabase tables (projects, properties, tasks, subtasks, project_items, specialties) behind a single dev/tsweb/ boundary. When tsweb-app is retired, the cleanup is a single-directory delete.

Moved (history-preserving):

  • dev/core/supabase_queries.pydev/tsweb/queries.py
  • dev/core/location.pydev/tsweb/location.py
  • dev/ml/data_pipeline/supabase_scraper.pydev/tsweb/scraper.py

Added:

  • dev/tsweb/__init__.py, client.py, scheduled.py, README.md — quarantine module with its own Modal app and nightly cron

Changed:

  • dev/app.pyapp.include(tsweb.app)
  • dev/data/sync.py, dev/data/data_endpoint.py — import from tsweb.*
  • dev/users/auth.py — import from tsweb.location
  • dev/ml/ml_endpoint.py — dropped nightly_supabase_sync cron (now in tsweb.scheduled)

8931ec8 — Add tsweb /projects endpoint at tsweb-{env}.grizzlebear.io (Phase B)

Exposes a user-scoped projects-with-property list at tsweb-{env}.grizzlebear.io/projects, consumed by the mobile-session demo. Lives entirely inside the tsweb quarantine.

Added:

  • dev/tsweb/_app.py — factored-out Modal app (shared by cron + web fn)
  • dev/tsweb/endpoint.py — FastAPI app with GET / and GET /projects
  • bruno/.../Tsweb API/List Projects.bru + folder.bru — Bruno test

Changed:

  • dev/core/core.pyServiceType.TSWEB enum + domain resolution
  • dev/users/auth.py — new get_accessible_account_ids(user) helper
  • All 7 Bruno environment files — added tsweb_endpoint variable

8cedea6 — Replace mobile-session text inputs with tsweb-backed dropdowns (Phase C)

The mobile-session demo's two free-text fields (project-name, location-id) become <select> dropdowns populated from tsweb-{env}.grizzlebear.io/projects. Users see their actual projects and properties rather than typing UUIDs.

Changed:

  • dev/static_site/endpoint.pyget_site_config gains url_tsweb
  • dev/static_site/templates/demos/mobile-session.html — project/property selects, loadProjects() via Site.apiFetch('tsweb', '/projects')

19ef58e — Refresh IMPROVE.md with 2026-04-30 review findings (docs-only)

12a2523 — Add Apr 28-29 changelogs, start W18 weekly summary, refresh architecture + services docs (docs-only)