Metta Circles — Workflow Map

Click any email to see details. Filter by audience to focus on what matters to you.

All
Members
Anchor
Admin
Automated
Manual trigger
1
Formation
Circle is created, anchor invited first — members hear nothing until the anchor says yes
1
Anchor Invitation
→ anchor only
At circle creation (ingest) or from the circle page in /317/admin
Subject: 🌿 Can You Hold Space?
Contains: What anchoring involves, circle members, proposed times, "I'm In — Choose My Times" / "Not Now".
"I'm In" opens a form (nothing happens on the click itself): the anchor ticks the times they can make; members are only offered those. Or "None of these work" with a note → team alerted, circle waits.
No answer in 48h: the team is alerted (dashboard shows "Awaiting anchor · invited Nd ago" in red).
If they decline: Admin gets "Anchor Declined" notification (see below).
2
Welcome + Find a Time
→ all members
The moment the anchor confirms · Automated
Subject: 🌿 Your Metta Circle — "[Theme]" · find a time
One email, not two: circle theme, who's in it, 3-call arc, gentle norms and a personal "Choose My Times" button for the anchor's times. The anchor's copy says their availability is already in.
Trigger: Anchor submits the confirmation form. (The poll is created first, with the anchor pre-voted "yes".)
2
Scheduling
Call 1 only — subsequent calls skip the poll
3
Scheduling Poll (standalone)
→ all members
Only when a circle was already welcomed · or re-poll
Subject: 🌿 Find a Time — [Theme]
Normally not sent: the poll rides in the welcome (#2). This standalone invite goes out only for a circle welcomed earlier (older flow / repair), and for re-polls. Never to the anchor, who is pre-voted.
3b
Vote Update
→ anchor
Not sent for Metta polls (since Sep 2026)
Turned off for Metta Circles to cut email volume. The anchor's circle page shows who has voted and the best time so far; "A time is forming!" says when to act. (Still sent for other kinds of polls.)
4
Poll Reminder — 24h
→ non-responders
24h after poll invite · Automated cron
Subject: 📊 3 of 5 have responded
Contains: Social proof (X of Y responded), poll link.
5
Poll Reminder — 48h (Last Call)
→ non-responders
48h after poll invite · Automated cron
Subject: ⏰ Last call — your circle is almost scheduled
Contains: Urgency framing, poll link.
5a
Poll Quorum — "A time is forming!"
→ anchor
When a time has come together · Automated poll monitor (hourly)
Rule: the best slot (most yes + maybe; ties → more yes) has at least 3 (the circle's min_quorum), and one of: everyone has voted · the poll has been open 48h · 60%+ of the circle can make that slot.
Subject: A time is forming!
Contains: Recommended slot and why it's ready, every slot's tally, how many haven't voted, link to review & close.
At close: the close form says who the time leaves out, and warns if the anchor didn't say "yes" to it.
5b
Close Reminder — 24h
→ anchor
24h after quorum notification · Automated poll monitor
Subject: 🌿 Quick reminder to close the poll
Contains: Same time slot and vote tally, link to close. Gentle tone — "a time has formed… ready for you to confirm, or wait if you're expecting someone."
5c
Close Reminder — 48h
→ anchor
48h after quorum notification · Automated poll monitor
Subject: ⏰ Your circle is waiting
Contains: Same info, warmer tone — "your circle is waiting… the sooner you close it, the sooner people can put it on their calendars."
3
Pre-Call
Every call — RSVP, reminders, anchor briefings
6
Time Confirmed — Please RSVP
→ all members
Call 1: poll closes · Call 2/3: admin creates event
Subject: ✅ Saturday March 7, 9 AM PT
Contains: Date/time, RSVP button, call number.
Call 1: When the poll closes, everyone who voted yes on the chosen time is RSVP'd automatically and gets only the RSVP Confirmation (#7: Zoom link + calendar invite). Everyone else (maybe / no / didn't vote) gets this email.
Calls 2/3: Replaced by the Combined RSVP + Feedback Invite (step 11) — sent automatically when the anchor proposes a date and the event is auto-created. Links to the postcall dashboard page instead of a standalone RSVP page.
7
RSVP Confirmation + Zoom Link
→ each on RSVP
Immediately on RSVP click · Auto-accept
Subject: 🎉 You're confirmed
Contains: Zoom link, Meeting ID, calendar invite attachment.
7½
RSVP Nudge — 24h & 48h
→ non-RSVP'd members
24h and 48h after invite · Automated cron · Skips inactive members
Subject (24h): 🌿 RSVP reminder
Subject (48h): ⏰ Your circle meets soon
Contains: RSVP count (social proof), date/time, link to postcall dashboard page.
Calls 2/3: If member hasn't submitted feedback for the previous call, adds a nudge line: "You can also share your reflection."
Skips: Deactivated members, anchor (auto-RSVP'd), anyone who already RSVP'd.
8a
Anchor 24h Briefing
→ anchor only
~24 hours before call · Automated cron · catch-up if the time was set < 23h out
Catch-up: if the poll closes (or the call is created) less than 23 hours before the call, the briefing goes out on the next hourly run instead of being skipped, with the real timing in the subject ("Coming up in about 10 hours: …").
Subject: Tomorrow's circle: [event name]
Full briefing — no host link. Opening question, RSVP list (names), call-specific flow guide (varies for Call 1/2/3), gentle space-holding reminders.
"You are the host" callout tells anchor the Start Meeting link will arrive in a separate email ~2h before the call. Links to host dashboard (/metta/?op=zoom-help) for early access or testing.
Call 2: "Re-arrive", "What's been alive since last time?"
Call 3: "Gratitude round", "What will you carry forward?"
Why no host link: Zoom start_url tokens expire — sending at 24h creates stale links that confuse anchors searching Gmail later.
8b
Anchor Host Link Email
→ anchor only
2 hours before call · Automated cron · 1h safety net if cron missed 2h
Subject: Your host link — circle starts in 2 hours
THE host link email. Fresh start_url is regenerated from Zoom API (getMeeting()) right before sending — not a stored token from days ago.
Contains: "Your host link is ready" with Start Meeting button, updated RSVP list, opening question.
Fallbacks: Backup participant link ("join without host controls"), and "Link not working?" → host dashboard page (/metta/?op=zoom-help&eid=XX) where anchor can generate a fresh link on-demand, join as participant, or contact us.
1h window: Only fires if cron missed the 2h window — same content, same refresh.
9
Guest 2h Call Reminder
→ RSVP'd members
2 hours before call · Automated (event system)
Subject: ⏰ Starting in 2 hours
Contains: Zoom link, brief reminder. Sent by the standard event reminder system to RSVP'd attendees only.
✦ The call happens here — ~75 minutes of presence ✦
4
Post-Call
Anchor proposes next date, event auto-creates, members get combined invite
10a
Anchor Post-Call Email
→ anchor only
~1 hour after call ends · Automated cron
Subject: 🌿 How was your call?
Two CTAs:
• "Propose a Date" — urgent, within 30 min if possible. Links to postcall dashboard with date picker.
• "Share My Reflection" — no rush, 1–2 days. Same page, scrolls to feedback form.
Members get nothing yet — they wait for the combined invite after the anchor proposes a date.
If call 3 (last call): Only the reflection CTA shows (no next date to propose).
10b
Circle Page (anchor & member home)
→ anchor & members
Login-based page · /metta/?op=circle&gid=XX (also ?op=postcall)
One adaptive page per circle. All post-call emails link here; so do the anchor's confirmation page and welcome.
Anchor sees: "What's next" to-dos from the circle's state (confirm times → close the poll → host link → choose next date → reflection), amber/red when overdue; a members table (poll vote · RSVP · came to the last call · reflection); host link, poll results, feed, guides; and Send a note to your circle (signed with their name, one per day, shared limit with the team's 317 note).
Anchor also: "Anchor guide — 5 things to know"; Can't make this call? (reschedule · ask a circle member to hold it — they become a host and get the host link · other → team alerted with who's RSVP'd); full AI reflections for their circle; Across all circles — the latest anonymous summary a coordinator has shared.
Members see: one card — circle · next call · anchor · members · your next step — then RSVP for the next call, the feedback form, and the feed.
317 coordinators: the anchor's view, read-only ("Anchor's View" on the 317 circle page).
10c
Auto-Create Next Event
→ system
Triggered when anchor submits date via feedback · Automated
Fires inside saveFeedback() when the anchor submits a proposed date.
Creates: Event, Zoom link, RSVPs anchor, sets custom_options for reminders.
Admin gets: "[Auto-Created]" FYI email (not a manual action). If auto-create fails, falls back to "[Tech Action]" manual email with CLI command.
Replaces: The old manual admin step of running create-next-call.php from CLI.
A
Admin Feedback Digest
→ admins
Each time someone submits feedback · Automated
Contains: All reflections so far, ratings, private notes, who's still pending.
If anchor proposed a date: Shows "[Auto-Created]" confirmation with event ID and admin link. No CLI action needed.
✦
AI Transcript Reflection
→ anchor + team only
~3 hours after call ends · Automated cron · every call, including Call 3
Private email to this circle's anchor, and to the team. Not posted to any feed; members and other anchors never see it.
Three parts: (1) Circle reflection → anchor (on their circle page) + team, (2) How the space was held → team coordinators only, (3) Three highlights (What emerged · Key insight · Question we're carrying forward) → the anchor's email, with a link to the full reflection. The team sees everything on the 317 circle page.
Source: Zoom cloud recording VTT transcript → Claude Opus analysis.
5
Next Call Setup
Calls 2 & 3 — combined invite, reminder nudges to postcall page
11
Combined RSVP + Feedback Invite
→ non-anchor members
Automatically after anchor proposes date & event is created · Automated
Subject: 🌿 Going Deeper — "[Theme]" on Apr 5
Contains: Date/time of next call, single CTA: "RSVP & Share Your Reflection →"
Links to: Postcall dashboard page (/metta/?op=postcall&gid=XX).
Key change: Replaces the old separate RSVP email + separate feedback email. One email thread, one landing page for both actions.
Anchor is auto-RSVP'd when the event is created; gets a separate "Invites Sent" confirmation.
11b
Anchor: Invites Sent
→ anchor
Immediately after next call is created · Automated
Subject: 🌿 Your circle's next call is set
Contains: Date/time, who was invited, confirmation that anchor is already RSVP'd, link to the event page.
Purpose: Closes the anchor's feedback loop — "I proposed a date, the system set it up, and invites have gone out."
11c
RSVP Nudge — 24h & 48h + Feedback Nudge
→ non-RSVP'd members
24h and 48h after combined invite · Automated cron
Subject (24h): 🌿 RSVP reminder
Subject (48h): ⏰ Your circle meets soon
Links to: Postcall dashboard page (with backdoor login link).
Feedback piggybacking: If the member hasn't submitted feedback for the previous call, the nudge email adds a line: "You can also share your reflection from the last call."
Key insight: By linking both actions to the same page, the RSVP reminder infrastructure carries the feedback ask along with it.
11d
Pre-Call Check — T-2 Days
→ non-RSVP'd members
48 hours before call · Automated cron
Subject: 📅 Your circle meets in 2 days
Final safety net. Sent to anyone who still hasn't RSVP'd.
Links to: Postcall dashboard page — not directly to the Zoom link. Members must RSVP to get their Zoom link.
Page adapts: If member already submitted feedback, only RSVP section shows. If neither done, both show.
↩ Phases 3–4 repeat for Calls 2 and 3 (pre-call reminders → call → postcall dashboard → auto-create → combined invite)
6
Circle Complete
After Call 3 — completion email + feed post to all members
14
Your Circle Is Complete
→ all members
~1 hour after Call 3 ends · Automated cron
Subject: 🌿 Your circle is complete — "[Theme]"
Also: Same content posted to the circle's Pod group feed (as anchor).
Contains:
• Reflect on Call 3 button (members; the anchor has it in their post-call email) — the only feedback link members get for the last call
• As a group: Circle feed (backdoor link), Group chat (backdoor link)
• One-on-one: Circle members page with "open to contact" toggle (backdoor link)
• Pay it forward: Volunteer to anchor, StoryBooth, volunteer profile
Idempotency: metta_group.completion_sent_at prevents double-sends.
Template: metta/tpl/email_circle_complete.tpl
Manual trigger: manualSendCircleCompletion($groupId) via php hourly.php test
✦
Anytime Emails
Triggered by specific events, not the regular flow
A
Circle Note
→ all active members
Admin or anchor sends · Manual
Sent from: Admin circle detail page or anchor SSO page at /metta/?op=note.
Contains: Freeform message from admin or anchor to all circle members.
A
Re-Poll Request
→ anchor
Admin cancels poll · Manual trigger
Trigger: Admin clicks "Cancel Poll & Re-poll" on circle detail page.
Contains: Scheduling notes from previous poll, link to propose new times.
A
Step-Away Notification
→ admins
Member submits step-away form · Automated
Contains: Member name, reason (leaving, pausing, will miss next call), context message.
A
Anchor Declined
→ admins
Anchor clicks "Not Now" · Automated
Contains: Circle name, all member names/emails for reassignment.
A
Anchor Hasn’t Answered
→ admins
48h after a live anchor invitation, no reply · Automated poll monitor
Subject: ⏳ Anchor hasn’t answered — [Theme]
Contains: Who was invited and when, link to the circle. Sent once per invitation. Members haven’t heard anything yet.
A
Anchor Can’t Make the Times
→ admins
Anchor picks “None of these times work” on the confirmation form · Automated
Subject: ⚠️ Anchor can’t make the times — [Theme]
Contains: The proposed times, the anchor’s note, link to the circle. The circle stays waiting for its anchor.
A
Anchor Can’t Make Call N
→ admins (+ stand-in)
Anchor uses “Can’t make this call?” on the circle page · Automated
To the team: ⚠️ Anchor can’t make Call N — [Theme]: the anchor’s choice (reschedule / stand-in / other), their note, and who has RSVP’d.
To the stand-in (if the anchor asked someone in the circle): “Could you hold space for Call N?” with a short how-to and their host link. They’re made a host of that call and can say no by replying.
Nothing goes to the rest of the circle until the plan is clear.
A
Poll No-Match / Stalled
→ admins
All voted but no quorum, or 72h+ with low response · Automated poll monitor
Contains: Vote breakdown per slot, suggestion to re-poll or manually confirm.

"The whole of spiritual life is noble friendship."

View sample emails → · Updated September 2026 — Metta Circles 2.0 (anchor-first formation, auto-RSVP, circle page, attendance)