TL;DR. Equip is a free, open-source LMS built for Bible schools and small ministries. MIT-licensed. Bilingual Russian↔English out of the box — the same course renders in either language depending on who's reading. Self-hostable end-to-end on free tiers. 4 weeks in production: 14 real users, 3 published courses, 3 issued certificates. This post is what's in it, what's wired in, and how it's built.
. Live at
The Cyrillic side isn't a different file or a different route. It's the same React tree with useTranslation(), plus the scripture passage in the left rail swapped from KJV (1769) to Synodal (1876) by a server-side substitution layer — see next section.
The scripture-preservation constraint
Most translation APIs (Gemini, GPT-4, DeepL) will happily paraphrase a Bible verse if you feed it into them as part of a longer paragraph. For a course where the exact wording of John 3:16 matters, that's a non-starter. "For God so loved the world" and "Because God loved the world this much" are not interchangeable in a Bible-study context, no matter how close the meaning.
Equip solves this outside the LLM:
- Pre-process incoming HTML, detect
<blockquote>+ scripture-reference pairs. - Swap the verse text for an opaque ASCII placeholder (
VERSE_<hex>). - Send the prose-with-placeholders to Gemini Flash Lite with a system prompt that lists "preserve placeholders verbatim" as a hard rule.
- After the model returns, restore each placeholder with the canonical text from bundled translations: KJV 1769 for English, Synodal 1876 for Russian.
The model never sees the verse text. The translation never paraphrases scripture. Implementation lives in app/services/bible/substitution.py and is about 200 lines.
There's a fallback in the system prompt for paraphrased quotes that the substitution layer can't confidently match (similarity < 0.80 to canonical) — "leave the original verse text untouched." That covers content where the substitution layer can't reliably do its job.
What's wired in
Equip is small in scope but talks to a few external services where it makes sense to. Each one is a deliberate choice, not a default:
| Service | What it does in Equip |
|---|---|
| YouVersion Platform API | Verse-of-the-Day card on the home dashboard. Reads the YV verse-of-the-day endpoint, caches the result per (locale, date). YV registration is on the non-commercial track, which is what shipped with our values from day one. |
Gemini Flash Lite (Google AI) | Bilingual content translation pipeline (above). Flash Lite is overkill on quality and underkill on cost for surface translation; this is the sweet spot. |
| KJV 1769 + Synodal 1876 | Bundled in the backend as JSON, served as the canonical scripture for the substitution layer. Public-domain, no API call. |
| Supabase Auth | Google OAuth + email/password. JWT verification server-side. The auth.uid() value flows through every RLS policy. |
| Datadog | Browser-RUM on the SPA, log intake from the FastAPI backend, four synthetics on the public surfaces. Free tier. |
| Resend | Transactional email (verify, password reset, certificate-ready notifications) from a verified equipbible.com domain. Free tier. |
| Sentry-class error attribution | Not Sentry itself — Datadog's RUM + log correlation does the same job for our scale, single vendor. |
The pattern across all of these: pick a single best-fit service per layer, stay on free tiers as long as possible, never hide the integration behind a paywall.
What it does (the standard LMS surface)
Courses → modules → chapters, rich content via TipTap (callouts, audio, embedded YouTube, images), quizzes (multiple choice, true/false, short-answer, essay), assignments with a teacher grading queue, certificates with teacher approval, gradebook, cohorts, calendar, announcements.
The architecture, briefly
| Layer | Stack |
|---|---|
| Frontend | React 18, TypeScript, Vite, Tailwind, shadcn/ui, TipTap, motion |
| Backend | FastAPI, Python 3.12, SQLAlchemy 2, Pydantic 2 |
| Database | PostgreSQL on Supabase, RLS on every public table |
| Storage | Supabase Storage (avatars, course materials) |
| Deploy | Vercel — static SPA at equipbible.com, Python serverless at api.equipbible.com |
| CI/CD | GitHub Actions: lint, typecheck, 700+ backend tests, 220+ frontend tests, npm audit, pip-audit, Postgres schema smoke, CodeQL, OpenSSF Scorecard, Dependabot auto-merge for patch/minor |
| Monitoring | Datadog (RUM, logs, synthetics) |
Total infra cost at current usage: $0. Vercel, Supabase, Datadog, and Resend free tiers carry the whole thing.
Mobile, too
. Free. Sign up, you're in. Works for independent teachers, single-classroom contexts, students looking for Bible courses to enroll in. No credit card.
Self-host your own instance. Clone , in-platform certificate verification via signed JSON-LD, and a contribution path for translators to refine AI-translated content where wording matters most.
What I want to hear back
Especially from three groups:
Anyone running a small Bible school or ministry training program: what's blocking you from moving off your current setup? Particularly curious about Russian-speaking schools in CIS countries where the Synodal canonical-text handling matters.
Anyone who has built or contributed to a niche-domain LMS: what's the one constraint you wish you'd designed for from day one? I'd rather steal your lessons than learn them again.
Anyone considering forking Equip for a different niche (Sunday-school curriculum, a different religious tradition, secular adult-ed): tell me what'd need to change. Easier to plan the abstractions now than retrofit them later.
Free, open-source LMS for Bible schools, ministries, and nonprofit educational programs. React + FastAPI + Supabase.
·
·
Screenshots
Sign in (dark) |
Mobile (390px) |
Live at
Community-Analysen & Experten-Meinungen 0
Verwandte Story-Cluster & Quellen (Vektor-KI)
Ähnliche Beiträge
Auch interessante Nachrichten Equip: an open-source LMS for Bible schools — bilingual, scripture-aware, 4 weeks of real users
Thematisch verwandte Begriffe: Equip, opensource, Bible, schools · 6 Treffer
The Gemini desktop app is now available for Windows
Header and Footer not showing in Excel
Burn Out, Or Fade Away
VPN-Problem mit Windows Update vom September-Patchday - Swiss IT Magazine
Remote Desktop Services hängt: KB5124008-Fix 2026 - WindowsPower.de
Fehlerhaftes Sicherheits-Update lässt Windows verstummen - PC-WELT
Videos werden geladen ...
Beiträge werden geladen ...
Videos werden geladen ...
Beiträge werden geladen ...
Videos werden geladen ...
Beiträge werden geladen ...
Videos werden geladen ...
Beiträge werden geladen ...
Videos werden geladen ...
SOCIAL SHARE CARD GENERATOR