Skip to main content

Technology Stack

Every technology choice is pinned to a specific version. This page documents what we use, why we chose it, and what we rejected.

Decision Matrix

ComponentChosenRejectedRationale
Monorepo toolNxTurborepo, BazelMixed Python+TS support; project graph; generators
JS package managerpnpmnpm, yarnStrict hoisting; disk efficiency; workspace protocol
Python package manageruvpip+venv, Poetry, PDM10–100× faster; lockfile; built-in venv
API GatewayGo (chi)Node/Express, KongNative concurrency; <5ms overhead; small binary
Content servicePython (FastAPI)Go, NodeBest graph DB client ecosystem; AI library access
Auth providerClerk (SaaS)Auth0, Cognito, customWeeks saved; handles MFA, social, magic links
Graph databaseFalkorDBNeo4j, ArangoDBRedis-based (ops simplicity); Cypher compatible
Relational DBPostgreSQLMySQL, SQLiteSuperior JSON support; pgvector; JSONB indexing
SearchTypesenseElasticsearch, AlgoliaSelf-hosted; instant results; typo tolerance
Vector searchpgvectorPinecone, WeaviateNo additional service; sufficient at <10M vectors
Container orchestrationKubernetes (EKS)ECS, Fly.ioStandard path to enterprise; ArgoCD native
IaCTerraformPulumi, CDKMost community modules; language-agnostic
GitOpsArgoCDFlux, SpinnakerDeclarative; UI; RBAC; easy rollback
SecretsAWS Secrets ManagerVault, DopplerNative AWS integration; upgrade path to Vault
ObservabilityOpenTelemetry → GrafanaDatadog, New RelicOpen standard; vendor-neutral; free at scale
Error trackingSentryRollbar, BugsnagBest cross-platform SDK coverage
Mobile CI/CDExpo EASBitrise, FastlaneNative Expo integration; no macOS runner needed
EmailResendSendGrid, PostmarkModern API; React Email templates; cost

Node.js / TypeScript

TechnologyVersionScope
Node.js>=22Engine requirement
pnpm9.15.0 (exact)Package manager
TypeScript^5.5All TS/JS — ES2022 target, strict, bundler resolution
React^19web, admin
React^18.3mobile (Expo 52 constraint)
React Native~0.76.0mobile
Next.js^15web, admin — App Router
Expo~52.0.0mobile — SDK 52
Tailwind CSS^4web, admin (+ @tailwindcss/postcss v4)
Zod^3.23config — env schema validation
openapi-fetch^0.12sdk package (peer dep)
VitestlatestTesting (+ @vitest/coverage-v8)
ZustandState management (all apps)
TanStack QueryServer state (all apps)

Go

TechnologyVersionScope
Go1.23gateway, auth, billing, notifications
Chiv5.1.0HTTP router
Zerologv1.33.0Structured JSON logging

Why Go for gateway/auth/billing/notifications? These services share traits: high-throughput routing decisions, webhook handling, persistent connections (APNs/FCM). Go's goroutine model, sub-millisecond startup, and ~10MB Docker images are worth the verbosity at these boundaries.

Python

TechnologyVersionScope
Python>=3.12content, ai, ingest
FastAPI>=0.115content (8100), ai (8400)
Uvicorn>=0.32ASGI server
Pydantic>=2.9All Python services (extra="forbid")
pydantic-settings>=2.6Config management
structlog>=24.0Structured logging
Click>=8.1ingest CLI framework
Anthropic SDK>=0.39ai — primary LLM provider
OpenAI SDK>=1.55ai — fallback LLM provider
pytest>=8.0Testing (+ pytest-asyncio, pytest-cov)
Ruff>=0.8Linting + formatting
mypy>=1.13Type checking (strict)

Why Python for content/ai/ingest? FalkorDB's Python client is the reference implementation. The AI ecosystem (Anthropic SDK, sentence-transformers, LangChain) is Python-native. Data transformation tasks are natural in Python.

Data Stores

StoreVersion/ImagePortPurpose
FalkorDBfalkordb/falkordb:latest6379Primary graph DB — scripture content + relationships
PostgreSQLpgvector/pgvector:pg165432Users, subscriptions, notes, AI embeddings
Redisredis:7-alpine6380Cache, rate limiting, sessions, job queues
Typesensetypesense/typesense:26.08108Full-text + faceted search
Port Separation

FalkorDB (port 6379) and Redis cache (port 6380) are separate instances. FalkorDB is a Redis-based graph database, but it is NOT the application cache. Never confuse them.

Version Pinning Policy

TechnologyPinned VersionUpgrade Policy
Go1.23Minor releases quarterly
Python3.12Major annually
Node.js22 LTSEven LTS annually
PostgreSQL16N-1 from latest
Redis7
Expo SDK52Each Expo LTS
Next.js15
Terraform1.9
Kubernetes1.31Follow EKS supported versions