Definition, pinned to one artifact

Define accountability partner: not a promise, a recurring Meet URL

The SERP gives you a sentence about a person who supports you. That is a role description. On this site the term resolves to an artifact: one permanent Google Meet URL, created once with RRULE:FREQ=DAILY, tracked per-person, kept alive by clicks. The URL is the relation.

M
Matthew Diakonov
8 min read
4.9from direct meditator feedback
Every claim pinned to a file path and line number in this repo
No operational practice instruction, nothing that touches technique
Free in the dana tradition, the artifact is thinner than a coaching contract

The definition, in four numbers

A role description cannot be a count. An artifact can. The partnership, in this product, resolves to a small handful of integers that the database can verify.

0Meet URL per pair, ever
0token rows per pair in meet_links
0source files where the definition lives
0 daysto confirm or the artifact is never created

The five files are src/lib/google-meet.ts, src/app/api/confirm-match/route.ts, src/app/meet/[token]/route.ts, src/app/api/expire-matches/route.ts, and src/lib/emails.ts.

What the top ten SERP results actually define

I opened the first page of results for define accountability partner and read each article. Wikipedia, BetterUp, Columbia GSAS, WGU, Indeed, Accountable2You, Flow Club, Psychology Today, Duke Recreation. Different names, one shape. The shape is: a human who checks in on your progress. That shape is true and also complete in the way a dictionary entry is complete. It is not useful to a matcher. It does not produce a row. It does not create an event. It is not a predicate. It is a paragraph.

This page starts somewhere else. If the relation really exists, there must be something in the world the relation is about. Not only the feeling, but a thing that either exists or does not. On this site the thing is a Meet URL with a daily recurrence rule, and everything else (the check-ins, the support, the accountability itself) is what happens on top of that URL when two humans agree to keep opening it.

The artifact in one diagram

Two waitlist entries enter on the left. One hub in the middle, the URL allocation call. Three artifacts come out on the right: the calendar event, the two per-person tokens, and the first click row in meet_clicks. After this sequence runs once, the partnership exists. Before it runs, it does not, even if both humans have been thinking about sitting together for weeks.

confirm-match/route.ts:59 to 109, in one picture

personA (confirmed)
personB (confirmed)
createMeetEvent()
Calendar event id
Two meet_links tokens
meet_clicks heartbeat

Parts of the artifact, separately

The partnership is not one object, it is a small cluster of them. Separating the pieces makes it easier to see that what the dictionary calls a single relation is actually six different things in the database, each doing one job.

The URL

A meet.google.com link allocated once by the Calendar API via conferenceDataVersion=1. Identical for both partners. Never rotates under normal operation.

The recurrence rule

recurrence: ['RRULE:FREQ=DAILY']. One line in google-meet.ts. Shortest human cadence that matches a sitting practice.

The token pair

Two rows in meet_links, one UUID each, both pointing at the same meet_url. Lets the product tell who opened the room without changing what the room is.

The heartbeat table

meet_clicks writes a row every time /meet/<token> is requested: token, match_id, person_id, meet_url, IP, user agent. Silence is how a dead partnership gets detected.

The calendar event id

Stored on the match row via updateMatchCalendarEvent. If Matt has to manually intervene on a pair, this is the handle he edits.

The email thread

Reply-all on the intro email is the comms channel. Both addresses are in replyTo, so either person's reply reaches both. The thread, not chat, is the conversation layer.

The one line that is the definition

If the page had to pin the whole argument to one line of code, it would be this one. Every other decision in the repo about what the partnership is flows from what this event object gets set to.

src/lib/google-meet.ts

The line recurrence: ["RRULE:FREQ=DAILY"] is what makes this a partnership rather than a one-off call. The line conferenceDataVersion=1 in the URL query string is what makes the returned event carry an auto-allocated meet.google.com URL rather than a generic calendar entry. Remove either line and the definition no longer holds.

How the heartbeat gets logged, in code

Every visible partnership has an invisible heartbeat. meet_clicks is it. Each time either partner clicks the tracking URL in their intro email, this route runs, writes one row, and then redirects. The redirect is why neither person notices the logging step.

