A full-featured Symfony 8 / PHP 8.5 example application demonstrating web authentication, a JWT REST API, an admin panel, database fixtures, and a scheduler — all running inside a devcontainer with swappable database backends (PostgreSQL, MySQL, SQLite).
Requires Docker + VS Code Dev Containers (or local PHP 8.5) and mise.
# 1. Open the project in its devcontainer
# 2. Create .env — see docs/getting-started.md for the template
mise run setup # install deps, generate secrets, create DB, migrate
mise run dev # start Caddy + PHP-FPM + Scheduler → http://localhost:8000
mise run db:seed # optional: demo accounts (admin@example.com / password)PostgreSQL 18, MySQL 8.4, Redis 8, and Mailpit run alongside the app container and
are reachable on 127.0.0.1 at their default ports; Caddy serves the app on
localhost:8000 and Mailpit's UI is on localhost:8025. Details in
docs/services.md.
Upgrading from PostgreSQL 17? Recreate the data volume:
docker volume rm symfony-poly-stack_postgres-data— see docs/services.md.
| Topic | |
|---|---|
| Getting Started | Requirements, .env template, setup, dev server |
| Services & Devcontainer | Bundled services, networking, Codespaces support |
| Application Guide | Web routes, JWT API, admin panel |
| Database | Connections, backend switching, migrations, fixtures |
| Mise Tasks | Full task reference |
| Testing & Code Quality | PHPUnit, PHPStan level 8, Rector, php-cs-fixer |
| Dagger CI | Containerized quality suite (mise ci) |
| Architecture | Tech stack and project layout |
mise run test # PHPUnit suite
mise run quality # lint + analyse + rector + test, concurrently
mise run ci # same suite in Dagger containers (run from the host)
mise run db:use sqlite # switch database backendThe full list: docs/tasks.md.
Licensed under the GNU Affero General Public License v3.0 or later
(AGPL-3.0-or-later).