Append-only audit data: who sent what, who accepted, who logged in.
RSVP Chat Messages
Customize the default messages shown during the RSVP chat flow for all events. Leave blank to use built-in defaults.
RSVP safety notice
Shown above the RSVP form on every event's public page. Heads-up tone β sets the expectation that hosts are independent + suggests bringing a friend. Leave blank to use the default copy shown in the placeholder.
Invite Message Templates
Customize the pre-written invite messages generated when a host creates a new Nomadic Cafe. Use {{city}}, {{state}}, {{date}}, {{time}}, {{spots}}, {{description}}, and {{link}} as placeholders. Leave blank to use built-in defaults.
Event Passwords
Manage the pool of passwords that get auto-assigned to new events. People use these passwords to access the exact location.
Saved!
Event Recap Link
Show a "stay in the loop" link on past event recaps. All events share this link.
Saved!
Header Links
Set the URLs for the header navigation links. Leave blank to hide a link.
Content
Edit everything visitors and hosts see across the site: downloadable guides, community guidelines, the public gathering-request page, the home-page empty state, and the welcome line that rotates daily.
Downloadable guides
Surface playbooks and reference material in the host workspace summary panel. Hosts also see these on their event dashboards.
Saved!
Rules & Rituals / Safety & Community
Single content block surfaced on the public gathering profile, in the RSVP confirmation modal, and inside the host workspace summary panel. Use line breaks for paragraphs; basic plain text only.
When on, clicking the Hush logo in the header opens the main Hush Hush Coffee site (hushhushcoffee.com) in a new tab. When off, the logo is a plain, non-clickable mark.
Saved!
Welcome sayings
Short italicized phrases that rotate daily on the host landing hero β one per line. Day-of-year picks which one shows, so the rotation is the same for every host on a given day. Defaults are seeded; clear all lines to revert to defaults.
Saved!
Home-page empty state
What visitors see in the Upcoming column when no events are scheduled. Pulls the most recent past event with a recap photo as the featured card; you control the lead text and the two CTA buttons below it.
Start-a-gathering page
Edit the public gathering-request landing (visible at /#start-a-chapter). Hero image and title sit at the top; below them, build the body with a draggable list of text and image blocks. The application form is always at the bottom.
Location postcards on the map
The little country mini-map "postcards" along the bottom of the map. When hidden, the country pills at the top and the Recaps cards still show.
Saved!
Recap cards on the map
The floating "Recaps" cards along the bottom of the map. This is independent of the location postcards above β hiding recaps does not affect the pills or postcards.
When ON, hosts advance to Season 1 Level 2 immediately on Practice Run submit (skips manual admin review). When OFF, hosts stay at Level 1 until an admin reviews and advances them.
Saved!
Pre Gathering dots on the map
When ON, brand-new gatherings (status: Pre Gathering) show as anonymous teaser dots on the public map β just a small marker with a one-line phrase on hover, no name or gathering info. When OFF (default), Pre Gathering gatherings stay hidden from the public map. Each gathering's teaser phrase can be edited from its Edit Gathering modal.
Saved!
Map Key
Edit the label + description for each marker row in the public Map Key modal (bottom-left button on the home map). Leave a field blank to use the default. Click "Reset" on a row to clear admin edits for that row.
Saved!
Deactivated gathering farewell
Replaces the subscribe form on the profile page of any gathering set to "Deactivated" status. Leave blank to use the default copy: "What a wonderful set of moments we had here. Cheers to the gathering that was. Keep finding outside spaces."
Saved!
RSVP follow-gathering copy
After someone RSVPs (any answer), the confirmation screen shows a "Follow this gathering" button so they can opt in to gathering notifications. Edit the button label, subline, and confirmed message below. Leave blank to use the defaults.
Saved!
Season 1 content overrides
Only used by gatherings with view_mode = season1. Leave any field blank to use the built-in default.
Shared resource list (L1 + L2)
Level 0 β PreSeason
Level 1 β Practice Run
Level 2 β Season 1 (unlocked)
Saved!
Host Home β content overrides
Surfaced on the full-view host's Home page (default landing after onboarding graduation). Leave a field blank to use the built-in default.
Saved!
Integrations & Messaging
Global configuration for email + SMS subscription invites. These settings apply to all hosts β hosts cannot edit individual message templates.
Export settings (backup)
Downloads the full configuration β including secret API keys (Resend, Twilio, QStash, Calendly) in plain text. Store the file somewhere secure. Use it to copy values back if a setting is ever lost. Super Admin only; this never changes anything.
Copied!
Diagnostics
Live system check. Verifies data store, providers, and queue end-to-end.
Display & Limits
Counts above this show as "N+" on host-facing surfaces. Admin views always show exact counts. Default: 50.
An open request with no state change in this many days shows a "Follow up" chip. Default: 4.
No state change in this many days escalates to a "Review" chip. Default: 7.
Caps how many /api/media calls a single IP can make per minute. Each photo upload is 4 calls (thumbnail + original Γ 2 each); each video is 2 calls. Raise this for events where a host batch-uploads dozens of files. Default: 120 (β30 photos or 60 videos / min).
When ON, hosts can view recipients (up to 50) after a blast is sent.
SMS Kill Switch
When off, blast sends skip SMS entirely (emails still send). Use during a Twilio outage or before A2P 10DLC approval.
Resend (Email)
Transactional email provider. Keys show as β’β’β’β’β’β’β’β’ once saved. Open Resend dashboard β
Visible on the Twilio Console home page β under "Account Info" (click "Show" next to Auth Token). Note: Twilio recommends scoped API Keys instead of auth token for long-term use β see ui-tech-debt.md.
Starts with MG. Recommended for production β handles Advanced Opt-Out automatically. Messaging Services β
Used to verify /api/webhooks/twilio delivery callbacks. For Twilio this is the same as your Auth Token β paste it again here. Webhook security docs β
~1 week lead time. Submit brand (~$4 one-time) and campaign (~$10β15/mo) here: A2P 10DLC console β. Required info: legal business name, EIN, website, sample messages, screenshot of opt-in flow (the Hush subscribe modal qualifies).
Upstash QStash (Queue)
Background queue for chunked blast sends. Both keys support seamless rotation. Open QStash console β
Labeled QSTASH_NEXT_SIGNING_KEY in the same panel. Both keys are accepted while rotating. Set both, then drop the old one in a later save. Also: set QSTASH_TOKEN and QSTASH_URL as Vercel env vars (server-only, can't be UI-edited).
Calendly
What this does: when an applicant books a call on your Calendly, the matching gathering request automatically moves to Call Scheduled (matched by the email they booked with). Bookings that don't match an open request appear in the Unmatched tab on the Gathering Requests page for manual review.
Setup (one time):
1. In Calendly: Integrations β API & webhooks β β create a Personal access token and paste it below.
2. Click Save (bottom of this page).
3. Click Create webhook β it registers our endpoint with Calendly and stores the signing key automatically. You don't manage the signing key by hand.
From Calendly β Integrations β API & webhooks β Personal access tokens. Stored encrypted; shown masked after saving.
Not set up yet.
How it triggers + testing: the webhook fires the moment anyone schedules on your Calendly (event type invitee.created) β no action needed on your side. To test: book a real (or test) Calendly slot using the same email as an open gathering request, then open that request β its stage should read Call Scheduled with a "via Calendly" note in its Activity. Booking with a different email lands it in the Unmatched tab instead.
Legal pages
Edit the four agreement pages used by the Host Invitation Acceptance gate (Terms, Host Agreement, Co-Host) and the public RSVP form (Guest Terms). The Save legal pages button below saves everything in this section β the bottom "Save Integrations" button also covers it.
Terms of Service (host acceptance Box 1)
Host Agreement (host acceptance Box 2)
Co-Host Safety Commitment (host acceptance Box 3)
Guest Terms & Community Guidelines (public RSVP)
Privacy Policy (public reader)
Comma-separated. Fires a plain-text "Host accepted" email to each address whenever a host completes the acceptance flow. Leave blank to skip.
Saved!
Trello
Inbound gathering requests fire a card into the Trello board via its email-to-board address. No API integration β Trello accepts emails as cards and the inbound address itself routes the card to the right board and list. Find the address in Trello at Board β Show menu β More β Email-to-board settings.
Sends a small test email to the address above using the same From headers as a real gathering request. Cards typically appear in Trello within 30β60 seconds. If nothing arrives, the most common cause is the Resend From address not matching an email registered on your Trello account β Trello drops cards from unknown senders.
Gathering request notifications
Team members who get an email each time a new gathering request lands. One address per line. Defaults to hello@hushhushcoffee.com if you clear all lines.
Saved!
Email & SMS Templates
Edit every transactional email and SMS here. Saving on this tab only touches email content β it can't change your API keys or other integration settings. Test sends go to the Diagnostics test email set in the Integrations tab.
Message Templates
Variables available: {{host_name}}, {{subscriber_name}}, {{event_date}}, {{event_url}}, {{rsvp_link}}, {{manage_invites_url}}. Preview renders your current (unsaved) draft with sample values. Send test to me emails the last saved version to your Diagnostics test address β Save first to test edits.
Invite email
Invite SMS
Keep under 160 chars to fit a single SMS segment.
Subscribe modal β SMS consent
Shown on the public gathering subscribe modal when someone types a phone number. Token: {{host_name}}. Leave blank to use the default copy.
Cancellation email
Cancellation SMS
Subscribe confirmation email
New-subscriber notification email (to host)
Sent to a gathering's notification email when a new follower subscribes (only if that gathering opted in). Tokens: {{subscriber_name}}{{subscriber_email_masked}}{{chapter_name}}{{subscriber_count}}{{profile_url}}. (The {{chapter_name}} token name stays so existing saved templates still work.) Leave blank to use the default copy.
Show default template
Playbook review email (to applicant)
Sent to a gathering applicant when you tap "Send playbook for review" on their request. Tokens: {{name}}{{city}}{{state}}. Leave blank to use the default copy.
Show default template
Gathering welcome email (to new host)
Sent when you tap "Create Gathering & Send Email" converting a request. Includes login details. Tokens: {{chapter_name}}{{host_name}}{{host_code}}{{password}}{{login_url}}. (The token names stay "chapter_*" so existing saved templates still work.) Leave blank to use the default copy (which also notes they can change the gathering/host names later).
Show default template
Response Status β Accepted email
Sent when admin sets a gathering request's Response Status to Accepted. Tokens: {{first_name}}{{name}}{{city}}{{state}}{{personalized_message}}. Leave blank to use the default.
Show default template
Response Status β Declined email
Sent when admin sets a gathering request's Response Status to Declined. Tokens: {{first_name}}{{name}}{{city}}{{state}}{{personalized_message}}. Leave blank to use the default.
Show default template
Response Status β Waitlist email
Sent when admin sets a gathering request's Response Status to Waitlist. Default body includes the Sunrise Kit URL β edit the body to change it. Tokens: {{first_name}}{{name}}{{city}}{{state}}{{personalized_message}}. Leave blank to use the default.
Show default template
Response Status β Request Call email
Sent when admin sets a gathering request's Response Status to Request Call. Tokens: {{first_name}}{{name}}{{city}}{{state}}{{personalized_message}}. Leave blank to use the default.
Stored separately from the templates above β saved with its own button below.
The auto-reply sent to someone right after they submit the "Start a gathering" form. Leave blank to use the built-in default. Placeholders you can use in the subject or body: {name}{city}{state}{event_size}{nerd_level}{from_name}.