TravelDB est une application web permettant de suivre les pays que vous avez visités. Elle propose une carte interactive basée sur Leaflet, un système d’authentification sécurisé avec sessions (AdonisJS), et une interface simple en Vue 3.
- Affichage du monde en GeoJSON
- Pays visités colorés automatiquement en vert
- Mise à jour en temps réel après ajout d’un pays
- Stockage des visites par utilisateur
-
Ajout d’un pays visité via un formulaire intelligent :
- autocomplétion des pays (FR)
- validation de la date (facultative)
- blocage des dates futures
- exclusion des pays déjà visités
-
Stockage en base MySQL avec contrainte unique par utilisateur
- Login / Register via AdonisJS 6
- Sessions sécurisées via cookies HTTPOnly
- Route
/auth/mepour récupérer l’utilisateur connecté - Redirection automatique des pages Login/Register si déjà connecté
- Store
authpour la session - Store
visitspour synchroniser la carte et le formulaire - Vue réactive : tout se met à jour automatiquement
- AdonisJS 6
- Sessions via cookies
- VineJS pour validation serveur
- Lucid ORM (MySQL)
- Structure MVC claire
- Protection CSRF/CORS avec
withCredentials: true
- Vue.js 3
- Pinia (auth + visits)
- Vue Router (route guard)
- Leaflet pour la carte
- Bootstrap 5 + bootstrap-vue-next
- Axios (instance centralisée)
- Vite pour le développement
git clone https://github.com/fbrend23/TravelDB.git
cd TravelDBnpm installcp backend/.env.example backend/.envExemple :
PORT=3333
HOST=0.0.0.0
SESSION_DRIVER=cookie
SESSION_SECRET=yourRandomSecretHere
DB_HOST=127.0.0.1
DB_USER=root
DB_PASSWORD=
DB_DATABASE=npm --workspace backend run migrateVITE_API_URL=http://localhost:3333npm installDepuis la racine du projet :
npm run devCela lance :
- Backend AdonisJS sur : http://localhost:3333
- Frontend Vue sur : http://localhost:5173
TravelDB/
├─ backend/
│ ├─ app/
│ │ ├─ controllers/
│ │ ├─ models/
│ │ ├─ validators/
│ │ └─ ...
│ ├─ config/
│ ├─ database/
│ └─ start/
│
├─ frontend/
│ ├─ src/
│ │ ├─ api/
│ │ ├─ components/
│ │ ├─ stores/
│ │ ├─ pages/
│ │ └─ router/
│ └─ public/
│ └─ countries.geo.json
│
└─ .github/workflows/
- Email unique
- Username unique, alphanum, 3–32 caractères
- Mot de passe min 8 caractères
- Pays ISO3 validé via regex + transformation uppercase
- Date :
- accepte
YYYY-MMouYYYY-MM-DD - défaut : premier jour du mois
- accepte
- Validation des champs avant soumission
- Blocage des pays déjà visités
- Traduction en français des messages d’erreur VineJS
Ce projet est sous licence MIT.
Pour toute contribution ou bug, ouvrez une issue sur GitHub.