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, members notified, anchor invited
1
Welcome to Your Circle
→ all members
At matching · Automated at circle creation
Subject: 🌿 Your Metta Circle is ready
Contains: Circle theme, member bios, 3-call arc overview, gentle norms, what happens next.
Trigger: Admin sends welcome emails from dashboard.
2
Anchor Invitation
→ anchor only
Immediately after welcome emails
Subject: 🌿 Can You Hold Space?
Contains: What anchoring involves, circle members, link to space-holding guide, "I'm In" / "Not Now" buttons.
Sets expectations: "As people vote, you'll get notified with the running results. Once enough members align on a time, you'll review the results and close the poll."
If they decline: Admin gets "Anchor Declined" notification (see below).
2
Scheduling
Call 1 only — subsequent calls skip the poll
3
Circle Invitation + Scheduling Poll
→ all members
After anchor confirms · Automated on anchor click
Subject: Stewarding AI with Heart — Your Circle Begins
Contains: Circle theme, proposed times, "Choose My Times" button to scheduling poll.
Trigger: Anchor clicks "I'm In."
3b
Vote Update
→ anchor
Each time someone votes · Automated
Subject: Poll Update: [Name] responded to "[Theme]" (3/7)
Contains: Who just voted, running tally (responded/total), link to view full results.
Keeps the anchor in the loop as votes arrive — no need to check the poll page.
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 enough votes align · Automated poll monitor
Subject: A time is forming!
Contains: Winning time slot, vote counts, link to review & confirm.
Anchor action: Clicks to close poll → triggers Time Confirmed email.
Language: "You can close the poll now, or wait a bit more if you'd like to hear from a few more folks."
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: Sent to all members (including anchor) when the poll closes.
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.
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
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
Postcall Dashboard
→ anchor & members
Login-based page · /metta/?op=postcall&gid=XX
Not an email — a single adaptive page. All post-call emails link here.
Shows based on state:
RSVP section (if next event exists): Yes / Maybe / Can't make it
Feedback form (if not yet submitted): reflection, rating, private note
Feed link (if feedback done): link to circle's Pod group feed
Confirmation badge + thanks link (if RSVP'd): Zoom link, calendar
Anchor-only: Date picker appears when no next event exists yet.
Auth: Session-based login (backdoor links in emails).
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
→ pod feed + admin
~3 hours after call ends · Automated cron
Not an email — posted to the circle's Pod feed group.
Two parts: (1) Public circle reflection (posted to pod), (2) Private anchor mirror (admin only).
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:
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
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 March 2026 — circle completion notices