No description
  • TypeScript 83.8%
  • JavaScript 5.9%
  • CSS 5.4%
  • HTML 4.6%
  • Shell 0.3%
Find a file
2026-10-06 14:26:16 -05:00
.github/workflows Stage 1: project foundation (strict TS, lint boundaries B-1..B-7, directory structure, CI, boundary tests) 2026-08-30 23:25:35 -05:00
.shots Checkpoint: current working state 2026-09-29 21:33:33 -05:00
content map: redraw base overview to match real venue — river, hub paths, all 17 POI zones, gate hours, verified label-clean 2026-10-06 14:26:16 -05:00
experiments Stage 1: project foundation (strict TS, lint boundaries B-1..B-7, directory structure, CI, boundary tests) 2026-08-30 23:25:35 -05:00
pipeline Make the app work: bind transport fetch (Illegal invocation), emergency phone content, real map assets+POIs, wire map loader into routes, offline icon cache match, multi-day event times, hide empty emergency groups; remove bottom nav bar (home tiles + brand cover navigation) 2026-10-03 12:31:43 -05:00
public Add real PWA icons (192/512 PNG) generated from sol_lunar_icon — manifest pointed at missing files, phone home-screen icon rendered broken 2026-10-03 12:34:14 -05:00
scripts Showcase: sovereign HTTPS demo server + local CA 2026-10-02 12:40:17 -05:00
share Checkpoint: current working state 2026-09-29 21:33:33 -05:00
src emergency: 911 demoted to very last resort — page now leads with event-help share card; emergency-services number moved to collapsed 'If none of the above is working' disclosure at the very bottom, no alert styling 2026-10-06 13:03:13 -05:00
tests emergency: 911 demoted to very last resort — page now leads with event-help share card; emergency-services number moved to collapsed 'If none of the above is working' disclosure at the very bottom, no alert styling 2026-10-06 13:03:13 -05:00
.directory Checkpoint: current Lumen state 2026-09-23 18:58:21 -05:00
.gitignore Checkpoint: current Lumen state 2026-09-23 18:58:21 -05:00
.prettierignore Lint/format cleanup: void-expression and empty-function fixes, optional-chain narrowing, ignore share/ in eslint+prettier 2026-09-30 13:59:59 -05:00
.prettierrc.json Stage 1: project foundation (strict TS, lint boundaries B-1..B-7, directory structure, CI, boundary tests) 2026-08-30 23:25:35 -05:00
ARCHITECTURE-DECISIONS.md Checkpoint: current Lumen state 2026-09-23 18:58:21 -05:00
ARCHITECTURE-DESIGN.md Checkpoint: current Lumen state 2026-09-23 18:58:21 -05:00
ARCHITECTURE-VALIDATION.md Stage 1: project foundation (strict TS, lint boundaries B-1..B-7, directory structure, CI, boundary tests) 2026-08-30 23:25:35 -05:00
ASSUMPTIONS-AND-OPEN-QUESTIONS.md Stage 1: project foundation (strict TS, lint boundaries B-1..B-7, directory structure, CI, boundary tests) 2026-08-30 23:25:35 -05:00
CHECKPOINT-encryption.md Checkpoint: current working state 2026-09-29 21:33:33 -05:00
DISCOVERY.md Stage 1: project foundation (strict TS, lint boundaries B-1..B-7, directory structure, CI, boundary tests) 2026-08-30 23:25:35 -05:00
eslint.config.js Remove misleading home 'Update' button (reloaded the page without changing any data — looked like a broken update); settings route + notification prefs lint/type-clean; wire sync progress into guidance dialog; sw.test mocks getRegistrations for clean-update register path 2026-10-06 10:12:04 -05:00
IMPLEMENTATION-CONTRACT.md Checkpoint: current Lumen state 2026-09-23 18:58:21 -05:00
index.html Lint/format cleanup: void-expression and empty-function fixes, optional-chain narrowing, ignore share/ in eslint+prettier 2026-09-30 13:59:59 -05:00
lumen-share.zip Checkpoint: current working state 2026-09-29 21:33:33 -05:00
package-lock.json Stage 6 runbook CLI: validate->build->hash->sign->upload->smoke end-to-end (local origin-layout dir, test Ed25519 key, smoke re-verifies all file hashes + signature; npm run package:staging / package:smoke) 2026-09-30 14:38:32 -05:00
package.json v0.1.1: emergency content v5 floor regenerated, app version bump matches published packages minAppVersion 2026-10-06 10:12:04 -05:00
README.md Checkpoint: current Lumen state 2026-09-23 18:58:21 -05:00
SPIKE-01-INDEXEDDB-IOS.md Stage 1: project foundation (strict TS, lint boundaries B-1..B-7, directory structure, CI, boundary tests) 2026-08-30 23:25:35 -05:00
SPIKE-02-ATOMIC-DATASET-UPDATES.md Stage 1: project foundation (strict TS, lint boundaries B-1..B-7, directory structure, CI, boundary tests) 2026-08-30 23:25:35 -05:00
SPIKE-03-MAP-REPRESENTATION.md Stage 1: project foundation (strict TS, lint boundaries B-1..B-7, directory structure, CI, boundary tests) 2026-08-30 23:25:35 -05:00
SPIKE-04-FESTIVAL-DATA-PACKAGE.md Stage 1: project foundation (strict TS, lint boundaries B-1..B-7, directory structure, CI, boundary tests) 2026-08-30 23:25:35 -05:00
SPIKE-05-OFFLINE-READY.md Stage 1: project foundation (strict TS, lint boundaries B-1..B-7, directory structure, CI, boundary tests) 2026-08-30 23:25:35 -05:00
SPIKE-06-EMERGENCY-BASELINE.md Stage 1: project foundation (strict TS, lint boundaries B-1..B-7, directory structure, CI, boundary tests) 2026-08-30 23:25:35 -05:00
SPIKE-07-BOOTSTRAP.md Stage 1: project foundation (strict TS, lint boundaries B-1..B-7, directory structure, CI, boundary tests) 2026-08-30 23:25:35 -05:00
SPIKE-08-TIME-MODEL.md Stage 1: project foundation (strict TS, lint boundaries B-1..B-7, directory structure, CI, boundary tests) 2026-08-30 23:25:35 -05:00
theme-preview.html Checkpoint: current Lumen state 2026-09-23 18:58:21 -05:00
tsconfig.json Checkpoint: current Lumen state 2026-09-23 18:58:21 -05:00
vite.config.ts Remove misleading home 'Update' button (reloaded the page without changing any data — looked like a broken update); settings route + notification prefs lint/type-clean; wire sync progress into guidance dialog; sw.test mocks getRegistrations for clean-update register path 2026-10-06 10:12:04 -05:00
vitest.config.ts Fix checkpoint regressions: jsdom localStorage shim (Node 22 shadowing) + restore persistent nav links required by §7 one-tap emergency reachability 2026-09-30 13:44:31 -05:00

