# Companion-video guide — set up a conference and rehearse the door

## Editorial purpose

Turn [the course](../appmint-run-an-event.md) into a practical organizer walkthrough. The opening promise is specific: configure two ticket types and watch a staff phone admit one guest, refuse the workshop zone and record an exit. Keep the event business context; avoid presenting a collection of disconnected administration screens.

The course is the source of the narration. This document supplies the scene order, capture requirements, on-screen emphasis and limitations. No finished video is included in this handoff. The linked PNGs are actual captures from the rehearsal, not extracted stock clips or UI mockups.

## Deliverables and pacing

Record five short chapters, approximately 4–7 minutes each, with a separate developer appendix. Slow down for field choices and result cards. Cut repeated typing, but retain selecting the actual event result, saving and reopening the saved record. A viewer should understand what was persisted rather than merely watch a fast mouse.

1. Event, zones and the difference between a booking and a ticket.
2. Free admission and workshop access.
3. Programme and speaker.
4. Staff phone door rehearsal.
5. Registration pickup and operating limits.
6. Optional developer appendix: supported event APIs and recovery after partial registration.

Use a simple three-stage title graphic: **Prepare → Rehearse → Operate**. Any diagram is an explanatory graphic, clearly separate from real application footage. Do not fabricate a successful Publish flow or a camera scan.

## Exact fixture

Organization `learnmu4qn1ha`, fictional Tutorial Makers Conference 2026, Nov 14–15, America/Chicago. General Admission is free, capacity 300, max per customer 1, access main-hall; Workshop Pass is USD 25, capacity 40, max per order 2, access both zones. No paid transaction was taken.

Zara is the door attendee, `zara.community@example.invalid`; Kofi is the registration-pickup attendee, `kofi.community@example.invalid`; Nia is the speaker. These addresses are non-deliverable fixtures. Do not replace them with actual customers during filming.

Persisted event ID `6aad171bbef5e1976f5c90be`. Session `6aad1b28bef5e1976f5c90ec`; participant `6aad1ac1bef5e1976f5c90eb`. Kofi ticket `6aad18fbbef5e1976f5c90da`. IDs are for capture continuity, not values learners should paste into another organization.

At handoff, event is published, the session is scheduled and public with Nia linked, General Admission allows re-entry, Zara is checked in and Kofi is confirmed and fulfilled. A new clean replay requires a separate fictional guest or a deliberately planned reset. Do not delete or cancel the existing tickets to make a clean scene; cancellation has destructive ticket behavior.

## Shot sequence

