Update: 5 October 2026

The Romanian platform now sits alongside Meet Your Bible, its international edition. The web product is live. Native mobile code and home-screen widgets appear in the portfolio, but this update does not claim a verified App Store or Google Play launch. The original notes below capture the earlier Romanian-MVP architecture.

Studiază Biblia and Meet Your Bible: a study platform

Original engineering notes from May 2026

Studiază Biblia is a Bible-study platform for Romanian-speaking believers, built around an AI companion called Parakletos. The starting problem was mundane and genuinely annoying at the same time: the market is dominated by English apps like YouVersion and Logos, and a believer in Romania who wanted a modern, mobile-first, AI-powered tool in their own language and doctrinal tradition had nothing good to pick. So I built one.

The detail that changes everything: the AI is not a button glued on top of a Bible-reading app. It is the spine. Every screen — the verse reader, the journal, the prayer list, the courses — feeds context into the same companion. That single decision shaped almost every architecture call below.

Parakletos: the AI as the product, not a feature

Parakletos is a context-aware chat that runs RAG over two sources: editorial content in Wagtail and a knowledge graph in Neo4j (verses, cross-references, themes, doctrinal relationships). The idea is that when you ask something while reading a particular passage, the answer doesn't start from zero — it knows where you are, what you wrote in your journal, which course you're working through.

To keep this clean, I split the intelligence into two distinct Django apps. One, ai_assistant, handles conversation persistence only: threads, messages, history. The other, ai_orchestrator, is the actual engine — it decides what context to retrieve, how to build the prompt, which model to call. The split feels like bureaucracy until the day you want to change retrieval logic without touching anything about how conversations are stored. That's when it pays for itself.

Graph-based retrieval, rather than a plain vector store, comes straight from the nature of biblical text. A verse doesn't exist in isolation; it lives in a web of cross-references and themes. Neo4j models that directly, so Parakletos can walk the links instead of guessing from semantic similarity.

The pastoral guard: intercepting before the LLM

The part of this project I'm most attached to is nowhere near the most technically sophisticated. It's a crisis guard.

A Bible-study tool will, inevitably, be used by people in distress. If someone types a self-harm signal, the last thing you want is to ship that text to an LLM and hope for a decent answer. So I put a keyword-based interceptor that runs before any model call. If it trips, it short-circuits the entire AI pipeline and returns hotline information directly. Not a single token goes to OpenAI or Anthropic.

It's an ethical decision dressed as an engineering one. A deterministic guard with explicit rules is more trustworthy than a probabilistic model in exactly the moment you can't afford to get it wrong. The rest of the product's RAG refuses to hallucinate by abstaining; here, the refusal is even more absolute.

Two products from one codebase

Studiază Biblia is designed as a single product that presents itself two ways. The free, Romanian version is the MVP today. There is also a planned paid international tier in six languages (ro/en/fr/de/es/it). The switch between them lives in environment configuration — same codebase, different product.

On today's MVP the language selector is hidden on purpose: it's RO-only, so we don't promise something we don't yet deliver. The multilingual architecture is already there, but the international tier and the native mobile rewrite are still in progress (I keep a NATIVE_PORTING_PLAN.md tracking that work).

The doctrinal grounding is worth calling out separately. The product sits on Seventh-day Adventist theology, kept tacit in visible copy but baked explicitly into the AI prompts and content. It's the opposite of the generic approach the giants take — and it's the reason, I think, a niche tool can win at all.

Offline-first mobile

On mobile, the rule is simple: write locally first. The React Native app (Expo Router) writes straight to SQLite, and a SyncQueue pushes changes in the background whenever there's a connection. You can read scripture, journal, and tick off habits with no signal, and the sync reconciles later without asking permission.

One design detail I chewed on for a while: on mobile, Parakletos is not a tab. It's a gold FAB, sitting in the corner of every screen. The difference sounds cosmetic. It isn't. A tab says "go to a specific place to use the AI." A FAB everywhere says "the companion is always with you, whatever you're doing." The second version is a more honest reflection of what the product actually is.

The stack

Backend: Django + Wagtail + Django REST Framework, with Celery for async tasks, PostgreSQL as the primary store, Elasticsearch for search, and Neo4j for the knowledge graph behind RAG.

Web: React 18 + Vite, Wouter for routing, Shadcn/ui over Tailwind, React Query v5 for server state. It's a PWA (via VitePWA), with i18next for translations, Sentry for errors, and PostHog for analytics.

Mobile: React Native + Expo Router, with SQLite as the local source of truth.

AI: a mix of OpenAI (GPT-4o-mini) and Anthropic, depending on the task. Keys live on the server, never on the device — the orchestrator mediates every call.

Infra: Docker on Coolify, on bare-metal, with Traefik in front and WhiteNoise for static files. There are also k8s/Terraform/AWS configs prepared for when scale demands them.

Where it's at / what's next

Honestly: the Romanian MVP is live at studiazabiblia.ro, deployed via Coolify on bare-metal, with Sentry and PostHog wired in, and with 80+ historical fix docs that tell the story of every wrong turn along the way. The native iOS and Android folders exist. That's the confirmed part.

What isn't confirmed, and I won't pretend otherwise: I don't have user or revenue numbers to put on the table. The "live" status rests on the deploy config and a documented URL, not on independently verified metrics. The paid six-language international tier and the native mobile rewrite are in progress, not shipped.

What's coming, in the order I think about it: unhiding the language selector and opening the international tier; finishing the native mobile port; and growing the knowledge graph so Parakletos can follow ever finer doctrinal relationships.


If you want to go deeper on the ideas underneath, I wrote about RAG that refuses to hallucinate through abstention and safety guards — the exact mechanism behind Parakletos and the pastoral guard. On why I keep AI keys on the server and never on the device, I went into detail in the server-side AI architecture. And if you want the wider context, Studiază Biblia is one of the 11 products I'm building as a solo founder.

I write these up as I build them. If you want the field notes straight, subscribe to the newsletter.

RAGDjangoWagtailReact NativeNeo4jAI
Share this article