Overview
Ekko-OS is a personal-platform monorepo: a single repo that hosts a Go API, a Convex-backed Next.js web app, an Expo/iOS app, a Discord bot, a CLI, an MCP server, browser extensions, a TV app, and the libraries that glue them together. Every surface targets one person (the author and immediate household), so design decisions favor cohesion over generality.
Principles
- One source of truth per concern. External integrations live in Go; user data lives in Convex; UI primitives live in
@ekko/ui; cross-language types live in@ekko/core. - Contract-first across runtimes. When two services exchange typed data they share a sample + schema before either side implements.
- Surfaces, not silos. Mobile, web, TV, Discord, and the MCP read from the same data model wherever possible.
- Minimal infra. No microservice sprawl; two Go services, one Convex deployment, one MCP server, one Discord process.
Tech at a glance
- Language: TypeScript everywhere on the JS side; Go for the API surface.
- Runtime: Bun for JS package management and most app runtime; Node for Docusaurus only.
- Data: Convex for primary state; PostgreSQL inside ekkolore-api for book metadata.
- Auth: Clerk on the web side, JWTs propagated to Go services.
- Logging:
@ekko/logging(packages/logging/) — service + scope + snake_case attrs +request_idcorrelation.