Nexmin (this product): nexmin.net
Omiiba (official): omiiba.dev · omiiba.com
Nexmin is a modern English UI layer on top of VirtualMin / Webmin — not a fork. Domains, email, databases, DNS, SSL, server management, and Webmin login links with role-based access (admin / client).
Status: Work in progress — UI phases 1–8 are implemented; production testing on a separate VPS is planned.
- Node.js 20+
- VirtualMin with Remote API (
remote.cgi) for production - Optional: dedicated VPS for testing only (docs/TEST-VPS.md)
git clone https://github.com/macdirtycow/nexmin.git
cd nexmin
cp .env.example .env.localIn .env.local:
SESSION_SECRET=a-long-random-string-at-least-16-characters
VIRTUALMIN_MOCK=truenpm install
npm run devOpen http://localhost:3000 — on first start, data/users.json is created from data/users.example.json:
| User | Default password | Role |
|---|---|---|
admin |
changeme |
administrator |
klant |
changeme |
client (mock: voorbeeld.nl) |
Change these passwords before you share or deploy anything:
node scripts/hash-password.mjs your-passwordDeploy the panel at https://nexmin.net (see deploy/nginx-nexmin.conf).
.env.localon the server (do not commit) — see .env.example.VIRTUALMIN_MOCK=falseVIRTUALMIN_URL,VIRTUALMIN_USER,VIRTUALMIN_PASS(often127.0.0.1:10000when Nexmin and VirtualMin share a VPS)WEBMIN_UI_URL/USERMIN_UI_URL— public URLs of Webmin/Usermin on your host (not necessarilynexmin.net)- API test:
npm run test-api - Build:
npm run build && npm run start - Nginx + TLS for
nexmin.net: deploy/nginx-nexmin.conf
For self-signed TLS on port 10000: prefer a valid certificate; otherwise temporarily NODE_TLS_REJECT_UNAUTHORIZED=0 (testing only).
Static landing page matching the Nexmin panel UI — upload to your web root:
bash scripts/build-marketing-zip.shOutput: dist/nexmin-site-upload.zip (extract and upload; see marketing-site/README-UPLOAD.txt).
| File | Contents |
|---|---|
| docs/PHASES.md | Integration phases and API routes |
| docs/API.md | MVP VirtualMin commands |
| docs/TEST-VPS.md | Testing on a separate VPS |
| Phase | Scope |
|---|---|
| 1–2 | Domains, email, DB, DNS, SSL, aliases, redirects, backups |
| 3 | Files (Nexmin mock / Webmin live), logs, PHP, protected directories |
| 4–6 | Lifecycle, scripts, cron, extended mail, FTP |
| 7–8 | Server/reseller admin, cloud S3, system config |
Active phase: IMPLEMENTED_PHASE in src/lib/features.ts. In-app overview: /fases.
Browser → Nexmin (Next.js, auth, RBAC, English UI)
↓ server-side only
virtualmin.ts → remote.cgi
↓
VirtualMin / Webmin on host :10000
- Auth: JWT (httpOnly), users in
data/users.json(local, not in git) - RBAC:
src/lib/rbac.ts+src/lib/features.ts - Webmin:
src/lib/webmin.ts—create-login-link(root / domain / Usermin) - Audit:
data/audit.log
src/app/ Next.js routes (UI + API)
src/lib/ virtualmin, webmin, rbac, auth
src/components/ UI per domain / admin
data/ users.example.json (template), users.json (local)
deploy/ nginx example
docs/ phases, API, test VPS
scripts/ test-api, hash-password
| Command | Purpose |
|---|---|
npm run dev |
Development server |
npm run build |
Production build |
npm run test-api |
Remote API connectivity (Phase 0) |
All Rights Reserved. This repository is public for transparency and reference only. You may not use, copy, modify, or distribute the code without written permission from the copyright holder. See LICENSE.