Shared live map of bookmarked places. React + MapLibre frontend, Fastify + PostGIS backend, realtime by persisted per-map event sequences.
Governed by VJS ([2026] VJS-CC-WAYMARK 1, this repo's .vjs/) and subscribed
to VDS (.vds/). See REQUIREMENTS.md (v1.1, binding) before changing the
data model or API contract.
# Postgres+PostGIS (loopback only)
docker run -d --name waymark-pg -e POSTGRES_PASSWORD=waymark -e POSTGRES_USER=waymark \
-e POSTGRES_DB=waymark -p 127.0.0.1:5434:5432 postgis/postgis:16-3.4
docker exec waymark-pg psql -U waymark -d waymark -c "CREATE EXTENSION IF NOT EXISTS postgis"
npm install
npm run db:migrate # dev DB
npm -w @waymark/server run dev # API on :3000 (vite dev proxies /api)
npm -w @waymark/web run dev # web on :5173npm test # shared + server + web unit (44 tests)
npx playwright test # e2e: signup → invite → live pin (chromium)The e2e suite creates its own waymark_e2e database; the server tests use
waymark_test (migrated automatically).
docker compose up -d --build # http://localhost:8080 (dev posture)
./scripts/backup.sh # pg_dump + photos (restore drill verified: counts match)Production multiplayer: public HTTPS origin in APP_ORIGINS, TLS in front of
web, SMTP for email tokens. Same artifact.
vjs --repo . route --kind code_change --issue spec_v1_1 --intent ... --path ...issues the permit the pre-commit hook demands;vjs log decision ... --basis <permit-id>discharges it.vds --root . proof --allmeasures the design surface (see.vds/).
Everything machine-settleable is settled: W1 REGISTER-COMPLETE granted (WARRANT-W1-001) on passing captured proofs — register_completeness, reconciliation, composition, contrast, no_stored_values, ledger_staleness — over 8 screens and 15 registered components, with a WCAG-compliant token layer and a registered primitive layer.
| stage | state | blocked on |
|---|---|---|
| W2 DESIGN-COMPLETE | handed off — draw from docs/DESIGN-BRIEF.md into a Figma file, then ./scripts/figma-capture.sh <file-key> [nodes…] |
a person drawing: Figma's REST API is read-only for content (verified: files are view/extract only), so the decided-target file is a human act from the machine-generated brief |
| W3 PRINCIPAL-ACCEPTED | reserved | the Principal alone (VDS S-6(7)); never inferred from silence |
| W4 PARITY | reserved | follows W3 |
states proof |
15 findings standing, CI-asserted known-red | the same Figma file, captured via the script above |
| SMTP email | transport shipped (SMTP_URL/FROM_EMAIL) |
an SMTP credential — Principal supply |
Resolved since the W1 order: the binary gates now run in CI (a design job
builds the pinned instrument from the public vendor tree and asserts the
battery, with states asserted known-red), and the project subscribes to
designpack v1 (designpack/v1 vendored, digest-pinned in
.vds/designpack.lock) so the specification's RESERVED clauses resolve
upstream. Doctor: 9 MET / 1 UNMET-by-reservation (D6).
/api/openapi.json (swagger UI at /documentation when the server runs).
The dev stack runs on this LAN via docker compose up -d --build (port 8090;
OrbStack holds 8080 for boltrig) and is published at
https://mac-mini-m4-pro.tailb4b671.ts.net/ through Tailscale Funnel
(public HTTPS, verified end-to-end: signup → map → place → viewport).
CI: .github/workflows/vds-enforce.yml (green on push).