A Dex-powered registration site for a single event with approximately 300 attendees. It reserves capacity without overselling, creates Stripe-hosted US bank account (ACH) Checkout Sessions, emails private QR ticket links through Gmail after asynchronous payment success, and performs atomic ticket check-in.
EventInventoryFlowis the single durable capacity ledger. Its transactional RPCs reserve, release, and mark seats paid.RegistrationFlowowns one attendee's payment, email, ticket, and check-in lifecycle.- Stripe
checkoutSessionUpdatedevents are signature-verified by the official connector before reaching the typed registration RPC. - Gmail
sendMessagesends the private ticket URL. The QR encodes only that HMAC-signed URL; it contains no attendee or payment data. - Dex is the only business-state store. There is no application database, ORM, cache, or mock business server.
The participant registration, payment-status, ticket, and staff scanning pages use the generated OpenAPI client. Dex Web remains the operations interface for event and registration recovery actions.
The repository uses the basic-process template v1.8.1 as its upgrade base. It pins Dex Server/CLI v0.14.2, Dex Go SDK v0.13.1, Stripe connector v0.2.2, Gmail connector v0.14.0, and Connector SDK v0.14.2.
make bootstrap
make check
make devmake dev expects dexcli on PATH. The app defaults to the local Dex Server at 127.0.0.1:8801 and serves on http://127.0.0.1:8080.
Without DEX_CONNECTOR_CONFIG_FILE, non-production startup uses non-routable connector endpoints so the UI and Flow graphs can be inspected safely. Provider calls will enter needs_attention. Configure the released connectors through Dex Web for an actual development payment/email test.
Start the pinned local Dex stack with a persistent connector directory, then open Dex Web's Connections view. The Flow graph declares the two named connections and the Stripe trigger binding used by this application:
event-paymentsuses Stripev0.2.2. Its setup screen links to the Stripe Dashboard and explains how to enter a restricted or secret API key plus the matchingwhsec_webhook signing secret.event-ticketsuses Gmailv0.14.0. Its setup screen shows the exact OAuth redirect URI and guides Google Cloud project, Gmail API, consent-screen, test-user, and Web application client setup. This release uses Google's canonicaluserinfo.emailscope, so reconnect a credential created with Gmailv0.11.1or earlier.event-registration-paymentsis the StripecheckoutSessionUpdatedtrigger binding. Point the Stripe webhook endpoint at/connectors/stripe/webhookon the application's public HTTPS base URL.
After saving the connections, start the application with the configuration path displayed by Dex Web:
DEX_CONNECTOR_CONFIG_FILE=/absolute/path/to/connections.json make devThe local file contains plaintext development credentials. Never commit, upload, or log it. Gmail's local OAuth token is short-lived and must be reauthorized after it expires.
Event details remain TBD and are environment-configurable:
| Variable | Development default |
|---|---|
EVENT_NAME |
Event name to be announced |
EVENT_DESCRIPTION |
Program details will be announced soon. |
EVENT_STARTS_AT |
2027-01-01T18:00:00-08:00 |
EVENT_TIMEZONE |
America/Los_Angeles |
EVENT_LOCATION |
Location to be announced |
EVENT_CURRENCY |
USD |
EVENT_PRICE_MINOR |
7500 |
EVENT_CAPACITY |
300 |
EVENT_REGISTRATION_OPEN |
true |
PUBLIC_BASE_URL |
http://127.0.0.1:8080 |
For a hosted deployment, Superverse mounts the exact connector configuration
revision named by SUPERVERSE_CONNECTOR_CONFIG_FILE, verifies its digest before
startup, and injects the internal credential broker URL plus a private workload
credential file. The application reads non-secret Stripe/Gmail configuration
from that snapshot; provider credentials are resolved per operation from the
broker and are never copied into the release artifacts.
Production additionally requires:
APP_ENV=productionEVENT_TOKEN_SECRETwith at least 32 random bytesDEX_CONNECTOR_CONFIG_FILEcontaining the namedevent-paymentsStripe andevent-ticketsGmail connections, plus theevent-registration-paymentsStripe trigger binding- an HTTPS
PUBLIC_BASE_URL - a trusted authentication boundary that strips caller-supplied permission headers and asserts
X-Event-Permissions; check-in requirescheckin.scan - a public Stripe webhook route at
/connectors/stripe/webhook
Automatic refunds are intentionally outside the MVP. Refunds are handled manually in Stripe Dashboard.
make check-fdg-v2
make test-unit
make test-integration
make test-e2e
make buildIntegration coverage uses the real Dex Server and official connector code with local provider protocol fixtures. It verifies single-seat oversell protection, ACH success delivery, Gmail ticket dispatch, QR generation, and duplicate-safe check-in.