Read-Path
Page-Render aus dem Cache, eine Disk-Read pro Query.
Wie Omnika unter der Haube funktioniert — Edge bis Datenbank.
Edge (Caddy) → App (Next.js 16) → Daten (SQLite, sqlite-vec) · Echtzeit-Sidecars: LiveKit-SFU, Y.js · Jobs/AI/E-Mail: Redis, Anthropic, Resend
| Layer | Technology | Why |
|---|---|---|
| Frontend | Next.js 16 (App-Router) + React 19 | RSC für SEO + streaming, Server-Actions für formulare. |
| Styling | Tailwind CSS | Utility-first für schnelle Iteration ohne CSS-Bundling-Drama. |
| State (Client) | React hooks + Y.js für Multiplayer | Hooks für UI-State, Y.js-CRDT für conflict-free Multiplayer. |
| Auth | Better-Auth + Argon2id-Passwords | Sessions in SQLite, kein externer Auth-Provider, EU-konform. |
| Database | SQLite via better-sqlite3 | Single-box-fast, WAL-Mode, kein Network-Hop pro Query. |
| Vector-Search | sqlite-vec | Embedded — keine separate Vector-DB, ein File für alles. |
| Search | SQLite FTS5 | Built-in Full-Text, keine zusätzliche Suche-Infrastruktur. |
| Jobs | BullMQ + Redis | Durable, retry-able Background-Jobs mit Backoff. |
| Cron | node-cron + cron-parser | Scheduled-Tasks in-process, kein externer Cron-Daemon. |
| Voice/Video | LiveKit SFU | WebRTC + SIP, self-hosted, EU-Region. |
| Multiplayer | Y.js | CRDTs für conflict-free Real-Time-Edits. |
| AI | Anthropic Claude + Google Generative AI | Nika-Plugin-System — Modellwahl pro Workspace. |
| Resend | Transactional + transactional, sauberer DKIM-Setup. | |
| Hosting | Hetzner Falkenstein DE | EU-DSGVO-konform, deutsches Rechenzentrum. |
| Deploy | Docker + Caddy + GitHub-Actions | Caddy für TLS, Docker für reproducible Builds, GH-Actions für CI/CD. |
| CI | GitHub Actions Self-Hosted Runners (4× Hetzner) | Schneller als hosted Runner, kein Vendor-Lock-in. |
Page-Render aus dem Cache, eine Disk-Read pro Query.
POST geht durch Auth, Audit-Log, dann erst in die DB.
WS-Connection bleibt offen, Snapshot alle 5s in SQLite.
Aktuell: Single-Hetzner-Box, ~50-100 concurrent users.
Phase 2 (V11+): Horizontal-Scaling per App-Server-Cluster + DB-Replication.
Why Single-Box bisher: 95% der Teams brauchen kein Cluster, 5% sind Enterprise-Tier wo wir custom-deployen.
Mittelfristig planen wir Omnika unter einer Source-Available-Lizenz zu öffnen.
Mehr zur OSS-Roadmap