Bilal Houari

Lic. Sciences et Techniques — FST Tanger
FR / EN

SOS Helper

Next.jsSupabasePostgreSQLTypeScriptAIRAGDocker
Voir le dépôt

Projet PFE chez Smart Automation Technologies (avril — juin 2026). Un marketplace full-stack avec une machine à états finis à 8 états gouvernant le cycle de vie complet des tâches — chaque transition utilise une garde atomique UPDATE ... WHERE status = comme verrou anti-race-condition.

Architecture

Le système utilise Next.js 16 (App Router, React Server Components, Server Actions) avec Supabase pour PostgreSQL, Auth, Realtime, Storage, Edge Functions et pgvector. 11 services métier sont câblés via une seule fonction factory — injection manuelle par constructeur, sans conteneur IoC.

Le service de tâches utilise une chaîne d’héritage à 6 niveaux où chaque niveau ajoute une responsabilité : journalisation d’événements, CRUD, transitions d’état, minuteurs système et façade publique. L’héritage a été choisi plutôt que la composition car chaque couche construit directement sur la précédente — la composition aurait nécessité des adaptateurs de forwarding.

Un modèle double client Supabase sépare les préoccupations :

  • Un client serveur (clé service_role) contourne les RLS et pilote toute la logique métier
  • Un client navigateur (clé anon) est restreint par les RLS à 6 tables sur 16, utilisé uniquement pour les abonnements Realtime et les uploads directs

Sécurité

Quatre couches de défense en profondeur :

  • Politiques RLS : refus par défaut, restriction au niveau des colonnes sur les tâches
  • Autorisation applicative : chaque méthode vérifie la propriété avant mutation
  • Validation Zod : ~30 schémas couvrant toutes les entrées utilisateur
  • Assainissement HTML : sanitize-html en mode recursiveEscape après validation Zod

Assistant IA

Pipeline RAG en quatre étapes : découpage par en-têtes Markdown (H1—H3, max 500 mots) → embedding Gemini (1536d) → pgvector avec index IVFFlat → recherche par similarité cosinus (seuil 0,5, top-5). Le LLM est Google Gemma 4 31B via streamText() du SDK Vercel AI.

Infrastructure

Les tâches planifiées s’exécutent dans PostgreSQL via pg_cronpg_net → Deno Edge Function. Cinq jobs minuteurs gèrent la complétion automatique, la détection d’absence, l’expiration, les rappels et la fermeture des fenêtres d’évaluation. Aucune file d’attente externe.

Tests

650+ tests répartis sur 21 fichiers, exécutés contre une instance Supabase locale réelle — aucune base mockée. TDD tout au long du projet : les tests encodent les critères d’acceptation des documents de spécification.