Skip to content

Complete the Webbooth improvement program - #1

Merged
EdmundLimBoEn merged 105 commits into
mainfrom
codex/webbooth-improvements
Jul 26, 2026
Merged

Complete the Webbooth improvement program#1
EdmundLimBoEn merged 105 commits into
mainfrom
codex/webbooth-improvements

Conversation

@EdmundLimBoEn

Copy link
Copy Markdown
Owner

Summary

  • harden Booth control, durable capture recovery, authenticated uploads, and operational safety
  • add guest review/handoff, localization, adaptive live and browse galleries, and exact-key moderation
  • add revisioned configuration, reusable presets, guided rehearsals, and post-event package export

Verification

  • 668 unit tests passed
  • 17 mocked WebKit journeys passed
  • application and test typechecks passed
  • frame-pack validation passed
  • production build passed
  • independent final review: approved with no Critical or Important findings

Manual release gates

  • Real iPad camera, projector, and staging smoke checks remain required by the runbooks.
  • No deployment was performed.

@coderabbitai

coderabbitai Bot commented Jul 24, 2026

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 193 files, which is 93 over the limit of 100.

To get a review, narrow the scope:
• coderabbit review --committed # exclude uncommitted changes
• coderabbit review --dir # limit to a subdirectory
• coderabbit review --base # compare against a closer base

Upgrade to a paid plan to raise the limit.

This review couldn't start because sufficient usage credits or metered capacity aren't available. Add credits or update usage-based reviews in the billing tab, then retry.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 68c71cef-5f37-4635-ac23-eb313f64a922

📥 Commits

Reviewing files that changed from the base of the PR and between a3b4a9a and 39b7e51.

⛔ Files ignored due to path filters (2)
  • bun.lock is excluded by !**/*.lock
  • public/booth-icon.svg is excluded by !**/*.svg
