Toutes les sorties et tous les événements du Québec, un seul endroit — 7 connecteurs, fiches SSR, design Groupe KA.
HTML 82.9%
Python 15.2%
TypeScript 0.9%
JavaScript 0.7%
-
Mon, Sep 7, 2026 1
-
feat(fiche): refonte premium mobile-first de la fiche événement (2026-09-07)
…
Même socle que les fiches Lou-Ka v3 / Immo-Ka v3, porté en JS natif dans frontend/index.html (tokens --sk-*, classes sk-*, fond papier, cartes blanches bord 1 px, framboise réservée aux CTA/prix) : héro (catégorie · source, prix « Dès X $ » / Gratuit / Billetterie, capsules date et statut, titre + lieu · ville · date, image, actions favoris ♥ / partage / Billets) ; « En bref » déterministe (aujourd'hui / demain / ce week-end / terminé, statut annulé-reporté-complet, prix, lieu, artistes, public) ; navigation sticky par sections (scroll-spy) ; « Quand et où » (faits, adresse, itinéraires, carte Leaflet sur tuiles OSM — CARTO exige désormais une clé) ; « Programme » (description tronquée, artistes, étiquettes) ; « Billets et prix » ; « À voir aussi » (cartes existantes) ; Dossier de la fiche ; Sources et méthodologie. CTA sticky après le héro, aside desktop sticky, « Demander à Ka » (bottom sheet → widget KA Agent). Header compact sur /evenement/ (favoris + partage injectés, ticker/badge/tabbar masqués, nettoyage au retour sur les autres vues). Ids de sections préfixés sk- (collision avec #sources de l'accueil). Ancien lien « Toutes les sorties » remplacé par le fil d'Ariane. Aucun order CSS ; pas de scrollIntoView à l'ouverture. Dossier qa/ (ignoré par git) : serveur de prévisualisation + scripts Playwright (lien vers vrai-prix/node_modules). Validé sur M3U96a : check-order OK, interactions OK (accordéon, similaires, Ka, navigation SPA, 404), captures 6 largeurs ; index.html basculé (rendu SEO seo.py relit le fichier à chaque requête, aucun redémarrage).
-
-
Wed, Aug 26, 2026 1
-
feat(ka-id v2): personnalisation Groupe KA — sortika/kaid.py (canonique ka-ui.git/kaid), journal serveur (search/detail_view/favorite), mode annotation (ordre chronologique préservé, blend=0 : badge « Recommandé pour vous » + exclusion des masqués), routeur /api/kaid, SDK ka-id.js
…
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
-
Tue, Aug 25, 2026 3
-
Barre de navigation mobile commune Groupe KA (KA Tabbar v1)
…
Pilule flottante fixe en bas (standard ka-ui/nav, version vanilla inline) : Découvrir · Recherche · Carte · Favoris, accent magenta signature, safe-area iOS, micro-interactions. Recherche = retour accueil + focus du champ central ; Carte = toutes les sorties sur la carte (drapeau state.mapAll one-shot dans isFiltering, remis à zéro à toute navigation hors tabbar). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
Nav mobile v2 : hamburger + panneau plein écran fixed (standard KA 2026-08-25)
…
Les liens de nav wrappaient dans le header sur mobile. Remplacés sous 760px par un hamburger 44px + panneau position:fixed inset:0 (z-modal) — visible peu importe la position de scroll, verrou de scroll, fermeture lien/✕/Escape. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
-
Mon, Aug 24, 2026 2
-
Sun, Aug 23, 2026 3
-
favoris ♥ « Mon univers Ka » (KA ID) : hub groupe-ka.com magasin central
…
- sortika/hubfav.py : client HMAC du hub (patron food-ka) — toggle synchrone, lecture avec cache mémoire 30 s invalidé au toggle, aucun stockage local - API : GET /api/favorites + POST /api/favorites/toggle (session KA ID, 401 sinon ; 403 compte non relié ; 502 hub injoignable) - frontend : cœur ♥ sur les cartes et la fiche (non connecté -> connexion KA ID), page /favoris + entrée de nav, toggle optimiste avec rétablissement - SSR : route /favoris (noindex, hors sitemaps) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
stats v3 : rapports PDF personnalisés (catalogue de blocs, rendu au choix, constructeur + modèles)
…
- kapdf.py v3 : catalog(dash), mode 'personnalise' (spec title+blocks, rendu par bloc avec conversions tableau, heatmap calendrier vectorielle) - web.py : GET /api/stats/catalog + POST /api/stats/report/custom - frontend : constructeur vanilla (modal 2 colonnes, ordre ↑↓, sélecteur de rendu, modèles localStorage, téléchargement blob) - SPEC.md v3 (§3bis)
-
SEO : pages programmatiques régions + catégories rendues en HTML
…
- sortika/seo.py : /regions, /region/{slug}, /categories, /categorie/{cat} (SSR complet : ItemList + BreadcrumbList, 100 fiches liées par page), liens régions/catégories dans l'accueil SSR, sitemap-pages enrichi - frontend/index.html : routeur SPA étendu — /region/{slug} et /categorie/{cat} ouvrent la recherche filtrée correspondante (kaSlug miroir du slugify serveur) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
-
Sat, Aug 22, 2026 2
-
SEO : SSR de l'accueil (title avec stats, canonical, OG fr_CA, JSON-LD WebSite/Organization, contenu essentiel) + hreflang/og:locale/BreadcrumbList sur les fiches, /contact et /stats ; lang fr-CA
…
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
Wed, Aug 19, 2026 4
-
Phase 3 — registre (34 sources), conformité et crédits
…
- data/sources.json : 9 nouvelles sources actives avec fiche d évaluation datée (accès constaté, volume mesuré, robots.txt lu, effort) + 5 écartements consignés avec raison (mauricie JS, laurentides/gaspesie WAF, tuxedo en panne, clubs pros doublons) - docs/CONFORMITE.md : tableau licences/robots.txt/crédits/fréquences de TOUTES les sources + données transversales (MAMH, OSM/ODbL, Nominatim) - frontend + seo.py : étiquettes SRC_LABELS des 9 nouvelles sources (+ 3 anciennes manquantes) ; pied de page d attribution enrichi, dont « lieux : © contributeurs OpenStreetMap (ODbL) » exigé par l annuaire - docs/connecteurs : fiches régénérées (34 sources, INDEX) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
Phase 2 — affichage & API : bandeaux statut, heures de fin, quarantaine, santé par source
…
- Frontend : badge Annulé/Reporté/Complet sur les cartes, bandeau de statut sur la fiche, plage horaire « 19 h 30 – 21 h 30 » quand end_time est connue, heure 00:00 affichée « heure non confirmée » (jamais un minuit menteur). - SEO/SSR : eventStatus schema.org (EventCancelled/EventPostponed), offers availability SoldOut, endDate horodatée (endDate + end_time + fuseau), bandeau statut dans le HTML SSR ; sitemaps sans les événements en quarantaine. - API : /api/events, /api/stats et le tableau de bord excluent la quarantaine ; /api/stats expose « quarantined » ; /api/sources expose upcoming_events par source + future_alerts (canal de supervision — une source verte sans futur est morte en silence). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
Correctifs front-end mobile : viewport-fit=cover, champs 16 px, blur header desktop seulement, socle mobile ka-ui
…
- index.html : meta viewport avec viewport-fit=cover (safe-area iOS) - .header : backdrop-filter limite a >=768px, fond quasi opaque rgba(245,243,238,.95) sur mobile (evite les descendants fixed pieges par le blur WebKit + perfs de scroll) - champs input#q / select#region / select#period a 16 px sous 760px (evite le zoom auto iOS au focus) - a.brand : extension tactile ::after inset -8px (cible >=44px), nav deja >=44px - frontend/src/ka/tokens.css : section SOCLE MOBILE OBLIGATOIRE (z-index unifies, --vh100 dvh, verrous de scroll, filet anti-zoom 16 px, extension tactile gk-badge) - frontend/ka-agent.js : agent corrige (safe-area, textarea 16 px, plein ecran <=640px + verrou scroll) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
-
Tue, Aug 18, 2026 1
-
Vague 2 d'enrichissement : heure précise, artistes, 3 nouveaux connecteurs
…
- Colonnes additives events.start_time (HH:MM locale QC) et events.artists (JSON) + migration auto à la connexion ; Event.finalize normalise l'heure (parse_time) et déduplique les artistes. - Heure captée partout où la source la publie : lepointdevente (cartes de liste « 17 août 2026, 20h00 » + fiches), evenko (show_time epoch → America/Montreal, respect hide_show_time), Laval et Sherbrooke (flux UTC → date+heure locales, minuit local = toute la journée), Montréal (JSON-LD des fiches pendant l'enrichissement og:image, cache rétro-compatible), atuvu. - Artistes : headliners evenko (explicite), lineup Bandsintown, attractions Ticketmaster, et extraction conservatrice des titres lpdv (patrons sûrs « Artiste - Salle » / « X en concert/rodage », liste de mots interdits). - Nouveau connecteur Ville de Brossard (API REST WordPress city-event + bannière/JSON-LD des fiches, cache incrémental) — 251 événements. - Nouveau connecteur Bandsintown (dates QC des artistes connus de la base, rotation 100 artistes/sync, app_id js_www.sorti-ka.com testé accepté) — 108 concerts géolocalisés avec heure. - Nouveau connecteur Ticketmaster Discovery API, complet mais « prêt — clé requise » (TICKETMASTER_API_KEY absent de .env ; skip propre + .env.example). - Gatineau, Trois-Rivières, Lévis, Terrebonne : étudiées et documentées « abandonnée » dans sources.json (aucun flux exploitable, vérifié 2026-08-18). - Dédup à l'affichage : rang prix > GPS > image > description ; /api/stats expose « sources » (10 actives) pour le hub groupe-ka ; SSR : heure dans le JSON-LD (offset québécois) + performer ; frontend : heure sur les cartes et fiches, « À l'affiche », libellés des nouvelles sources. - Tests : 22 → 32 (parse_time, utc_to_local, artistes, migration, TM/BIT/ Brossard sur structures réelles). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
-
Mon, Aug 17, 2026 7
-
Câblage du widget KA Agent (bulle de chat Groupe KA)
…
Ajout des balises window.KA_AGENT={site:"sorti-ka"} et /ka-agent.js en fin de <body> de frontend/index.html — repris tel quel par le gabarit SSR de seo.py (aucun doublon). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> -
Footer/contact : Job-Ka rejoint l écosystème (ecosystem.json 13 sites)
…
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
Page /stats : tableau de bord analytique + rapport PDF Groupe-KA
…
- sortika/stats.py : GET /api/stats/dashboard (contrat ka-stats SPEC.md) — KPI réels avec deltas, séries ajouts/jour et en-cours/jour, donut catégories top 8, gratuits vs payants, sources, régions, heatmap calendrier 26 semaines, top villes/lieux/gros jours, records ; cache mémoire 5 min par période - sortika/kapdf.py (moteur PDF commun fpdf2) + GET /api/stats/report (complet | synthese), wordmark Sorti·Ka, accent #d6336c, filename kapdf.filename("sorti-ka", period) - frontend : vue /stats vanilla JS + SVG (kit kacharts reproduit) — KPI auto-fit, chips de période + plage personnalisée, courbes avec infobulle et légende cliquable, barres, anneau, heatmap, tableaux triables/recherche/pagination 25, records, boutons PDF ; lien Stats dans la nav ; mobile 360/768/1440 sans débordement - SEO : SSR /stats (title/canonical/og) + sitemap-pages - requirements : fpdf2 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> -
Assets Groupe KA (og.png, favicon.svg, apple-touch-icon) + correction du débordement à 768 px
…
- ka-assets/ → frontend/ (servi à la racine par StaticFiles) : og.png (1200×630), favicon.svg, apple-touch-icon.png. - index.html : liens icônes + og:image/og:image:width/height + twitter:card summary_large_image + twitter:image. - seo.py : OG_IMAGE_TAGS par défaut (contact, événements sans image), retombée twitter pour les événements avec image ; _render retire les balises statiques pour éviter les doublons. - header : header-inner passait en pile seulement à ≤760 px alors que la ligne exige ~882 px — flex-wrap autorisé à toute largeur (cause racine du débordement horizontal de +114 px à 768 px). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
Harmonisation ka-ui — accent framboise, badge Groupe KA, KaFooter, page /contact
…
- tokens.css (ka-ui vendoré, src/ka/) chargé en premier ; le CSS local ne garde que le bloc accent framboise (--accent #d6336c + alias --lime) et le CSS métier — socle dédupliqué, couleurs en dur pointées vers les tokens - Header : badge « Un service Groupe KA » (→ groupe-ka.com) à côté du logo, lien Contact, empilement propre sous 760 px (badge visible sur mobile) - Footer : remplacé par le footer commun KaFooter (siteId sorti-ka) — 3 courriels + rôles, avertissement agrégateur, 15 sites, liens légaux du hub + attribution des données conservée - Page /contact : vue SPA (contenu ecosystem.json) + route SSR seo.py (title/canonical/og + contenu robots) + entrée sitemap-pages.xml - KA ID : lien « Créer un compte » → groupe-ka.com/connexion à côté du bouton « Se connecter avec KA » - SEO : title « Sorti-Ka — Un service Groupe KA » - Responsive/tactile : overflow-x clip (tokens), nav/chips/liens ≥ 44 px, chips 44 px sur pointeur tactile Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
Connexion KA ID — « Se connecter avec KA » (SSO hub groupe-ka.com)
…
sortika/auth.py (patron louka/auth.py) : départ SSO avec state signé, vérification du jeton HS256 du hub (issuer/audience/exp), upsert membre (table users, KA ID adopté du hub), session cookie httpOnly HMAC, /api/me avec profil dicté par le hub (/api/sso/profile). Bouton et puce membre dans l'en-tête. 3 tests auth (22 au total). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
Sorti·Ka v1 — agrégateur de sorties & événements du Québec
…
8 connecteurs actifs (Le point de vente, SIT Québec, Ville de Montréal, evenko, La Vitrine, Atuvu, Sherbrooke, Laval), 15 231 événements actifs dans les 17 régions, fiches SSR /evenement/{uid} avec JSON-LD, dédup inter-sources, enrichissement d'images og:image, design system Groupe KA « éditorial sharp », 19 tests sur fixtures réelles. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-