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 92.1% CSS 7.9%
6.0 KB · 111 lines markdown
Rendered Raw Blame History
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[![Site](https://img.shields.io/website?url=https%3A%2F%2Fwww.groupe-ka.com&up_message=en%20ligne&down_message=hors%20ligne&label=groupe-ka.com&style=flat-square)](https://www.groupe-ka.com)10[![Next.js](https://img.shields.io/badge/Next.js-16.3-000000?style=flat-square&logo=nextdotjs&logoColor=white)](https://nextjs.org)11[![React](https://img.shields.io/badge/React-19.2-087EA4?style=flat-square&logo=react&logoColor=white)](https://react.dev)12[![TypeScript](https://img.shields.io/badge/TypeScript-5-3178C6?style=flat-square&logo=typescript&logoColor=white)](https://www.typescriptlang.org)13[![Tailwind CSS](https://img.shields.io/badge/Tailwind_CSS-4-06B6D4?style=flat-square&logo=tailwindcss&logoColor=white)](https://tailwindcss.com)14[![SQLite](https://img.shields.io/badge/SQLite-WAL-003B57?style=flat-square&logo=sqlite&logoColor=white)](https://sqlite.org)1516[![Google OAuth](https://img.shields.io/badge/Connexion-Google_OAuth_2.0-4285F4?style=flat-square&logo=google&logoColor=white)](#-authentification)17[![Sign in with Apple](https://img.shields.io/badge/Connexion-Sign_in_with_Apple-000000?style=flat-square&logo=apple&logoColor=white)](#-authentification)18[![JWT](https://img.shields.io/badge/Sessions-JWT_HS256_(jose)-d9f26b?style=flat-square)](#-authentification)19[![scrypt](https://img.shields.io/badge/Mots_de_passe-scrypt_natif-1c5c41?style=flat-square)](#-authentification)20[![Apple Wallet](https://img.shields.io/badge/Carte_membre-Apple_Wallet-999999?style=flat-square&logo=apple&logoColor=white)](#-fonctionnalités)2122[![Plateformes SSO](https://img.shields.io/badge/SSO-7_plateformes-1c5c41?style=flat-square)](#-sso--un-compte-sept-plateformes)23[![Routes API](https://img.shields.io/badge/API-17_routes-141814?style=flat-square)](#-routes)24[![Pages](https://img.shields.io/badge/Pages-8-141814?style=flat-square)](#-routes)25[![Code](https://img.shields.io/badge/TS%2FTSX-~5_400_lignes-141814?style=flat-square)](#-métriques)26[![PM2](https://img.shields.io/badge/Prod-PM2_+_ngrok-2B037A?style=flat-square&logo=pm2&logoColor=white)](#-déploiement)27[![Licence](https://img.shields.io/badge/©_2026-Simon--Pierre_Boucher-d9f26b?style=flat-square)](#-auteur)2829</div>3031---3233## 📸 Aperçu3435| Accueil | Connexion (KA ID) |36|:---:|:---:|37| ![Accueil](assets/screenshots/accueil.png) | ![Connexion](assets/screenshots/connexion.png) |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