Roadmap
Stages run in order; inside a stage, work can interleave. Each stage ends deployed on the project's own
instance and used for real. MCP tools, CLI commands and panel pages ship with each service, not later.
0. Plans: done
docs with vision, architecture, decisions, conventions, a spec per service, this roadmap, AGENTS.md.
1. Foundations: done 2026-10-09
- GitLab repos in
xvii-network, push mirrors to GitHub, a CI template shared by all repos (Go checks,
panel checks, release on tags).
go: vanity import paths on pages at go.xvii.network; modules move to go.xvii.network/<repo>.
kit: packages extracted from pages (config, ttl, archive, CLI framework, release) and new ones
(server, httpx, db, dbtest, audit, events, auth, rbac, client, ids, mcp).
ui: @xvii registry extracted from pages' panel (shell, data table, responsive dialog, i18n, …),
published at ui.xvii.network and verified in a fresh shadcn Vite app.
cli: xvii with contexts, update, completion, and pages' commands moved over.
The kit packages that needed a first real user (server, httpx, db, dbtest, audit, events, auth, rbac,
client, ids, mcp) moved to stage 2, where id is that user.
kit: server, httpx, db, dbtest, audit, events, auth (OIDC client, JWT, introspection), rbac,
client, ids, mcp, written together with id.
- PostgreSQL on the control plane;
/etc/xvii, /var/lib/xvii layout.
id: passkeys, users, teams, projects, environments, tokens, OIDC (code + PKCE, device flow, client
credentials, token exchange), panel.
node (platform part): installs and updates services from the release index, systemd units, Caddy
config, databases per service, rollback.
home: overview, services with updates and rollback, logs, releases, the setup wizard,
/install.sh, one service switcher for every panel.
xvii server install: a fresh Ubuntu server becomes a working instance in one run; xvii login
through the device flow.
3. pages on the platform: done 2026-10-09
Per services/pages.md: OIDC, teams and projects, PostgreSQL, an importer from v1's
JSON, kit and @xvii, xvii pages, CI without stored secrets (id trust rules, GitLab and GitHub
templates), limits and plans in id (ADR 0013), one journal across services in home, kit/mcp with pages'
tools and xvii mcp.
4. notify, backups, env: done 2026-10-10
notify: Telegram (ru/en), Web Push, webhooks, e-mail, topics, digests, quiet hours.
backups: restic through xvii-node (ADR 0014) to S3, SFTP, a local disk or Telegram, with a whole
instance restored from a nightly backup in a throwaway machine as the drill.
env: envelope-encrypted sets, files, SSH keys, references, versions; CI jobs read secrets with
nothing stored in CI settings.
5. apps and nodes: done 2026-10-10
Per services/apps.md: nodes and quotas → image apps → databases → builds and
previews → compose, templates, bots, cron. A second server joined as a relay node shared by two teams,
each within its quota (an app over a quota is refused, naming the limit); a Telegram bot, a Go API on a
managed PostgreSQL and a preview per merge request ran on it. Later in the stage: edge nodes with their
own ingress, registry credentials per team, moving a project between nodes.
5b. domains: done 2026-10-10
Per services/domains.md: Cloudflare zones and records in the panel, attaching a
host name to a pages alias or an app in one step, xvii's own name servers on two nodes as a second
provider, then cache, protection and DNSSEC.
6. tunnel and hooks: done 2026-10-10
A Telegram bot under development receives webhooks on a laptop through xvii hooks listen, and
xvii tunnel 5173 opens a dev server on a phone.
7. status, errors, analytics: done 2026-10-10
Every production app and pages alias has a monitor, its errors land in errors with releases from
deploys, and its traffic in analytics.
8. ai: done 2026-10-10
Claude Code, opencode and bots use ai.<d> with per-team keys and quotas, and usage is visible per key
and model.
9. share, config: done 2026-10-10
A file shared from the CLI opens on a phone, and a bot's behaviour follows a flag in config, changed in
the panel without a deploy.
10. mail: done 2026-10-10
The instance's mail is delivered to Gmail with DKIM, SPF and DMARC passing and read in the webmail, and
the platform sends its own e-mail through it. Extras: DNS set up through domains, autoconfig and
autodiscover, MTA-STS, TLS-RPT, Apple profiles.
10b. Looks and own names: done 2026-10-10
The instance's look (home: name, accent, logo, backgrounds) in every panel, on id's sign-in and in
notify's e-mails. Own host names through domains for status pages, a team's share links, shared
analytics dashboards, webhook endpoints, tunnel names and mail's set-up hosts, next to pages aliases
and apps.
11. docs: built-in site done 2026-10-18; v2 in progress
The documentation site as a service (services/docs.md): docs.<d> on every instance,
in English and Russian, with the documentation of the installed version (v1, done). v2 (ADR 0017): spaces
for teams written in a real-time block editor, published with versions, languages, access rules, custom
domains, comments, templates, import, OpenAPI references, AI and an optional git source.
Afterwards
Open the code, public releases on GitHub, xvii server install from GitHub releases.