Repository navigation
Production: https://vudh1.github.io/ballerwatch/ — always built from the explicitly promoted production branch.
Beta: https://vudh1.github.io/ballerwatch/beta/ — the complete cinematic app built from the last successfully validated main commit. Main push validation automatically triggers Pages preview publication, without changing production, release tags, the Worker deployment or encrypted runtime-state.
The former /v2/ URL now redirects to /beta/, retaining query and fragment. Legacy V2 install links remain supported. An older installed worker may first need an online refresh before it starts using the new route. Neither environment uses a visitor sign-in for RSVP roster viewing or local match edits.
.github/workflows/pages.yml checks out production and main separately. On a successful main-branch Validate code push run, it pins the exact validated main SHA. On an explicit Pages dispatch (including a production promotion), it selects an already validated ancestor of current main. scripts/build-pages.mjs builds an output containing production at /ballerwatch/ and a full separate copy of validated main below /ballerwatch/beta/. The only modification outside beta is the retired /v2/ compatibility redirect. GitHub Pages deploys that composed output. A failed or stale validation cannot publish an unvalidated beta.
The beta manifest has a distinct ID/start URL/scope. The beta worker is scoped only to /ballerwatch/beta/, uses a validated-commit-specific cache name, and never deletes the root worker's shell or device caches. RSVP names, followed teams, notification choices, cached cards and match edits use beta-specific device keys; production retains its original keys. Visiting beta cannot overwrite match corrections made in production on the same device. The beta page identifies itself as BETA.
Backend limitation: Beta previews the current main frontend against the existing production Cloudflare API and shared public fixture snapshot. A future beta-only backend endpoint or schema change would require its own isolated Worker deployment before being testable; it must not be silently deployed as production.
Selecting a match type pill offers Edit and Delete (hide). Edits change local date, time and location and are stored in that device's browser; hide/restore and Reset are local too. Match cards, schedule dots, directions and sharing update without a user account or shared write. Production source fixtures are untouched; maintenance releases remain protected and separate. The event-specific RSVP list is public only for published pickup dates, without exposing a general private name catalog.
The complete beta includes the same stadium intro, shot/keeper choreography, glass cards, AI / Settings / Notifications hub, standings, scouting and offline PWA as the current validated main revision. The v2/ source folder continues to hold cinematic modules and artwork; it is not a second standalone app.
The Validate code workflow runs Node regression tests, version/privacy checks, Worker bundling and Chromium/WebKit browser scenarios before any beta publication. tests/frontend/beta-channel.test.mjs checks two-source provenance, route and PWA scope, and the browser suite covers anonymous Edit/Hide/Restore plus root/beta isolation. Browser and deploy tests are notification-silent. Production is still promoted through the reviewed release process, with Worker health checks before a Pages dispatch.
Open Settings → App channel and choose the active environment. A non-sensitive device preference records the most recent choice. The app navigates to the other canonical URL with no private query string or fragment, and never changes the running service-worker scope in place. Production is the default when the setting is missing or invalid, and the beta availability check fails safely. The selector is now available in both environments following the manual 11.2.0 production promotion; the direct beta URL remains available.
The single progress-to-pose calculation now produces separate torso, arm, planted leg, kicking calf and keeper limb transforms. A projected gravity-like quadratic flight with light curl reaches the same upper goal corner; its arc-length-based rotation, slow net arrival and restrained net deformation are reversible. No additional rendering framework, animation data polling or user-data dependency was introduced. Native scroll, reduced motion, Skip, replay function, static fallback and immediate schedule preparation remain unchanged.
The Pages workflow makes an HTTP request to the public Beta URL after deployment and checks its HTML and service-worker bytes against the validated artifact. It also confirms production HTML matches the separate production checkout byte-for-byte. A successful artifact upload alone is not treated as sufficient; deployment fails if the public Pages CDN never serves the intended bytes.