Flus is using PHP 8.2+. The version isn’t strongly fixed and can change. While I’ll do my best to keep things simple, remember that easy installation is not my main priority. The minimal PHP version is usually following the version of the production server which run on Debian. Some PHP dependencies in development are managed with Composer.
It’s using a personal PHP framework: Minz. The framework is directly integrated in the source code (as a submodule) since it’s intended to evolve with the application.
The only supported database is PostgreSQL 13+ because I use specific features from it. I will not add support for other databases.
The asynchronous jobs, such as emails sending, are handled by a PHP script. The worker should be configured as a OS service (e.g. systemd service), or can be handled via a CRON task (but with less efficiency).
The assets (CSS and JS) are bundled with esbuild. The JavaScript relies on both Stimulus (“a modest JavaScript framework”) and Turbo (used to speed up navigation on the application). The dependencies are managed with NPM, the default Node package manager. NPM is not needed in production because I bundle assets and add them in the repository at each new release.
The test suite is runned over GitHub Actions. It’s using PHPUnit 9 as a testing framework and PHP_CodeSniffer as a linter for the PHP files. JS files are linted with ESLint and CSS files with stylelint.
The development environment is powered by Docker and Docker Compose setting up
5 containers: a PHP server, a Nginx server, a job worker, a PostgreSQL database and
a Node container running esbuild in watch mode. See the docker/
folder
for more information.