Aller au contenu

Stack technique

Toutes les plateformes de l'écosystème tournent sur une seule stack. Ce n'est pas un hasard : un développeur qui passe d'un dépôt à l'autre n'a rien de nouveau à apprendre, et un correctif de sécurité se déploie sur tous les systèmes sous la même forme.

Ce en quoi Gerege Nexus diffère

Gerege Nexus tourne sur la même pile (Go · chi · pgx · sans ORM · Next.js App Router) mais s'en écarte sur trois points : c'est un monolithe modulaire (les modules se compilent dans un seul binaire et se distribuent par locataire via un app store), il migre avec goose, et il s'appuie sur PostgreSQL seul, sans Redis. Versions : Go 1.25 · Next.js 15.

Backend

Composant Choix
Langage Go 1.26
HTTP net/http de la bibliothèque standard + le routeur go-chi/chi
Base de données PostgreSQLjackc/pgx (pgxpool), SQL écrit à la main
Cache / sessions Redis
Architecture Clean Architecture — handler → usecase → repository → domain

Pourquoi pas d'ORM ?

La couche de données est écrite en SQL à la main au-dessus de pgx. Les raisons : utiliser directement les fonctions profondément ancrées dans PostgreSQL — Row-Level Security (RLS), CTE, LISTEN/NOTIFY, JSONB — plutôt qu'au travers de l'abstraction d'un ORM ; et ne plus avoir à deviner quelle requête sera réellement générée.

La règle stricte de la Clean Architecture : pas de back-import. Le cœur métier (domain, usecase) n'importe jamais de framework web. C'est ce qui garantit que la couche HTTP peut être remplacée sans toucher à la logique métier.

Frontend

Composant Choix
Framework Next.js 15/16, App Router
Modèle BFF (Backend-for-Frontend)
Couche de données TanStack Query

Ce que BFF veut dire ici : le navigateur ne s'adresse jamais directement au backend. Il ne parle qu'à des routes Next.js du même domaine, qui font office de proxy vers le backend depuis le serveur.

Résultat : le jeton n'atteint jamais le JavaScript côté client — on utilise une session par cookie, et le XSS cesse d'être un vecteur de vol de jeton. S'y ajoute une double protection CSRF : en-tête dédié et vérification d'origine.

Mobile et bureau

Plateforme Technologie
iOS Swift, SDK SPM (GeregeSmartID) + une application par marque
Android SDK Kotlin / Jetpack Compose
macOS Client RP SwiftUI + kit de jeton USB
Windows MSIX (signé)
Web RP SDK TypeScript

Pipeline IA

Bâti sur Gemini, sous forme de client REST sans SDK avec function calling :

  • chat texte et chat vocal,
  • STT (parole → texte) et TTS (texte → parole),
  • traduction en direct,
  • une base de connaissances pgvector indexée à partir du code et de la documentation,
  • des réponses dans la langue de l'utilisateur ; un widget de chat sans connexion requise.

System prompt en couches : des garde-fous codés en dur dans le source, plus un périmètre et des consignes que l'administrateur règle via la base de données. L'assistant reste ainsi dans les limites prévues. L'outil search_knowledge ancre les réponses dans les données réelles de la base de connaissances et empêche les réponses inventées.

Cryptographie

Le code de signature a été porté depuis un original Java/Spring ; il doit donc rester parfaitement compatible au niveau du protocole. C'est verrouillé par des frozen golden vectors :

  • sérialisation de point EC compressé au format SEC1,
  • sémantique de BigInteger.toByteArray() en Java (comportement de l'octet de signe).

Le serveur Go, le SDK iOS et le SDK Android doivent produire des résultats identiques octet par octet.

Ne supprimez jamais un golden vector

Les fichiers golden.json ne peuvent pas être régénérés. Ils sont la seule preuve de compatibilité avec le système d'origine. Toute modification du code cryptographique doit être vérifiée par ces tests.

Infrastructure

Composant Choix
Conteneurs Docker Compose
CI/CD GitHub Actions (avec des runners Windows/macOS auto-hébergés)
Edge nginx — terminaison TLS, rate limit, reverse proxy
Certificats Let's Encrypt (certbot, webroot)
Documentation MkDocs Material + mkdocs-static-i18n, multilingue

Voir Déploiement et CI/CD pour le détail.

Observabilité

  • OpenTelemetry — traçage distribué,
  • Prometheus — métriques (/metrics),
  • Zap — journalisation structurée,
  • Journal d'audit — chaîné par hachage, en ajout seul ; lisible par les seuls administrateurs, avec vérification d'intégrité possible.

Fermé en production

/metrics et /swagger sont protégés par un bearer token en production. Ils exposent la structure interne : les laisser ouverts est un risque de divulgation d'informations.

Tests

  • Tests unitaires — au niveau de la logique métier,
  • tests d'intégration testcontainers — avec de vrais PostgreSQL/Redis,
  • tests golden vector — pour la compatibilité cryptographique.