v0.5.0 — Admin portal, dynamic plans & GHCR image publishing
Highlights
- Full-stack image publishing — the Asterisk + FreePBX image is now built and pushed to GHCR (
ghcr.io/innotelinc/pbx-portal:*-fullstack) automatically on every push to master and on releases.docker-compose.full.ymlpulls the prebuilt image, so fresh deployments start in minutes instead of a 45-90 min local build (docker-compose.full.build.ymlretains the local-build path). - Admin portal — admin user CRUD, dynamic plan management with Stripe price auto-sync, billing fixes, password change.
- Dashboard rewrite — modern UI with light/dark theme toggle, live device-state polling, loading skeletons, health dashboard page.
- Phone management — number release, FreePBX extensions API restored (GQL patches, OAuth scopes, portal schema).
- Softphone / WebRTC — AMI Originate & Hangup, configurable WSS URL (settings UI + ws.innotel.us), WSS cert regeneration, PJSIPShowEndpoint event parsing, many stability fixes.
Fixes
- Demo login — runtime-generated hash + self-healing seed repair
- AMI handler crash on Local-channel calls (call_history user_id NULL)
- Asterisk watchdog + FreePBX module repair + MariaDB persistence
- FreePBX module persistence across reboots and rebuilds
- AMI health probe (ping-based), reconnect race removed, AMI credential sync on startup,
ucp_eventsuser restore - Health probes — VoIP.ms
getBalance, FreePBX HTTP connectivity check, run concurrently - Portal binds to 0.0.0.0 (fixes EADDRNOTAVAIL), stale root-owned data volume self-heal, AppArmor handling
- Theme-aware dropdowns, light-mode fixes, lazy-loaded softphone, session verification after login
Full changelog (37 commits)
$(git log v0.4.4..master --format='- %h %s')