Volunteers Management App for UCESCO-Africa is a 501(c)(3) nonprofit charity organization, rooted in the community, to promote Education, Health, and Economic Development in Africa
# Mikono
UCESCO Volunteer Manager (VM) — a Symfony 8.1 web app so UCESCO's
Volunteer Manager can track volunteers working at UCESCO's projects in
Kibera (Nairobi) and Mombasa. v0.1 scope: login-protected CRUD for
Volunteers, Projects, Activity Types, Users, and Activities (the log
entries), plus a basic per-volunteer/per-project report.
## Quick start
```bash
docker compose up -d --wait # start (first run auto-bootstraps the app)
docker compose down # stop — the SQLite data survives (named volume)
```
You can interact with Symfony CLI and the SQLite DB:
```bash
docker compose exec php bin/console
docker compose exec php bin/console dbal:run-sql "SELECT * FROM user"
docker compose exec php bin/console app:user:create \
--email=SOMEONE@gmail.com --full-name="Some One" --password=SOMEONE --admin
```
App: `
localhost` (self-signed cert — accept the browser
warning). No host PHP/Composer install is needed — everything runs
through Docker + FrankenPHP. A seeded login is created via
`app:user:create` — see `AGENTS.md` rather than looking
credentials up here; the command is idempotent, so re-run it to reset
the password.
## Contributing
### Running tests
```bash
docker compose exec php php bin/phpunit
```
### Quality checks
Before committing, run the full toolchain — static analysis, style,
and dependency audit:
```bash
docker compose exec php composer quality # cs-check + phpstan + phpat + security-audit
docker compose exec php composer cs-fix # auto-fix style issues
docker compose exec php composer rector # preview refactors (dry-run only — review before applying)
```
- **PHPStan** runs at level `max` against `src/` and `tests/`.
- **PHP-CS-Fixer** enforces `@Symfony` + `@PER-CS2.0`.
- **PHPat** enforces the one architecture rule from ADR 0004
(`Entity` must not depend on `Controller`/`Twig`).
- **Rector** is preview-only — never apply its output without
reviewing the diff first; it can produce technically-valid but wrong
refacto …