SPB Git forge

spb/admin-ka

Public
41commits 1branches 0releases
172.9 MBsize
maindefault branch
20 days agolast push
JavaScript 65.5% Python 17.8% CSS 13% HTML 3.7%

archive 2026-09-04 : retrait de crea-ka, trouve-ka, resto-ka, house-ka, rent-ka (registre, monitor, social, insights, UI)

Simon-Pierre Boucher committed 20 days ago (Sep 5, 2026) parent ee1f782

12 changed files +17 −39

modified public/app.js +1 −1
@@ -1987,7 +1987,7 @@
1987 1987 // ===== STUDIO_SOCIAL v3 (générateurs + galerie + loading) =====
1988 1988 (function(){
1989 1989 const $ = (id) => document.getElementById(id);
1990 − const SITE_LABEL = {"lou-ka":"Lou·Ka","rent-ka":"Rent·Ka","immo-ka":"Immo·Ka","house-ka":"House·Ka","vrai-prix":"Vrai-Prix","auto-ka":"Auto·Ka","food-ka":"Food·Ka","fabri-ka":"Fabri·Ka","resto-ka":"Resto·Ka","sorti-ka":"Sorti·Ka","crea-ka":"Créa·Ka","job-ka":"Job·Ka","trouve-ka":"Trouve·Ka"};
1990 + const SITE_LABEL = {"lou-ka":"Lou·Ka","immo-ka":"Immo·Ka","vrai-prix":"Vrai-Prix","auto-ka":"Auto·Ka","food-ka":"Food·Ka","fabri-ka":"Fabri·Ka","sorti-ka":"Sorti·Ka","job-ka":"Job·Ka",};
1991 1991 // overlay de chargement
1992 1992 let ov;
1993 1993 function showLoading(msg){
modified public/index.html +2 −2
@@ -281,7 +281,7 @@ document.documentElement.dataset.theme=dark?'dark':'light';}catch(e){}})();</scr
281 281 <h3>🖼️ Publication</h3>
282 282 <textarea id="stPostPrompt" rows="2" placeholder="Sujet (optionnel). Ex : dernière propriété à vendre sur Immo-Ka."></textarea>
283 283 <div class="soc-actions">
284 − <select id="stPostSite" class="soc-select"><option value="">Choix auto</option><option value="lou-ka">Lou·Ka</option><option value="immo-ka">Immo·Ka</option><option value="vrai-prix">Vrai-Prix</option><option value="auto-ka">Auto·Ka</option><option value="food-ka">Food·Ka</option><option value="fabri-ka">Fabri·Ka</option><option value="resto-ka">Resto·Ka</option><option value="sorti-ka">Sorti·Ka</option><option value="crea-ka">Créa·Ka</option><option value="job-ka">Job·Ka</option><option value="trouve-ka">Trouve·Ka</option></select>
284 + <select id="stPostSite" class="soc-select"><option value="">Choix auto</option><option value="lou-ka">Lou·Ka</option><option value="immo-ka">Immo·Ka</option><option value="vrai-prix">Vrai-Prix</option><option value="auto-ka">Auto·Ka</option><option value="food-ka">Food·Ka</option><option value="fabri-ka">Fabri·Ka</option><option value="sorti-ka">Sorti·Ka</option><option value="job-ka">Job·Ka</option></select>
285 285 <button id="stPostGen" class="btn-cta small">✨ Générer une image</button>
286 286 </div>
287 287 </div>
@@ -289,7 +289,7 @@ document.documentElement.dataset.theme=dark?'dark':'light';}catch(e){}})();</scr
289 289 <h3>🎬 Reel vidéo</h3>
290 290 <textarea id="stReelPrompt" rows="2" placeholder="Sujet (optionnel). Ex : le dernier logement en annonce sur Lou-Ka."></textarea>
291 291 <div class="soc-actions">
292 − <select id="stReelSite" class="soc-select"><option value="">Choix auto</option><option value="lou-ka">Lou·Ka</option><option value="immo-ka">Immo·Ka</option><option value="vrai-prix">Vrai-Prix</option><option value="auto-ka">Auto·Ka</option><option value="food-ka">Food·Ka</option><option value="fabri-ka">Fabri·Ka</option><option value="resto-ka">Resto·Ka</option><option value="sorti-ka">Sorti·Ka</option><option value="crea-ka">Créa·Ka</option><option value="job-ka">Job·Ka</option><option value="trouve-ka">Trouve·Ka</option></select>
292 + <select id="stReelSite" class="soc-select"><option value="">Choix auto</option><option value="lou-ka">Lou·Ka</option><option value="immo-ka">Immo·Ka</option><option value="vrai-prix">Vrai-Prix</option><option value="auto-ka">Auto·Ka</option><option value="food-ka">Food·Ka</option><option value="fabri-ka">Fabri·Ka</option><option value="sorti-ka">Sorti·Ka</option><option value="job-ka">Job·Ka</option></select>
293 293 <button id="stReelGen" class="btn-cta small">🎬 Générer un reel</button>
294 294 </div>
295 295 <div class="soc-actions" style="margin-top:8px">
modified server/monitor.js +0 −5
@@ -15,18 +15,13 @@ import { getSites, getNodes, selfNode, sshTarget } from './registry.js';
15 15 const _SITES_LEGACY_2026_08 = [
16 16 { app: 'lou-ka', label: 'Lou·Ka', domain: 'www.lou-ka.com', node: 'M3U96b', pm2: 'lou-ka-web', dir: '~/apps/lou-ka', deployed: '2026-08' },
17 17 { app: 'immo-ka', label: 'Immo·Ka', domain: 'www.immo-ka.com', node: 'M4M64a', pm2: 'immo-ka-web', dir: '~/apps/immo-ka', deployed: '2026-08' },
18 − { app: 'house-ka', label: 'House·Ka', domain: 'www.house-ka.com', node: 'M4M64b', pm2: 'house-ka-web', dir: '~/apps/house-ka', deployed: '2026-08' },
19 − { app: 'rent-ka', label: 'Rent·Ka', domain: 'www.rent-ka.com', node: 'M4M36', pm2: 'rent-ka-web', dir: '~/apps/rent-ka', deployed: '2026-08' },
20 18 { app: 'vrai-prix', label: 'Vrai-Prix', domain: 'www.vrai-prix.com', node: 'M3U96a', pm2: 'vrai-prix', dir: '~/apps/vrai-prix', deployed: '2026-08' },
21 19 { app: 'valoplex', label: 'ValoPlex', domain: 'www.valoplex.com', node: 'M3U96a', pm2: 'valoplex', dir: '~/apps/valoplex', deployed: '2026-08' },
22 20 { app: 'auto-ka', label: 'Auto·Ka', domain: 'www.auto-ka.com', node: 'M4M64b', pm2: 'auto-ka-web', dir: '~/auto-ka', deployed: '2026-08' },
23 21 { app: 'fabri-ka', label: 'Fabri·Ka', domain: 'www.fabri-ka.com', node: 'M4M64a', pm2: 'fabri-ka-web', dir: '~/fabri-ka', deployed: '2026-08' },
24 22 { app: 'food-ka', label: 'Food·Ka', domain: 'www.food-ka.com', node: 'M4M64b', pm2: 'food-ka-web', dir: '~/apps/food-ka', deployed: '2026-08' },
25 − { app: 'resto-ka', label: 'Resto·Ka', domain: 'www.resto-ka.com', node: 'M3U96b', pm2: 'resto-ka', dir: '~/apps/resto-ka', deployed: '2026-08' },
26 23 { app: 'sorti-ka', label: 'Sorti·Ka', domain: 'www.sorti-ka.com', node: 'M3U96a', pm2: 'sorti-ka-web', dir: '~/apps/sorti-ka', deployed: '2026-08' },
27 − { app: 'crea-ka', label: 'Créa·Ka', domain: 'www.crea-ka.com', node: 'M3U96b', pm2: 'crea-ka-web', dir: '~/apps/crea-ka', deployed: '2026-08' },
28 24 { app: 'job-ka', label: 'Job·Ka', domain: 'www.job-ka.com', node: 'M3U96a', pm2: 'job-ka-web', dir: '~/apps/job-ka', deployed: '2026-08' },
29 − { app: 'trouve-ka', label: 'Trouve·Ka', domain: 'www.trouve-ka.com', node: 'M2M32', pm2: 'tk-web', dir: '~/trouve-ka', deployed: '2026-08' },
30 25 { app: 'groupe-ka', label: 'Groupe·Ka', domain: 'www.groupe-ka.com', node: 'M3U96b', pm2: 'groupe-ka', dir: '~/apps/groupe-ka', deployed: '2026-08' },
31 26 { app: 'ka-stats', label: 'Ka·Stats', domain: 'www.ka-stats.com', node: 'M1M32', pm2: 'ka-stats', dir: '~/apps/ka-stats', deployed: '2026-08' },
32 27 // Agents gardiens KA Guardian — un seul repo sur M4M36, process launchd (unit), pas de pm2 sur ce nœud
modified server/registry.js +0 −5
@@ -28,18 +28,13 @@ const ENV_PATH = '/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
28 28 // monitor:false / project:false : exclure du monitoring / des projets Claude Code.
29 29 export const KA_CATALOG = {
30 30 'lou-ka': { label: 'Lou·Ka' },
31 − 'rent-ka': { label: 'Rent·Ka' },
32 31 'immo-ka': { label: 'Immo·Ka' },
33 − 'house-ka': { label: 'House·Ka' },
34 32 'vrai-prix': { label: 'Vrai-Prix' },
35 33 'auto-ka': { label: 'Auto·Ka' },
36 34 'fabri-ka': { label: 'Fabri·Ka' },
37 35 'food-ka': { label: 'Food·Ka' },
38 − 'resto-ka': { label: 'Resto·Ka' },
39 36 'sorti-ka': { label: 'Sorti·Ka' },
40 − 'crea-ka': { label: 'Créa·Ka' },
41 37 'job-ka': { label: 'Job·Ka' },
42 − 'trouve-ka': { label: 'Trouve·Ka', pm2: 'tk-web' },
43 38 'groupe-ka': { label: 'Groupe·Ka' },
44 39 'api-ka': { label: 'API·Ka', pm2: 'apika-api' },
45 40 'ka-stats': { label: 'Ka·Stats' },
modified server/server.js +1 −1
@@ -62,7 +62,7 @@ const UPGRADER_MODEL = config.upgraderModel || 'claude-opus-4-8';
62 62 const KA_KNOWLEDGE = `Tu es l'"upgradeur de prompt" de la console administration-ka.com. Ta seule tâche : réécrire la demande brute de l'utilisateur en un prompt EXCELLENT destiné à Claude Code, qui s'exécute sur le nœud d'une app du Groupe KA. Tu ne réponds jamais à la demande toi-même, tu ne codes pas : tu produis UNIQUEMENT le prompt amélioré, prêt à être envoyé.
63 63
64 64 # Écosystème Groupe KA (12 apps web, stack Node/React, cluster MacLustr)
65 −- lou-ka (lou-ka.com) : location immobilière/logements. rent-ka (rent-ka.com) : locations résidentielles Canada hors Québec, site EN. immo-ka (immo-ka.com) : achat/vente immobilier. house-ka (house-ka.com) : maisons à vendre Canada hors Québec, site EN. vrai-prix (vrai-prix.com) : comparateur de prix. auto-ka (auto-ka.com) : véhicules. fabri-ka (fabri-ka.com) : fabricants/artisans/friperies. food-ka (food-ka.com) : alimentation/épicerie. resto-ka (resto-ka.com) : restaurants. sorti-ka (sorti-ka.com) : sorties/événements. crea-ka (crea-ka.com) : créateurs de contenu QC (multi-plateforme). job-ka (job-ka.com) : emplois. trouve-ka (trouve-ka.com) : recherche/annuaire. api-ka (api-ka.com) : API centrale + supervision des connecteurs. ka-stats (ka-stats.com) : Ka·Stats, l'observatoire de statistiques de l'écosystème — agrège les dashboards /api/stats/dashboard des sites (Node zéro-dépendance). groupe-ka.com : hub + KA ID (SSO). ka2/ka4/ka6 (ka2.bot/ka4.bot/ka6.bot) : agents gardiens autonomes des connecteurs (KA Guardian — un seul repo Python/FastAPI, process launchd com.kaX.guardian, PAS pm2). Marché cible : Québec (fr-CA).
65 +- lou-ka (lou-ka.com) : location immobilière/logements. immo-ka (immo-ka.com) : achat/vente immobilier. vrai-prix (vrai-prix.com) : comparateur de prix. auto-ka (auto-ka.com) : véhicules. fabri-ka (fabri-ka.com) : fabricants/artisans/friperies. food-ka (food-ka.com) : alimentation/épicerie. sorti-ka (sorti-ka.com) : sorties/événements. job-ka (job-ka.com) : emplois. api-ka (api-ka.com) : API centrale + supervision des connecteurs. ka-stats (ka-stats.com) : Ka·Stats, l'observatoire de statistiques de l'écosystème — agrège les dashboards /api/stats/dashboard des sites (Node zéro-dépendance). groupe-ka.com : hub + KA ID (SSO). ka2/ka4/ka6 (ka2.bot/ka4.bot/ka6.bot) : agents gardiens autonomes des connecteurs (KA Guardian — un seul repo Python/FastAPI, process launchd com.kaX.guardian, PAS pm2). Marché cible : Québec (fr-CA).
66 66 - EMPLACEMENTS : les nœuds, répertoires et process PM2 réels de chaque app sont fournis en fin de ce message (bloc « Emplacements ACTUELS », issu du registre mld) — ils changent au fil des migrations, ne jamais en citer de mémoire.
67 67 - Architecture commune : back Node (souvent Express/Fastify), front React/Next ou Vite, données via connecteurs (scrapers) + SQLite/Postgres, PM2 pour les process, ngrok pour les domaines. Beaucoup d'apps ont un backend "sync"/crawler et une couche qualité (published/quarantaine).
68 68
modified server/social.js +3 −3
@@ -452,7 +452,7 @@ export async function renderCard(insight) {
452 452 }
453 453
454 454 // --- produit vedette (photo réelle) pour le genre « spotlight » ---
455 −const KNOWN_SITES = ['lou-ka','immo-ka','vrai-prix','auto-ka','food-ka','fabri-ka','resto-ka','sorti-ka','crea-ka','job-ka','trouve-ka'];
455 +const KNOWN_SITES = ['lou-ka','immo-ka','vrai-prix','auto-ka','food-ka','fabri-ka','sorti-ka','job-ka'];
456 456 const SPOT = {
457 457 'lou-ka': { url: 'https://www.lou-ka.com/api/listings?limit=24', arr: 'listings', minPrice: 800 },
458 458 'immo-ka': { url: 'https://www.immo-ka.com/api/listings?limit=24', arr: 'listings', minPrice: 180000 },
@@ -553,7 +553,7 @@ async function fetchItems(site, count) {
553 553 async function planFromPrompt(prompt) {
554 554 const model = CFG.socialModel || CFG.upgraderModel || 'claude-opus-4-8';
555 555 const sys = "Tu es le planificateur du Studio KA. À partir d'une demande, renvoie UNIQUEMENT un objet JSON (rien d'autre) : {\"site\":\"<id ou vide>\",\"mode\":\"stat|spotlight|list|grid|donut|quote\",\"count\":<1-6>}.\n" +
556 − "Sites: lou-ka (logements à louer), immo-ka (propriétés à vendre), vrai-prix (évaluations), auto-ka (autos occasion), food-ka (épicerie/soldes), fabri-ka (produits québécois), resto-ka (restos), sorti-ka (événements), crea-ka (créateurs), job-ka (emplois), trouve-ka (recherche web).\n" +
556 + "Sites: lou-ka (logements à louer), immo-ka (propriétés à vendre), vrai-prix (évaluations), auto-ka (autos occasion), food-ka (épicerie/soldes), fabri-ka (produits québécois), sorti-ka (événements), job-ka (emplois).\n" +
557 557 "Modes: 'stat' = un chiffre marquant ; 'spotlight' = UNE annonce/produit en vedette avec photo ; 'list' = une LISTE de plusieurs derniers items ; 'grid' = MOSAÏQUE de 4 photos d'items ; 'donut' = un POURCENTAGE mis en scène en anneau ; 'quote' = le fait raconté en grande typo (« le saviez-vous »).\n" +
558 558 "Règles: 'liste/derniers/plusieurs/top N/montre' => list (count = N demandé ou 5). 'mosaïque/collage/en images' => grid. 'dernier/une annonce/en vedette' => spotlight. 'pourcentage/part/proportion' => donut. 'fait/anecdote/saviez-vous/storytelling' => quote. Sinon stat. list/grid/spotlight ne valent que pour lou-ka, immo-ka, fabri-ka, sorti-ka ; sinon stat/donut/quote. Choisis le site le plus pertinent.";
559 559 try {
@@ -856,7 +856,7 @@ export function genBatchStatus(){ return { running: genBatchRunning }; }
856 856
857 857 // ---------- Lot de reels (génération + publication assistée) ----------
858 858 let batchRunning = false;
859 −export const REEL_BATCH_DEFAULT = ['lou-ka','immo-ka','fabri-ka','sorti-ka','food-ka','auto-ka','vrai-prix','crea-ka','trouve-ka','resto-ka'];
859 +export const REEL_BATCH_DEFAULT = ['lou-ka','immo-ka','fabri-ka','sorti-ka','food-ka','auto-ka','vrai-prix'];
860 860 export function startReelBatch(sites) {
861 861 if (batchRunning) return { started: false, reason: 'lot déjà en cours' };
862 862 batchRunning = true;
added server/social/__pycache__/insights.cpython-314.pyc +0 −0

Binary file not shown.

added server/social/__pycache__/make_reel.cpython-314.pyc +0 −0

Binary file not shown.

added server/social/__pycache__/render_card_html.cpython-314.pyc +0 −0

Binary file not shown.

modified server/social/insights.py +10 −16
@@ -19,28 +19,23 @@ CTX.verify_mode = ssl.CERT_NONE
19 19 LIME = "#d9f26b"
20 20 ACCENT = {
21 21 "lou-ka": "#ff6a00", "immo-ka": "#e23744", "food-ka": "#1f9d55",
22 − "fabri-ka": "#c4532e", "resto-ka": "#f08c00", "auto-ka": "#ff5a2a",
23 − "vrai-prix": LIME, "trouve-ka": LIME, "sorti-ka": LIME,
24 − "crea-ka": LIME, "job-ka": LIME, "groupe-ka": LIME,
22 + "fabri-ka": "#c4532e", "auto-ka": "#ff5a2a",
23 + "vrai-prix": LIME, "sorti-ka": LIME, "job-ka": LIME, "groupe-ka": LIME,
25 24 }
26 25 LABELS = {
27 26 "lou-ka": "Lou·Ka", "immo-ka": "Immo·Ka", "food-ka": "Food·Ka",
28 − "fabri-ka": "Fabri·Ka", "resto-ka": "Resto·Ka", "auto-ka": "Auto·Ka",
29 − "vrai-prix": "Vrai-Prix", "trouve-ka": "Trouve·Ka", "sorti-ka": "Sorti·Ka",
30 − "crea-ka": "Créa·Ka", "job-ka": "Job·Ka", "trouve-ka": "Trouve·Ka",
27 + "fabri-ka": "Fabri·Ka", "auto-ka": "Auto·Ka",
28 + "vrai-prix": "Vrai-Prix", "sorti-ka": "Sorti·Ka", "job-ka": "Job·Ka",
31 29 }
32 30 URLS = {
33 31 "lou-ka": "https://www.lou-ka.com/api/stats/detailed",
34 32 "immo-ka": "https://www.immo-ka.com/api/stats",
35 33 "food-ka": "https://www.food-ka.com/api/stats",
36 34 "fabri-ka": "https://www.fabri-ka.com/api/stats",
37 − "resto-ka": "https://www.resto-ka.com/api/stats",
38 35 "auto-ka": "https://www.auto-ka.com/api/stats",
39 36 "vrai-prix": "https://www.vrai-prix.com/api/stats",
40 37 "sorti-ka": "https://www.sorti-ka.com/api/stats",
41 − "crea-ka": "https://www.crea-ka.com/api/stats",
42 38 "job-ka": "https://www.job-ka.com/api/stats",
43 − "trouve-ka": "https://www.trouve-ka.com/api/status",
44 39 }
45 40
46 41
@@ -198,7 +193,7 @@ def ex_fabri_ka(d):
198 193 def ex_resto_ka(d):
199 194 out = []
200 195 total = d.get("restaurants", 0)
201 − out.append(mk("resto-ka", "total", fr(total), "restaurants répertoriés au Québec",
196 + out.append(mk("total", fr(total), "restaurants répertoriés au Québec",
202 197 [(fr(d.get("items", 0)), "plats aux menus"), (fr(d.get("menus", 0)), "menus complets"),
203 198 (fr(d.get("regions", 0)), "régions")],
204 199 f"Resto·Ka répertorie {fr(total)} restaurants et {fr(d.get('items',0))} plats détaillés "
@@ -207,7 +202,7 @@ def ex_resto_ka(d):
207 202 tagline="Tous les restos du Québec, une seule adresse."))
208 203 by = sorted([x for x in d.get("by_region", []) if x.get("n")], key=lambda x: -x["n"])[:6]
209 204 if by:
210 − out.append(mk("resto-ka", "regions", fr(total), "restaurants, par région",
205 + out.append(mk("regions", fr(total), "restaurants, par région",
211 206 [(fr(d.get("items", 0)), "plats"), (fr(d.get("inspections", 0)), "inspections MAPAQ"),
212 207 (fr(d.get("with_alcohol_permit", 0)), "permis d'alcool")],
213 208 "Le Québec gourmand région par région, des grands centres aux régions.",
@@ -236,7 +231,7 @@ def ex_crea_ka(d):
236 231 total = d.get("creators", 0)
237 232 bp = d.get("by_platform", {})
238 233 bars = sorted(bp.items(), key=lambda x: -x[1])[:6]
239 − out.append(mk("crea-ka", "creators", fr(total), "créateurs de contenu québécois recensés",
234 + out.append(mk("creators", fr(total), "créateurs de contenu québécois recensés",
240 235 [(fr(d.get("accounts", 0)), "comptes reliés"),
241 236 (str(len(bp)), "plateformes"), (str(len(d.get("by_niche", {}))), "niches")],
242 237 f"Créa·Ka a cartographié {fr(total)} créateurs de contenu québécois, avec {fr(d.get('accounts',0))} "
@@ -265,7 +260,7 @@ def ex_job_ka(d):
265 260 def ex_trouve_ka(d):
266 261 out = []
267 262 pages = d.get("pages_indexed", 0)
268 − out.append(mk("trouve-ka", "pages", fr(pages), "pages web québécoises indexées",
263 + out.append(mk("pages", fr(pages), "pages web québécoises indexées",
269 264 [(fr(d.get("domains_count", 0)), "domaines"), (fr(d.get("indexed_last_hour", 0)), "pages/heure"),
270 265 ("100 %", "recherche sémantique")],
271 266 f"Trouve·Ka a indexé {fr(pages)} pages web québécoises sur {fr(d.get('domains_count',0))} domaines, "
@@ -277,9 +272,8 @@ def ex_trouve_ka(d):
277 272
278 273 EXTRACT = {
279 274 "lou-ka": ex_lou_ka, "immo-ka": ex_immo_ka, "vrai-prix": ex_vrai_prix,
280 − "auto-ka": ex_auto_ka, "food-ka": ex_food_ka, "fabri-ka": ex_fabri_ka,
281 − "resto-ka": ex_resto_ka, "sorti-ka": ex_sorti_ka, "crea-ka": ex_crea_ka,
282 − "job-ka": ex_job_ka, "trouve-ka": ex_trouve_ka,
275 + "auto-ka": ex_auto_ka, "food-ka": ex_food_ka, "fabri-ka": ex_fabri_ka, "sorti-ka": ex_sorti_ka,
276 + "job-ka": ex_job_ka,
283 277 }
284 278
285 279
modified server/social/make_reel.py +0 −3
@@ -30,12 +30,9 @@ PALETTES={
30 30 "immo-ka":{"a":"#e23744","b":"#ff6b76","g1":"#2a0c10","g2":"#0d0a0b"},
31 31 "food-ka":{"a":"#1f9d55","b":"#5fd08a","g1":"#07230f","g2":"#0a0d0b"},
32 32 "fabri-ka":{"a":"#c4532e","b":"#e8895f","g1":"#241009","g2":"#0d0a09"},
33 − "resto-ka":{"a":"#f08c00","b":"#ffb84d","g1":"#241804","g2":"#0d0b08"},
34 33 "auto-ka":{"a":"#ff5a2a","b":"#ff8f6b","g1":"#26100a","g2":"#0d0a09"},
35 34 "vrai-prix":{"a":"#d9f26b","b":"#b8e04a","g1":"#16230a","g2":"#0b0d08"},
36 − "trouve-ka":{"a":"#d9f26b","b":"#8fd3ff","g1":"#0a1a20","g2":"#080b0d"},
37 35 "sorti-ka":{"a":"#d9f26b","b":"#ff8fd0","g1":"#210a1c","g2":"#0c090c"},
38 − "crea-ka":{"a":"#d9f26b","b":"#c08bff","g1":"#160a24","g2":"#0a090d"},
39 36 "job-ka":{"a":"#d9f26b","b":"#7ab8ff","g1":"#0a1522","g2":"#080b0d"},
40 37 }
41 38 def pal(s): return PALETTES.get(s, PALETTES["vrai-prix"])
modified server/social/render_card_html.py +0 −3
@@ -32,12 +32,9 @@ PALETTES = {
32 32 "immo-ka": {"a":"#e23744","b":"#ff6b76","g1":"#2a0c10","g2":"#0d0a0b","ad":"#b02532"},
33 33 "food-ka": {"a":"#1f9d55","b":"#5fd08a","g1":"#07230f","g2":"#0a0d0b","ad":"#157a41"},
34 34 "fabri-ka": {"a":"#c4532e","b":"#e8895f","g1":"#241009","g2":"#0d0a09","ad":"#9c3f21"},
35 − "resto-ka": {"a":"#f08c00","b":"#ffb84d","g1":"#241804","g2":"#0d0b08","ad":"#b96c00"},
36 35 "auto-ka": {"a":"#ff5a2a","b":"#ff8f6b","g1":"#26100a","g2":"#0d0a09","ad":"#cc3f14"},
37 36 "vrai-prix":{"a":"#d9f26b","b":"#b8e04a","g1":"#16230a","g2":"#0b0d08","ad":"#6b7f1d"},
38 − "trouve-ka":{"a":"#d9f26b","b":"#8fd3ff","g1":"#0a1a20","g2":"#080b0d","ad":"#6b7f1d"},
39 37 "sorti-ka": {"a":"#d9f26b","b":"#ff8fd0","g1":"#210a1c","g2":"#0c090c","ad":"#6b7f1d"},
40 − "crea-ka": {"a":"#d9f26b","b":"#c08bff","g1":"#160a24","g2":"#0a090d","ad":"#6b7f1d"},
41 38 "job-ka": {"a":"#d9f26b","b":"#7ab8ff","g1":"#0a1522","g2":"#080b0d","ad":"#6b7f1d"},
42 39 }
43 40
44 41