spb/cluster-skill
Public
HTML 57.2%
Shell 19.1%
Python 11.2%
CSS 7.4%
JavaScript 5.1%
1{2 "updated": "2026-09-10",3 "contact": {4 "email": "contact@spboucher.ai",5 "owner": "Simon-Pierre Boucher",6 "site": "https://www.spboucher.ai",7 "git": "https://git.spboucher.ai"8 },9 "sites": {10 "staug": {11 "name": "Saint-Augustin-de-Desmaures",12 "region": "Québec, Canada",13 "lat": 46.741,14 "lon": -71.458,15 "kind": "lan",16 "operator": "MacLustr (LAN privé)",17 "note": "Le cœur du cluster : 21 Macs sur un réseau local 10 GbE, deux NAS UGREEN."18 },19 "bhs": {20 "name": "Beauharnois",21 "region": "Québec, Canada",22 "lat": 45.313,23 "lon": -73.873,24 "kind": "ovh",25 "operator": "OVHcloud BHS8",26 "note": "Passerelle principale du MacLustr Tunnel et deux serveurs de réserve. ≈ 10 ms du LAN."27 },28 "gra": {29 "name": "Gravelines",30 "region": "Hauts-de-France, France",31 "lat": 50.987,32 "lon": 2.128,33 "kind": "ovh",34 "operator": "OVHcloud GRA1",35 "note": "Passerelle secondaire : secours et présence européenne."36 },37 "ist": {38 "name": "Istanbul",39 "region": "Turquie",40 "lat": 41.008,41 "lon": 28.978,42 "kind": "rented",43 "operator": "Macly (réseau Erlion)",44 "note": "Huit Macs dédiés loués : un Mac Studio M1 Max 64 Go et sept Mac mini."45 },46 "atl": {47 "name": "Atlanta",48 "region": "Géorgie, États-Unis",49 "lat": 33.786,50 "lon": -84.406,51 "kind": "rented",52 "operator": "MacStadium",53 "note": "Mac mini M2 Pro dédié."54 },55 "dub": {56 "name": "Dublin",57 "region": "Irlande",58 "lat": 53.335,59 "lon": -6.252,60 "kind": "rented",61 "operator": "MacStadium",62 "note": "Deux Mac mini dédiés (M1, M2)."63 },64 "lim": {65 "name": "Limassol",66 "region": "Chypre",67 "lat": 34.687,68 "lon": 33.037,69 "kind": "rented",70 "operator": "rentamac",71 "note": "Mac mini M4 derrière NAT, joint par la passerelle SSH du fournisseur."72 }73 },74 "totals": {75 "macs": 33,76 "ovh": 4,77 "apps": 36,78 "sites": 3579 },80 "nodes": [81 {82 "id": "M3U96a",83 "group": "lan",84 "site": "staug",85 "model": "Mac Studio",86 "chip": "M3 Ultra",87 "tier": "ultra",88 "cores": 32,89 "gpu": 80,90 "ram": 96,91 "disk": 926,92 "ip": "192.168.2.87",93 "role": "Nœud maître de calcul et d'applications",94 "desc": "Le plus gros nœud du cluster. Héberge la console Administration·Ka et une grappe d'applications Next.js/FastAPI (QC26, RareIndex, Fetcha, PolyLLM, UQO).",95 "tags": [96 "worker",97 "apps",98 "calcul"99 ]100 },101 {102 "id": "M3U96b",103 "group": "lan",104 "site": "staug",105 "model": "Mac Studio",106 "chip": "M3 Ultra",107 "tier": "ultra",108 "cores": 32,109 "gpu": 80,110 "ram": 96,111 "disk": 926,112 "ip": "192.168.2.82",113 "role": "Réservé à HF Market Data",114 "desc": "Sert le lac de données FirstRate (353 Go de séries intraday, DuckDB) derrière www.hfmarketdata.io. Réservé : aucune autre app n'y est placée.",115 "tags": [116 "worker",117 "data",118 "réservé"119 ]120 },121 {122 "id": "M2U64",123 "group": "lan",124 "site": "staug",125 "model": "Mac Studio",126 "chip": "M2 Ultra",127 "tier": "ultra",128 "cores": 24,129 "gpu": 76,130 "ram": 64,131 "disk": 926,132 "ip": "192.168.2.107",133 "role": "Nœud d'applications sans session graphique",134 "desc": "Tourne en LaunchDaemon (headless). Héberge SPB Cloud, vQuant, UQO Éval, Food·Ka et les consoles MacLustr.",135 "tags": [136 "worker",137 "apps",138 "headless"139 ]140 },141 {142 "id": "M4M64a",143 "group": "lan",144 "site": "staug",145 "model": "Mac Studio",146 "chip": "M4 Max",147 "tier": "max",148 "cores": 16,149 "gpu": 40,150 "ram": 64,151 "disk": 926,152 "ip": "192.168.2.83",153 "role": "Applications + agent de supervision",154 "desc": "Héberge maclustr-agentd (:9210), la source des apps macOS et iOS MacLustr, ce site www.maclustr.io, ainsi que Lou·Ka, Fabri·Ka, Ka·Stats, UQO-Chat et PDB API.",155 "tags": [156 "worker",157 "apps",158 "monitoring"159 ]160 },161 {162 "id": "M4M64b",163 "group": "lan",164 "site": "staug",165 "model": "Mac Studio",166 "chip": "M4 Max",167 "tier": "max",168 "cores": 16,169 "gpu": 40,170 "ram": 64,171 "disk": 926,172 "ip": "192.168.2.78",173 "role": "Applications Groupe Ka + index",174 "desc": "API·Ka (Postgres 17 + Redis), Groupe Ka, Immo·Ka, Auto·Ka, CancerIndex, WebSensor, UQO IMM1003.",175 "tags": [176 "worker",177 "apps",178 "postgres"179 ]180 },181 {182 "id": "M4BP48",183 "group": "lan",184 "site": "staug",185 "model": "MacBook Pro",186 "chip": "M4 Max",187 "tier": "max",188 "cores": 16,189 "gpu": 40,190 "ram": 48,191 "disk": 926,192 "ip": "192.168.2.80",193 "role": "Nœud de calcul",194 "desc": "Portable intégré au cluster ; disponible pour les jobs distribués (uv, Python 3.12).",195 "tags": [196 "worker",197 "calcul"198 ]199 },200 {201 "id": "M4BP36",202 "group": "lan",203 "site": "staug",204 "model": "MacBook Pro",205 "chip": "M4 Max",206 "tier": "max",207 "cores": 14,208 "gpu": 32,209 "ram": 36,210 "disk": null,211 "ip": "192.168.2.133",212 "role": "Nœud de calcul (mobile)",213 "desc": "Portable, souvent hors ligne : nœud d'appoint pour le calcul distribué.",214 "tags": [215 "worker",216 "calcul"217 ]218 },219 {220 "id": "M4M36",221 "group": "lan",222 "site": "staug",223 "model": "Mac Studio",224 "chip": "M4 Max",225 "tier": "max",226 "cores": 14,227 "gpu": 40,228 "ram": 36,229 "disk": 460,230 "ip": "192.168.2.69",231 "role": "Gardiens Ka",232 "desc": "Héberge les trois agents gardiens ka2, ka4 et ka6 qui surveillent, réparent et poussent les apps Groupe Ka.",233 "tags": [234 "worker",235 "agents"236 ]237 },238 {239 "id": "M2M32",240 "group": "lan",241 "site": "staug",242 "model": "Mac Studio",243 "chip": "M2 Max",244 "tier": "max",245 "cores": 12,246 "gpu": 38,247 "ram": 32,248 "disk": 460,249 "ip": "192.168.2.90",250 "role": "Nœud de calcul",251 "desc": "Docker, Node, Python : nœud générique pour le calcul et les déploiements mld.",252 "tags": [253 "worker",254 "calcul"255 ]256 },257 {258 "id": "M2M32b",259 "group": "lan",260 "site": "staug",261 "model": "Mac Studio",262 "chip": "M2 Max",263 "tier": "max",264 "cores": 12,265 "gpu": 38,266 "ram": 32,267 "disk": 460,268 "ip": "192.168.2.77",269 "role": "Nœud de calcul",270 "desc": "Nœud générique, ex-flotte de scraping Trouve-Ka.",271 "tags": [272 "worker",273 "calcul"274 ]275 },276 {277 "id": "M2M32c",278 "group": "lan",279 "site": "staug",280 "model": "Mac Studio",281 "chip": "M2 Max",282 "tier": "max",283 "cores": 12,284 "gpu": 30,285 "ram": 32,286 "disk": 460,287 "ip": "192.168.2.89",288 "role": "Nœud de calcul",289 "desc": "Nœud générique pour les jobs Python distribués.",290 "tags": [291 "worker",292 "calcul"293 ]294 },295 {296 "id": "m4mc",297 "group": "lan",298 "site": "staug",299 "model": "Mac mini",300 "chip": "M4 Pro",301 "tier": "pro",302 "cores": 12,303 "gpu": 16,304 "ram": 24,305 "disk": 460,306 "ip": "192.168.2.75",307 "role": "Nœud de calcul",308 "desc": "Mac mini M4 Pro, nœud générique.",309 "tags": [310 "worker",311 "calcul"312 ]313 },314 {315 "id": "M1M32",316 "group": "lan",317 "site": "staug",318 "model": "Mac Studio",319 "chip": "M1 Max",320 "tier": "max",321 "cores": 10,322 "gpu": 32,323 "ram": 32,324 "disk": 460,325 "ip": "192.168.2.76",326 "role": "Passerelle du cluster",327 "desc": "Porte d'entrée : héberge spbgit (git.spboucher.ai, dépôts bare de toutes les apps) et l'orchestrateur mld qui place, déploie, migre et répare chaque application. Aucune app métier n'y tourne.",328 "tags": [329 "gateway",330 "git",331 "orchestrateur"332 ]333 },334 {335 "id": "m4ma",336 "group": "lan",337 "site": "staug",338 "model": "Mac mini",339 "chip": "M4",340 "tier": "base",341 "cores": 10,342 "gpu": 10,343 "ram": 24,344 "disk": 460,345 "ip": "192.168.2.73",346 "role": "Nœud de calcul",347 "desc": "Mac mini M4, nœud générique.",348 "tags": [349 "worker"350 ]351 },352 {353 "id": "m4mb",354 "group": "lan",355 "site": "staug",356 "model": "Mac mini",357 "chip": "M4",358 "tier": "base",359 "cores": 10,360 "gpu": 10,361 "ram": 16,362 "disk": 228,363 "ip": "192.168.2.74",364 "role": "Nœud de calcul",365 "desc": "Mac mini M4, nœud générique.",366 "tags": [367 "worker"368 ]369 },370 {371 "id": "m4md",372 "group": "lan",373 "site": "staug",374 "model": "Mac mini",375 "chip": "M4",376 "tier": "base",377 "cores": 10,378 "gpu": 10,379 "ram": 16,380 "disk": 228,381 "ip": "192.168.2.110",382 "role": "Nœud de calcul",383 "desc": "Mac mini M4 ajouté le 4 septembre 2026.",384 "tags": [385 "worker"386 ]387 },388 {389 "id": "m2m16",390 "group": "lan",391 "site": "staug",392 "model": "Mac mini",393 "chip": "M2 Pro",394 "tier": "pro",395 "cores": 10,396 "gpu": 16,397 "ram": 16,398 "disk": 460,399 "ip": "192.168.2.85",400 "role": "Nœud de calcul",401 "desc": "Mac mini M2 Pro, nœud générique.",402 "tags": [403 "worker"404 ]405 },406 {407 "id": "M3BA24",408 "group": "lan",409 "site": "staug",410 "model": "MacBook Air",411 "chip": "M3",412 "tier": "base",413 "cores": 8,414 "gpu": 10,415 "ram": 24,416 "disk": 460,417 "ip": "192.168.2.81",418 "role": "Nœud d'appoint",419 "desc": "MacBook Air, nœud d'appoint pour le calcul léger.",420 "tags": [421 "worker"422 ]423 },424 {425 "id": "M3BA16",426 "group": "lan",427 "site": "staug",428 "model": "MacBook Air",429 "chip": "M3",430 "tier": "base",431 "cores": 8,432 "gpu": 10,433 "ram": 16,434 "disk": 460,435 "ip": "192.168.2.70",436 "role": "Nœud d'appoint",437 "desc": "MacBook Air, nœud d'appoint.",438 "tags": [439 "worker"440 ]441 },442 {443 "id": "m2m8a",444 "group": "lan",445 "site": "staug",446 "model": "Mac mini",447 "chip": "M2",448 "tier": "base",449 "cores": 8,450 "gpu": 10,451 "ram": 8,452 "disk": 460,453 "ip": "192.168.2.84",454 "role": "Nœud léger",455 "desc": "Mac mini M2 8 Go : tâches légères et tests.",456 "tags": [457 "worker"458 ]459 },460 {461 "id": "m2m8b",462 "group": "lan",463 "site": "staug",464 "model": "Mac mini",465 "chip": "M2",466 "tier": "base",467 "cores": 8,468 "gpu": 10,469 "ram": 8,470 "disk": 228,471 "ip": "192.168.2.72",472 "role": "Nœud léger",473 "desc": "Mac mini M2 8 Go : tâches légères et tests.",474 "tags": [475 "worker"476 ]477 },478 {479 "id": "M1M64",480 "group": "rented",481 "model": "Mac Studio",482 "chip": "M1 Max",483 "tier": "max",484 "cores": 10,485 "gpu": 32,486 "ram": 64,487 "disk": 1800,488 "site": "ist",489 "provider": "Macly",490 "location": "Istanbul, Turquie",491 "role": "Nœud distant à grande mémoire",492 "desc": "Mac Studio loué, 64 Go et 1,8 To : réservé aux déploiements explicites (mld deploy --node M1M64).",493 "tags": [494 "distant",495 "réservé"496 ]497 },498 {499 "id": "m2m16b",500 "group": "rented",501 "model": "Mac mini",502 "chip": "M2 Pro",503 "tier": "pro",504 "cores": 10,505 "gpu": 16,506 "ram": 16,507 "disk": 926,508 "site": "atl",509 "provider": "MacStadium",510 "location": "Atlanta, États-Unis",511 "role": "Nœud distant",512 "desc": "Mac mini M2 Pro dédié, raccordé au tunnel MacLustr.",513 "tags": [514 "distant",515 "réservé"516 ]517 },518 {519 "id": "m1m16",520 "group": "rented",521 "model": "Mac mini",522 "chip": "M1",523 "tier": "base",524 "cores": 8,525 "gpu": 8,526 "ram": 16,527 "disk": 926,528 "site": "dub",529 "provider": "MacStadium",530 "location": "Dublin, Irlande",531 "role": "Nœud distant",532 "desc": "Mac mini M1 dédié.",533 "tags": [534 "distant",535 "réservé"536 ]537 },538 {539 "id": "m2m16c",540 "group": "rented",541 "model": "Mac mini",542 "chip": "M2",543 "tier": "base",544 "cores": 8,545 "gpu": 10,546 "ram": 16,547 "disk": 926,548 "site": "dub",549 "provider": "MacStadium",550 "location": "Dublin, Irlande",551 "role": "Nœud distant",552 "desc": "Mac mini M2 dédié.",553 "tags": [554 "distant",555 "réservé"556 ]557 },558 {559 "id": "m4me",560 "group": "rented",561 "model": "Mac mini",562 "chip": "M4",563 "tier": "base",564 "cores": 10,565 "gpu": 10,566 "ram": 16,567 "disk": 228,568 "site": "ist",569 "provider": "Macly",570 "location": "Istanbul, Turquie",571 "role": "Nœud distant",572 "desc": "Mac mini M4 dédié, amorcé à distance (DeskIn + script), PM2 en LaunchDaemon.",573 "tags": [574 "distant",575 "réservé"576 ]577 },578 {579 "id": "m4mf",580 "group": "rented",581 "model": "Mac mini",582 "chip": "M4",583 "tier": "base",584 "cores": 10,585 "gpu": 10,586 "ram": 16,587 "disk": 228,588 "site": "ist",589 "provider": "Macly",590 "location": "Istanbul, Turquie",591 "role": "Nœud distant",592 "desc": "Jumeau de m4me.",593 "tags": [594 "distant",595 "réservé"596 ]597 },598 {599 "id": "m4mg",600 "group": "rented",601 "model": "Mac mini",602 "chip": "M4",603 "tier": "base",604 "cores": 10,605 "gpu": 10,606 "ram": 16,607 "disk": 228,608 "site": "lim",609 "provider": "rentamac",610 "location": "Limassol, Chypre",611 "role": "Nœud distant (Méditerranée)",612 "desc": "Derrière NAT, joint par la passerelle SSH du fournisseur. Xcode complet préinstallé.",613 "tags": [614 "distant",615 "réservé",616 "europe"617 ]618 },619 {620 "id": "m4mh",621 "group": "rented",622 "model": "Mac mini",623 "chip": "M4",624 "tier": "base",625 "cores": 10,626 "gpu": 10,627 "ram": 16,628 "disk": 228,629 "site": "ist",630 "provider": "Macly",631 "location": "Istanbul, Turquie",632 "role": "Nœud distant",633 "desc": "Mac mini M4 dédié, ajouté le 10 septembre 2026.",634 "tags": [635 "distant",636 "réservé"637 ]638 },639 {640 "id": "m1m16b",641 "group": "rented",642 "model": "Mac mini",643 "chip": "M1",644 "tier": "base",645 "cores": 8,646 "gpu": 8,647 "ram": 16,648 "disk": 228,649 "site": "ist",650 "provider": "Macly",651 "location": "Istanbul, Turquie",652 "role": "Nœud distant",653 "desc": "Mac mini M1 dédié, ajouté le 10 septembre 2026.",654 "tags": [655 "distant",656 "réservé"657 ]658 },659 {660 "id": "m4mi",661 "group": "rented",662 "model": "Mac mini",663 "chip": "M4",664 "tier": "base",665 "cores": 10,666 "gpu": 10,667 "ram": 16,668 "disk": 228,669 "site": "ist",670 "provider": "Macly",671 "location": "Istanbul, Turquie",672 "role": "Nœud distant",673 "desc": "Mac mini M4 dédié, ajouté le 10 septembre 2026.",674 "tags": [675 "distant",676 "réservé"677 ]678 },679 {680 "id": "m4mj",681 "group": "rented",682 "model": "Mac mini",683 "chip": "M4",684 "tier": "base",685 "cores": 10,686 "gpu": 10,687 "ram": 16,688 "disk": 228,689 "site": "ist",690 "provider": "Macly",691 "location": "Istanbul, Turquie",692 "role": "Nœud distant",693 "desc": "Mac mini M4 dédié, ajouté le 10 septembre 2026.",694 "tags": [695 "distant",696 "réservé"697 ]698 },699 {700 "id": "m4mk",701 "group": "rented",702 "model": "Mac mini",703 "chip": "M4",704 "tier": "base",705 "cores": 10,706 "gpu": 10,707 "ram": 16,708 "disk": 228,709 "site": "ist",710 "provider": "Macly",711 "location": "Istanbul, Turquie",712 "role": "Nœud distant",713 "desc": "Mac mini M4 dédié, ajouté le 10 septembre 2026.",714 "tags": [715 "distant",716 "réservé"717 ]718 },719 {720 "id": "BHS64",721 "group": "ovh",722 "model": "OVH ADVANCE-2",723 "chip": "AMD EPYC 4345P",724 "tier": "epyc",725 "cores": 16,726 "threads": true,727 "gpu": 0,728 "ram": 64,729 "disk": 960,730 "site": "bhs",731 "provider": "OVHcloud",732 "location": "Beauharnois, Québec",733 "role": "Passerelle principale MacLustr Tunnel",734 "desc": "Point d'entrée public de tous les sites : hub WireGuard 10.67.0.1 + Caddy (TLS Let's Encrypt automatique). EPYC 4345P 8 c/16 t, 64 Go DDR5 ECC, 2 × 960 Go NVMe RAID 1, 3 Gbit/s, Ubuntu 24.04. ≈ 10 ms depuis le cluster.",735 "tags": [736 "gateway",737 "wireguard",738 "caddy",739 "linux"740 ]741 },742 {743 "id": "BHS64b",744 "group": "ovh",745 "model": "OVH ADVANCE-2",746 "chip": "AMD EPYC 4345P",747 "tier": "epyc",748 "cores": 16,749 "threads": true,750 "gpu": 0,751 "ram": 64,752 "disk": 960,753 "site": "bhs",754 "provider": "OVHcloud",755 "location": "Beauharnois, Québec",756 "role": "Serveur de réserve",757 "desc": "Jumeau de BHS64 : EPYC 4345P 8 c/16 t, 64 Go DDR5 ECC, 2 × 960 Go NVMe RAID 1, 3 Gbit/s, Ubuntu 24.04. Réservé pour un usage à venir, hors tunnel.",758 "tags": [759 "linux",760 "réserve"761 ]762 },763 {764 "id": "BHS128",765 "group": "ovh",766 "model": "OVH ADVANCE-1",767 "chip": "AMD EPYC 4245P",768 "tier": "epyc",769 "cores": 12,770 "threads": true,771 "gpu": 0,772 "ram": 128,773 "disk": 960,774 "site": "bhs",775 "provider": "OVHcloud",776 "location": "Beauharnois, Québec",777 "role": "Serveur de réserve à grande mémoire",778 "desc": "EPYC 4245P 6 c/12 t, 128 Go DDR5, 2 × 960 Go NVMe RAID 1, 3 Gbit/s, Ubuntu 24.04. Prêt à accueillir une application ou une base de données exigeante ; hors tunnel.",779 "tags": [780 "linux",781 "réserve",782 "128 Go"783 ]784 },785 {786 "id": "R9128",787 "group": "ovh",788 "model": "OVH RISE-L",789 "chip": "AMD Ryzen 9 9950X",790 "tier": "ryzen",791 "cores": 32,792 "threads": true,793 "gpu": 0,794 "ram": 128,795 "disk": 960,796 "site": "gra",797 "provider": "OVHcloud",798 "location": "Gravelines, France",799 "role": "Passerelle secondaire (Europe)",800 "desc": "Hub WireGuard 10.66.0.1 + Caddy : secours et présence européenne du tunnel. Ryzen 9 9950X 16 c/32 t, 128 Go DDR5, 2 × 960 Go NVMe RAID 1, 1 Gbit/s, Ubuntu 24.04.",801 "tags": [802 "gateway",803 "wireguard",804 "caddy",805 "linux",806 "europe"807 ]808 }809 ],810 "appGroups": [811 {812 "id": "ka",813 "name": "Groupe Ka",814 "blurb": "L'écosystème immobilier, automobile, alimentaire et emploi du Québec : une famille de plateformes qui partagent identité (KA ID), données (API·Ka) et gardiens autonomes."815 },816 {817 "id": "data",818 "name": "Données & intelligence",819 "blurb": "Indices, marchés et infrastructures de données servis en API publiques."820 },821 {822 "id": "uqo",823 "name": "Enseignement UQO",824 "blurb": "Outils de cours interactifs, tuteur IA et ateliers d'évaluation immobilière."825 },826 {827 "id": "platform",828 "name": "Plateforme MacLustr",829 "blurb": "Les services qui font tourner le cluster lui-même."830 },831 {832 "id": "spb",833 "name": "SPB",834 "blurb": "Sites et services personnels."835 }836 ],837 "apps": [838 {839 "id": "groupe-ka",840 "group": "ka",841 "name": "Groupe Ka",842 "domain": "www.groupe-ka.com",843 "node": "M4M64b",844 "port": 8110,845 "desc": "Portail du groupe : vision, univers, dossier investisseurs."846 },847 {848 "id": "lou-ka",849 "group": "ka",850 "name": "Lou·Ka",851 "domain": "www.lou-ka.com",852 "node": "M4M64a",853 "port": 8095,854 "desc": "Location résidentielle : annonces, carte 3D, Lou-Ka Score."855 },856 {857 "id": "immo-ka",858 "group": "ka",859 "name": "Immo·Ka",860 "domain": "www.immo-ka.com",861 "node": "M4M64b",862 "port": 8096,863 "desc": "Propriétés à vendre : 70 000+ annonces, analyses de prix, KA Scores."864 },865 {866 "id": "vrai-prix",867 "group": "ka",868 "name": "Vrai-Prix",869 "domain": "www.vrai-prix.com",870 "node": "M3U96a",871 "port": 8090,872 "desc": "Évaluation hédonique, méthode du coût, statistiques de marché."873 },874 {875 "id": "auto-ka",876 "group": "ka",877 "name": "Auto·Ka",878 "domain": "www.auto-ka.com",879 "node": "M4M64b",880 "port": 8095,881 "desc": "Marché automobile : véhicules, prix, fiches v3."882 },883 {884 "id": "fabri-ka",885 "group": "ka",886 "name": "Fabri·Ka",887 "domain": "www.fabri-ka.com",888 "node": "M4M64a",889 "port": 8097,890 "desc": "Artisans, fabricants et ateliers du Québec."891 },892 {893 "id": "food-ka",894 "group": "ka",895 "name": "Food·Ka",896 "domain": "www.food-ka.com",897 "node": "M2U64",898 "port": 8097,899 "desc": "Alimentation : produits, commerces, prix."900 },901 {902 "id": "sorti-ka",903 "group": "ka",904 "name": "Sorti·Ka",905 "domain": "www.sorti-ka.com",906 "node": "M3U96a",907 "port": 8120,908 "desc": "Sorties, événements et activités."909 },910 {911 "id": "job-ka",912 "group": "ka",913 "name": "Job·Ka",914 "domain": "www.job-ka.com",915 "node": "M3U96a",916 "port": 8096,917 "desc": "Emplois et carrières."918 },919 {920 "id": "api-ka",921 "group": "ka",922 "name": "API·Ka",923 "domain": "www.api-ka.com",924 "node": "M4M64b",925 "port": 8000,926 "desc": "API unifiée du groupe : Postgres 17, Redis, 24 outils agent."927 },928 {929 "id": "ka-stats",930 "group": "ka",931 "name": "Ka·Stats",932 "domain": "www.ka-stats.com",933 "node": "M4M64a",934 "port": 8140,935 "desc": "Observatoire statistique des univers Ka."936 },937 {938 "id": "admin-ka",939 "group": "ka",940 "name": "Administration·Ka",941 "domain": "www.administration-ka.com",942 "node": "M3U96a",943 "port": 3300,944 "desc": "Console d'administration multi-sites, pilotée par le registre mld."945 },946 {947 "id": "ka2",948 "group": "ka",949 "name": "Gardien ka2",950 "domain": "www.ka2.bot",951 "node": "M4M36",952 "port": 8799,953 "desc": "Agent gardien autonome : surveillance et réparation."954 },955 {956 "id": "ka4",957 "group": "ka",958 "name": "Gardien ka4",959 "domain": "www.ka4.bot",960 "node": "M4M36",961 "port": 8899,962 "desc": "Agent gardien autonome."963 },964 {965 "id": "ka6",966 "group": "ka",967 "name": "Gardien ka6",968 "domain": "www.ka6.bot",969 "node": "M4M36",970 "port": 8999,971 "desc": "Agent gardien autonome."972 },973 {974 "id": "hfmarketdata",975 "group": "data",976 "name": "HF Market Data",977 "domain": "www.hfmarketdata.io",978 "node": "M3U96b",979 "port": 8090,980 "desc": "Données de marché haute fréquence : actions, futures, options, fondamentaux SEC. API + MCP."981 },982 {983 "id": "rareindex",984 "group": "data",985 "name": "RareIndex",986 "domain": "www.rareindex.io",987 "node": "M3U96a",988 "port": 8210,989 "desc": "Intelligence de marché des objets de collection : 212 connecteurs."990 },991 {992 "id": "cancerindex",993 "group": "data",994 "name": "CancerIndex",995 "domain": "www.cancerindex.io",996 "node": "M4M64b",997 "port": 8250,998 "desc": "Index mondial des cancers : 9 510 entités NCIt, 13 connecteurs, pgvector."999 },1000 {1001 "id": "websensor",1002 "group": "data",1003 "name": "WebSensor",1004 "domain": "www.websensor.io",1005 "node": "M4M64b",1006 "port": 8260,1007 "desc": "Détection de changements web : 4 000+ capteurs, 16 connecteurs."1008 },1009 {1010 "id": "fetcha",1011 "group": "data",1012 "name": "Fetcha",1013 "domain": "www.fetcha.co",1014 "node": "M3U96a",1015 "port": 8220,1016 "desc": "Infrastructure d'accès web intelligent : scrape, crawl, map, SDK."1017 },1018 {1019 "id": "polyllm",1020 "group": "data",1021 "name": "PolyLLM",1022 "domain": "www.polyllm.io",1023 "node": "M3U96a",1024 "port": 8240,1025 "desc": "Une interface, tous les modèles : 9 fournisseurs, Arena, BYOK."1026 },1027 {1028 "id": "vquant",1029 "group": "data",1030 "name": "vQuant",1031 "domain": "www.vquant.ai",1032 "node": "M2U64",1033 "port": 5000,1034 "desc": "Terminal quantitatif : indices, portefeuilles, MFA."1035 },1036 {1037 "id": "qc26",1038 "group": "data",1039 "name": "QC26",1040 "domain": "www.qc26.ca",1041 "node": "M3U96a",1042 "port": 8200,1043 "desc": "L'élection québécoise 2026 en données : sondages, Monte Carlo, revue de presse."1044 },1045 {1046 "id": "pdb-api",1047 "group": "data",1048 "name": "PDB API",1049 "domain": "www.pdb-api.co",1050 "node": "M4M64a",1051 "port": 8270,1052 "desc": "Explorateur et API de la base SPID (FastAPI + DuckDB)."1053 },1054 {1055 "id": "uqo-eval",1056 "group": "uqo",1057 "name": "UQO Éval",1058 "domain": "www.uqo-eval.app",1059 "node": "M2U64",1060 "port": 8150,1061 "desc": "Atelier d'évaluation immobilière : hédonique, coût, à vendre, marché."1062 },1063 {1064 "id": "uqo-imm1003",1065 "group": "uqo",1066 "name": "UQO IMM1003",1067 "domain": "www.uqo-imm1003.app",1068 "node": "M4M64b",1069 "port": 8160,1070 "desc": "Notes de cours interactives et séances vidéo."1071 },1072 {1073 "id": "uqo-imm1033",1074 "group": "uqo",1075 "name": "UQO IMM1033",1076 "domain": "www.uqo-imm1033.app",1077 "node": "M3U96a",1078 "port": 8161,1079 "desc": "Notes de cours interactives et séances vidéo."1080 },1081 {1082 "id": "uqo-chat",1083 "group": "uqo",1084 "name": "UQO-Chat",1085 "domain": "www.uqo-chat.app",1086 "node": "M4M64a",1087 "port": 8190,1088 "desc": "Tuteur IA des cours IMM1003 et IMM1033, sur invitation."1089 },1090 {1091 "id": "maclustr-www",1092 "group": "platform",1093 "name": "www.maclustr.io",1094 "domain": "www.maclustr.io",1095 "node": "M4M64a",1096 "port": 8280,1097 "desc": "Cette page : vitrine du cluster, inventaire et état live des nœuds et des applications."1098 },1099 {1100 "id": "maclustr-agentd",1101 "group": "platform",1102 "name": "maclustr-agentd",1103 "domain": null,1104 "node": "M4M64a",1105 "port": 9210,1106 "desc": "Agent de supervision : métriques des 33 nœuds, santé des apps, état du tunnel. Alimente les apps macOS et iOS MacLustr et ce site."1107 },1108 {1109 "id": "maclustr-console",1110 "group": "platform",1111 "name": "Console MacLustr",1112 "domain": "console.maclustr.io",1113 "node": "M2U64",1114 "port": 3000,1115 "desc": "Console web du cluster."1116 },1117 {1118 "id": "maclustr-appmanager",1119 "group": "platform",1120 "name": "App Manager",1121 "domain": "app.maclustr.io",1122 "node": "M2U64",1123 "port": 8787,1124 "desc": "Gestionnaire d'applications."1125 },1126 {1127 "id": "maclustr-nodepages",1128 "group": "platform",1129 "name": "Node Pages",1130 "domain": "node.maclustr.io",1131 "node": "M2U64",1132 "port": 8003,1133 "desc": "Pages de bord par nœud."1134 },1135 {1136 "id": "spbgit",1137 "group": "platform",1138 "name": "spbgit",1139 "domain": "git.spboucher.ai",1140 "node": "M1M32",1141 "port": 7420,1142 "desc": "Forge git privée : dépôts bare de toutes les apps, source de vérité du code."1143 },1144 {1145 "id": "spboucher-ai",1146 "group": "spb",1147 "name": "spboucher.ai",1148 "domain": "www.spboucher.ai",1149 "node": "M2U64",1150 "port": 3100,1151 "desc": "Site personnel."1152 },1153 {1154 "id": "spb-cloud",1155 "group": "spb",1156 "name": "SPB Cloud",1157 "domain": "cloud.spboucher.ai",1158 "node": "M2U64",1159 "port": 5001,1160 "desc": "Nuage privé : fichiers, partage, OTP, réorganisation IA."1161 }1162 ],1163 "tunnel": {1164 "gateways": [1165 {1166 "id": "BHS64",1167 "ip": "51.161.112.61",1168 "site": "Beauharnois, Québec",1169 "primary": true,1170 "wg": "10.67.0.0/24"1171 },1172 {1173 "id": "R9128",1174 "ip": "51.255.75.61",1175 "site": "Gravelines, France",1176 "primary": false,1177 "wg": "10.66.0.0/24"1178 }1179 ]1180 }1181}