· 2026
Konglo OS
- Next.js 16 (App Router, proxy.ts)
- React 19
- TypeScript (strict)
- Tailwind CSS v4
- Convex
- @convex-dev/auth (Password + Anonymous + env-gated Google OAuth)
- @convex-dev/rate-limiter
- Vercel AI SDK
- @ai-sdk/anthropic (claude-haiku-4-5)
- radix-ui
- lucide-react
- next-themes
- geoip-lite
- Vitest
- convex-test
- Playwright
- pnpm
- Docker (output: standalone)
Brief
"Most wealth dashboards are cloud SaaS you must trust with your most sensitive data. Konglo OS is the opposite: a self-hostable, single-tenant OS where the data lives on *your* infrastructure, access is enforced on the server (not hidden in the UI), and the succession plan is principal-only by construction."
Constraints
- The shipped seed data is a FICTIONAL conglomerate — "a capability showcase, not a real family's books". Stated twice, in the intro and again in the licence footer.
- Single-tenant and self-hostable by design; access is enforced server-side in every Convex function, and "the UI merely reflects what the server already permits".
- SEC-001, a deliberate authz carve-out: the `cfo` role is the business-table DB admin via Studio Data, but `heirs` carries a `sensitivity: "principal"` flag so the generic CRUD layer also calls `requirePrincipal` — "The admin surface is not a back door into the estate plan." Covered by tests/convex/authz.test.ts.
- The AI aide (Asisten) is STATELESS today — persistent threads, tool-calling/RAG on live tables, streaming, and proactive insights are all unchecked roadmap items.
- The AI is guarded on ANTHROPIC_API_KEY and "degrades gracefully with a notice when the key is unset"; an internal `chatGuard` mutation rate-limits to roughly 30 replies per 10 minutes per user so the API budget can't be drained.
- "Today's Signals" is deliberately a NON-LLM rule-based layer "that can't hallucinate because it never calls a model".
- DEMO_MODE=1 publishes the demo password, so it must stay off for any real tenant.
- NEXT_PUBLIC_CONVEX_URL / NEXT_PUBLIC_CONVEX_SITE_URL must be passed as build args because they are baked into the client bundle.