HyphaHypha talks to you almost entirely by email. It is the notification layer, the login, and the calendar all at once — every nudge, every sign-in link, every booking lands in your inbox. There is no app to check and no dashboard you're expected to babysit. The web ledger is there when you want it, but email is how the circle reaches you.
All of it goes out natively over Cloudflare Email Sending — no third-party provider, no API keys, nothing to sign up for. Mail is built with mimetext and sent straight from the Worker. When a booking gets made, that email carries a real .ics calendar attachment, so the time drops into your calendar like any other invite.
At a glance
Here's the whole lifecycle in one place.
| # | Trigger | Goes to | Subject | Carries | |
|---|---|---|---|---|---|
| 1 | Sign-in link | A member asks for a login link at /login | That member | Your HyphaHypha sign-in link | a magic link, valid 15 minutes |
| 2 | Invite | A member invites a new person (or admin seeds one) | The invitee | {inviter} invited you to HyphaHypha (admin variant: You're invited to HyphaHypha) | a sign-in link |
| 3 | Connect intro | A member connects two existing people | Both people | {connector} thinks you should meet {other} | the reason + a /reach/{id} link |
| 4 | Request | Someone asks for your time | The target | {actor} would like {hours}h of your time | the proposed times, as accept/decline links |
| 5 | Accepted (×2) | The target accepts a request | The requester and the target | {target} accepted — {time} / You accepted {requester} — {time} | an .ics invite + the now-revealed contact details |
| 6 | Declined | The target declines | The requester | {target} can't make it this time | — |
| 7 | Weekly digest | Cron, every Monday 09:00 UTC | Everyone | HyphaHypha — this week's open invitations | who's currently in debt (or "all squared up"), plus open ISOs and upcoming meetings in channels you follow |
| 8 | ISO reply | Someone replies to your ISO | The asker | {replier} replied to your ISO | the reply + a link to the thread; Reply-To is the replier |
| 9 | Flagged as helpful | An asker closes their ISO flagging your reply | The helper | {asker} flagged your reply as the one that helped | a thank-you + the thread link |
| 10 | Gig reply | A member replies to your gig or bounty | The poster | {member} replied to your {gig/bounty}: {title} | their message, with Reply-To set to the applicant |
| 11 | Webhook failing | Your webhook keeps failing deliveries | The webhook's owner | Your webhook has been failing since {when} | which URL is failing + a pointer to Settings; sent once per outage |
| 12 | Meeting cancelled | A host closes their meeting before it starts | Everyone who added it to their calendar | {host} cancelled: {topic} — was {time} | what was cancelled and when it would have been |
The emails, one by one
1. Your sign-in link
Subject: Your HyphaHypha sign-in linkThere are no passwords here. When you go to /login and enter your email, HyphaHypha mints a magic link and sends it your way. Click it and you're in.
- Triggered by: you, asking for a link at
/login. - Goes to: you (only if your address belongs to an active member — the page stays politely vague either way, so it never reveals who is or isn't in the circle).
- Inside: a single link to
/auth/verify. It's good for 15 minutes — long enough to click, short enough to stay safe — and the email reminds you that if you didn't ask for it, you can ignore it. Once you click through, your signed-in session lasts 30 days, so you won't be asked to log in again for a while.
The very same machinery sends the welcome email below — same kind of magic link, different framing (and a more generous window, since a newcomer might not click right away).
2. You've been invited
Subject:{inviter} invited you to HyphaHypha(admin-seeded members get the variantYou're invited to HyphaHypha)
This is how a new node joins the circle. An existing member adds you, and you get a warm hello with a way in.
- Triggered by: a member inviting you, or an admin seeding you via
/admin/invite. - Goes to: you, the newcomer.
- Inside: "{inviter} added you to the circle", the story in brief — HyphaHypha connects people who already belong to different networks, and help is paid forward, not back (no money, just time) — what to do first (profile, @handle, ask someone for an hour), a welcome sign-in link, and a pointer to the Quickstart. The email says so itself: the link is good for 7 days — a roomier window than the everyday login link, so clicking it signs you straight in even if you take a day or two to notice.
Inviting isn't free for the inviter: it puts 0.5h of community obligation on their tab. Debt is the scoreboard of collaboration, and vouching for someone counts as reaching out. You, the newcomer, owe nothing.
3. Someone thinks you two should meet
Subject: {connector} thinks you should meet {other}Connecting is the friendly, no-strings introduction. One member links two others and says why. Both people get the same nudge from opposite ends.
- Triggered by: a member connecting two existing people.
- Goes to: both people. The connector steps back; they're not part of the relationship that follows.
- Inside: who connected you, the reason they gave, and a
/reach/{other-id}link to message the other person.
No debt changes hands — connecting is free. It just draws a dashed line on the graph and opens a door.
4. Someone would like your time
Subject: {actor} would like {hours}h of your timeThis is the ask. A member wants some of your hours and proposes one or more times to do it.
- Triggered by: a member requesting your time.
- Goes to: you, the target.
- Inside: how many hours, an optional note in their words, and a list of accept links — one per proposed time — plus a decline link. Each proposed time is shown in your own timezone, so there's no mental math to do. Picking a time is the whole interaction: it books the slot and shares contact details in one click. The email is plain about the deal: accepting means you give the hour; they receive it (and go into debt).
The accept and decline links are signed and expire after 14 days.
5. It's booked
Subject (to the requester):{target} accepted — {time}Subject (to the target):You accepted {requester} — {time}
An accept sends two emails — one to each person — because a booking is a two-sided thing.
- Triggered by: the target accepting a request at one of the proposed times.
- Goes to: the requester and the target, each getting their own copy.
- Inside: the booked time — shown in your own timezone — the hours, and — newly revealed — the other person's email (and phone, if they have one on file). Both copies carry a real
.icscalendar attachment (invite.ics), so the meeting lands in your calendar with both of you as attendees.
The requester's copy also does the bookkeeping out loud: "you received help, so you now owe {hours}h to the circle." That's the one rule in motion — receiving puts you in debt, and your debt makes your time claimable by the next person.
This is the only moment contact details come out. Until an accept, you can browse the circle, read what people help with, and ask for time without ever seeing anyone's email or phone. Privacy is the default; revealing is the exception, and it's always something you chose by accepting (or were already part of through a shared booking).
6. Not this time
Subject: {target} can't make it this timeA gentle no. If the target declines, the requester hears about it without any fuss.
- Triggered by: the target declining a request.
- Goes to: the requester.
- Inside: that the request was declined, for how many hours, and an encouragement to try someone else in the circle. No debt moves; nothing is revealed.
7. The Monday digest
Subject: HyphaHypha — this week's open invitationsThe weekly heartbeat. Every Monday at 09:00 UTC, a cron fires and one quiet email goes to everyone.
- Triggered by: the scheduled cron — no human in the loop.
- Goes to: every active member.
- Inside: a list of who's currently in debt, each with the line "their time is yours to claim." That's the nudge: someone owes the circle, so go reach out and claim an hour.
When nobody's in debt, the copy flips to the empty state: "Nobody is in debt right now — the circle is all squared up. Reach out and start something." A squared-up circle isn't a victory so much as a quiet invitation to begin again.
The digest also carries a short "open requests in channels you follow" section — a handful of recent ISOs from the channels and people you've subscribed to — and, when there are any, upcoming meetings in those same channels. It's the catch-up for members who don't run an agent: where an agent would pull the live feed, this brings the same thing to your inbox once a week. Each section only appears when there's something open to show, and links straight through to each thread. Posting an ISO or a meeting sends nobody an email; the board rides along on the existing Monday mail. (Replies, helpful flags, and cancellations are different — those do notify, see below.)
8. Someone replied to your ISO
Subject: {replier} replied to your ISOYou asked the circle for something; someone answered. This is the nudge that keeps the thread alive — a reply shouldn't land in silence.
- Triggered by: a member replying to your open ISO. (Not by you replying to your own thread — you were there.)
- Goes to: you, the asker.
- Inside: who replied, their reply in full, and a link to the thread so you can keep the conversation going — and, when you're sorted, close it and flag the reply that helped.
Reply-To is set to the replier, so hitting Reply in your mail client reaches them directly — same as a gig reply. This one is for plain ISOs only: gigs and bounties have no public thread, so a gig reply arrives as its own private email to the poster instead — never both.
9. You were the one who helped
Subject: {asker} flagged your reply as the one that helpedThe payoff of the whole loop. When an asker closes their ISO and flags your reply as the one that helped, you hear about it.
- Triggered by: the asker closing their ISO with your reply flagged as helpful.
- Goes to: you, the helper.
- Inside: a short thank-you — who you helped, a link to the (now closed) thread, and the note that this minted a trust edge on the graph pointing at you.
Closing without flagging anyone sends nothing, and flagging your own reply on your own ISO earns no email (and no trust edge) — you can't thank yourself.
10. Someone replied to your gig
Subject: {member} replied to your {gig|bounty}: {title}Gigs and bounties don't have a public thread — replies come to you privately, by email.
- Triggered by: a member replying to your open gig or bounty from its posting page.
- Goes to: you, the poster.
- Inside: their message, a link to their profile, and both email addresses spelled out. The email's Reply-To is set to the applicant, so hitting Reply starts a direct conversation with them — the exchange continues off-platform from there.
Nothing is stored on HyphaHypha: no debt moves, no thread is created. The only side effect is that your gig's activity clock is bumped, so an actively-applied-to gig stays on the board.
11. Your webhook has been failing
Subject: Your webhook has been failing since {when}The one email the machines' channel sends to a human. Webhooks push events to your agent's URL; if that endpoint stays down long enough — deliveries failing again and again across the retry sweep — HyphaHypha flags the webhook as failing and tells you so.
- Triggered by: sustained delivery failure to one of your registered webhooks.
- Goes to: you, the member who owns the webhook.
- Inside: which URL has been failing and since when, and a pointer to the Settings tab, where you can check it, replace it, or revoke it.
You get one email per outage, not a drip — the webhook stays registered and retries continue on the hourly sweep. Once a delivery succeeds again, the failing flag clears and the email re-arms, so a future outage will earn exactly one more.
12. That meeting is off
Subject: {host} cancelled: {topic} — was {time}Meetings are open hosted time, and adding one to your calendar is the informal "I'm in." If the host closes the meeting before it starts, that's a cancellation — and since HyphaHypha put the event on your calendar, it owes you the heads-up to take it off.
- Triggered by: the host closing their meeting before its start time. (Closing after it's happened is just archival — no email.)
- Goes to: everyone who added the meeting to their calendar. The host doesn't email themselves.
- Inside: who cancelled, the meeting's topic, and the time it would have happened — shown so you know exactly which calendar event to drop.
There's no email in the other direction: joining a meeting sends the host nothing — the quiet "on N calendars" count on the posting is the whole notification. Agents get the machine-readable version of a cancellation as a meeting.cancelled webhook event.