Projet personnel 2026
Ewô
Réservation de séjours multi-pays : web, mobile et 15 microservices.
- Rôle
- Conception et développement en solo : architecture, back-end, back-office, application mobile, CI/CD et déploiement.
- Statut
- En développement · dépôt privé, accès sur demande
- Stack
- Java 21
- Spring Boot 3.4
- Spring Cloud Gateway
- Eureka
- PostgreSQL 16
- Redis
- RabbitMQ
- Angular 20
- Flutter
- Docker
- GitHub Actions
- Caddy
- Prometheus
- Grafana
Ewô permet de réserver des activités, hébergements, transports ou packs complets auprès de partenaires locaux, de payer par carte ou par Mobile Money, puis d’obtenir un programme de voyage jour par jour. Chaque pays a son catalogue, sa devise et ses moyens de paiement.
Architecture
Ce que j’ai construit
- 15 microservices Spring Boot 3.4 / Java 21 derrière une Spring Cloud Gateway, avec découverte Eureka et une base PostgreSQL par service.
- Multi-tenant : 5 pays ouverts (Côte d’Ivoire, Sénégal, Bénin, Cameroun, France), chacun avec sa devise (XOF, XAF, EUR).
- Back-office Angular 20 (signals, Material) et application Android Flutter (Riverpod, GoRouter).
- Tests JUnit / Testcontainers, Jest et Flutter lancés par GitHub Actions à chaque push ; images Docker publiées automatiquement.
- Supervision Prometheus / Grafana, HTTPS automatique avec Caddy, configuration de déploiement pour Raspberry Pi 4.
Décisions techniques
Saga réservation → paiement
Le prix est recalculé côté serveur et le stock réservé de façon atomique. Le paiement passe par Stripe (cartes) ou CinetPay (Mobile Money) ; en cas d’échec, le remboursement est déclenché automatiquement.
Outbox et consommation idempotente
Les événements sont écrits dans la même transaction que les données (pattern outbox), publiés sur RabbitMQ puis consommés de façon idempotente : aucun message perdu, aucun message traité deux fois.
Sécurité concentrée à la gateway
Point d’entrée unique : la gateway valide le JWT, supprime tout en-tête d’identité envoyé par le client, résout le pays et bloque les routes internes.
Programme de voyage sous contraintes
Génération déterministe selon le budget, le rythme et les centres d’intérêt, avec regroupement géographique des activités et gestion des horaires.