📒 Files selected for processing (193)
  • .github/workflows/verify.yml
  • .gitignore
  • app/[event]/admin/admin-config-controls.test.tsx
  • app/[event]/admin/admin-config-controls.tsx
  • app/[event]/admin/admin-moderation-integration.test.ts
  • app/[event]/admin/admin-styles.test.ts
  • app/[event]/admin/admin.module.css
  • app/[event]/admin/booth-operations-panel.test.tsx
  • app/[event]/admin/booth-operations-panel.tsx
  • app/[event]/admin/booth-operations.test.ts
  • app/[event]/admin/booth-operations.ts
  • app/[event]/admin/config-history-panel.test.tsx
  • app/[event]/admin/config-history-panel.tsx
  • app/[event]/admin/config-mutation.test.ts
  • app/[event]/admin/config-mutation.ts
  • app/[event]/admin/export-client.test.ts
  • app/[event]/admin/export-client.ts
  • app/[event]/admin/export-panel.test.tsx
  • app/[event]/admin/export-panel.tsx
  • app/[event]/admin/moderation-dialog.test.tsx
  • app/[event]/admin/moderation-dialog.tsx
  • app/[event]/admin/moderation-panel.test.tsx
  • app/[event]/admin/moderation-panel.tsx
  • app/[event]/admin/moderation-state.test.ts
  • app/[event]/admin/moderation-state.ts
  • app/[event]/admin/page.tsx
  • app/[event]/admin/preset-panel.test.tsx
  • app/[event]/admin/preset-panel.tsx
  • app/[event]/admin/preset-state.test.ts
  • app/[event]/admin/preset-state.ts
  • app/[event]/admin/rehearsal-panel.test.tsx
  • app/[event]/admin/rehearsal-panel.tsx
  • app/[event]/booth-session/access.test.ts
  • app/[event]/booth-session/access.ts
  • app/[event]/booth-session/capture-candidate.test.ts
  • app/[event]/booth-session/capture-candidate.ts
  • app/[event]/booth-session/capture-flow.test.ts
  • app/[event]/booth-session/capture-flow.ts
  • app/[event]/booth-session/countdown-audio.test.ts
  • app/[event]/booth-session/countdown-audio.ts
  • app/[event]/booth-session/credential.test.ts
  • app/[event]/booth-session/credential.ts
  • app/[event]/booth-session/device-identity.test.ts
  • app/[event]/booth-session/device-identity.ts
  • app/[event]/booth-session/handoff.test.ts
  • app/[event]/booth-session/handoff.ts
  • app/[event]/booth-session/installed-mode.test.ts
  • app/[event]/booth-session/installed-mode.ts
  • app/[event]/booth-session/lifecycle.test.ts
  • app/[event]/booth-session/lifecycle.ts
  • app/[event]/booth-session/operational-client.test.ts
  • app/[event]/booth-session/operational-client.ts
  • app/[event]/booth-session/outbox.ts
  • app/[event]/booth-session/pause-boundary.test.ts
  • app/[event]/booth-session/pause-boundary.ts
  • app/[event]/booth-session/rehearsal-client.test.ts
  • app/[event]/booth-session/rehearsal-client.ts
  • app/[event]/booth-session/rehearsal-evidence-outbox.test.ts
  • app/[event]/booth-session/rehearsal-evidence-outbox.ts
  • app/[event]/booth-session/retry-policy.test.ts
  • app/[event]/booth-session/retry-policy.ts
  • app/[event]/booth-session/review.test.ts
  • app/[event]/booth-session/review.ts
  • app/[event]/booth-session/session.test.ts
  • app/[event]/booth-session/session.ts
  • app/[event]/booth-session/upload.test.ts
  • app/[event]/booth-session/upload.ts
  • app/[event]/booth-unlock.test.tsx
  • app/[event]/booth-unlock.tsx
  • app/[event]/booth.module.css
  • app/[event]/capture-review.test.tsx
  • app/[event]/capture-review.tsx
  • app/[event]/gallery/browse-gallery.test.tsx
  • app/[event]/gallery/gallery.module.css
  • app/[event]/gallery/handoff-gallery.test.tsx
  • app/[event]/gallery/handoff-gallery.tsx
  • app/[event]/gallery/page.tsx
  • app/[event]/gallery/photo-actions.test.ts
  • app/[event]/gallery/photo-actions.ts
  • app/[event]/gallery/photo-lightbox.test.tsx
  • app/[event]/gallery/photo-lightbox.tsx
  • app/[event]/gallery/scroll-anchor.test.ts
  • app/[event]/gallery/scroll-anchor.ts
  • app/[event]/handoff-panel.test.tsx
  • app/[event]/handoff-panel.tsx
  • app/[event]/live/live.module.css
  • app/[event]/live/marquee.test.ts
  • app/[event]/live/marquee.ts
  • app/[event]/live/page.tsx
  • app/[event]/live/wrap.test.ts
  • app/[event]/manifest.test.ts
  • app/[event]/manifest.ts
  • app/[event]/manifest.webmanifest/route.ts
  • app/[event]/operator-controls.test.tsx
  • app/[event]/operator-controls.tsx
  • app/[event]/page.tsx
  • app/[event]/rehearsal-status.test.tsx
  • app/[event]/rehearsal-status.tsx
  • app/api/booth-state/route.ts
  • app/api/booth/handlers.test.ts
  • app/api/booth/handlers.ts
  • app/api/booth/preflight/route.ts
  • app/api/booths/route.ts
  • app/api/config/handlers.test.ts
  • app/api/config/handlers.ts
  • app/api/config/revisions/restore/route.ts
  • app/api/config/revisions/route.ts
  • app/api/config/route.ts
  • app/api/export/handlers.test.ts
  • app/api/export/handlers.ts
  • app/api/export/route.ts
  • app/api/moderation/photos/handlers.test.ts
  • app/api/moderation/photos/handlers.ts
  • app/api/moderation/photos/rebuild/route.ts
  • app/api/moderation/photos/route.ts
  • app/api/photo/handlers.test.ts
  • app/api/photo/handlers.ts
  • app/api/photo/route.ts
  • app/api/photos/handlers.test.ts
  • app/api/photos/handlers.ts
  • app/api/photos/route.ts
  • app/api/presets/[presetId]/route.ts
  • app/api/presets/apply/route.ts
  • app/api/presets/handlers.test.ts
  • app/api/presets/handlers.ts
  • app/api/presets/route.ts
  • app/api/rehearsals/evidence/route.ts
  • app/api/rehearsals/handlers.test.ts
  • app/api/rehearsals/handlers.ts
  • app/api/rehearsals/join/route.ts
  • app/api/rehearsals/route.ts
  • app/api/upload/handlers.ts
  • app/api/upload/route.test.ts
  • app/api/upload/route.ts
  • app/booth-control.test.ts
  • app/booth-control.ts
  • app/event-config.test.ts
  • app/event-config.ts
  • app/event-preset.test.ts
  • app/event-preset.ts
  • app/event-store.test.ts
  • app/event-store.ts
  • app/export-package.test.ts
  • app/export-package.ts
  • app/export-stream.test.ts
  • app/export-stream.ts
  • app/frame-packs/catalog.ts
  • app/frame-packs/types.ts
  • app/frame-packs/validate.test.ts
  • app/frame-packs/validate.ts
  • app/i18n/catalog.test.ts
  • app/i18n/catalog.ts
  • app/i18n/locale.test.ts
  • app/i18n/locale.ts
  • app/layout.tsx
  • app/moderation.test.ts
  • app/moderation.ts
  • app/photo-feed/controller.test.ts
  • app/photo-feed/controller.ts
  • app/photo-feed/types.ts
  • app/photo-feed/use-photo-feed.test.ts
  • app/photo-feed/use-photo-feed.ts
  • app/photo-metadata.test.ts
  • app/photo-metadata.ts
  • app/rehearsal.test.ts
  • app/rehearsal.ts
  • app/templates.test.ts
  • app/templates.ts
  • app/upload-auth.test.ts
  • app/upload-auth.ts
  • app/upload-contract.test.ts
  • app/upload-contract.ts
  • app/zip.test.ts
  • app/zip.ts
  • bunfig.toml
  • docs/runbooks/deployment.md
  • docs/runbooks/pre-event-readiness.md
  • docs/superpowers/plans/2026-07-24-release-0a-config-history.md
  • docs/superpowers/plans/2026-07-24-release-0b-idempotent-ingest.md
  • docs/superpowers/plans/2026-07-24-release-1-reliable-booth-control.md
  • docs/superpowers/plans/2026-07-24-release-2-guest-capture.md
  • docs/superpowers/plans/2026-07-24-release-3-gallery-moderation.md
  • docs/superpowers/plans/2026-07-24-release-4-repeatable-operations.md
  • docs/superpowers/plans/2026-07-24-release-5-post-event-package.md
  • docs/superpowers/specs/2026-07-24-webbooth-improvement-program-design.md
  • package.json
  • playwright.config.ts
  • tests/booth-control.spec.ts
  • tests/gallery-moderation.spec.ts
  • tests/guest-capture.spec.ts
  • tests/post-event-package.spec.ts
  • tests/rehearsal-operations.spec.ts
  • tsconfig.test.json

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch codex/webbooth-improvements

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@EdmundLimBoEn
EdmundLimBoEn merged commit 0449f53 into main Jul 26, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant