Core Development¶
Welcome to the MeetAgain core development guide. This section covers everything you need to contribute to the core application — from understanding the layer architecture to writing tests and following code conventions.
What's in the core¶
MeetAgain is organized into distinct subsystems. Each is self-contained and communicates through services and repositories:
| Subsystem | Directory | Description |
|---|---|---|
| Events | src/Entity/Event*, src/Service/EventService.php |
Event creation, RSVP, recurring rules, comments |
| CMS | src/Entity/Cms*, src/Service/CmsService.php |
Content pages, blocks, menu locations |
| Members | src/Entity/User.php, src/Service/MemberService.php |
User profiles, membership status |
| Users & Auth | src/Security/, src/Controller/SecurityController.php |
Login, registration, roles |
src/Entity/EmailTemplate*, src/Service/EmailService.php |
Template-based transactional email | |
| Config | src/Entity/Config.php, src/Service/ConfigService.php |
Key/value application settings |
| Plugin System | src/Plugin.php, src/Filter/ |
Plugin interface, filter contracts |
| Activity Log | src/Entity/Activity.php, src/Service/ActivityService.php |
Audit trail of user actions |
| Announcements | src/Entity/Message.php |
Site-wide announcements |
| Translations | translations/, src/Service/TranslationService.php |
EN/DE/CN YAML translation files |
| Hosts | src/Entity/Host.php, src/Service/HostService.php |
Event host/organizer groups |
Architecture at a glance¶
The application follows a strict four-layer architecture:
| Layer | Responsibility |
|---|---|
| Controller | Thin HTTP/CLI entry points; delegates to services; no business logic |
| Service | Business logic; readonly classes; uses repositories and other services |
| Repository | Data access; QueryBuilder methods with intent-revealing names |
| Entity | Plain Doctrine-mapped objects; no logic; enums for domain values |
Dependencies flow downward only. A repository never calls a service; a service never calls a controller.
See Architecture for the full dependency rules and plugin system.
Contributor journey¶
- Set up the dev environment → Getting Started
- Understand the layer rules → Architecture
- Read the patterns for the area you're changing → Patterns
- Check frontend conventions if touching templates → Frontend
- Write tests → Testing
- Run
just fixMagothenjust test— must be green before opening a PR - Open a PR → Contributing
Quick links¶
| Page | What it covers |
|---|---|
| Architecture | Layer rules, plugin system, Symfony events, directory tour |
| Patterns | Service, Repository, Entity, Form, Command code examples |
| Frontend | Twig templates, Bulma CSS, admin UI, translations |
| Data Fixtures | AbstractFixture, cross-references, fixture groups |
| Testing | AAA pattern, test doubles, functional tests, running tests |
| Best Practices | Readonly services, N+1, enums, HTML sanitization |
| Troubleshooting | Common problems and how to fix them |