Nicholai b20db98051
Some checks failed
CI / build-and-test (pull_request) Failing after 1m19s
feat(ci,flags,ops): ship end-to-end CI, feature-flag framework, gated surfaces, and ops docs
CI (.gitea/workflows/ci.yaml): lint → typecheck → vitest w/ coverage → OpenNext build → preview smoke → bundle-size budgets; Node 20; npm ci; artifacts; safe env; D1 dry-run scaffold.

Budgets: add scripts/budgets.mjs; TOTAL_STATIC_MAX_BYTES and MAX_ASSET_BYTES thresholds; report top offenders; fail on breach; README CI section.

Flags: add lib/flags.ts with typed booleans and safe defaults (ADMIN_ENABLED, ARTISTS_MODULE_ENABLED, UPLOADS_ADMIN_ENABLED, BOOKING_ENABLED, PUBLIC_APPOINTMENT_REQUESTS_ENABLED, REFERENCE_UPLOADS_PUBLIC_ENABLED, DEPOSITS_ENABLED, PUBLIC_DB_ARTISTS_ENABLED, ADVANCED_NAV_SCROLL_ANIMATIONS_ENABLED, STRICT_CI_GATES_ENABLED, ISR_CACHE_R2_ENABLED); robust parsing; client provider; unit tests.

Wiring: gate Admin shell and admin write APIs (503 JSON on uploads and artists writes); disable booking submit and short-circuit booking mutations when off; render static Hero/Artists when advanced animations off; tests for UI and API guards.

Ops: expand docs/prd/rollback-strategy.md with “Feature Flags Operations,” Cloudflare Dashboard and wrangler.toml steps, preview simulation, incident playbook, and post-toggle smoke checklist.

Release: add docs/releases/2025-09-19-feature-flags-rollout.md with last-good commit, preview/production flag matrices, rollback notes, and smoke results; link from rollback doc.

Chore: fix TS issues (gift-cards boolean handling, Lenis options, tailwind darkMode), remove next-on-pages peer conflict, update package.json scripts, configure Gitea act_runner label, open draft PR to trigger CI.

Refs: CI-1, FF-1, FF-2, FF-3, OPS-1
Impact: defaults preserve current behavior; no runtime changes unless flags flipped
2025-09-19 21:33:09 -06:00

44 lines
2.2 KiB
JSON

{
"/_not-found/page": "app/_not-found/page.js",
"/api/artists/[id]/route": "app/api/artists/[id]/route.js",
"/aftercare/page": "app/aftercare/page.js",
"/api/admin/migrate/route": "app/api/admin/migrate/route.js",
"/api/auth/[...nextauth]/route": "app/api/auth/[...nextauth]/route.js",
"/artists/[id]/book/page": "app/artists/[id]/book/page.js",
"/artists/page": "app/artists/page.js",
"/artists/[id]/page": "app/artists/[id]/page.js",
"/auth/error/page": "app/auth/error/page.js",
"/auth/signin/page": "app/auth/signin/page.js",
"/book/page": "app/book/page.js",
"/contact/page": "app/contact/page.js",
"/gift-cards/page": "app/gift-cards/page.js",
"/deposit/page": "app/deposit/page.js",
"/page": "app/page.js",
"/specials/page": "app/specials/page.js",
"/privacy/page": "app/privacy/page.js",
"/favicon.ico/route": "app/favicon.ico/route.js",
"/terms/page": "app/terms/page.js",
"/api/admin/stats/route": "app/api/admin/stats/route.js",
"/api/files/bulk-delete/route": "app/api/files/bulk-delete/route.js",
"/api/files/folder/route": "app/api/files/folder/route.js",
"/api/artists/route": "app/api/artists/route.js",
"/api/portfolio/bulk-delete/route": "app/api/portfolio/bulk-delete/route.js",
"/api/portfolio/stats/route": "app/api/portfolio/stats/route.js",
"/api/appointments/route": "app/api/appointments/route.js",
"/api/files/stats/route": "app/api/files/stats/route.js",
"/api/files/route": "app/api/files/route.js",
"/api/portfolio/route": "app/api/portfolio/route.js",
"/api/portfolio/[id]/route": "app/api/portfolio/[id]/route.js",
"/api/users/route": "app/api/users/route.js",
"/api/upload/route": "app/api/upload/route.js",
"/api/settings/route": "app/api/settings/route.js",
"/admin/artists/page": "app/admin/artists/page.js",
"/admin/artists/new/page": "app/admin/artists/new/page.js",
"/admin/artists/[id]/page": "app/admin/artists/[id]/page.js",
"/admin/page": "app/admin/page.js",
"/admin/calendar/page": "app/admin/calendar/page.js",
"/admin/portfolio/page": "app/admin/portfolio/page.js",
"/admin/settings/page": "app/admin/settings/page.js",
"/admin/analytics/page": "app/admin/analytics/page.js",
"/admin/uploads/page": "app/admin/uploads/page.js"
}