https://github.com/dedslash/joseph-yusuf
SaaS de gestion de revenus — 10 microservices Spring Boot 3 + Spring Cloud, frontends Angular admin/user, CI/CD Jenkins + SonarQube, en production sur josephyusuf.com
https://github.com/dedslash/joseph-yusuf
Last synced: 2 days ago
JSON representation
SaaS de gestion de revenus — 10 microservices Spring Boot 3 + Spring Cloud, frontends Angular admin/user, CI/CD Jenkins + SonarQube, en production sur josephyusuf.com
- Host: GitHub
- URL: https://github.com/dedslash/joseph-yusuf
- Owner: DedSlash
- Created: 2026-05-07T19:08:10.000Z (about 2 months ago)
- Default Branch: main
- Last Pushed: 2026-06-18T17:54:42.000Z (6 days ago)
- Last Synced: 2026-06-18T18:15:25.716Z (6 days ago)
- Language: Java
- Size: 6.58 MB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- Support: support-service/Dockerfile
Awesome Lists containing this project
README
Joseph·Yusuf
SaaS de gestion des revenus pour freelances et salariés à revenus variables,
basé sur le Principe biblique de Joseph : épargner pendant l'abondance,
tenir pendant la disette.
---
## Démo
| Lien | Compte |
|-------------------------------------------|--------------------------------------------------------------|
| https://josephyusuf.com | `demo.portfolio@josephyusuf.com` / *mot de passe sur demande* |
| https://admin.josephyusuf.com | *réservé super-admin — non public* |
> Le compte démo est régénéré chaque nuit à 03h00 UTC
> (`scripts/reset-demo-account.sh`).
## Statut
> **En production publique** depuis le **23 mai 2026**.
> Stack complète déployée sur VPS Hetzner CPX32 derrière Nginx + Let's Encrypt.
> Monétisation Stripe / PayDunya / PayTech **en cours d'activation**
> (`PAYMENTS_ACTIVE=false` — les trials sont prolongés automatiquement
> jusqu'à finalisation du dashboard Stripe).
---
## Architecture
```
┌──────────────────────┐
│ Nginx + Let's │
Internet ────────► HTTPS ────►│ Encrypt (VPS) │
└──────────┬───────────┘
│
┌────────────────────────────┼────────────────────────────┐
▼ ▼ ▼
josephyusuf.com api.josephyusuf.com admin.josephyusuf.com
(frontend SPA) (gateway-service) (admin-frontend SPA)
│
Spring Cloud Gateway 8080
│
┌──────────────────────────┼──────────────────────────┐
▼ ▼ ▼
Eureka Discovery ─── 8 microservices métier ───
(discovery-server) (lb:// routing)
│
┌────────────┬────────────┼────────────┬────────────┬────────────┐
▼ ▼ ▼ ▼ ▼ ▼
auth-service income-svc rule-engine alert-svc report-svc subscription
│ │ │ │ │ │
└─── joseph_auth ─── joseph_income ─── joseph_alerts ─── ... ───┘
(PostgreSQL multi-schema)
│
Kafka (events) + Redis (cache)
```
## Microservices
| Service | Port | Rôle |
|----------------------|------|----------------------------------------------------------------------------|
| `discovery-server` | 8761 | Registre Eureka (service discovery) |
| `gateway-service` | 8080 | API Gateway Spring Cloud, JWT relay, CORS, routes `/api/**` |
| `auth-service` | 8081 | Authentification JWT, plans FREE/PREMIUM/PREMIUM_PLUS, reset password |
| `income-service` | 8082 | Sources & revenus, classification Joseph (ABUNDANCE/LEAN/NORMAL), épargne |
| `rule-engine-service`| 8083 | Règles financières (50/30/20, etc.) — pattern Strategy extensible |
| `alert-service` | 8084 | Alertes basées sur les événements Kafka (recommandations d'épargne) |
| `report-service` | 8085 | Rapports PDF mensuels (JasperReports) |
| `subscription-service`|8086 | Abonnements Stripe + PayDunya + PayTech, webhooks, coupon `EARLY50` |
| `admin-service` | 8087 | Back-office : users, transactions, codes promo, KPIs, audit log |
| `support-service` | 8088 | Tickets support + base de connaissances FAQ, WebSocket notifications admin |
Plus 2 SPAs Angular : `frontend` (utilisateur) et `admin-frontend` (admin).
## Stack technique
**Backend** — Java 17 · Spring Boot 3.2.5 · Spring Cloud 2023.0.1
(Gateway + Eureka) · JJWT 0.12 · MapStruct 1.5 · Lombok · Flyway ·
PostgreSQL 15 (multi-schema) · Kafka 7.4 · Redis 7 · JasperReports ·
Spring Mail.
**Frontend** — Angular 17.3 (standalone components) · PrimeNG 17.18
(`lara-dark-amber`, accent gold `#C9A84C`) · Chart.js 4 · Stripe.js 9 ·
SheetJS (import Excel/CSV/JSON côté navigateur).
**Infrastructure** — Docker Compose · Ansible · Jenkins (multibranch +
PR pipeline) · SonarQube (Quality Gate bloquant sur new code) ·
Nginx + Let's Encrypt · VPS Hetzner CPX32 (Ubuntu 26.04).
## Logique métier — Principe de Joseph
Pour chaque mois, le revenu est classé en comparant à la moyenne
des 3 mois précédents :
```
ABUNDANCE ⟵ revenu > moyenne × 1.15
NORMAL ⟵ entre les deux
LEAN ⟵ revenu < moyenne × 0.85
```
La recommandation d'épargne suit le statut :
```
ABUNDANCE → max(monthlyTarget, (revenu − moyenne) + 0.5 × monthlyTarget)
NORMAL → max(monthlyTarget, monthlyTargetPercent × revenu)
LEAN → 0 (pause d'épargne)
```
La recommandation est répartie au prorata du restant à atteindre entre
les objectifs `ACTIVE`. Un événement Kafka `joseph.savings.recommendation`
est publié à chaque classification et consommé par l'`alert-service`
qui crée une alerte `SAVINGS_RECOMMENDATION` par utilisateur / mois /
objectif.
## Captures
## Démarrer en local
Prérequis : Docker ≥ 24, Docker Compose v2, Java 17, Maven, ~6 Go RAM libres.
```bash
git clone https://github.com/DedSlash/joseph-yusuf.git
cd joseph-yusuf
# 1. Préparer les variables d'environnement
cp .env.example .env
# Éditer .env :
# - DB_PASSWORD = un nouveau mot de passe
# - JWT_SECRET = 64+ caractères aléatoires
# - STRIPE_SECRET_KEY = sk_test_… (pour tester les paiements)
# 2. Build des microservices
mvn -DskipTests clean package
# 3. Lancer la stack
docker compose up -d --build
# 4. Vérifier l'état des services
docker compose ps
curl http://localhost:8080/actuator/health
```
Stack accessible à :
- Frontend → http://localhost:4200
- Admin frontend → http://localhost:4201
- API Gateway → http://localhost:8080
- Eureka → http://localhost:8761
Guide pas-à-pas complet : [`docs/SMOKE-TEST.md`](docs/SMOKE-TEST.md).
## CI/CD
- `Jenkinsfile` — pipeline multibranch (build, tests, JaCoCo, SonarQube
Quality Gate, build Docker, déploiement via Ansible).
- `Jenkinsfile.pr` — pipeline allégé pour les PR (build + tests + Sonar
uniquement, pas de déploiement).
- `ansible/playbooks/` — `setup.yml`, `deploy.yml`, `deploy-all.yml`,
`rollback.yml`.
- `scripts/deploy.sh` — déploiement rapide depuis la machine de dev.
## Documentation
- [`docs/SMOKE-TEST.md`](docs/SMOKE-TEST.md) — validation E2E complète
- [`docs/PAYMENT-INTEGRATION.md`](docs/PAYMENT-INTEGRATION.md) — flow Stripe + état Wave/Orange Money
- [`docs/JENKINS-SETUP.md`](docs/JENKINS-SETUP.md) — configuration Jenkins
- [`CONTRIBUTING.md`](CONTRIBUTING.md) — stratégie de branches Git
## Crédits
Conception, développement, déploiement : **Rey Dedy Pangou**
([@DedSlash](https://github.com/DedSlash)).
Stack assistée par **Claude Code** (Anthropic) pour la génération de
code, la revue et l'écriture des migrations / tests.
## License
**All rights reserved.** © 2026 Rey Dedy Pangou.
Ce dépôt est public à des fins de démonstration (portfolio). Le code
n'est pas distribué sous license open source : usage, copie,
modification ou redistribution ne sont **pas** autorisés sans accord
écrit explicite. Le contenu de `docs/` (hors captures) est consultable
à titre informatif.
Contact : [@DedSlash](https://github.com/DedSlash) ·
dedypangou@gmail.com