Publishing in the calendar
Monasteries, lineages and Dharma centres already in the calendar can publish their own events, anniversaries of masters and lineage days, and daily words in it. All it takes is one file in a simple format. You can fill it in by hand from the template, check it on this site and send it by email; an AI helper is entirely optional.
Who can publish
Communities that are already in the calendar. The editor gives each community its id — a short name in Latin letters, written in the field source. If your community is not in the calendar yet, apply first.
What you can publish
- Events — drubchens, retreats, seminars, teachings, pujas: dates, times, place, a short text and a link.
- Anniversaries of masters and lineage days. You give them once, by Tibetan date — month and day — and they recur every year: the calendar works out the western date itself.
- Daily words — a quote, an instruction or a reminder, on a given date or every year on a Tibetan date. A quote always names its source. There can be many of them, even one every day, but no more than three on one date.
Any entry may carry one picture, with your confirmation of the rights and a credit line.
The rules
The calendar exists for practice, so the rules are simple and strict:
- Only authentic Dharma content: practice, teaching, the life of the community.
- No advertising, prices, sales, requests for donations or sponsorship, politics, criticism of other teachers or traditions, or promises of healing.
- Nothing invented: no dates, biographies, quotes, attributions or titles.
- Every quote names its author, and the book and translator when there are any.
- Your own texts in your own languages. We never machine-translate; a machine translation you made yourselves is published only if the editor approves it.
- No private contact details in public texts.
Tibetan dates
Give the month and day as your lineage keeps them. We work out the western date every year ourselves, by the Phugpa (Men-Tsee-Khang) reckoning, as for the whole calendar: a skipped day’s observance moves to the next day, and of a doubled day the first is kept.
Sometimes a month is doubled. For such a year, say in leapMonth which half your community keeps: first — the first half (the default), second — the second, both — both.
Do not convert a Tibetan date into a western one, and do not add a year — neither for anniversaries nor for yearly entries. The checker shows which days they fall on in the coming years.
If your lineage follows another almanac (Tsurphu, for example), publish those days as events with dates.
Losar, the four Düchen, Guru Rinpoche days, full and new moons are already in the calendar: do not add them as anniversaries, even when your community calls such a day a lineage day. Publish what the community does on it as an event or a yearly daily word.
A practice the community keeps every month on a lunar day (every full moon, say) is either events, one per date, with the dates from your almanac, or twelve yearly daily words — months 1 to 12, the same day — each with leapMonth: both, so that in a doubled month it appears in both halves.
The file, step by step
The file is JSON in UTF-8, up to 2 MB. Name it id-date.json, for example example-2026-11-02.json. It may hold no fields that are not in the format: most of them would be typos, and what they hold would be lost without anyone noticing.
Public texts are written by language: { "en": "…", "uk": "…" }. Every language of a text must be in languages or machineTranslated, and the entry’s own language is required. Plain text only, no HTML.
The easiest start is the template, template.v1.json: it has one entry of each kind, and everything you need to replace begins with REPLACE:. Replace the sample values too — your-community-id, you@example.org, the https://example.org/… addresses, your-picture.jpg; the template’s dates, times and Tibetan month and day are only examples. The checker catches REPLACE: and these samples, but not the dates: check those yourself.
The file as a whole
| Field | Required | What it is | Limit · Example |
|---|---|---|---|
$schema | Required: no | The schema’s address: with it, a code editor checks the file as you type. | "https://…/schema.v1.json" |
format | Required: yes | Always exactly this text. | "firstbuddha-sangha-contribution" |
version | Required: yes | The version of the format. | 1 |
source | Required: yes | Your community’s id, as the editor gave it. | a–z 0–9 -, 2–32"example" |
community | Required: no | The community’s name and website — for the editor. | name ≤ 120{ "name": "…", "website": "https://…" } |
contact | Required: yes | Who is sending: name, email, role. Never published. | name ≤ 120 · email ≤ 254 · role ≤ 80{ "name": "…", "email": "…", "role": "…" } |
confirm | Required: yes | Both true: you are authorised to speak for the community, and it has the right to publish these texts and pictures. | { "authorised": true, "rights": true } |
languages | Required: yes | The languages the community writes in itself; the first is the main one. | 1–8["en", "uk"] |
machineTranslated | Required: no | Languages that exist only as a machine translation you asked for. | ["ru"] |
zone | Required: if | The events’ time zone (an IANA name). Required when any event has times. | IANA"Europe/Kyiv" |
part | Required: no | The part’s number, when the file is split. | of ≤ 20{ "n": 1, "of": 2 } |
entries | Required: yes | The entries: events, anniversaries, daily words. | ≤ 1000: event ≤ 300 · anniversary ≤ 100 · note ≤ 800[ … ] |
{
"$schema": "https://www.firstbuddha.space/sangha/contribute/schema.v1.json",
"format": "firstbuddha-sangha-contribution",
"version": 1,
"source": "example",
"community": {
"name": "Example Dharma Centre",
"website": "https://example.org"
},
"contact": {
"name": "Name Surname",
"email": "office@example.org",
"role": "Secretary"
},
"confirm": {
"authorised": true,
"rights": true
},
"languages": [
"en",
"uk"
],
"zone": "Europe/Kyiv",
"entries": [ … ]
}Every entry (in the list entries)
| Field | Required | What it is | Limit · Example |
|---|---|---|---|
type | Required: yes | The kind of entry. | "event" · "anniversary" · "note" |
id | Required: yes | The entry’s id. Keep it the same when you send the file again. | a–z 0–9 -, ≤ 64"2026-tara-retreat" |
lang | Required: no | The language the entry was first written in; without it, the first of languages. | "en" |
url | Required: no | A link to the entry’s page. | https://, ≤ 2048"https://example.org/tara-2026" |
image | Required: no | One picture (see below). | { "file": "tara-retreat.jpg", … } |
Event — type: "event"
| Field | Required | What it is | Limit · Example |
|---|---|---|---|
kind | Required: yes | The kind of event (list below). | "ritual" |
title | Required: yes | The title. | ≤ 160{ "en": "Green Tara retreat" } |
subtitle | Required: no | A subtitle; only in languages the title has. | ≤ 200 |
summary | Required: no | In brief, a sentence or two. | ≤ 400 |
description | Required: no | A fuller description. Kept, but the app does not show it. | ≤ 3000 |
location | Required: no | Where exactly: hall, temple, town. | ≤ 200{ "en": "Main shrine hall" } |
zone | Required: no | Another time zone for this event. | IANA"Asia/Kathmandu" |
allDay | Required: yes | true — an all-day event, without times. | false |
startDate | Required: yes | The first day. | YYYY-MM-DD"2026-12-04" |
endDate | Required: no | The last day, inclusive; without it, the same as startDate. | YYYY-MM-DD"2026-12-06" |
startTime | Required: if | The start time; required when allDay is false. | HH:MM"09:00" |
endTime | Required: no | The end time. | HH:MM"17:00" |
daily | Required: no | For an event with times over several days: true — a separate session each day from startTime to endTime. false — one continuous span from startTime on the first day to endTime on the last. Without daily the event is read as one span, so always give it for such events. | true |
videoUrl | Required: no | A link to a stream or a recording. | https:// |
registration | Required: no | required — registration is needed, none — it is not. | "required" |
status | Required: no | cancelled — the event is cancelled. | "cancelled" |
Kinds of event (kind):
teaching— Teachingsritual— Pujas and practicesmonastic— Monastic communitycourse— Coursesclass— Classescommunity— Community and serviceother— Other
{
"type": "event",
"id": "2026-tara-retreat",
"kind": "ritual",
"title": {
"en": "Green Tara retreat",
"uk": "Ретрит Зеленої Тари"
},
"summary": {
"en": "Three days of Tara practice with the resident lama.",
"uk": "Три дні практики Тари з ламою громади."
},
"location": {
"en": "Main shrine hall",
"uk": "Головна святиня"
},
"allDay": false,
"startDate": "2026-12-04",
"endDate": "2026-12-06",
"startTime": "09:00",
"endTime": "17:00",
"daily": true,
"registration": "required",
"url": "https://example.org/tara-2026",
"image": {
"file": "tara-retreat.jpg",
"credit": "Photo: Example Dharma Centre",
"rightsConfirmed": true,
"alt": {
"en": "Statue of Green Tara on the shrine",
"uk": "Статуя Зеленої Тари на вівтарі"
}
}
}Anniversary — type: "anniversary"
| Field | Required | What it is | Limit · Example |
|---|---|---|---|
title | Required: yes | The title. | ≤ 160{ "en": "Lineage day" } |
subtitle | Required: no | A subtitle; only in languages the title has. | ≤ 200 |
summary | Required: no | In brief, a sentence or two. | ≤ 400 |
tibetan | Required: yes | Tibetan month and day; leapMonth — first, second or both. | month 1–12 · day 1–30{ "month": 3, "day": 10 } |
{
"type": "anniversary",
"id": "founding-teacher-parinirvana",
"title": {
"en": "Parinirvana of our founding teacher",
"uk": "Паринірвана засновника громади"
},
"tibetan": {
"month": 3,
"day": 10
}
}Daily words — type: "note"
| Field | Required | What it is | Limit · Example |
|---|---|---|---|
kind | Required: yes | quote, instruction or reminder. | "quote" |
title | Required: no | A heading. | ≤ 120 |
text | Required: yes | The text itself; line breaks (verse) are kept. | ≤ 600 |
attribution | Required: if | The source: author (required for a quote), work, ref — page or chapter, translator. | author ≤ 120 · work ≤ 200 · ref ≤ 80 · translator ≤ 120{ "author": { "en": "…" }, "ref": "p. 12" } |
date | Required: one of two | Once, on this date. At most three daily words on one date. | YYYY-MM-DD"2026-12-01" |
tibetan | Required: one of two | Every year, on this Tibetan date. | month 1–12 · day 1–30{ "month": 9, "day": 15 } |
{
"type": "note",
"id": "2026-12-01-quote",
"kind": "quote",
"date": "2026-12-01",
"text": {
"en": "The words of the quote, exactly as they are published.",
"uk": "Слова цитати — так, як їх надруковано."
},
"attribution": {
"author": {
"en": "Name of the teacher",
"uk": "Імʼя вчителя"
},
"work": {
"en": "Title of the book",
"uk": "Назва книжки"
},
"ref": "p. 12"
}
}Picture — image
| Field | Required | What it is | Limit · Example |
|---|---|---|---|
file | Required: one of two | The name of the picture file you attach to the email. Latin letters, digits, dot, hyphen and underscore only, no spaces: tara-retreat.jpg. | .jpg .jpeg .png .webp .heic"tara-retreat.jpg" |
url | Required: one of two | Or the address of a picture already published for your community. | https://www.firstbuddha.space/media/sangha/… |
credit | Required: yes | The credit line: who made it. | ≤ 120"Photo: Example Dharma Centre" |
rightsConfirmed | Required: yes | true — you have the right to publish this picture. | true |
alt | Required: no | What the picture shows, for readers who cannot see it. | ≤ 200{ "en": "…" } |
{
"file": "tara-retreat.jpg",
"credit": "Photo: Example Dharma Centre",
"rightsConfirmed": true,
"alt": {
"en": "Statue of Green Tara on the shrine",
"uk": "Статуя Зеленої Тари на вівтарі"
}
}Time zone
Event times are the community’s local time. Give its zone in zone as an IANA name: Europe/London, Asia/Kathmandu, America/New_York. Readers in other zones see the event in their own time.
Ids
An entry’s id stays the same when you send the file again: that is how the calendar knows it is the same entry, changed, and not a new one. Write it in lower-case Latin letters, digits and hyphens: 2026-tara-retreat, tulku-urgyen-parinirvana. 1 to 64 characters, no hyphen at the start or the end; each id only once in the whole file, across events, anniversaries and daily words.
A file replaces everything before it
Every file is a complete snapshot. It replaces everything the community sent before: entries missing from the new file disappear from the calendar.
Parts
A file that is too long (hundreds of daily words, say) can be split into parts, up to 20. Each part is a complete, valid file with the same source, contact, confirm, languages, machineTranslated and zone, and the field part: { "n": 1, "of": 3 }. Send all the parts together.
Regular classes
List regular classes as separate events, one per date — up to 300 events. If the community keeps an iCal or Google calendar, it is better to give us its address.
Different times on different days
If the days of an event have different times (Saturday 10:00–18:00, Sunday 10:00–14:00), make one entry per day with the same title, or one span from the first start to the last end (daily: false). Do not pick one time for all the days.
Pictures
Only photos you took yourselves or have written permission to publish. For each picture, confirm the rights (rightsConfirmed: true) and give a credit line (credit).
JPEG, PNG, WebP or HEIC, up to 10 MB each, the long edge at least 600 pixels (1200 or more is better). Up to 60 pictures in one submission. Name the files in Latin letters, digits, dots, hyphens and underscores, without spaces (tara-retreat.jpg); rename any other file before sending it.
We remove the photo’s hidden data (location, camera), resize it, and publish it with your credit.
Downloads
The same files for every language:
- Template — a file to fill in
template.v1.json - Example — a filled-in file of a fictional community
example.v1.json - JSON Schema — for code editors and automatic checks
schema.v1.json
AI helper (optional)
If the material already exists — a schedule as a PDF, posts, tables, a list of quotes — an AI helper can turn it into such a file. It is only a convenience: everything above works without it.
The helper asks clarifying questions (time zone, languages, Tibetan or western date, rights to pictures, sources of quotes), reminds you of the rules, and gives one file in our format with a list of pictures. It sends nothing itself: you check the file and send it. Its instructions are in English, but it speaks to you in your language.
- Claude — skill (zip)
- In Claude’s settings (Capabilities → Skills), upload the zip, then ask Claude to prepare a file for Buddhist Calendar.
- ChatGPT — instructions
- Create your own GPT or a project, paste the instructions and add the three files below as knowledge.
- Gemini — instructions
- Create a Gem, paste the instructions and add the same three files.
- A prompt for any chatbot
- Paste it into a chat together with your material.
Files for the helper:
Check, then send
- Check the file on the checking page. The file never leaves your browser.
- Email the file (all its parts) and the pictures to burners.reissue3b@icloud.com with the subject
Sangha file: <id>. If the pictures do not fit into one email, send several with the same subject. - The editor reads every file. What is approved appears in the calendar with the next update of the site; what is not approved is never published.
- To change what is published, download your current file from
https://www.firstbuddha.space/api/sangha/v1/<id>/contribution.json, edit it, add contact again and send it.
Privacy
The contact details in the file (contact) are used only to reply and are removed before anything is published. Everything else in the file becomes public.
