How it works
A folder in your cloud drive is the source of truth. Everything else is derived from it.
The problem this solves
Most churches already have their discipleship material written. It is sitting in a Drive folder, in Word files, organised by a volunteer who numbered them 01, 02, 03. What is missing is a way for anyone outside that folder to read it, search it, or adapt it — without asking the author to learn a publishing system.
So this platform does not ask you to move anything. You point it at the folder. It reads what is there, cleans up the formatting, and publishes it. When you edit the document on Saturday night, the page updates itself.
What happens to a document
- Download. Google Docs are exported as
.docxfirst, so uploaded Word files and native Docs go through exactly one parser. - Convert. The OOXML body becomes HTML. Word's named styles are mapped onto real heading tags, so Heading 2 becomes an
<h2>rather than a styled paragraph. - Sanitise. A strict allowlist keeps headings, lists, tables, blockquotes, links, and emphasis. It discards inline fonts, proprietary XML wrappers, tracked-change residue, and anything scriptable. Text is never dropped with the tag that wrapped it.
- Re-host images. Embedded images are lifted out and uploaded to our object storage. Readers never need access to your files for a diagram to load.
- Index. The text is chunked along headings for search and, on paid plans, embedded so the study assistant can cite the exact lesson it drew from.
Formatting that survives, and formatting that does not
Structure survives: headings, numbered and bulleted lists, tables, blockquotes, bold, italics, and links. Visual styling does not — fonts, colours, margins, and text boxes are deliberately discarded so every lesson reads consistently on a phone at 9pm.
One nuance worth knowing: Google Docs exports express bold and italics only through generated CSS classes. A naive importer throws that stylesheet away and silently deletes every emphasised word in your lesson. This parser reads the stylesheet and promotes those classes back to real <strong> and <em> tags.
Folders become series
A top-level subfolder becomes a series. Anything nested deeper — leader guides, handouts — stays attached to that series rather than fragmenting into new ones. Numeric prefixes in file names are read as ordering and then stripped from the displayed title, so 03 - The Cross.docx becomes the third lesson, titled “The Cross”.
Renaming a file in Drive does not break the link you shared with your small group: the published URL is pinned to the file, not its name.
Forking
When another church forks your series, the files are copied into their Drive or OneDrive. They are theirs to rewrite, and they work offline in Word like anything else they own. We keep a lineage record so your ministry stays credited, however far the material travels.
Running your own instance
The core is AGPL-licensed and self-hostable. Nothing about publishing, reading, searching, or forking is gated behind a subscription on your own instance. You need Postgres with the vector extension, an OAuth client from Google or Microsoft, and somewhere to run a Node process and a worker.
git clone https://github.com/andrew-biddinger/discipleship-source
cd discipleship-source
cp .env.example .env # fill in OAuth + secrets
docker compose up -d # Postgres with pgvector, Redis
npm install
npm run db:migrate
npm run dev # app
npm run worker # background jobsThe full walkthrough, including how to register the OAuth clients and expose webhooks during local development, is in docs/SELF_HOSTING.md in the repository.
What the subscriptions pay for
Hosting, and three things that cost real money to run: the document-grounded assistant, larger fork and library quotas, and white-label portals. The line is deliberate — the curriculum and the means to publish it stay free. See the plans.