Backend: real endpoints for role-permission overview, MQTT broker settings (with live reachability check), and SQLite backup download/restore (new system.manage permission, super-admin only; restore validates the SQLite file header and keeps a pre-restore safety copy). Desktop frontend: Roles (read-only permissions view), MQTT Settings, Backup & Restore wired to those endpoints; plus static AdminLTE-matching shells for Profile, Settings (embeds the real 2FA flow in its Security tab), Invoice, Calendar (FullCalendar), Chat, File Manager, and Projects. Mobile frontend: new frontend/src/styles/mobile.css, a from-scratch design system (purple theme, cards, slide-out sidebar, bottom tab bar) scoped entirely under a .mob-app root and mob- prefixed classes so it can never collide with the desktop Bootstrap/AdminLTE styling. Rebuilt TopBar/ BottomNav, added a new SlideOutNav, and reskinned the Dashboard and Users pages to it with real data.
webappAIO LXC Bootstrap
Spin up a fully configured development container in one step: SSH, Apache/PHP/SQLite, the Laravel API backend (backend/) + React/Vite frontend (frontend/) from this repo, a self-hosted Mosquitto MQTT broker (Docker), code-server, and Claude Code — all from a single command pasted into a fresh Proxmox LXC.
Quick start
In an empty, freshly created LXC, logged in as root:
curl -fsSL https://git.innovator.bh/ghassan/webappAIO/raw/branch/main/bootstrap.sh -o bootstrap.sh && bash bootstrap.sh
You'll be prompted for:
- Project name
- Seeded Super Admin email/username/password
The script always clones this repo (https://git.innovator.bh/ghassan/webappAIO.git) — the full RBAC + 2FA + MQTT-realtime + Users-management app described in claude-project-prompt.md — and always uses SQLite. Neither is prompted for.
When it finishes you'll have a running API, a Mosquitto broker, code-server, and Claude Code installed, plus a Super Admin account ready to log in with.
Fully unattended install
Skip every prompt by exporting variables before running the script (useful for scripted LXC provisioning):
APP_NAME=myapp \
SUPER_ADMIN_EMAIL=admin@myapp.test \
SUPER_ADMIN_USERNAME=admin \
SUPER_ADMIN_PASSWORD='change-me' \
INSTALL_CODE_SERVER=yes \
INSTALL_CLAUDE_CODE=yes \
bash bootstrap.sh
| Variable | Description | Default |
|---|---|---|
APP_NAME |
Project directory name under /var/www |
laravel-app |
SUPER_ADMIN_EMAIL |
Seeded Super Admin email | superadmin@example.com |
SUPER_ADMIN_USERNAME |
Seeded Super Admin username | superadmin |
SUPER_ADMIN_PASSWORD |
Seeded Super Admin password | random |
INSTALL_CODE_SERVER |
Install code-server | yes |
INSTALL_CLAUDE_CODE |
Install Node.js + Claude Code | yes |
FIX_SSHD |
Auto-relax sshd config (TurnKey TCP forwarding / Ubuntu root login) | yes |
What the script does
- Base system —
apt update/upgrade, installssudo curl git wget unzip. - SSH — installs and enables
openssh-server; on TurnKey Core containers enablesAllowTcpForwarding, on other distros enablesPermitRootLogin yes(needed for VS Code Remote-SSH / port tunneling). - Docker + Mosquitto — installs Docker Engine + Compose plugin, generates per-role Mosquitto broker credentials, brings up the
mosquittocontainer (MQTT on 1883, WebSockets on 9001). - Laravel + React stack — Apache, PHP + SQLite extension, Composer, Node.js, clones this repo into
backend/(Laravel) andfrontend/(Vite React-TS), sets permissions, configures an Apache vhost pointing atbackend/public, generates.env(DB, MQTT, Super Admin, Sanctum/CORS), runskey:generate,migrate, anddb:seed. - Queue worker — installs and starts a systemd unit (
<app-name>-queue) runningphp artisan queue:work, required for MQTT events to actually publish. - code-server — browser-based VS Code, so you can edit the app over SSH without a local editor.
- Claude Code —
npm install -g @anthropic-ai/claude-code. - Prints a summary with the app path, container IP, Super Admin credentials, and next steps.
After install
- Edit the app:
code-server /var/www/<app-name>then open the tunneled port (8080) in your browser. - Use Claude Code:
cd /var/www/<app-name> && claude - Run the frontend dev server:
cd /var/www/<app-name>/frontend && npm run dev -- --hostthen tunnel port 5173. - Log in: the Super Admin credentials printed at the end of setup (also in
backend/.envasSUPER_ADMIN_*).
Manual SSH config notes (if you skip FIX_SSHD)
TurnKey Core:
nano /etc/ssh/sshd_config.d/turnkey.conf
# set: AllowTcpForwarding yes
Ubuntu:
nano /etc/ssh/sshd_config
# set: PermitRootLogin yes
Standard Claude Code project prompt
For a consistent architecture baseline (mobile-first React frontend, Laravel API backend, RBAC, MQTT real-time updates, SQLite↔PostgreSQL portability, security-first defaults), start every new Claude Code session in the project with claude-project-prompt.md as the system/instruction prompt.