Design of a CRUD web application with Symfony and Docker to manage internship and alternance applications.
The Mission
Open Studio needed a way to stop tracking internship and apprenticeship applications by hand. Every candidate, every status change, every follow-up was living in spreadsheets and inboxes, which made it easy for things to fall through the cracks as the volume grew.
What I Built
A CRUD web application to centralize the entire application pipeline: submitting candidates, updating their status, and keeping a single source of truth for the team. I built and containerized the whole stack myself, from local development to a reproducible deployment.
- Backend: Symfony, handling the data model, business logic, and admin views for the application workflow.
- Containerization: Docker, so the environment was identical on my machine, in review, and in production.
- Workflow: designed the status lifecycle (submitted, in review, accepted, rejected) directly into the data model rather than bolting it on with ad-hoc flags.
Technical Approach
- Kept the domain model close to how the team actually talked about candidates, so the admin UI needed almost no explanation.
- Used Docker Compose to keep the database, app, and tooling versioned together, avoiding "works on my machine" issues during handoff.
- Prioritized a small, correct feature set over a large one — the goal was a tool the team would actually use daily, not a platform.
Outcome
The team moved off spreadsheets onto the new tool for tracking every internship and alternance application, cutting down the manual back-and-forth around candidate status.