phlo / dashboard
Control center for a Phlo deployment: monitor your fleet, manage MySQL and SQLite databases from the browser, and handle notifications, subscriptions and WhatsApp from one place.
Requires
Suggests
- ext-pdo_sqlite: SQLite connections (dbadmin module)
- ext-sodium: Encryption in the security resource
This package is auto-updated.
Last update: 2026-07-03 22:08:12 UTC
README
Admin and monitoring dashboard for the Phlo stack. It bundles fleet monitoring, a notifications inbox, WhatsApp status, subscriptions and a built-in database manager for MySQL and SQLite.
The Dashboard is the operations layer of the Phlo platform: one place to oversee every app, server and domain built on the Phlo engine. Not to be confused with the Phlo Control Center, the per-app dev panel built into the engine itself.
Features
- Fleet overview: real time status of every host and app across the fleet (uptime, CPU, memory, disk, errors, visitors).
- Database admin (
dbadmin): browse and edit rows, a full structure editor with column reordering, indexes, foreign keys, privileges, an SQL console, import and export, foreign key navigation, database wide search and server status. Works with MySQL and SQLite. - Notifications: a server scoped inbox; apps push notifications via a secret protected endpoint.
- Subscriptions: users subscribe to (server, event) pairs and get proactive WhatsApp or dashboard delivery.
- WhatsApp: overview of all Phlo WhatsApp instances across the fleet.
- Visitors, domains, sites: visitor analytics and host/domain management.
- Multi user: roles plus per server and per module permissions.
Host discovery
The fleet overview discovers apps and hosts from your web server config. By default it reads Caddy site files (sites/*.caddy). Discovery is pluggable per node via creds.ini:
[discovery] sources = caddy, nginx nginx = /etc/nginx/sites-enabled/*
sources is a comma list of adapters (default caddy). The nginx adapter reads server_name from each server { ... } block (brace-depth aware, so nested location blocks are handled), folds www. into aliases, and flags redirect-only blocks (return 30x or a permanent rewrite). Results from all sources are merged and deduped by primary host. The monitoring layers on top (reachability, metrics, visitors) are web server agnostic; errors, version and rebuild stay Phlo specific.
To support another web server, add a <name>Apps() adapter returning the canonical app records and list its name in sources.
Requirements
- PHP 8.3 or newer with
ext-pdo,ext-pdo_mysql(the app stores its data in MySQL) andext-apcu(login rate limiting);ext-pdo_sqlitefor the SQLite side of the database admin - FrankenPHP
- phlo/tech and phlo/cms, pulled in via Composer
Install
composer create-project phlo/dashboard mydashboard
Then set up the node local config:
- Copy
www/app.php.exampletowww/app.phpand set your host and paths. It keepsbuild: true(development): the app compiles on demand andbuild::runis available. - Copy
data/app.example.jsontodata/app.json. - Create
data/creds.ini(MySQL connection, fleet peers, alert and notify endpoints) and, for HTTP basic login,data/auth.ini. - Build the app:
php www/app.php build::run - Serve with FrankenPHP.
For production, deploy the compiled output and a second entrypoint with build: false (the build:: tools are development-only and are absent under build: false).
License
MIT. See LICENSE.

