| 0001 |
Record decisions as ADRs |
| 0002 |
No Kubernetes; our own small scheduler |
| 0003 |
One Go binary per service, one stack |
| 0004 |
PostgreSQL for platform data |
| 0005 |
RBAC on a hierarchy, not ABAC |
| 0006 |
id is the OIDC provider; no shared cookie |
| 0007 |
A shadcn registry for shared panel code |
| 0008 |
Node agents connect out to the control plane |
| 0009 |
Mail runs on its own IP, written in Go |
| 0010 |
xvii-node also manages the platform services |
| 0011 |
yaebal for bot templates, Go for services |
| 0012 |
ai builds on CLIProxyAPI |
| 0013 |
Limits and plans live in id; services enforce and report |
| 0014 |
Backups run restic through the node agent |
| 0015 |
Workloads run on Docker through the agent; nodes serve traffic as edges or through a relay |
| 0016 |
Mail runs on the control plane; an edge server owns its address, relays its ports and carries its outgoing mail |
| 0017 |
docs keeps spaces in PostgreSQL and collaborates through Yjs in Go |
| 0018 |
Native apps are API clients: Swift and Kotlin for clients only, three tiers, device-bound sign-in |
| 0019 |
Services describe their screens (/api/v1/ui, xvii-ui/1) for every client to render |
| 0020 |
Forges are reached through one service, git: a GitHub App per instance, GitLab tokens, clone tokens, webhooks as hints |
| 0021 |
Services follow another service's changes through watches and durable deliveries |
| 0022 |
A watchdog off the control plane pages when the platform can't |
| 0023 |
Alerts are keyed problems; notify pages them until someone acknowledges |
| 0024 |
The disk guard reclaims rebuildable data on every server |
| 0025 |
Risky actions need an approval in id, bound to the action |
| 0026 |
Services act for people only through delegations in id |
| 0027 |
API contracts are Go code; OpenAPI documents and clients are generated from them |
| 0028 |
MCP tools and CLI commands are derived from API operations |
| 0029 |
@xvii is the only source of panel components and vendors the shadcn primitives; CI fails on drift |
| 0030 |
Every panel works from 360 to 1440 px and by touch, checked by layout tests in CI; the hub is the installable app |
| 0031 |
The platform reports its own errors, panels' included, to the instance's errors service |