Vibe coding a VestaCP alternative
This is a placeholder for things to come.
It will be a journey, and I want you all with me.
I will make some decisions that probably will make you all question me as a person.
Well, we all have our preferences; sometimes we don't agree, and that is fine.
The initial plan for this "fun" project is to vibe-code most parts. Manual edits of files will be kept at a minimum.
I will share some of the prompts, often the larger ones that make a lot of changes to the codebase.
Plans will be shared here, and of course the GitHub URL.
All when available.
I'm writing this to let you know about the plan. I hope there will be some updates later tonight.
Right now I have other pressing business to attend to.
“Technology is best when it brings people together.” – Matt Mullenweg




Comments
Enjoy ! Have fun ! And enjoy again .
I believe in good luck. Harder that I work ,luckier i get.
This is going to be fun.
TierHive - Hourly VPS - NAT Native - /24 per customer - DE, UK, SG, CA, USA x4, FR x2, AU, PL, NL, JP
FREE tokens on sign up, try before you buy. | Static Hosting Free for life: https://tierhive.com/static-hosting/
Vibe the vibe, it will be fun
BillingServ - Easy, simple, and hassle-free online invoicing solution. Contact us today.
White Label VPN | Software Licensing Billing | WHMCS Alternative
Best of luck :-)
What set up are you planning to use? agent, model, expected costs?
This will be coded by Claude, my AI-assistant. The models and efforts will vary, depending on how many tokens I have left on my company account.
I had very little time this evening, so I started by putting on the Plan hat on Claude, feeding this prompt.
And after many, long, boring minutes ..... this plan was formed, almost 2500 words.
Plan: LESta Hosting Control Plane Rewrite
TL;DR: Rebuild the Vesta product as a Laravel 13.17 and React 19 control plane, preserving the compact hosting-panel workflows while replacing privileged PHP shell execution, flat-file state, wildcard sudo, and executable queues. The first implementation milestone is a complete web-hosting vertical slice on Ubuntu LTS with a Go node agent boundary. Mail remains an MVP capability, but is isolated as a separately gated subsystem because it carries the highest abuse and operational risk.
Steps
Phase 0, decisions and product contract
src/react/src/containers/ControlPanelContent,src/react/src/components/MainNav,web/inc/i18n/en.php,web/add,web/edit,web/delete,web/suspend,web/api/v1,bin/v-*,data/packages, anddata/users. Record resource fields, lifecycle verbs, quotas, suspension semantics, role visibility, and cross-resource effects. Treat the Claude artifact as supplementary only because it is not publicly readable from this environment.RunCommand, no arbitrary command-plus-arguments API, noexecfrom controllers, no wildcard sudo, no raw user filesystem paths, no secrets in props/logs/job payloads, and no executable queue files.Phase 1, control-plane foundation
session.lookuser switching without an explicit, audited impersonation model.Phase 2, first vertical slice, web hosting
WebProvisionerand a fake adapter first, followed by the Go agent capability for staged configuration rendering, ownership and permission assignment, syntax validation, atomic activation, service reload, health check, and rollback. Laravel must never execute host commands directly. Operations must be bounded, idempotent, retryable, observable, and safe after lost responses.Phase 3, core resource slices
Phase 4, higher-risk operations
Phase 5, frontend parity and operations
resources/js/components/{web,dns,mail,databases,cron,files,server,backups}and page props underresources/js/types. Use generated@/routesand@/actionsfor every backend call. Keep global Inertia props limited to authenticated identity, current account, permissions needed for navigation, and flash data.Phase 6, review, optimization, and release
Relevant files
-
/Users/mikho/Herd/LESta/composer.jsonand/Users/mikho/Herd/LESta/package.json, current Laravel 13.17, Inertia 3, React 19, Fortify, Wayfinder, Pest, and Tailwind 4 baseline. Do not add dependencies without approval.-
/Users/mikho/Herd/LESta/routes/web.phpand/Users/mikho/Herd/LESta/routes/settings.php, authenticated Inertia route boundaries and settings conventions.-
/Users/mikho/Herd/LESta/app/Models/User.phpand/Users/mikho/Herd/LESta/app/Http/Middleware/HandleInertiaRequests.php, identity and minimal shared props.-
/Users/mikho/Herd/LESta/app/Actions/Fortify/,/Users/mikho/Herd/LESta/config/fortify.php, and/Users/mikho/Herd/LESta/app/Providers/FortifyServiceProvider.php, existing authentication extension points.-
/Users/mikho/Herd/LESta/database/migrations/,/Users/mikho/Herd/LESta/database/factories/, and/Users/mikho/Herd/LESta/app/Models/, ordered schema, factories, relationships, casts, and lifecycle state.-
/Users/mikho/Herd/LESta/app/Http/Controllers/,/Users/mikho/Herd/LESta/app/Http/Requests/,/Users/mikho/Herd/LESta/app/Policies/, and/Users/mikho/Herd/LESta/app/Actions/, thin HTTP boundaries, validation, authorization, and use cases.-
/Users/mikho/Herd/LESta/app/Jobs/,/Users/mikho/Herd/LESta/app/Events/,/Users/mikho/Herd/LESta/app/Listeners/,/Users/mikho/Herd/LESta/app/Console/Commands/, and/Users/mikho/Herd/LESta/routes/console.php, durable provisioning, outbox processing, usage, backups, and scheduler integration.-
/Users/mikho/Herd/LESta/app/Contracts/and/Users/mikho/Herd/LESta/app/Services/, typed provisioner contracts, agent client, idempotency, secrets, path safety, and query/read services.-
/Users/mikho/Herd/LESta/resources/js/app.tsx,/Users/mikho/Herd/LESta/resources/js/layouts/,/Users/mikho/Herd/LESta/resources/js/pages/,/Users/mikho/Herd/LESta/resources/js/components/,/Users/mikho/Herd/LESta/resources/js/types/, and/Users/mikho/Herd/LESta/resources/css/app.css, the existing Inertia shell, pages, reusable UI, types, and theme.-
/Users/mikho/Herd/LESta/resources/js/routes/,/Users/mikho/Herd/LESta/resources/js/actions/, and/Users/mikho/Herd/LESta/resources/js/wayfinder/, generated route/controller contracts, never hand-edited.-
/Users/mikho/Herd/LESta/tests/Pest.php,/Users/mikho/Herd/LESta/tests/Feature/,/Users/mikho/Herd/LESta/tests/Unit/, and/Users/mikho/Herd/LESta/tests/Browser/, feature, unit, architecture, and browser coverage.-
/Users/mikho/Herd/LESta/.github/workflows/, CI and release checks. The Go agent should be a separately versioned deployable component, not embedded in Laravel request execution.- Legacy references:
https://github.com/outroll/vestapathsbin/,web/api/v1/,data/packages/,data/users/,install/,src/deb/,src/rpm/, andsrc/react/src/. Use them for contract extraction only, never as implementation templates.Verification
1. Before implementation, approve the threat model, capability matrix, MySQL/MariaDB version target, Ubuntu LTS version, mail stack support matrix, and first-slice acceptance criteria.
2. For the web slice, run the narrow Pest tests first, then Pint, PHPStan, ESLint, Prettier, TypeScript, Wayfinder generation, and the production Vite build.
3. Assert every mutation is policy-authorized, transactionally persisted, dispatched after commit, idempotent under retry, serialized per resource/node where required, and visible as a structured provisioning state.
4. Run security tests for tenant isolation, CSRF, MFA gates, rate limiting, command injection, path traversal, archive extraction, secret redaction, agent authentication, replay, and privilege boundaries.
5. Run reliability tests for duplicate operations, lost responses, offline agents, stale versions, invalid service configuration, rollback, partial subsystem failure, disk-full, backup corruption, and restore.
6. Manually verify the primary React workflow at desktop and mobile widths, role-aware navigation, loading/error/empty states, destructive confirmations, dark mode, accessibility, and absence of browser JavaScript errors.
7. Before production, rehearse signed installation, node bootstrap, database migration, queue/scheduler health, backup restore, alerting, rollback, and controlled feature enablement.
Decisions
- The requested first release is core hosting plus self-hosted mail, not billing.
- Deployment starts as one Ubuntu LTS node but every resource is node-assigned and the protocol is multi-node ready.
- Provider administrators and customers are the initial tenancy model. Reseller nesting is reserved until the account/membership model is proven.
- MySQL/MariaDB is a hard requirement. PostgreSQL is not used unless a later ADR changes the decision.
- A Go system service is the recommended node-agent implementation.
- Fresh installs are the initial migration strategy. Vesta import/coexistence is later and dry-run first.
- Web hosting is the first implementation milestone. Mail is MVP scope but must be gated behind its own capability, threat model, and operational readiness review.
- Preserve UI vocabulary, navigation patterns, and resource workflows. Do not preserve legacy URLs, shell command names, flat-file state, or unsafe privilege assumptions.
- No production implementation should begin until this plan is approved. No commit or branch creation is part of this plan.
Tradeoff analysis
- MySQL/MariaDB meets the stated requirement and is familiar in hosting environments, but PostgreSQL would provide stronger native constraints and more flexible reporting primitives. The design compensates with strict schema constraints, indexed relational read models, and explicit application services.
- A Go agent adds a second deployable component and release pipeline, but it creates the necessary privilege boundary and keeps Laravel horizontally scalable. A PHP/Bash adapter would be faster only for a prototype and would recreate the main risk.
- Self-hosted mail preserves Vesta parity and customer control, but it creates abuse, reputation, deliverability, storage, and incident-response obligations. It is therefore isolated, quota-limited, observable, and gated rather than mixed into generic domain provisioning.
- A relational source of truth plus asynchronous reconciliation is more complex than direct config writes, but it enables transactions, retries, auditing, drift detection, rollback, multi-node growth, and recoverable failures.
Scope boundaries
- Included in the plan: authentication, authorization, accounts, packages, quotas, web, DNS, mail, databases, cron, backups, node health, typed provisioning, audit, responsive React UI, testing, and production operations.
- Excluded from the first implementation slice: billing, Vesta import, broad OS support, reseller nesting, unrestricted file manager, arbitrary firewall/service editors, plugin marketplace, and full multi-node failover.
- The current environment does not contain the legacy Vesta checkout, and the linked Claude artifact is unavailable without access. Exact field mappings and vulnerability claims must be confirmed against a pinned commit and representative production data before migration work.
Tomorrow I will read all these words, form an opinion on the content, and probably run a couple of more prompts on it before any code is written.
Question to the audience .... should the original UI be kept or should a more modern UI be built?
“Technology is best when it brings people together.” – Matt Mullenweg
I've been accused of "vibe coding" enough that I have to defend myself in advance every time I talk about it. I do not "vibe code" anything that meets two requirements: public facing, contains or can access anything of consequence.
But when the job is something where you compromising it just makes me laugh and delete it, it's super fun to just explain what you want, sit back, and watch it go. It's easily as entertaining as a good movie. I've got a ton of projects just sitting in a folder that were vibe coded just to see what the AI could do on its own. Sometimes they're even useful because the AI figured out a way to do something that you were struggling with, so you get to take that concept back to production code.
Do everything as though everyone you’ll ever know is watching.
Can I also share some of Vibe Coded Server Panel I found for your references?
https://microlxc.net/
Sure, why not.
“Technology is best when it brings people together.” – Matt Mullenweg
I'm not sure if this fits to your topic, but here you go:
100% Vibe Coding.
https://microlxc.net/
Thanks!
I’m sure there are keywords in there that I can use when writing the prompts.
Don’t want to miss out on the security and features.
“Technology is best when it brings people together.” – Matt Mullenweg