Décisions techniques tranchées pour la Phase 1 (MVP, 1–2 marchands). Source de vérité : STACK.md.
| Brique |
Techno |
| Runtime |
Node.js 22 LTS |
| Langage |
TypeScript strict |
| Framework HTTP |
Fastify 5 |
| Validation |
Zod |
| Driver DB |
node-firebird-driver-native |
| Base de données |
Firebird 5 (distant, existant côté client) |
| Cache + verrous |
Redis 7 |
| Jobs / queues |
BullMQ (présent ; l’outbox utilise aujourd’hui un poller maison, voir Workers) |
| Tests |
Vitest |
| Lint + format |
Biome |
| Logs |
pino |
| Brique |
Techno |
| Bootstrap loader |
TypeScript + esbuild → IIFE |
| Checkout SDK |
TypeScript + Lit (Web Components) → ESM |
| Adapters PSP client |
TypeScript + esbuild → ESM |
| Consoles & démos |
Next.js 15 |
| Plugin PrestaShop |
PHP 8.2 |
| Plugin Shopify |
React Router / Remix |
OVH dédié (Ubuntu 24.04), Docker + Compose v2, Caddy (reverse proxy + TLS), Cloudflare (CDN gratuit) +
R2 (stockage SDK/adapters), Uptime Kuma (uptime), Sentry (erreurs). CI : GitHub Actions + GHCR, deploy
par SSH + docker compose pull/up.
| Rejeté |
Raison |
| NestJS |
Overkill pour un MVP ; migration possible en Phase 2 |
| Prisma / TypeORM |
Pas de support Firebird |
| Kubernetes / K3s |
Un seul serveur suffit |
| Vault / HashiCorp |
.env + sops en Phase 1 |
| Svix |
Webhooks maison + BullMQ suffisent (< 1k/jour) |
| Prometheus / Grafana |
Logs Docker + Uptime Kuma en Phase 1 |
| ESLint + Prettier |
Biome (un seul outil, plus rapide) |
| Jest |
Vitest (ESM natif) |
| Déclencheur |
Ajout |
| 5+ marchands actifs |
Vault + back-office complet |
| 50+ checkouts/min |
2e serveur + load balancer |
| 1k+ webhooks/jour |
Svix self-hosted |
| Équipe 3+ dev |
Envisager NestJS |
| Incident prod sérieux |
Prometheus + Grafana |
Source de vérité : STACK.md.