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 92.1%
CSS 7.9%
1<!-- Auteur : Simon-Pierre Boucher — contact@spboucher.ai -->23<div align="center">45# Groupe KA — le hub & le KA ID67**Site vitrine du holding + compte unique (KA ID) pour les sept plateformes du groupe.**89[](https://www.groupe-ka.com)10[](https://nextjs.org)11[](https://react.dev)12[](https://www.typescriptlang.org)13[](https://tailwindcss.com)14[](https://sqlite.org)1516[](#-authentification)17[](#-authentification)18[-d9f26b?style=flat-square)](#-authentification)19[](#-authentification)20[](#-fonctionnalités)2122[](#-sso--un-compte-sept-plateformes)23[](#-routes)24[](#-routes)25[](#-métriques)26[](#-déploiement)27[](#-auteur)2829</div>3031---3233## 📸 Aperçu3435| Accueil | Connexion (KA ID) |36|:---:|:---:|37|  |  |3839<div align="center">40<img src="assets/screenshots/mobile.png" alt="Vue mobile — icône compte directement dans le header" width="260">41</div>4243## ✨ Fonctionnalités4445- 🪪 **KA ID** — identifiant membre unique (`ka-` + 10 chiffres) créé au hub, source de vérité du groupe.46- 🔑 **Trois modes de connexion** : Google OAuth 2.0, Sign in with Apple, courriel + mot de passe (scrypt natif, zéro dépendance).47- 🛰 **SSO maison** vers les 7 plateformes (jeton JWT signé par plateforme, 5 min).48- 👤 **Profil enrichi** (bio, ville, réseaux sociaux, rôle…) affiché par toutes les plateformes, avec page publique `/u/[kaId]`.49- ⭐ **Favoris unifiés** « Mon univers Ka » — magasin central, les plateformes poussent/lisent via `/api/sso/favorites`.50- 💳 **Carte de membre** avec QR code + passe **Apple Wallet** signée (`/api/wallet/pass`).51- 📱 **Menu mobile 100 % CSS** (case à cocher + `peer`, zéro JS) et icône compte directe dans le header.5253## 📊 Métriques5455| Métrique | Valeur |56|---|---:|57| Lignes TypeScript / TSX | ~5 400 |58| CSS (design system maison) | ~850 lignes |59| Routes API | **17** |60| Pages | **8** |61| Plateformes SSO servies | **7** |62| Dépendances de prod | **7** seulement |63| Base de données | SQLite (WAL), zéro serveur |6465## 🔐 Authentification6667| Mode | Détails |68|---|---|69| **Google** | OAuth 2.0 code flow, `id_token` vérifié par JWKS (`jose`), liaison par `google_sub` puis courriel |70| **Apple** | Sign in with Apple, retour `form_post`, `client_secret` = JWT ES256 signé à la volée avec la clé `.p8`, liaison par `apple_sub` |71| **Courriel** | scrypt natif Node (`crypto.scryptSync`), comparaison à temps constant |72| **Sessions** | JWT HS256 (`jose`) en témoin HttpOnly `ka_session`, 30 jours |7374## 🛰 SSO — un compte, sept plateformes7576`/sso/authorize?client=<plateforme>` émet un JWT (5 min) signé avec le secret partagé de la plateforme :77[Lou·Ka](https://www.lou-ka.com) · [Immo·Ka](https://www.immo-ka.com) · [Vrai-Prix](https://www.vrai-prix.com) · [ValoPlex](https://www.valoplex.com) · [Auto·Ka](https://www.auto-ka.com) · [Fabri·Ka](https://www.fabri-ka.com) · [Food·Ka](https://www.food-ka.com)7879## 🗂 Routes8081**Pages** : `/` · `/connexion` · `/compte` · `/compte/carte` · `/u/[kaId]` · `/m/[kaId]` · `/conditions` · `/confidentialite`8283**API** :8485| Groupe | Routes |86|---|---|87| Auth | `/api/auth/{login,register,logout,me}` · `/api/auth/{google,apple}` · `/api/auth/callback/{google,apple}` |88| Profil | `/api/profile` · `/api/profile/{role,public,avatar}` |89| SSO | `/sso/authorize` · `/api/sso/{profile,favorites}` |90| Divers | `/api/favorites` · `/api/wallet/pass` · `/api/health` |9192## 🧱 Stack9394**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)9596## 🚀 Déploiement9798```bash99npm run dev # développement (http://localhost:3000)100npm run build # build de production101npm start # sert le build102```103104En production : nœud **M3U96b** du cluster MacLustr, **PM2** (auto-restart) + tunnel **ngrok** → [www.groupe-ka.com](https://www.groupe-ka.com).105106Variables 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`.107108## 👤 Auteur109110**Simon-Pierre Boucher** — [contact@spboucher.ai](mailto:contact@spboucher.ai) · © 2026 Groupe KA111