Documentation / Guide développeur

Architecture technique

Stack technique, structure du projet et principes de sécurité de la plateforme.

Structure du projet

teranga/
├── backend/     # API REST — Node.js/Express + TypeScript + Prisma + PostgreSQL
├── frontend/    # Interface Web — Next.js (App Router) + TypeScript + Tailwind CSS
├── android/     # App mobile — Kotlin + Jetpack Compose + Hilt + Room DB
├── wordpress/   # Plugins WordPress (Teranga Booking, BA Book Everything Sync)
└── docker-compose.yml

Stack technique

CoucheTechnologie
Frontend WebNext.js, TypeScript, Tailwind CSS, React Query, Zustand, Recharts
Backend APINode.js, Express, TypeScript, Zod
ORM / DBPrisma + PostgreSQL
CacheRedis
AuthJWT (access + refresh tokens), bcryptjs, RBAC à 2 niveaux
PaiementFedaPay (abonnements + gateway intégrée + WordPress), Mobile Money via QR code
MobileKotlin, Jetpack Compose, Room DB, Retrofit, Hilt DI
DevOpsDocker, Docker Compose, GitHub Actions CI/CD

Multi-tenant

Isolation par tenant_id, appliquée automatiquement par un middleware Prisma sur chaque requête — un tenant ne peut jamais accéder aux données d’un autre, y compris en cas d’erreur applicative (défense en profondeur avec Row Level Security PostgreSQL).

Sécurité

  • Isolation multi-tenant via middleware Prisma + Row Level Security PostgreSQL.
  • JWT signé, durée courte (15 min), refresh token en cookie HttpOnly (accepté aussi dans le body pour mobile).
  • Validation Zod (whitelist) sur tous les endpoints.
  • Rate limiting par IP et par tenant en production.
  • Réservations anti-double-booking en transaction Serializable.
  • Idempotence des opérations POS par UUID unique.
  • Recalcul des montants côté serveur (anti-manipulation) — jamais de confiance dans un montant envoyé par le client.
  • bcryptjs à 12 rounds, comparaison à temps constant.
  • Headers de sécurité (Helmet), CORS configurable par domaine.
  • Upload d’images limité en taille et en formats acceptés.
  • Journalisation structurée pour audit.

Design system

  • Web : terracotta, or, sauge — voir les tokens CSS partagés du site.
  • Mobile (application Android) : palette dédiée inspirée du Bénin (rouge Dahomey, or béninois, vert béninois, bronze Abomey).