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 assetsdev/static_site/templates/demos/— 5 demo pages with consistent TradeSpark theme
Removed:
dev/model_proxy/demo.html— replaced bystatic_site/templates/demos/model-proxy.htmldev/users/mobile_session.html— replaced bystatic_site/templates/demos/mobile-session.htmldev/websocket/websocket_pages.py— routes moved to static_site endpoint
Changed:
dev/app.py—app.include(static_site.app)dev/core/core.py—ServiceType.STATICenum + domain resolutiondev/ml/ml_endpoint.py— dropped inline/comparisonand/dashboardroutes (now served by static_site)dev/model_proxy/model_proxy_endpoint.py— dropped inline/demoroutedev/users/users_endpoint.py— dropped inline/mobile-sessionroutedev/websocket/websocket_endpoint.py— dropped inline/testroute
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 newBashallow 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.py→dev/tsweb/queries.pydev/core/location.py→dev/tsweb/location.pydev/ml/data_pipeline/supabase_scraper.py→dev/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.py—app.include(tsweb.app)dev/data/sync.py,dev/data/data_endpoint.py— import fromtsweb.*dev/users/auth.py— import fromtsweb.locationdev/ml/ml_endpoint.py— droppednightly_supabase_synccron (now intsweb.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 withGET /andGET /projectsbruno/.../Tsweb API/List Projects.bru+folder.bru— Bruno test
Changed:
dev/core/core.py—ServiceType.TSWEBenum + domain resolutiondev/users/auth.py— newget_accessible_account_ids(user)helper- All 7 Bruno environment files — added
tsweb_endpointvariable
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.py—get_site_configgainsurl_tswebdev/static_site/templates/demos/mobile-session.html— project/property selects,loadProjects()viaSite.apiFetch('tsweb', '/projects')