| Scene | Show and narrate | Available still / capture direction |
| --- | --- | --- |
| 1. Start with the result | Saved event, two ticket types, programme and staff operations. Distinguish scan attempts from unique guests. | [Current overview](../../application-fixes/assets/events-local/15-event-overview.png). |
| 2. Explain the objects | Event → ticket type → booking → ticket → door movement. A second branch leads to session and speaker. | Recreate the course Mermaid diagram as a simple graphic; label it “How the records connect.” |
| 3. Enter identity | Show the difference between internal name, visible title and slug. | [Identity](../assets/appmint-events/02-event-identity.png). Hold on Title and Slug. |
| 4. Set dates and location | Explain timezone, chosen calendar dates and daily hours. | Show November14–15 in Studio; the corrected display must match the form. |
| 5. Divide the venue | Main hall and workshop lab; IDs must match access rules. | [Zones](../assets/appmint-events/04-two-zones.png). Highlight ID separately from Name. |
| 6. Checkpoint versus zone | Explain that scan points are configured but the practiced phone uses zones. | [Scan point](../assets/appmint-events/05-scan-point.png) followed by [native scanner](../assets/appmint-events/m03-native-scanner.png). Do not suggest the chips say Entrance/Lab door. |
| 7. Save result | Save through Studio, reopen and compare the persisted identity/dates/areas. | [Saved overview](../../application-fixes/assets/events-local/15-event-overview.png). No obsolete failure transition. |
| 8. Free ticket | Event selection, title, free price, capacity and explicit per-customer limit. | [Free type](../assets/appmint-events/09-free-ticket-type.png), [rules](../assets/appmint-events/10-free-ticket-rules.png). |
| 9. Workshop ticket | USD 25, capacity 40, both zone IDs; explain entitlement rather than just price. | [Pricing](../assets/appmint-events/12-workshop-price-capacity.png), [access](../assets/appmint-events/13-workshop-access.png), [two rows](../assets/appmint-events/14-two-ticket-types.png). |
| 10. Publication | Choose Publish, wait for confirmation and verify Published after reload. | Capture the current action. Local API/UI acceptance is recorded in event-live-walkthrough.md. |
| 11. Booking and ticket | Compare each paid-zero booking with its confirmed admission ticket. | [Correct counts and event](../../application-fixes/assets/events-local/10-bookings-fixed.png). |
| 12. Speaker and talk | A speaker is not an admission ticket; schedule a useful session with a specific room. | [Speaker](../assets/appmint-events/31-speaker-persisted.png), [session details](../assets/appmint-events/23-session-details.png), [schedule](../assets/appmint-events/24-session-schedule.png), [saved session](../assets/appmint-events/32-session-persisted.png). Show the Participants selection and enabled Public control, then reopen the saved session. |
| 13. Open staff event | Choose the same event; identify tabs and confirm prices/capacities. | [Correct native prices](../../application-fixes/assets/mobile-local/event-price-fixed.png). |
| 14. Admit Zara | Check In → Main hall → Manual Lookup → email → Check in. | [Fresh first scoped admission](../../application-fixes/assets/mobile-local/event-first-main-hall.png). |
| 15. Repeat and deny | First repeat accepted with re-entry enabled, then lab denied. | [Repeat](../assets/appmint-events/m06-repeat-checkin.png), [denial](../assets/appmint-events/m07-zone-denied.png). Do not substitute the later amber result for this first repeat. |
| 16. Exit and return | Switch Check Out then Check In; hold on both results. | [Exit](../../application-fixes/assets/mobile-local/event-main-hall-checkout.png), [return](../../application-fixes/assets/mobile-local/event-reentry-fixed.png). |
| 17. Re-entry rule | Turn re-entry off, show refusal, restore and reopen the rule. | [Fresh refusal](../../application-fixes/assets/mobile-local/event-reentry-refused.png). |
| 18. Pickup | Open Accredit, enter desk-1, search Kofi, verify holder/type, then Fulfill once. | [Found](../../application-fixes/assets/mobile-local/event-desk-kofi-found.png), [fulfilled](../../application-fixes/assets/mobile-local/event-desk-kofi-fulfilled.png). Readback must retain confirmed status, timestamp, staff and desk. |
| 19. Desktop desk | Find the same guest in Studio; explain that lookup is not another registration. | [Working lookup](../../application-fixes/assets/events-local/12-desk-lookup-fixed.png). Code is masked. |
| 20. Next service | Attendee app, community, payments and badges each need their own end-to-end rehearsal. | Course links and a short next-step card; no unrelated clips. |

## Suggested spoken passages

**Opening:** “Our conference has two spaces, but not every ticket opens both doors. We’ll set up the event, issue a free registration and rehearse what the staff phone should do before a real guest arrives.”

**After the ticket-type comparison:** “Price tells us what the guest pays. Zone access tells the door where they may go. General Admission is free and opens the main hall. The workshop type includes both spaces.”

**Before the repeat attempt:** “Re-entry is enabled on this type. Watch what a second attempt does: it is accepted. That means we cannot count successful scans as unique people.”

**Before the refusal:** “Now the phone is checking the workshop lab. Zara still has General Admission, so this result should be denied. The useful result is a clear refusal, not a staff member tapping until it turns blue.”

**Pickup:** “Kofi already registered. Fulfill records the handover and refreshes the ticket’s code material. It does not check him through the entrance.”

