A web application for managing an archery club — built for Les Archers de Bordeaux Guyenne, free and open-source under the AGPL v3 licence.
Archery Manager is the tool that keeps your club organised. Here is what it does:
Browse and search the full list of club members with photos, contact details, and current licence information. Profiles are synchronised automatically with the FFTA (French Archery Federation) so data stays up to date without manual entry.
- Training sessions — see who is coming, mark yourself present or absent.
- Competitions — register for contests, choose your target type and departure time, track whether you are going, interested, or not attending.
- Calendar view — all upcoming events in one place, filterable by type.
Track your bow and arrow configurations, record sight adjustments for different distances, and consult the club's equipment inventory.
Results from official contests can be imported and browsed by season. Scores and rankings are stored per archer.
New members can submit a membership application online. Admins can approve, place on a waiting list, or reject applications.
Coaches can publish practice advice and attach documents (PDFs, images) that members can access at any time.
Whether you are an archer, a coach, or someone with ideas for improvement, your input is welcome — technical or not.
- Email: [email protected]
- GitHub Issues: github.com/dehy/archery-manager/issues
| Layer | Technology |
|---|---|
| PHP | 8.5+ (strict types, readonly properties) |
| Framework | Symfony 7.4 |
| Database | MariaDB 12.1 + Doctrine ORM 3.x |
| API | API Platform 3.x |
| Templates | Twig 3.x |
| CSS | Bootstrap 5.3 + custom SCSS |
| JavaScript | TypeScript + Stimulus (Hotwired) |
| Icons | Font Awesome 7.2+ Free |
| Build | Webpack Encore 4.x |
| Auth | Symfony Security (form login, remember me, impersonation) |
| Messaging | Symfony Messenger + Scheduler |
| Containerisation | Docker Compose + FrankenPHP |
Prerequisites: Docker and Docker Compose installed.
# Build (if needed) and start all containers
make start
# Install PHP and JavaScript dependencies
make depsServices available at:
| Service | URL |
|---|---|
| Application | http://localhost:8080 |
| Adminer (database GUI) | http://localhost:8081 |
| Mailcatcher (email preview) | http://localhost:1080 |
- Type: MySQL
- Server:
database - Username:
symfony - Password:
ChangeMe - Database:
app
All PHP/Symfony/Composer commands must run inside the Docker container:
docker compose exec -u symfony -w /app app bin/console <command>
docker compose exec -u symfony -w /app app composer <command>
# Or open an interactive shell
make shell# Generate a migration after changing entities
docker compose exec -u symfony -w /app app bin/console make:migration
# Apply pending migrations
make migratedb# Run Rector + PHP CS Fixer + PHPStan
make qaAll three tools must pass before committing.
# Full CI-equivalent run (recommended before pushing)
make test
# Quick local loop — recreate test DB, load fixtures, run suite
docker compose exec -u symfony -w /app app sh -c '
APP_ENV=test bin/console doctrine:database:drop --force --if-exists &&
APP_ENV=test bin/console doctrine:database:create &&
APP_ENV=test bin/console doctrine:migrations:migrate --no-interaction
'
docker compose exec -u symfony -w /app app sh -c \
'APP_ENV=test bin/console hautelook:fixtures:load --no-interaction'
docker compose exec -u symfony -w /app app bin/phpunit --exclude-group=disabledThe application synchronises member and licence data from the FFTA "Espace Dirigeant" portal via a custom web scraper (FftaScrapper). Synchronisation can be triggered manually from the admin panel or runs automatically via the scheduler-ffta-licensees Docker service.
| Command | Description |
|---|---|
make start |
Build images (if needed) and start services |
make stop |
Stop all services |
make shell |
Open a shell as the symfony user |
make deps |
Install PHP + JS dependencies |
make qa |
Run all code quality tools |
make migratedb |
Apply database migrations |
make test |
Run the full test suite in an isolated container |
src/
Controller/ HTTP controllers
Entity/ Doctrine entities (domain model)
Form/ Symfony form types
Repository/ Custom Doctrine queries
Helper/ Business logic services
DBAL/Types/ Custom Doctrine enum types
Command/ Console commands (FFTA sync, result import…)
Scrapper/ FFTA web scraping
assets/
controllers/ Stimulus controllers (TypeScript)
styles/ SCSS stylesheets
templates/ Twig templates
migrations/ Doctrine migrations
fixtures/ Test data (YAML)
docker/ Dockerfiles, PHP/Nginx config, build scripts