src/app/meet/[token]/route.ts

Tokens that make the definition concrete

These are the actual symbols the runtime uses to talk about the relation. Not one of them appears on any SERP page for this keyword. That is the gap the rest of this page is trying to close.

createMeetEvent()RRULE:FREQ=DAILYconferenceDataVersion=1meet_links.tokenmeet_clicksmatch.calendar_event_idperson_a_confirmed && person_b_confirmedreplyTo: [personA.email, personB.email]event.recurrenceentryPoints.entryPointType === "video"

From two confirmations to one live URL, step by step

The ordering matters. Nothing about the URL is created until both partners click yes. After that, the sequence below runs once, in this order, inside one request to /api/confirm-match.

1

The matcher pairs two eligible humans (not the focus of this page)

At src/app/api/auto-match/route.ts, a 30-minute cron job filters waitlist entries by the seven pairing predicates and emits a confirming match. No URL has been created yet. See /t/accountability-partner-definition for the full predicate list.

2

Both sides click yes on the confirmation email

confirm-match/route.ts:57 calls confirmMatchPerson. Only when bothConfirmed flips true does the URL step run. Either yes without the other, or a no, and the artifact is never created.

3

createMeetEvent runs exactly once

src/app/api/confirm-match/route.ts:78 passes the pair's midpoint UTC time and a slug to createMeetEvent, which POSTs to the Google Calendar API with conferenceDataVersion=1 and recurrence set to RRULE:FREQ=DAILY. The response contains the Meet URL, one per pair.

4

Two per-person tokens are inserted into meet_links

confirm-match/route.ts:106-107 writes two rows to meet_links: each has the same match_id and meet_url, but a unique token. Each person's intro email points at /meet/<their own token>, so the room is shared, and the analytics are individual.

5

Both partners receive an intro email with the tracking URL

emails.ts:201 assembles the HTML body. The Join button href is the tracking URL from step 4, not the raw Meet URL. The email text is explicit: 'This link is permanent, use it every day, at any time.'

6

Every subsequent click is logged to meet_clicks

src/app/meet/[token]/route.ts:26 writes a row to meet_clicks with token, match_id, person_id, meet_url, IP, and user agent, then redirects to the real Meet URL. Two rows a day per pair is the ambient signal that the partnership is still alive.

The key numeric claim, spelled out

For every pair that ever exists on this product, the number of Meet URLs allocated is exactly 0. Not one per month, not one per calendar week, not one per calendar reset. One. The URL outlives the individual sits. It outlives the confirmation emails. If the two humans meditate together for 0 days, they use the same link on day 365 that they used on day one. That is what the word permanent in the intro email means. It is not marketing copy, it is the value that comes back from one call to the Google Calendar API with recurrence set to ["RRULE:FREQ=DAILY"].

SERP definition vs. artifact definition

FeatureTop 10 SERP result (role)vipassana.cool (artifact)
Primary definition formA sentence about a person.An artifact in the database (URL + calendar event + token rows).
Can a program create one automatically?Not specified.Yes. createMeetEvent in src/lib/google-meet.ts:53 does it.
Can a program tell if it is still alive?Not specified.Yes. meet_clicks table has one row per URL open, with IP and UA.
Does the artifact rotate or expire?Out of scope.No. Same URL for pair's entire lifetime. Recurrence is RRULE:FREQ=DAILY.
Is there a fee?Sometimes; coaching is named as a paid option.No fee, free in the dana tradition. The artifact is thinner than a coaching contract for that reason.
Where the definition physically livesWikipedia paragraph, BetterUp blog, Indeed article.Five source files on GitHub; the recurrence string is on one line.

Why the dana tradition forces this particular shape

The matching service here is free. Nobody is charged for being paired with a partner and nobody is paid to be one. The Goenka-tradition practice that the site orbits is taught in the same way, on a donation basis, by authorized assistant teachers at 10-day residential courses run through dhamma.org. That choice, applied to the matching product, has a side effect worth noticing. It rules out any definition of accountability partner that implies a fee, a scope of work, or a contracted deliverable. Coaching definitions do not fit. Therapy definitions do not fit. What fits is the thinnest possible object that still lets two people reliably open the same room at the same time, day after day, without anyone sending anyone a bill. A URL is that object.

