five precepts, as is_old_student Yes
Five precepts meditation practice: encoded as a boolean, sorted before the match
Most explainers on this topic define the five precepts, explain their role as a stabilizing ethical base, and stop there. That work is already done, repeatedly, across the tradition's best sites. This page covers the part those sites cannot: the one place in this repo where the precepts show up as a running piece of code. The form at src/components/waitlist-signup.tsx collects them as a boolean. The matcher at src/app/api/auto-match/route.ts reads that boolean as the second lexicographic sort key when pairing daily sitters. Nothing on this page teaches the precepts; it only reports where they live in the data model.
What the common explainers cover well
A careful reader can learn a lot from Spirit Rock, Insight Meditation Center, Tricycle, the Wikipedia article on the five precepts, Plum Village's Five Mindfulness Trainings, and Buddho.org. Those pages treat the precepts as an ethical foundation for meditation. Non-harming. Truthful speech. Non-stealing. Abstaining from sexual misconduct. Avoiding intoxicants that dull awareness. They describe the precepts as one of three legs of a stool, next to concentration and wisdom, and they do a good job of tracing how a mind that is not agitating itself with broken commitments sits more easily.
This page does not try to redo any of that. If you want the conceptual grounding, those pages are better placed to give it to you, and the tradition's authorized teachers better placed still. What this page has that those do not is a code path.
The field, in the form
The practice-buddy signup asks one question whose answer is the closest thing the schema has to a precepts column. The legend defines the semantics: Yes means one 10-day course completed, which is the event at which the precepts are formally administered in Pali. The column is a nullable string, not a checkbox array; the tradition is carried in by reference to the course, not reproduced in the form.
Two consequences. First, the site does not re-administer the precepts; the act of taking them stays at the course where it belongs. Second, the row cannot be audited by the operator for ongoing observance, because the schema does not carry the information and the operator is not the person for that job.
The field, in the sorter
Every 30 minutes the auto-match handler builds a list of viable session pairs and sorts them. There are four keys, evaluated in strict order. The second key is a boolean named bothOld whose input is the is_old_student column on both sides of the pair.
The ordering is not a value statement. A ready non-old-student outranks a pending old student because intent to sit right now is a stronger operational signal than credential, and the matcher is pairing daily sitters, not ranking meditators. But inside any readyScore tier, two rows that both came through a 10-day course sort ahead of a mixed pair. That is the only place the precepts touch the runtime.
Inputs, sorter, outputs
Five fields flow into one sorter, and four keys come out the other side. The precepts boolean is one of them. The diagram reads left to right; nothing on the left side is a quality of a person, and nothing on the right is a subjective judgment.
waitlist_entries columns -> auto-match sorter -> lexicographic keys
The pañcasila, in its original register
The five precepts are administered in Pali at the start of every course in this tradition. Quoting the formula is a linguistic note, not an instruction; the teacher on retreat is the person who puts each one into practice. The grid below is a reference, with each card noting what, if anything, the data model does with that particular precept.
panatipata veramani
Abstaining from destroying life. Spoken first in the Pali formula at Day 0 of a 10-day course. The corresponding row in this repo is an is_old_student Yes that cannot be set without that course event.
adinnadana veramani
Abstaining from taking what is not given. No additional column tracks this. The system trusts the formal commitment and nothing more.
kamesu micchacara veramani
Abstaining from sexual misconduct. Inside a course this is held as complete celibacy; in lay life the baseline softens to non-harming conduct. The schema does not distinguish either state.
musavada veramani
Abstaining from wrong speech. Not enforced or audited by the site. The operator has no way to verify self-reported field values, and does not try.
sura-meraya-majja-pamadatthana veramani
Abstaining from intoxicants that cause heedlessness. Day 10 discourses at courses frame the precepts as five legs of a stool; the matcher reduces the stool to one boolean for sorting, and points the reader at dhamma.org for everything else.
The precepts in the runtime, in four numbers
If the whole role of the five precepts inside this particular system collapses to integers, these are the four that survive. They are literal constants in the sorter, not rhetorical flourishes.
None of these numbers is tunable per user. They apply to the whole pool, every tick. The role of the precepts inside this system is narrow and deliberate; the product is not trying to be a moral authority. It is trying to put two people in a room together at 06:30 UTC on a Tuesday.
From the course to the match row
Eight steps from the Pali formula to a matches row. Every step is logistics, not technique; every step either happens off-site at a center or happens inside a file in this repo. None of them is an instruction about how to sit.
A 10-day course at dhamma.org
The teacher administers the five precepts in Pali on Day 0, before any instruction begins. This is the event the product treats as the canonical moment the precepts were taken. Nothing on this site substitutes for it.
The student completes the course
Day 11 departure. From that point on, the student is an 'old student' in the tradition's terminology. The commitment to the five precepts is part of what old-student status implies in lay life.
Signup on vipassana.cool
Back home, the student fills out the waitlist form at /practice-buddy. The radio group at waitlist-signup.tsx lines 263 to 285 asks 'Are you an old student?' and writes the answer to is_old_student.
A row is inserted
db.ts line 119 inserts the value along with timezone, session duration, frequency, and the rest. The column is a string ('Yes' or 'No'), not a boolean; the matcher coerces it later.
The cron runs at :00 or :30
Every 30 minutes, vercel.json triggers GET /api/auto-match. The handler loads the pool, filters by the 60-minute UTC window, and builds ScoredPair records for every viable pair.
bothOld is computed
Per pair, at lines 173 to 175. The flag is true only when both sa.person.is_old_student and sb.person.is_old_student equal the string 'Yes'. No partial credit, no weighting.
The sort fires
Lines 186 to 189. readyScore first, bothOld second, sessionMatch third, UTC diff fourth. Pairs where the precepts boolean is true for both sides move up inside any readyScore tier.
Two rows, one match
createMatch inserts a matches row. Two confirmation emails go out, a shared Meet URL gets generated on confirmation, and what the pair does with the precepts inside their sit is between them and a teacher.
Every token on this page you can grep
Read left to right. Each of these strings appears either in this repo, in the Pali formula, or in the tradition's external material. Any of them is a valid way to verify the claim that the precepts show up here exactly once and in exactly one role.
Common explainers vs. the matcher's view
| Feature | Common explainers (precepts as foundation) | vipassana.cool (precepts as boolean) |
|---|---|---|
| What the five precepts are | Ethical guidelines that create the conditions for deep meditation; precepts, concentration, wisdom as a three-legged stool. | A single boolean column on waitlist_entries.is_old_student, settable only via self-report of course completion. |
| Where the precepts live in the code | They do not. Explainer pages are not connected to a running system. | src/app/api/auto-match/route.ts lines 146 and 173 to 175. Also the form at waitlist-signup.tsx lines 263 to 285. |
| How precepts affect pairing | Not applicable; no pairing. | Second sort key after readyScore. Two old-student rows sort above a mixed pair at the same readyScore. |
| Verification model | Ethical exhortation; the reader verifies their own conduct. | None server-side. The course event is treated as sufficient evidence of formal commitment; there is no background check. |
| Who answers questions about the precepts | The article's author or the tradition the article represents. | An authorized assistant teacher at a 10-day course, reached via dhamma.org. The matcher does not teach. |
| What happens to non-old-student rows | Not applicable; every reader is treated the same. | Full participation. bothOld only breaks ties; it never gates admission to the pool. |
| Cost to participate | Reading time and attention. | A 2-minute form. Everything else is the cron's job, and the cron is free in the dana tradition the service orbits. |
“sa.person.is_old_student === 'Yes' && sb.person.is_old_student === 'Yes' — the only place in this repo where the five precepts participate in a comparison operator.”
src/app/api/auto-match/route.ts, lines 173 to 175
Where to go for what this page will not give you
Anything prescriptive about working with the precepts inside your own practice belongs with an authorized teacher at a 10-day course taught in the tradition of S.N. Goenka. That includes questions about what the precepts ask of a lay meditator between courses, about how the eight precepts taken during a course relate to the five held in daily life, and about what to do when a specific precept becomes difficult. Those questions have been answered for decades, by people qualified to answer them, inside a format specifically designed for them. Courses are free, run on donations, and are listed at dhamma.org.
What this page will give you is a faithful description of where the precepts show up in a narrow technical artifact: a sorter that pairs people who want to sit together daily. That is a legitimate and small role. Treating it as larger would overstate what this system does and understate what a course does.
The whole role, in two numbers
The precepts participate in the sort as key number 0 out of four, and they do it through exactly 0 comparison expression at route.ts line 174. Everything else about the five precepts lives at the course and at dhamma.org, not here.
Want to walk through what bothOld would look like for your sit?
Book a short call and we will open route.ts, look at where the precepts boolean would fire for your row, and talk through what the match row would carry, if anything, downstream.
Frequently asked questions
Why does this page not tell me how to use the five precepts in my own meditation?
Because anything operational about how to practice, including how to use the precepts as a support for daily sits, belongs inside a 10-day residential course with an authorized assistant teacher. The course is the place that formally administers the precepts in Pali, the teacher is the person who answers questions about working with them on the cushion, and dhamma.org is where you sign up. This page is a logistics and code note about how the precepts surface inside one peer-matching system. For anything prescriptive, go there, not here.
Where in this repo are the five precepts actually encoded?
As the is_old_student column on the waitlist_entries table. The form collects the value at src/components/waitlist-signup.tsx lines 263 to 285, where the legend reads 'Are you an old student?' and the helper text defines Yes as 'completed at least one 10-day course.' That completion is the moment the precepts were formally taken in the Goenka tradition, so the column is the closest thing the schema has to a precepts field. It is a boolean. The database does not track which precepts you follow or how well. It tracks only the fact that a course happened.
What does the matcher do with that boolean?
Lines 173 to 175 of src/app/api/auto-match/route.ts compute a bothOld flag that is true only when sa.person.is_old_student and sb.person.is_old_student are both the string 'Yes'. Lines 186 to 189 use that flag as the second key in a four-key lexicographic sort, after readyScore and before sessionMatch. The practical consequence: when two pairs both pass the 60-minute UTC window and both have the same readyScore, the pair where both sides have been through a 10-day course sorts first and gets written to the matches table first.
Does the matcher check whether a partner is actually keeping the precepts?
No. Nothing on the server side audits behavior. There is no ping asking if you drank last night or lied at work this morning. The boolean is self-reported at signup and never revisited. The system trusts the course event as sufficient evidence of formal commitment and leaves the ongoing observance, and any conversation about it, to the pair of humans in the match row and to the authorized teachers they learn from. A system that tried to police the precepts would need a tooling and relationship that Vipassana.cool does not have and does not want.
What exactly are the five precepts, as they come up at a Goenka course?
In the Pali formula that gets administered on Day 0, they are: panatipata veramani (abstain from destroying life), adinnadana veramani (abstain from taking what is not given), kamesu micchacara veramani (abstain from sexual misconduct, which during the course means any sexual activity), musavada veramani (abstain from wrong speech), and sura-meraya-majja-pamadatthana veramani (abstain from intoxicants that cause heedlessness). Eight precepts are taken by old students for the duration of a course, but the five are the baseline for lay life after the course. This page is quoting the formula, not teaching it; the teaching is done at the course itself.
Why does the sort key put readyScore above bothOld?
Because a row marked 'ready' has confirmed intent to sit right now, which is a stronger operational signal than a historical course completion. The matcher is trying to get two people to sit together in a specific 60-minute slot, not to rank meditators by credentials. A ready non-old-student and a pending old student produce a pair with readyScore 1 and bothOld false; two ready rows produce readyScore 2 and sort first even if one of them is not an old student. The precepts boolean breaks ties among people who are all trying to sit right now, not the other way around.
Can you sign up for the practice-buddy system without having taken the five precepts?
Yes. Nothing in src/app/api/auto-match/route.ts filters out rows where is_old_student is 'No'. A non-old-student row is fully eligible: it enters the pool after the 24-hour cool-off (lines 88 to 91), it is paired on identical rules, and it can end up in a match row with another non-old-student or with an old student. The only difference bothOld creates is priority inside a tie, never an admission gate. The product is a peer-matching utility, not a certification scheme.
Why this framing of the precepts, rather than the usual ethical-foundation framing most articles use?
Because the usual framing is already covered in great detail by Spirit Rock, Insight Meditation Center, the Wikipedia article, vipassana.com, and Plum Village's Five Mindfulness Trainings. Duplicating that content here would add nothing the reader cannot find elsewhere. The part that is genuinely unique to vipassana.cool is that the precepts show up at a specific file path as a specific column read by a specific sort key. That is the part this page is for. Everything else is a link away.
What happens if an old student and a non-old-student are paired?
Nothing different at runtime. The match row is written the same way, the confirmation emails are dispatched the same way, and the shared Meet URL is generated on the same schedule. The pair's readyScore and diff carried them to the top of the sort; the fact that one side has bothOld contribution and the other does not was a tie-breaker that did not fire. Inside the sit itself the pair negotiates whatever they negotiate. This site does not instruct either of them on how to hold the precepts during a sit and does not need to.
Where should I actually learn how the precepts function inside the practice?
At a 10-day course taught by an assistant teacher in the tradition of S.N. Goenka. Courses are free, run on donations, and are listed at dhamma.org. The teacher administers the precepts formally on Day 0, answers questions daily in the small-group interviews, and discusses their role in the nightly discourses. No article, including this one, substitutes for that. If you are already an old student and want to talk about what the precepts mean for a daily sit, talk to an assistant teacher at your nearest center, not to a matcher.
Comments (••)
Leave a comment to see what others are saying.Public and anonymous. No signup.