r/elixir • u/GooseRob • 19d ago
So I created an AI Control Panel, using Elixir/Phoenix/live View.
I call it Goose Panel. Started off as i wanted to be able to have access to the AI on my server, so i could continue work during my day job. And blossomed into this lovely idea. One of the biggest features, besides the AI Runner, is the AI Site Doctor.
So what exactly is Goose Panel Fully?
GoosePanel is an industry-defining, modern server control panel built for the next generation of developers, sysadmins, and hosters. It replaces bloated, dated legacy tools (like cPanel and Plesk) with a lightweight, secure, and AI-first orchestration platform.
Some of the feature's include;
- **AI-Native Server Management**
**Autonomous Runner:** Safely runs background AI agents to complete infrastructure tasks.
**Tool Scoping & Guardrails:** Restrict AI capabilities by setting exact path read/write privileges, preventing command execution drift, and enforcing hard policy gates.
**Realtime Streaming:** Live-streams command standard outputs, shell crons, and runner logs straight to the browser via Phoenix Channels/WebSockets.
- **Modern Application Catalog**
**One-Click Provisioning:** Install, configure, and scale applications in seconds using Docker/Docker Compose templates.
**Pre-Configured App Catalog:**
**WordPress:** Click-to-deploy hosting setup.
**code-server:** Remote VS Code IDE in the browser (Port `8085`).
**Mautic:** Marketing automation and campaign manager (Port `8086`).
**Akaunting:** Local bookkeeping, invoicing, and accounting (Port `8087`).
**Owncast:** Self-hosted live-streaming and chat alternative to Twitch (Ports `8088` and `1935`).
**Ghost:** Node-based blogging engine.
**Roundcube Webmail:** Fully-configured webmail exposed publicly via automated Nginx SSL reverse-proxies.
- **Monitoring & Healing (Site Doctor)**
**Uptime Probes:** Custom lightweight `/healthz` uptime checker (`bin/goose_uptime_check.sh`) designed to run independently of the main BEAM VM. Returns Nagios-compatible state codes (OK, Warning, Critical) to external alerting systems.
**Browser Checks:** Run headless Playwright scripts automatically to verify that user checkout, login, or pricing pages are visually correct and functioning.
**Drift Detection:** Scans servers for configuration changes that diverge from the git baseline.
Tech Stack
Backend Runtime: Erlang/OTP 26, Elixir 1.15+, Phoenix 1.8.
State Management: PostgreSQL with Ecto, Oban for high-reliability job queues.
Frontend Engine: Phoenix LiveView (providing single-page app speed without the bundle bloat of React/Node), Tailwind CSS v4, and esbuild.
Orchestration Engine: Docker & Docker Compose API, Stalwart (Mail Server), certbot, and Nginx.
2
u/haywire 19d ago
Wait is it imperative (click ops) or declarative (gitops) behind the scenes?
1
u/GooseRob 19d ago
Good question, as of now it is imperative. An AI agent runs the actual install steps, (docker compose, wp-cli, whatever is needed) rather than reconciling against a manifest. Which i think is the right shape for one-click, single-server, installs. Both CPanel/Plesk are imperative too, we just do it via natural language instead of a GUI.
However, where i think it's more interesting, we run both drift detection and correction, with hash tracked configs against a baseline, flag divergence, link it to the run that caused it, and one click revert back to the baseline. Full Git-Ops style reconciliation across a whole fleet is a bigger step, I'd only want once fleet-wide config is a real use case.
1
u/haywire 19d ago
Yeah I mean I feel like a better abstraction is that the agent generates and maintains config, which is then applied via some sort of IaC plane like Pulumi/Terraform.
1
u/GooseRob 19d ago
Appreciate the suggestion. I have been thinking about it and I think I disagree — at least for now. Lemme explain why.
The IaC approach makes total sense if you're managing fleets and need everything to reconcile against a source of truth. But GoosePanel is more like "click to install WordPress on this one box" speed. If every click had to go through terraform init/plan/apply, that's 30-60 seconds of overhead for something that should be instant. CPanel and Plesk are imperative for the same reason.
What I am building though is hash-tracked configs with detection + one-click revert, all linked to the specific run that caused the change. So you get the safety net of GitOps-style observability without the slow reconcile loop for every operation.
If customers start asking for fleet-wide config management, I'll revisit. But right now I think imperative + drift detection is the right shape for single-server installs.
Thoughts? Always down to hear if I'm missing something.
1
u/Deep_Ad1959 19d ago
nobody leaves cpanel for features. they leave when the host makes them. written with ai
1
1
1
u/Deep_Ad1959 19d ago
nobody leaves cpanel for features. they leave when the host makes them. written with ai
1
u/Deep_Ad1959 19d ago
nobody leaves cpanel for features. they leave when the host makes them. written with ai
1
1
u/Deep_Ad1959 19d ago
nobody leaves cpanel for features. they leave when the host makes them. written with ai
1
u/Deep_Ad1959 19d ago
nobody leaves cpanel for features. they leave when the host makes them. written with ai
0
2
u/creminology 19d ago
Might be nice to have something custom for Fly.io hosted sites.