Lumen — offline-first festival PWA

Implementation is complete through Stage 8 (A/B activation). UI feature views and transport orchestration remain staged work per IMPLEMENTATION-CONTRACT.md.

  • Validated architecture: ARCHITECTURE-VALIDATION.md (SPIKE-01…08 reconciled)
  • Contract: IMPLEMENTATION-CONTRACT.md — single source for implementation rules, boundaries B-1…B-7, invariants I-1…I-17
  • Implemented: strict TypeScript foundation, PWA shell/service worker, package schema and pipeline, IndexedDB A/B persistence, signed-package verifier, and activation/rollback coordinator
  • No transport/network orchestration, mesh, or accounts yet — see contract Stages 9…19

Quick start

npm install
npm run typecheck   # tsc --noEmit strict
npm run lint        # eslint with boundaries B-1…B-7
npm run format      # prettier --check
npm test            # vitest — unit and contract tests
npm run ci          # typecheck + lint + format + test + build

Project structure

See IMPLEMENTATION-CONTRACT.md §4 and per-directory README.md.

Navigation

The desktop shell uses a fixed 240px sidebar on the left. It contains five large, evenly spaced vertically stacked navigation buttons:

  • HOME — the launcher landing page at /, showing a centered 2×2 grid of the four destination tiles.
  • EMERGENCY — the emergency destination and retains its red (rose) background.
  • SCHEDULE — the existing schedule route and functionality.
  • MAP — the existing map route and functionality.
  • INFORMATION — the navigation label previously shown as FESTIVAL; the existing /festival route and page functionality remain intact.

The root route / boots into the home launcher (no redirect). On every destination page, the header brand ("LUMEN") acts as a home/back button — it is highlighted with a leading chevron and returns to the launcher in one tap.

The sidebar preserves the SolLunar deck aesthetic, thin borders, typography, and visual hierarchy. On smaller screens it becomes a responsive fixed bottom navigation bar. All routes, one-tap emergency access, active-route state, and navigation behavior remain unchanged.

Branches

  • main — validated architecture plus implemented stages (YELLOW device/content/ops gates tracked in ARCHITECTURE-VALIDATION.md §7).