To say this explicitly: anything that touches actual meditation technique, how to sit, how to work with a sensation, how to handle a difficult session, is not something this page will answer. Those questions go to dhamma.org and an authorized assistant teacher at a 10-day course. What this page answers is strictly the operational shape of the word partner as used by the matcher and the email pipeline.

A short summary for anyone skimming

  • Role definition, from the SERP: a person who helps you keep a commitment. True and unfalsifiable. A matcher cannot use it.
  • Artifact definition, from this site: the other human whose email is attached to a specific Google Calendar event with a permanent Meet URL and recurrence RRULE:FREQ=DAILY.
  • How it is created: once per pair, by createMeetEvent in src/lib/google-meet.ts, after both partners click yes on the confirmation email.
  • How it is tracked: two rows in meet_links, one per person, each with a unique token. Both tokens point at the same URL.
  • How it stays alive: every click to /meet/<token> writes one row to meet_clicks. Silence in that table is how the system notices a dead partnership.
  • How it ends: the URL stops being clicked, or the operator edits the calendar event, or someone unsubscribes. No URL event is a role description. Every URL event is a database row.

Want to see the artifact built against your own schedule?

Book a short call and we will walk through what a live pairing looks like, from the confirmation click to the first heartbeat in meet_clicks.

Frequently asked questions

In one sentence, how does this page define accountability partner?

An accountability partner, on vipassana.cool, is the other human whose email ends up attached to a specific Google Calendar event with a permanent Meet URL and a daily recurrence rule. The event is created exactly once per pairing by createMeetEvent in src/lib/google-meet.ts, with recurrence set to the string RRULE:FREQ=DAILY. The URL does not rotate, does not expire on a fixed schedule, and does not depend on either party remembering it. From the runtime's point of view, the partnership is that URL. Two people who share one are partners. Two people who do not, are not. Every other attribute the dictionary lists, trust, support, check-ins, is a downstream consequence of the URL being clicked on at the same time by two humans every day.

Why define it as an artifact instead of a role?

Because a role description is a description, not a predicate. When a program has to create, track, expire, or retire a partnership, it cannot operate on the sentence 'a person who supports your goals.' It has to operate on something in the database. In this code the smallest object that captures the relation is a row that ties two person ids to one Meet URL, plus a calendar event id, plus two per-person tracking tokens in the meet_links table. Defining the partnership as that artifact, not as a feeling, is what lets the system do any automated work about it. The role description is what people write in essays. The artifact is what a matcher, a calendar API, and a Postgres row all agree on.

What is the exact recurrence rule, and why daily?

src/lib/google-meet.ts line 75 sets recurrence to the one-element array ['RRULE:FREQ=DAILY']. That is the iCalendar recurrence rule for a daily-repeating event, with no end date. The Google Calendar API accepts it verbatim and clones the event on every future calendar day until someone deletes or edits it. The choice is deliberate. A weekly recurrence would produce a partnership that is a commitment you keep once a week, which is closer to a call than to a daily practice. A no-recurrence event is a one-time meeting, not a partnership. Daily is the shortest human cadence that matches a sitting practice, and it is also the cadence that lets the URL become background furniture, opened the same way you open a thermostat app.

How is the URL generated, and is it the same for both people?

The URL is generated by a POST to https://www.googleapis.com/calendar/v3/calendars/primary/events with conferenceDataVersion=1 (src/lib/google-meet.ts lines 86 to 96). The calendar API allocates a fresh meet.google.com conference code and returns it in result.conferenceData.entryPoints. That URL is identical for both halves of the pair. What differs per person is only the tracking wrapper. Confirm-match/route.ts lines 106 to 107 insert two rows into meet_links, one per person, each with its own UUID token. Each person's intro email points at /meet/<their-token>. The /meet/[token] route then looks up the meet_url and redirects to the same underlying meet.google.com link. The tracking is per-person. The room is shared.

