Architecture
Modules compose the schema
Each module declares its tables in a small schema file (.gate) next to its Go code. The host composes them at boot and emits CREATE TABLE idempotently; cross-module references resolve through the same pipeline. Adding a module never means editing core SQL — the auth and user schema ships embedded, and the binary starts from an empty database.
Generated CRUD
The same .gate schemas generate typed CRUD for a module (go generate), so a module is mostly declaration plus the handlers that are genuinely custom. Optional modules today: ai, billing, insights, licenses, tickets, translations.
Verifiable audit log
Every action is written to a hash-chained audit log. The operator scope can verify the chain’s integrity end-to-end (/operator/audit/integrity) and read its tip — so tampering is detectable, not just discouraged.