PHEngine is a PHP/Fat-Free Framework application with a React administration UI. It exposes a same-origin JSON API for session authentication, navigation, notifications, encrypted configuration, and user administration.
PHP 8.5+, Fat-Free Framework 3.9, MySQL via F3 DB\SQL, React 19, React Router 7, MUI 9, Tailwind CSS 4, and Vite 7.
index.php boots F3, loads cfg/config.bin, then discovers PluginStrategy subclasses from src/. Core\Api\Api registers /api/v1 routes; React in ui/app consumes them through a same-origin client.
composer install · npm ci · npm run buildDev · npm run buildProd · npm run watch · npm pack. Copy cfg/config.ini.example to the ignored cfg/config.ini and provision cfg/config.bin outside the repository. No test, lint, deploy, or configuration-generation command is declared.
Use PSR-4 namespaces under Core\ and Modules\; match nearby PHP style and declare(strict_types=1) in modern API code. Preserve frontend import/component conventions; .prettierrc defines single quotes, semicolons, LF endings, and 200-column print width.
PluginStrategy.src/Core/Api/Api.php; controllers must return JSON through Controller helpers.username|password input to password hashing; a username change requires a new password.cfg/config.bin and its plaintext source as sensitive configuration; preserve backup/restore behavior on writes.assets/app/ aligned with the Vite build; do not manually edit its hashed assets.React pages use MUI components plus Tailwind utility classes. theme.js defines the palette, navigation colors, typography, and radius; AppShell renders the responsive dark navigation drawer with route-aware selection.
Do not bypass F3 session/CSRF checks, expose password hashes or configuration values, relax database uniqueness/locking safeguards, or add a frontend route without matching authorized navigation/API behavior.
Inspect the applicable spec before changing Tier 1 modules. Make the smallest compatible change, then review route, authorization, configuration, and generated-asset implications. No automated test suite is configured.
When you modify code, update the relevant file in specs/.