Shortcuts idle when typing in inputs. Press ? anytime.
Dual-state · private RSVP
Sealed Invite Studio
World-class educational RSVP studio for Midnight’s dual-state model:
seal an invite (public title + commitment),
collect private RSVPs whose guest identities stay in the vault,
then prove capacity still holds — or selectively admit —
without publishing the guest list.
By @kshot9000
· nightdream.xyz.
Honest scope: local HTML/JS simulation only.
Does not run Compact, a proof server, Lace, or real ADA / DUST transfers.
Does not claim GitHub Pages is live until Actions are enabled.
SHA-256 commitments here are a teaching stand-in — verify against official Compact / Zswap crypto before shipping.
Invite journey
Labeled phases from sealed invite → private RSVPs → capacity proof / admit. Reject is first-class.
1
IdleNo open invites
2
SealedPublic title + commitment
3
RSVPingGuests sealed in vault
4
ProvenCapacity / selective admit
Phase: idle — seal an invite to open the night list.
The dual-state invite in one screen
Observers see event titles and commitment hashes. Guest identities, capacity, and venue notes stay in the private vault until you choose to disclose.
Public ledger
Invite board
Simulated public state holds event metadata + H(capacity ‖ venue ‖ notes ‖ salt ‖ domain) and RSVP commitments — never clear guest names.
Event title / when (clear)
Invite commitment hash
RSVP commitment hashes + guest tags
Capacity-proven / admit flags
Private vault
Local witnesses
Capacity, venue, guest identity, plus-ones, and salts live in localStorage — a stand-in for Compact witnesses that never leave the client.
capacity (host)
venueNotes (private)
guestName / plusOnes
salt (32-byte hex)
Sealed rail
Invites with veiled capacity and sealed guest identities. Observers see commitments only.
100% veiled (no invites yet)
Disclose rail
Capacity proofs and selective admits — range (under capacity) or full guest-list disclose.
0% disclosed
Seal an invite
Title + when stay public. Capacity + venue notes seal into a commitment before the invite opens.
Invite draft
Visible on the board. Keep it tasteful — no secrets here.
Stays in the vault. Used by capacity theater.
0/280
Vault preview SIMULATED
Salt
—
Capacity
—
Venue
—
Commitment
—
Opening publishes title + when + commitment only. Capacity stays sealed.
Private RSVP
Pick an open invite. Guest identity seals into a commitment; only the hash + tag hit the public board.
RSVP form
What the board shows — not your real name.
What the board learns
Sees: guest tag + RSVP commitment hash + timestamp
Does not see: real name, plus-ones, whether capacity is full
Prove later: use Capacity theater to show seats remain without numbers
Educational only — no wallet, no settlement, no Compact proof.
Capacity theater SIMULATED
Prove sealed RSVPs fit under capacity — or reject. Exact seats and names stay veiled unless you disclose.
Prove capacity clearance
Last proof
No proof yet
LOCAL-TRUE
Theater log
Awaiting proofs…
—no invite
Invite board
Public invite board — commitments first, guest names only after selective disclose. Schema v2 localStorage · BroadcastChannel sync · JSON export/import. LOCAL-TRUE ≠ on-chain.
Invites: 0RSVPs: 0Admitted: 0
Anti-pattern vs safe pattern
Teaching sketches — not deployable Compact. Always verify against official docs.
✗ Anti-pattern — clear guest list on-chain
// BAD: public ledger sees every name
ledger {
guests: List<Bytes<64>>; // observers dox the party
capacity: Uint<32>;
}
✓ Safer sketch — commit + witness
// BETTER (sketch): public commitment only
ledger {
inviteCommit: Bytes<32>;
rsvpCommits: List<Bytes<32>>;
}
witness capacity: Uint<32>;
witness guestName: Bytes<64>;
// prove seatsRemain without publishing names
These snippets are educational illustrations. Official Compact syntax, circuits, and Zswap commitments may differ — check Midnight docs before shipping.
Support the lab
Cardano donation address — always visible in the dock and here. No on-chain tip from this UI.