**Developer transition:** “Studio saves and publishes the event. The appendix shows the matching API setup for developers connecting an attendee app and registration checkpoints.”

These are narration starting points; keep exact UI labels and the observed outcomes when adapting the wording.

## Recording instructions

Desktop source captures are 1440×1050. Native captures are 1080×2400 from an Android API 36 emulator. Label native footage as the Android training build; do not present it as an iPhone recording. Use a phone-shaped layout only as framing, never as a replacement for actual screen content.

The existing door rehearsal used **Manual Lookup**. The emulator camera shows a virtual scene. A fresh QR-camera segment requires two devices or a displayed ticket and an actual successful decode, followed by a persisted check-in. Until that exists, say “manual lookup rehearsal,” not “we scanned the QR.”

Record transient result cards continuously; they disappear after a few seconds. Hold the successful/denied frame long enough to read its title and explanatory text. If using a still, make the hold explicit rather than implying it is live playback.

Include cursor focus on the actual selected event result, not just the typed query. When a save is important, capture a reload or a server readback afterward. Do not show the API’s ticket `codeSecret`, code payload, bearer tokens, application credentials or credential-bearing login URLs. Badge data can contain code material; inspect it privately before choosing a publishable shot.

## Deliberate limitations for the editor

Do not claim a working public registration website, paid checkout, payment-provider refund, transfer, automatic perk claim, badge print, walk-in sale or iOS execution. None was practiced in this event rehearsal. Studio creation, publication, participant selection, booking display and desk lookup were repaired and verified locally. Show the current working UI.

Do not teach an inactive type or draft event as a verified stop-sale control. Do not claim scan-point enforcement when the native request omitted the checkpoint. The updated phone sends the active event ID; local API checks proved that wrong-event entry and exit are refused without ticket mutation. Do not claim automatic community membership succeeded for existing tutorial members; it failed with a duplicate membership-name error.

The native Desk / Point ID field now supplies attribution. Show desk-1 before pickup and the saved attribution afterward.

## Acceptance before publishing the companion video

- The chosen fixture’s actual dates, timezone, names and access rules match the narrated values.
- Every successful action has its correct visible result; known errors are not edited into implied successes.
- The distinction between event, booking, ticket, participant, fulfillment and movement is understandable without reading code.
- General Admission re-entry is restored after the refusal rehearsal.
- Secrets, ticket-code material and private credentials are absent from published frames and console output.
- The companion points to the Markdown course for API examples, troubleshooting and later attendee-app work.

## Local capture update — 24 September 2026

Use the repaired local workflow when recording. Event create/publish work in Studio; do not narrate the obsolete generic-save/enriched-record failures as required API workarounds. Keep full date/time values: the calendar now respects the event timezone. Saved session links use `participants`, and Public persists as `isPublic: true`.

New actual captures under `../../application-fixes/assets/`:

- `events-local/10-bookings-fixed.png`: both paid-zero bookings and correct ticket counts.
- `events-local/11-speaker-fixed.png`: Nia's actual name/email/role.
- `events-local/12-desk-lookup-fixed.png`: working web lookup, ticket code masked.
- `mobile-local/event-price-fixed.png`: Free/298 and USD25.00/40 inventory.
- `mobile-local/event-first-main-hall.png`: first admission with Main hall selected.
- `mobile-local/event-workshop-denied.png`: General Admission refused at Workshop lab.
- `mobile-local/event-main-hall-checkout.png`: successful exit.
- `mobile-local/event-reentry-fixed.png`: return admission using the event-bound app.
- `mobile-local/event-reentry-refused.png`: actual no-reentry refusal.

Pickup is now verified: the phone fulfilled Kofi once with desk-1, and API readback confirmed timestamp, staff identity, desk attribution and unchanged confirmed admission status. Use mobile-local/event-desk-kofi-found.png and event-desk-kofi-fulfilled.png. Physical QR camera, iOS and printer output remain separate device checks. No generated UI or unrelated project clips should stand in for any of these scenes.
