SPB Git

spb/groupe-ka Public

Groupe KA — site du holding + KA ID (compte unique & SSO des 7 plateformes). Next.js 16, SQLite, Google & Apple login.

TypeScript 91.8% CSS 8.1%
6.0 KB

# Groupe KA — le hub & le KA ID

Site vitrine du holding + compte unique (KA ID) pour les sept plateformes du groupe.

Site Next.js React TypeScript Tailwind CSS SQLite

Google OAuth Sign in with Apple JWT scrypt Apple Wallet

Plateformes SSO Routes API Pages Code PM2 Licence


# 📸 Aperçu

Accueil Connexion (KA ID)
Accueil Connexion
Vue mobile — icône compte directement dans le header

# ✨ Fonctionnalités

  • 🪪 KA ID — identifiant membre unique (ka- + 10 chiffres) créé au hub, source de vérité du groupe.
  • 🔑 Trois modes de connexion : Google OAuth 2.0, Sign in with Apple, courriel + mot de passe (scrypt natif, zéro dépendance).
  • 🛰 SSO maison vers les 7 plateformes (jeton JWT signé par plateforme, 5 min).
  • 👤 Profil enrichi (bio, ville, réseaux sociaux, rôle…) affiché par toutes les plateformes, avec page publique /u/[kaId].
  • Favoris unifiés « Mon univers Ka » — magasin central, les plateformes poussent/lisent via /api/sso/favorites.
  • 💳 Carte de membre avec QR code + passe Apple Wallet signée (/api/wallet/pass).
  • 📱 Menu mobile 100 % CSS (case à cocher + peer, zéro JS) et icône compte directe dans le header.

# 📊 Métriques

Métrique Valeur
Lignes TypeScript / TSX ~5 400
CSS (design system maison) ~850 lignes
Routes API 17
Pages 8
Plateformes SSO servies 7
Dépendances de prod 7 seulement
Base de données SQLite (WAL), zéro serveur

# 🔐 Authentification

Mode Détails
Google OAuth 2.0 code flow, id_token vérifié par JWKS (jose), liaison par google_sub puis courriel
Apple Sign in with Apple, retour form_post, client_secret = JWT ES256 signé à la volée avec la clé .p8, liaison par apple_sub
Courriel scrypt natif Node (crypto.scryptSync), comparaison à temps constant
Sessions JWT HS256 (jose) en témoin HttpOnly ka_session, 30 jours

# 🛰 SSO — un compte, sept plateformes

/sso/authorize?client=<plateforme> émet un JWT (5 min) signé avec le secret partagé de la plateforme : Lou·Ka · Immo·Ka · Vrai-Prix · ValoPlex · Auto·Ka · Fabri·Ka · Food·Ka

# 🗂 Routes

Pages : / · /connexion · /compte · /compte/carte · /u/[kaId] · /m/[kaId] · /conditions · /confidentialite

API :

Groupe Routes
Auth /api/auth/{login,register,logout,me} · /api/auth/{google,apple} · /api/auth/callback/{google,apple}
Profil /api/profile · /api/profile/{role,public,avatar}
SSO /sso/authorize · /api/sso/{profile,favorites}
Divers /api/favorites · /api/wallet/pass · /api/health

# 🧱 Stack

Next.js 16 (App Router, Turbopack) · React 19 · TypeScript 5 · Tailwind CSS 4 · better-sqlite3 (WAL) · jose (JWT/JWKS) · sharp (avatars) · qrcode (carte de membre)

# 🚀 Déploiement

bash
npm run dev     # développement (http://localhost:3000)
npm run build   # build de production
npm start       # sert le build

En production : nœud M3U96b du cluster MacLustr, PM2 (auto-restart) + tunnel ngrokwww.groupe-ka.com.

Variables d'environnement : BASE_URL, KA_AUTH_SECRET, GOOGLE_CLIENT_ID/SECRET, APPLE_CLIENT_ID/TEAM_ID/KEY_ID/PRIVATE_KEY, KA_SSO_SECRET_* (une par plateforme), KA_PASS_* (Apple Wallet), KA_DB_PATH.

# 👤 Auteur

Simon-Pierre Bouchercontact@spboucher.ai · © 2026 Groupe KA