Architecture de KA
Vue d'ensemble
text
KA/
App/ KAApp (racine 5 onglets + bulle KA Agent), OnboardingView
Core/ Ecosystem (les univers + mapping JSON), Services (APIClient cache
disque, UniverseService, AgentService SSE), FavoritesStore
Design/ KATheme (papier/encre, accents), composants (KACard ombre décalée,
KAWordmark, KAChip, KAItemRow, états vides), Haptics
Features/ Home, Search (universelle), Universes (grille + explorateur +
fiche), MapView (carte unifiée), Favorites, Profile, AgentChat
KAWidgets/ widget « Le pouls » (WidgetKit, timeline réseau 30 min)
KATests/ tests des adaptateurs / favoris / URL (hors réseau)
project.yml XcodeGen — source de vérité du projetLe principe : tout est configuration
Un univers = une entrée Universe dans Ecosystem.all :
identité (wordmark, accent, SF Symbol, tagline, domaine) + API (listPath,
itemsKey, searchParam, clés du total dans /api/stats) + un mapping
[String: JSONValue] → KAItem. TOUTES les vues (grille, explorateur, fiche,
recherche universelle, carte, accueil, favoris) consomment le KAItem
universel — aucune vue par univers.
Ajouter un futur univers (ex. Ora·Ka)
- Ajouter l'entrée dans
Ecosystem.all(accent officiel d'ecosystem.json du design system ka-ui, mapping calqué sur un adaptateur voisin). - C'est tout : grille, recherche, carte (si lat/lng), accueil et favoris le
prennent en charge automatiquement. Ajouter un test de mapping dans
KATestsavec un échantillon JSON réel de son API.
Connexion aux API
- Listes/recherche : les API publiques des plateformes
(
/api/listings|vehicles|jobs|products|restaurants|events|creators,?q=&limit=), JSON décodé enJSONValue(forme libre) puis mappé. - Compteurs live :
/api/statsde chaque plateforme (/api/statuspour Trouve·Ka). - KA Agent :
POST https://www.api-ka.com/api/agent/chat(SSE — events delta/tool/done/error), parsé parAgentService.stream(URLSession.bytes). La clé Anthropic vit côté serveur, jamais dans l'app. - Cache/hors ligne :
APIClientécrit chaque réponse sur disque ; TTL 120 s (300 s pour les stats) ; en cas d'échec réseau, la dernière copie est servie. Les favoris sont persistés localement (Application Support).
Conventions
- Swift 5, zéro dépendance externe. Couleurs par univers via
--accentdu design system web (mêmes hex que ka-ui/ecosystem.json). - Sombre = papier/encre inversés (
KATheme.paper/ink(scheme)), cartes avec bordure encre + ombre décalée (signature Groupe-KA), coins continus. - Aucune donnée inventée : prix placeholders (≤ 0,2 $ épicerie, ≤ 50 $ loyers, ≤ 1 000 $ propriétés) masqués ; états vides propres partout.
- Haptique sur les gestes clés (favori, recherche, envoi agent).