Groupe KA — site du holding + KA ID (compte unique & SSO des 7 plateformes). Next.js 16, SQLite, Google & Apple login.
TypeScript 70.4%
HTML 18.4%
JavaScript 4%
Python 3.8%
CSS 3.4%
-
Fri, Sep 4, 2026 1
-
Fri, Aug 28, 2026 3
-
fix(accueil): intégrer House·Ka et Rent·Ka partout sur la page d accueil
…
- Compteurs à jour : « treize plateformes » (héros, CTA, kicker, équation ·Ka, sablier SVG, signes vitaux), « quatorze » au socle (avec Trouve·Ka) - Rent·Ka ajouté aux totaux globaux (connecteurs + fiches) de live.ts — House·Ka y était déjà, Rent·Ka avait été oublié - Inventaire vivant + flotte de connecteurs : barres/points House·Ka et Rent·Ka avec métriques live - Santé des syncs : lignes House·Ka et Rent·Ka - Définition ·Ka du héros et lead de l index : mention du Canada - Métadonnées SEO/OG (layout) : Rent·Ka listé, compte corrigé Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
-
feat(accueil): banderole carrousel des marques du groupe sous le héros
…
Wordmarks typographiques des 14 plateformes (Trouve·Ka + PRODUCTS) qui défilent en boucle, cliquables, pause au survol, prefers-reduced-motion respecté (défilement manuel). Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
-
Thu, Aug 27, 2026 3
-
feat(house-ka): 2e passe hub — layout JSON-LD + footers, alerts, ka-agent
…
- layout.tsx : description JSON-LD, phrase footer et les DEUX listes de plateformes (PLATEFORMES + footer) - alerts.ts : ADAPTERS (sonde /api/listings total) + APP_LABELS - ka-agent.js : registre ECO (accent pin #0f6b4f)
-
feat(rent-ka): Rent-Ka dans l ecosysteme + client KA ID + surfaces marketing
…
- ecosystem.json + SSO_CLIENTS (KA_SSO_SECRET_RENT_KA) + ka-agent.js ECO - mon-ka/compte accents & URLs, alerts (ADAPTERS/APP_LABELS), live.ts rentka - homepage carte num 13 + socle + liveChips, layout (JSON-LD + footer), recherche, figures, marque (Cobalt continental), loi-25, agents (ka6) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
feat(house-ka): House-Ka dans l ecosysteme + client KA ID
…
- sso.ts : client house-ka (redirect https://www.house-ka.com/, secret env KA_SSO_SECRET_HOUSE_KA ajoute a .env.local — backup fait) - ecosystem.json : 15e site (accent pin #0f6b4f, tagline Canada hors Quebec) -> footer, page statut et listes de sites l incluent automatiquement - portail : carte plateforme House-Ka (apres Immo-Ka, cartes renumerotees), ligne du tableau, chips live, figures marquee - live.ts : metriques houseka (total/sources/villes/prix moyen) + totaux - mon-ka / compte / recherche : accents, URLs et domaine house-ka
-
-
Wed, Aug 26, 2026 11
-
fix(courriel): corps des messages entrants — hydratation via l API Resend
…
Constat (payload réel journalisé) : l événement email.received ne livre QUE les métadonnées (from/to/subject/email_id) — ni text, ni html, ni contenu de pièces jointes. Le corps se lit via l API Resend, qui exige une clé avec accès lecture (la clé du repo est send-only). Correctif (src/lib/comms/resend-fetch.ts) : - fetchInboundContent(email_id) : lit corps + pièces jointes via l API (RESEND_READ_API_KEY prioritaire, sinon RESEND_API_KEY), deux endpoints tentés, null si clé insuffisante. - Webhook : hydrate AVANT insertion — le corps alimente aussi la conversation du hub et le snippet ; pièces jointes payload + API fusionnées. - hydrateInboundMail : rattrapage à l OUVERTURE d un message vide (self-healing, ne réécrit jamais un corps existant, range les pièces jointes) — les anciens messages se réparent seuls dès qu une clé lisante est posée. - Vue message : encart explicite tant que la clé lecture manque (créer une clé Full access → RESEND_READ_API_KEY → restart). Vérifié : encart affiché sur message vide (200), build ok.
-
feat(courriel v3): pièces jointes + gabarits Groupe KA signés
…
Gabarits (src/lib/comms/mail-templates.ts) : six habillages éditorial sharp — Simple, Officiel, Bienvenue, Suivi de dossier, Merci, Annonce (bande encre + titre lime) — qui enveloppent le texte de l admin et le signent (nom, Groupe KA · Québec, adresse, marque). Fichier pur chaînes : le sélecteur client importe la liste, le serveur rend l HTML — le client n envoie JAMAIS d HTML, seulement le texte et l id du gabarit. Composeur : sélecteur visuel à mini-aperçus CSS, aperçu FIDÈLE en modal (iframe sandbox, rendu par /api/admin/mail/preview avec la vraie signature du compte), pièces jointes 3 × 8 Mo (15 Mo total, liste blanche PDF/Office/CSV/image/TXT/ZIP) avec liste et retrait. Envoi : /api/admin/mail/send passe en multipart — attachments Resend en base64 + copie locale des fichiers (mail_attachments, data/mail-uploads, servis par la route admin authentifiée). Toujours : from = adresse du compte, écriture en base avant envoi. Testé en réel : aperçu signé, envoi gabarit annonce + PDF accepté par Resend et revenu par le webhook dans la réception (boucle complète), .exe refusé 415, 9 Mo refusé 413, preview sans session 401. Limite connue : le webhook email.received ne fournit pas le contenu base64 des pièces jointes ENTRANTES (métadonnées seulement — géré défensivement).
-
design(admin v2): refonte visuelle — connexion, boîte courriel, inbox
…
Connexion : écran scindé signature — mur encre avec filigrane KA géant, manchette, lignes « ce que le panel contient » (pulse-dot), carte à ombre dure ; champs généreux, bouton afficher/masquer le mot de passe, erreur avec secousse, état de vérification animé. Courriel : version client-mail moderne — en-tête identité avec avatar à teinte stable, dossiers en pilules avec compteurs (total + non-lus), recherche plein champ (expéditeur/sujet/extrait/destinataire), rangées riches (avatar, sujet + extrait, heure relative fr, pièces jointes, chips non-routé/demande liée), actions rapides lu/archiver sans ouvrir le message ; vue message rehaussée (en-tête correspondant, sujet, corps typographié 68ch, barre d actions, réponse inline). Inbox : recherche toujours visible + filtres avancés repliables sur mobile (patron checkbox, zéro JS), chips de statut avec compteurs (statusCounts), rangées riches (pastille catégorie à teinte stable, priorité/statut, site, suivi, référence, pièces jointes, heure relative, point non-lu). Nouvelles primitives CSS (adm-avatar, hscroll, adm-filter-form, login-wall/watermark/card) ; utilitaires format.ts (timeAgo fr, initiales, teinte stable) ; listMail(q, folderCounts, att_count), listSubmissions.att_count. Vérifié par captures Playwright desktop (1440) et mobile (390) en prod https.
-
feat(communication hub): boîtes courriel admin — erikabc@ et spboucher@groupe-ka.com via Resend
…
/admin/courriel : chaque compte admin possède sa boîte @groupe-ka.com (admin_users.email) — dossiers réception/envoyés/archives/corbeille, lecture (HTML entrant réduit en texte, jamais rendu brut), composition et réponse (from = adresse du compte connecté, décidé serveur), pièces jointes entrantes bornées 10 Mo hors public, badge non-lus dans la nav. Isolation stricte : jamais la boîte d un autre admin ; les messages non routés du domaine sont visibles des super admins (attribuables en un clic). Réception : webhook Resend email.received sur /api/mail/inbound — signature Svix vérifiée sur le corps brut (RESEND_WEBHOOK_SECRET), fenêtre anti-rejeu 5 min, dédup des retries par email_id. Routage par adresse ; un sujet portant une référence KA-XXX-AAAA-NNNN verse AUSSI le message dans la conversation de la demande du hub (les courriels du hub partent maintenant avec reply-to hub@groupe-ka.com pour boucler le fil). Tables mail_messages + mail_attachments (ka-comms.db) ; sendEmail étendu (from/replyTo/cc personnalisés, id Resend retourné). Testé : signature invalide 401, routage, dédup, rattachement hub, isolation inter-boîtes 404, envoi réel Resend accepté depuis spboucher@groupe-ka.com, UI vérifiée en prod https. Reste côté dashboard Resend (clé API send-only, pas d accès ici) : MX groupe-ka.com → mx.resend.com (remplace inbound-smtp AWS SES actuel), webhook email.received → https://www.groupe-ka.com/api/mail/inbound, coller le whsec_ réel dans .env.local (placeholder généré).
-
feat(communication hub): centre de communication interne — fini les courriels publics
…
Public : /contact (hub 10 catégories : partenariats, données/API, investisseurs, carrières, fournisseurs, médias, questions, légal/Loi 25, sécurité anonyme, autre) + formulaires spécialisés pilotés par le registre (src/lib/comms/categories.ts), préremplissage KA ID, honeypot + rate-limit + uploads contrôlés, référence publique KA-XXX-2026-NNNN, accusé de réception Resend. contact@/info@/admin@groupe-ka.com retirés de toute l interface publique (footer, accueil, loi-25, retrait, conditions, confidentialité, bots, compte, marque, investisseurs, carte Wallet). Admin : /admin protégé serveur (comptes admin_users distincts des KA ID, scrypt + JWT 12 h invalidé au changement de mot de passe), RBAC 8 rôles (super_admin, admin, support, legal, investor_relations, hr, media, security) appliqué DANS les requêtes SQL + par demande (anti-IDOR, 404), dashboard KPIs, inbox filtres/recherche/pagination, vue demande complète (workflow, notes internes, conversation email via Resend, historique, pièces jointes servies hors public), pipeline candidatures, gestion équipe + mots de passe. DB data/ka-comms.db (WAL) : contact_submissions, contact_messages, contact_notes, contact_events, contact_attachments, contact_counters, admin_users ; priorité intelligente backend ; champs ai_* prêts pour la classification future. Testé : 18 scénarios curl (validation, uploads, spam, RBAC, IDOR, rate-limit, comptes) + parcours Playwright https en prod.
-
feat(ka-id v2): le hub journalise favorite/unfavorite à la réception de /api/sso/favorites (features via item.meta) — couvre les plateformes sans instrumentation propre (vrai-prix, valoplex, toit-ka…)
…
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
feat(ka-id v2): moteur de personnalisation Groupe KA — feature store central (journal d'interactions, recherches sauvegardées + alertes, éléments masqués, profil de préférences calculé avec décroissance 30 j et signaux négatifs), endpoints s2s HMAC /api/sso/{events,prefs,saved-searches,hide}, page /mon-ka (Pour vous, Ce que KA a appris corrigeable, confidentialité Loi 25 : 3 interrupteurs + effacement + réinitialisation + export JSON), raccourci depuis /compte
…
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
design(ka-id): courriels et page de connexion à l'identité « éditorial sharp »
…
- gabarits Resend refaits en tables HTML compatibles clients courriel : manchette « Groupe [Ka] » à puce lime, carte blanche à bordure encre + ombre décalée dure, bouton pilule encre/lime, panneau code 2FA encre/lime façon carte de membre, micro-étiquettes mono uppercase, pied écosystème - /connexion recomposée en éditorial HQ : héros display géant à gauche (« Un seul ·Ka pour tout »), points de confiance en filets (lien magique, 2FA, Loi 25), carte d'auth à droite avec en-tête d'inventaire, index des 12 plateformes en filets sous la pliure - vérifié par captures Chromium headless (courriels + page desktop 1440 et mobile 390) et envoi Resend réel Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
-
feat(ka-id): courriels transactionnels Resend — vérification d'adresse à l'inscription, lien magique sans mot de passe, code 2FA au login mot de passe
…
- lib email zéro dépendance (API REST Resend, domaine groupe-ka.com), gabarits encre/lime - table auth_tokens (SHA-256 seulement, usage unique, TTL, max 5 essais) + colonne users.email_verified (comptes existants réputés vérifiés) - register : compte créé mais session ouverte seulement au clic du lien (24 h) ; envoi échoué → compte retiré pour permettre la reprise - login : mot de passe exact → code 6 chiffres (10 min) validé par /api/auth/2fa ; adresse non confirmée → lien renvoyé - /api/auth/magic (+ /magic/verify) : connexion sans mot de passe, réponse identique compte ou non (anti-énumération) - callbacks Google/Apple marquent email_verified ; AuthForm : étapes code/courriel envoyé + bouton « lien de connexion sans mot de passe » Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
-
-
Tue, Aug 25, 2026 7
-
Accueil v2 « HQ » : recomposition éditoriale majeure — héros géant, bandes d'encre pleine largeur, index des plateformes en filets, figures redessinées, nav épurée
…
Upgrade visuel sans toucher à la logique ni aux données live : - primitives éditoriales (bleed/band-ink, rule-ink, sec-head, stat-huge, cta-link, nav-link, idx-row, ibar) — moins de boîtes, plus de typo et d'espace - héros pleine largeur (clamp 44-118px) + bande « signes vitaux » sombre à 6 chiffres géants - plateformes : cartes remplacées par un index éditorial (ProductRow sur filets) - « salle des machines » et « boucle de garde » : bandes sombres data-storytelling - figures SVG affinées (captions sur filet, barres hairline, chips de marque) - header : soulignements animés + burger 2 barres ; menu mobile plein écran numéroté - table socle en variante ouverte (src-wrap--open), CTA finaux en liens-flèches
-
Mon, Aug 24, 2026 5
-
feat(doc): page documentation /doc (guide + captures) + lien footer + PDF téléchargeable
…
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
Sun, Aug 23, 2026 10
-
Jeton API personnel (API·Ka) par KA ID
…
- db: colonnes api_token/api_token_created + ensureApiToken/rotateApiToken/findUserByApiToken (kapi_ + 48 hex) - /api/account/token (GET crée/lit, POST régénère — session requise) - /api/sso/token-verify (HMAC client, même schéma que /api/sso/profile) pour api-ka - /compte: section « API·Ka — jeton d accès personnel » (masqué/copier/régénérer) + plateformes manquantes (resto/sorti/crea/job/trouve/api) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
stats v3 : rapports PDF personnalisés (catalogue, rendu au choix, ReportBuilder)
…
- moteur pdfkit local src/lib/report-stats.ts (gabarit Groupe-KA, palette lime/vert du hub) : catalogFromDashboard() sur EcoPayload + buildCustomReport() — primitives line/area/bar/donut/hbars/stacked/multi/gauges/kpi/heatmap quotidienne ET horaire/tables/records, sommaire, couverture à libellé libre - routes GET /api/stats/catalog et POST /api/stats/report/custom (filename groupe-ka_groupe-ka_stats_<periode>_personnalise_<date>.pdf) ; rapport écosystème v2 (proxy API-KA) intact - kit src/ka/stats (kacharts.tsx v3 avec ReportBuilder dans PdfButton, SPEC.md §3bis, kapdf.py) synchronisé depuis /tmp/ka-stats-v3 - pdfkit ^0.19.1 (+types) en serverExternalPackages, polices du gabarit sous assets/fonts/
-
statut : les 3 agents ·Ka (ka2.bot, ka4.bot, ka6.bot) surveillés sur /status
…
- src/lib/status.ts : liste AGENTS (hors ecosystem.json — les agents ne sont pas des plateformes) incluse dans checkAll() : les ticks aux 5 min couvrent maintenant 16 cibles - /status : carte factorisée en StatusCard, section « Les agents ·Ka » (Guardian) avec les mêmes barres 24 h / 90 j et uptimes 24 h / 7 j / 30 j ; le compte des plateformes en ligne ne mélange plus agents et sites Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
Marque : page /marque — logos des 13 plateformes + palettes documentées
…
- src/app/marque/page.tsx : logos SVG/PNG telechargeables (7 variantes par marque : SVG source, PNG 512/1024 transparents, fonds papier/encre 1280, icone iOS 180, banniere OG 1200x630) + ZIP complet - palettes lues dans ecosystem.json (source canonique) : hex, RGB, HSL et contrastes WCAG calcules au build ; palette commune tokens.css decrite role par role (papier, encre, verts, ambre, brique, ombres, typo, geometrie) - recits de couleur des 13 accents + regles d usage (on fait / on ne fait pas) - public/marque/ : 92 fichiers collectes depuis les sites en prod (2026-08-23) - nav : onglet Marque ; sitemap : /marque Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
Agents gardiens: page /agents ultra-détaillée + section accueil refondée (ka2/ka4/ka6 nouveau rôle: réparation autonome des connecteurs) + nav/footer + bannière /bots
…
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
Onglet Investisseurs : page /investisseurs + 6 documents corporatifs PDF (plan d affaires, concept, etats financiers previsionnels 2026-2029, infrastructure MacLustr, cout de developpement Claude Code, scenarios d expansion) — liens nav + footer
…
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
rapport-quotidien: cadences de sync dans le prompt (Resto·Ka hebdo)
…
Évite les fausses alertes « cache figé » : Resto·Ka se synchronise une fois par semaine, un volume identique 4 jours de suite y est normal. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-