← back to checklist

Peak Checklist — about & roadmap

Personal climbing log built on Supabase + a single static HTML page. This page is the living picture of how it works, what's left, and what we've intentionally deferred.

The vision

One place to see every Colorado peak (plus a few other lists I care about), what I've climbed, and what's left. Cross-device (Mac + iPhone), no native app, no backend of my own to babysit. Data lives in Supabase; the page is plain HTML loaded over HTTPS.

Runtime data flow

graph LR USER([User]) HTML[index.html
single static file] AUTH[Supabase Auth
Google OAuth] RLS{Row-Level Security} DB[(peaks · peak_lists · ascents)] USER -->|loads from Cloudflare Pages| HTML HTML -->|sign in| AUTH AUTH -->|JWT| HTML HTML <-->|REST + publishable key| RLS RLS --> DB

The publishable key is safe to publish — RLS is the actual gate (rows are scoped to my email).

Deployment — today

Current deployment topology

Deployment — proposed end-state

Green dashed = still proposed. Currently I deploy with wrangler pages deploy dist; the end-state replaces that with git-push-to-deploy.

Proposed deployment topology

Testing strategy

graph LR SRC[lib/predicates.js
pure predicates] TPL[build_prototype.py
injects verbatim] HTML[index.html
browser globals] TEST[tests/predicates.test.js
node --test] SRC --> TPL --> HTML SRC --> TEST

Tier 1 (active): node --test tests/predicates.test.js exercises row-visibility, ranking, and filter-label tables in <1s. Same source runs in both the browser and the test runner.

What's left for the initial vision

Deferred improvements

Things considered and intentionally not built — captured so the reasoning isn't lost.

Where things live