For developers

OSChapel is one Cloudflare Worker in plain JavaScript with server-rendered HTML, backed by Cloudflare D1. Pages run no script except the passkey script on the sign-in and account pages. The source, tests and install steps are in the repository.

Open data on every congregation's site

FeedAddressWhat's in it
Events/events.jsonThe congregation, links to the other feeds, and upcoming events with local dates and times, offsets, calendar, whether everyone is welcome, room, organizer, cost, whether cancelled, and each one's record. ?open=1 lists only events everyone is welcome to; ?calendar= one calendar
schema.org/events.jsonldEvents everyone is welcome to, as schema.org Event at a PlaceOfWorship
Congregation/congregation.jsonAddress, contact, time zone, services and groups (how they repeat), rooms with use fees, accessibility details, the request address
Calendars/events.ics, /calendar/<slug>.ics, /services.icsCalendar subscriptions: every event and every date of each service and group, one calendar's, or the services for the next eight weeks; cancelled dates stay, marked
News/feed.xmlRSS of upcoming events everyone is welcome to
Search enginesschema.org on pages, /sitemap.xml, /robots.txt, /llms.txtEvent and PlaceOfWorship with accessibility features, for events everyone is welcome to
Records/v1/records.jsonEvery published version of each event and of the congregation, with its provenance, under a Merkle root

Every feed carries its provenance

The feeds and public pages are read from OSCivic core's keeper, not from the tables staff edit. Each event, service, group and the congregation carry a record: its id, source, hash, when it became public and what it replaces. An event's date, times, room, cost, cancellation and who is welcome; a service or group's rule, dates, times, changed dates and room; the congregation's address, contact and accessibility details; and each room's name, capacity, access and use fee, are relied-upon facts: changing one on something published needs a reason, and the reason and each change (from and to) are published with it. Titles and descriptions are stamped but need no reason. Drafts are never kept.

All feeds send Access-Control-Allow-Origin: *. None carries a requester's contact details or group. The README shows an example of events.json.

How it's checked

Every push runs the unit tests, then a walk-through of what a visitor, a requester and staff do, with axe-core WCAG 2.1 AA checks at desktop and phone width. After each deploy and every night, the walk-through runs against the Glimmer Community Chapel demo; a failure opens an issue.

Run it on your computer

Node.js 22: clone the repository (or download the source), then npm test, and follow "Run it on your computer" in the README to start a local copy with demo data.

Contributing

Pull requests are welcome. Database migrations only add; code more than one OSCivic project needs goes into OSCivic core first; every bug fix adds a test. See CONTRIBUTING.md.