Champagne

Applications

Immutable onboarding submissions, the consumer wizard, and back-office review.

An application begins as an anonymous completion of a club onboarding, with no person or account required. The consumer creates a draft for a club and advances through one ordered block at a time. Its URL identifies the draft; reading or advancing it also requires its scoped application token. A new browser session can recover access by verifying the mailbox. Completing the last block submits the application. The back office lists applications for a club next to the action for editing its onboarding.

Starting an application copies the onboarding revision, questions, options, and signature documents. Drafts and submitted applications therefore remain readable when an administrator edits the source onboarding. Answers are keyed by stable block IDs inside that snapshot.

Every onboarding contains exactly one required Applicant name block and one required Email verification block. The entered name is shown in the back office's Applicant column. Before it is completed, the UI displays Application in progress.

Payment and document-signature steps are explicit, required after-approval steps. Payment opens Stripe Checkout for the plan selected in the application and the club's connected merchant. The step advances only after Champagne receives the signed paid webhook and verifies that exact application Checkout session. On return from Checkout, payment confirmation uses the scoped application access token: applicants do not need to sign in as members before their account setup is complete. While the paid webhook is pending, the consumer checks every two seconds; an error stops automatic checks and offers a retry. Document signature uploads the snapshotted club PDF to Yousign, redirects the verified applicant to its hosted signing flow, and advances only after Champagne confirms the stored Yousign signer is signed. Email verification sends a random six-digit code that expires after ten minutes. Development messages are delivered to the local Mailpit inbox printed by make dev or make worktree-up.

Submitted applications may be Accepted or Rejected. Both actions require confirmation in a dialog before any change or email is sent; rejection allows an optional internal reason. Acceptance atomically creates a person from the name, verified email, and collected address, copies ordinary answers into additional information, and links that person to the originating application. Acceptance and rejection send an email to the applicant. A rejection may include an optional reason, which appears on the application detail page and in its status history. The current rejection email does not include this internal reason. Every applicant advance and reviewer update checks the application revision, preventing two stale clients from silently overwriting one another.

Set YOUSIGN_API_KEY in the API's ignored .env.local during local development and as a secret environment variable in hosted environments. Local development defaults to the sandbox URL in config.mk; override YOUSIGN_API_URL in config.local.mk for another endpoint. Set YOUSIGN_API_URL=https://api.yousign.app/v3 in the hosted runtime for a production key. CONSUMER_ORIGIN supplies the exact return origin, and local .localhost origins are accepted for development. Yousign custom redirect URLs require an eligible paid plan. Sandbox requests use Yousign's supported embedded flow, which emits a completion event before Champagne verifies the signer and returns to the application; production requests use Yousign's hosted redirects.

See Application operations for the complete API contract.

Decision history

The application detail page includes Status history, ordered chronologically, with transition dates, action origins and the reason recorded for a rejection. A rejected application can be accepted directly after confirmation; accepted applications remain final. The former Under review step is no longer available. Its existing history entries are retained; applications still in that old state appear as Submitted and can be accepted or rejected.

Staff decisions record the authenticated actor ID and name. Applicant access uses a scoped application token or the linked member session; older actor details may be absent. Older applications display an explicit incomplete-history notice; no dates or authors are reconstructed. See Status transitions and history for the allowed transitions, atomic persistence and API fields.

Finding applications

Use Filters beside the search field to select one or more statuses and an optional submission-date range (UTC). No selected status means all statuses. Apply filters updates the list; Cancel discards edits; Reset clears the draft filters and takes effect when applied. The button counts active filters. Filters and name/email search are combined on the server and stored in the page URL. The list shows up to 200 newest matches and asks you to narrow the search if that limit is reached.

On this page