Email

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.

#EmailTriggerGoes toSubjectCarries
1Sign-in linkA member asks for a login link at /loginThat memberYour HyphaHypha sign-in linka magic link, valid 15 minutes
2InviteA 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
3Connect introA member connects two existing peopleBoth people{connector} thinks you should meet {other}the reason + a /reach/{id} link
4RequestSomeone asks for your timeThe target{actor} would like {hours}h of your timethe proposed times, as accept/decline links
5Accepted (×2)The target accepts a requestThe requester and the target{target} accepted — {time} / You accepted {requester} — {time}an .ics invite + the now-revealed contact details
6DeclinedThe target declinesThe requester{target} can't make it this time
7Weekly digestCron, every Monday 09:00 UTCEveryoneHyphaHypha — this week's open invitationswho's currently in debt (or "all squared up"), plus open ISOs and upcoming meetings in channels you follow
8ISO replySomeone replies to your ISOThe asker{replier} replied to your ISOthe reply + a link to the thread; Reply-To is the replier
9Flagged as helpfulAn asker closes their ISO flagging your replyThe helper{asker} flagged your reply as the one that helpeda thank-you + the thread link
10Gig replyA member replies to your gig or bountyThe poster{member} replied to your {gig/bounty}: {title}their message, with Reply-To set to the applicant
11Webhook failingYour webhook keeps failing deliveriesThe webhook's ownerYour webhook has been failing since {when}which URL is failing + a pointer to Settings; sent once per outage
12Meeting cancelledA host closes their meeting before it startsEveryone 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 link

There 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.

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 variant You'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.

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.

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 time

This is the ask. A member wants some of your hours and proposes one or more times to do it.

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.

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 time

A gentle no. If the target declines, the requester hears about it without any fuss.

7. The Monday digest

Subject: HyphaHypha — this week's open invitations

The weekly heartbeat. Every Monday at 09:00 UTC, a cron fires and one quiet email goes to everyone.

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 ISO

You asked the circle for something; someone answered. This is the nudge that keeps the thread alive — a reply shouldn't land in silence.

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 helped

The payoff of the whole loop. When an asker closes their ISO and flags your reply as the one that helped, you hear about it.

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.

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.

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.

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.