What happens every time a partner opens the URL?

The /meet/[token] route, at src/app/meet/[token]/route.ts, looks up the token in meet_links, extracts the meet_url, writes one row to meet_clicks with the token, match_id, person_id, meet_url, request IP, and user agent (lines 26 to 29), then issues an HTTP redirect to the Meet URL. From the meditator's point of view nothing visible happens, they just land inside Google Meet. From the database's point of view a heartbeat just occurred. meet_clicks is how the system knows the partnership is still alive. Two rows a day, roughly at the same time, at the same token pair, mean two humans are still opening the same link. Silence in that table for long enough is what lets anyone looking at the admin dashboard see that a partnership quietly stopped, without anyone announcing it.

Does the URL ever change?

No, not under normal operation. The URL is written into meet_links once during confirm-match, and subsequent intro emails reuse the same value. The calendar event carries the same conference entry for every instance of the RRULE:FREQ=DAILY recurrence, so the URL you clicked on day 1 is the URL you click on day 400. The only way the URL changes is if Matt (as the operator) manually edits the calendar event or deletes it and recreates one, and that happens only in a recovery scenario. Link permanence is a design choice. Rotating the URL would be a security answer to a problem the product does not have, at the cost of breaking the one habit the product exists to build.

Is a Meet URL enough, by itself, to make two people accountability partners?

No, it is the artifact that is necessary but not sufficient. Before the URL is created, seven predicates in the matcher have to pass (see /t/accountability-partner-definition for the full list). The URL is the object the matcher produces after both people click 'yes' on the confirmation email. So the full picture is: the matcher's seven predicates define who is eligible to be partnered, and the URL is what turns a would-be pair into an actual pair the moment both confirmations land. This page is about the second half, the artifact; the sister page is about the first half, the predicate.

How is this different from a coach, a mentor, or a therapist?

By the artifact. A coach has a contract, a fee schedule, a stated scope of work, and an office. A therapist has a license, a calendar in a practice-management system, and a billing code. An accountability partner on this site has none of those. The only formal document that exists is a Google Calendar event id, its one attached Meet URL, a row in a matches table, and a token-linked meet_clicks log. There is no bill. There is no session note. There is no intake form beyond the waitlist. The relation is, deliberately, as thin as it can be and still be automatable. That thinness is what keeps the whole thing free in the dana tradition that the site follows, which is a meaningful constraint the SERP definitions do not notice.

What makes a partnership end, given this definition?

Given the definition-as-artifact, a partnership ends when the artifact ceases to be operative. That happens in one of four ways. One, both people stop clicking the /meet/<token> URLs, the meet_clicks table goes quiet, and neither party asks for a new match; the calendar event keeps firing invites but the room stays empty. Two, the operator deletes or edits the calendar event, which breaks the link for everyone. Three, the confirming state times out before both sides click yes; expire-matches/route.ts removes the match after three days of silence, which means the URL was never created in the first place. Four, one person unsubscribes, which does not delete the URL but does remove them from the matcher's eligible pool and puts their partner back on the waitlist for a replacement. Note that nothing in this list is about feelings. A partnership ends when the artifact becomes inert.

Where can I verify every claim on this page in the source?

The repo is public. The file that defines the recurrence and the URL allocation is src/lib/google-meet.ts, in particular lines 53 to 114 (the createMeetEvent function) and line 75 (the RRULE:FREQ=DAILY string). The file that creates one URL per pair is src/app/api/confirm-match/route.ts, lines 73 to 101 (the Meet event call) and lines 104 to 109 (the per-person token inserts). The file that logs every URL click is src/app/meet/[token]/route.ts, lines 12 to 29. The file that defines the match lifecycle and the three-day confirmation timeout is src/app/api/expire-matches/route.ts. The matcher file that determines eligibility (but not the URL) is src/app/api/auto-match/route.ts. Between those five files every concrete claim this page makes is checkable in under a minute.

Related pages on the same topic

How did this page land for you?

React to reveal totals

Comments ()

Leave a comment to see what others are saying.

Public and anonymous. No signup.