Job board
A job-listings website with a relational database, a PHP API and per-user encryption of personal data, deployed with one Docker command.
Context & objective
Epitech project T-WEB-500, built with Léa Bossuat: a job board where companies post listings and candidates apply, while keeping personal data protected under GDPR.
What I built
- A relational schema modelled on dbdiagram.io: listings, users, company profiles and encryption keys.
- Companies and candidates in one
userstable, told apart by role, with public company information in a separate profile table. - A data encryption key per user, so personal data is encrypted for GDPR from the design stage, not added afterwards.
- A PHP API called by the JavaScript front end.
- A repo where
git pullanddocker compose upput the whole site online: PostgreSQL, PHP and Nginx in containers.
Challenges
- Choosing between separate company and candidate tables or one role-based
userstable. - Fitting per-user encryption keys into the schema without making every query painful.
What I learned
This was the first time I built something like this, and the whole PHP API is written by hand, without a framework. It was painstaking, but I know every part of it.
- Encryption has to be designed in. Per-user keys belong in the data model from the start, not added afterwards.
- One command to deploy. Packaging the app so that
git pullanddocker compose upare enough changes how you build it. - Working as a pair. Sharing one repo and one schema means splitting the work and staying in sync.