Skip to content

Prior Art

Krasnikov Maksim edited this page Oct 22, 2026 · 1 revision

Prior art: what we borrow

The point of this section is to speed up the plan with real projects: take code or approach, integrate a component as is, or use as a UI reference.

9.1 Panel-level PaaS (UX and domain model reference)

Project What is good What Maurice takes
Coolify (PHP/Laravel, Docker) Most complete domain model: projects, environments, services, domains, S3 backups, notifications, service catalogue, "magic" variables linking services Entity structure and UX of key screens; env references; catalogue templates (compose templates converted to Quadlet)
Dokploy (TypeScript, Swarm, Traefik) Clean TS stack (Next.js, tRPC, Drizzle), readable code, DB backups to S3, templates, monitoring If the control plane is TS — API/UI structure reference; backup and schedule logic
Komodo (Rust + TS) Multi-server "core + periphery agent", single API/TS client, builds and deploys Control plane ↔ agent model; message format between them
ZaneOps (Python, Swarm, Caddy) Caddy as a managed proxy via admin API, simple service model Caddy config generation and full rebuild on restart
Dokku (shell, Docker) git push → deploy, buildpacks, minimalism, plugins Plugin system idea for integrations; buildpacks as a build option
Rivetr (Rust) Single binary, low footprint, webhook deploys, runtime abstraction Docker/Podman Lightweight control plane example; GitHub/GitLab/Gitea webhook handling

9.2 Quadlet-native panels (systemd/Podman reference)

Project What is good What Maurice takes
Rookery (Go) Control plane + agent per rootless scope; units on disk as source of truth; import of podman run / compose / running containers into Quadlet with warnings Agent architecture; compose → Quadlet converter (key for migrating off Coolify)
quadletman Web UI for rootless Quadlet with OS-user isolation Working with several system users from one process
quadlet_manager (Go + React) Unit management via systemd D-Bus, xterm.js web terminal, logs D-Bus layer instead of shelling out to systemctl; web terminal
quadman (TUI) Acting as other users via sudoers with an explicit command list; events timeline; templated web@ units Minimal sudoers for the agent; merged podman + systemd event stream
podlet podman run / compose / k8s YAML → Quadlet converter Integrate as a library or CLI in the validator and importer
cockpit-podman Reference use of the libpod API from the browser API call reference for containers, logs, stats

9.3 Components integrated as is

Task Component Notes
Proxy and TLS Caddy (admin API, on-demand TLS, DNS-01 plugins) Not rewritten; the panel generates JSON config
L4 and protection HAProxy Added when needed; config generated
Registry zot / distribution Ready OCI registries, digest-addressed
Backups restic + rclone; optionally Backrest (web UI over restic) Schedule and retention; Backrest as UI/API reference
DB dumps pg_dump / pgBackRest, clickhouse-backup, dragonfly SAVE Wrappers in catalogue templates
Logs journald → Vector/Alloy → VictoriaLogs Single-binary store, label search; see Telemetry
Metrics node_exporter, cAdvisor (Podman) or systemd-exporter → VictoriaMetrics PromQL-compatible, charts in the Maurice UI; Grafana optional
Notifications Apprise or direct Telegram Bot API Apprise gives dozens of channels at once
Tunnels cloudflared + Cloudflare API Routes via API, token held by the panel only
LLM adapter Vercel AI SDK (TS) / LiteLLM (proxy) Any provider via the user's key
MCP Official MCP SDKs (TS/Go) Server over the panel API
STT for Telegram Whisper (faster-whisper locally) or a provider STT Voice to text
Dev environments toolbx / distrobox, code-server, Coder (reference) See Remote Development
Agent memory Entire CLI See Agent Memory

Conclusion. Only the control plane (data model, Quadlet generation, plan/apply, UI) and the agent are written from scratch. Everything else is integration or borrowing. This roughly halves the Alpha and MVP effort compared to a fully custom core.

Clone this wiki locally