SPB Git forge

spb/ka-ios

Public
20commits 1branches 0releases
17.2 MBsize
maindefault branch
29 days agolast push
Swift 100%
2.8 KB · 59 lines markdown
Rendered Raw Blame History
1# Architecture de KA23## Vue d'ensemble45```6KA/7  App/        KAApp (racine 5 onglets + bulle KA Agent), OnboardingView8  Core/       Ecosystem (les univers + mapping JSON), Services (APIClient cache9              disque, UniverseService, AgentService SSE), FavoritesStore10  Design/     KATheme (papier/encre, accents), composants (KACard ombre décalée,11              KAWordmark, KAChip, KAItemRow, états vides), Haptics12  Features/   Home, Search (universelle), Universes (grille + explorateur +13              fiche), MapView (carte unifiée), Favorites, Profile, AgentChat14KAWidgets/    widget « Le pouls » (WidgetKit, timeline réseau 30 min)15KATests/      tests des adaptateurs / favoris / URL (hors réseau)16project.yml   XcodeGen — source de vérité du projet17```1819## Le principe : tout est configuration2021Un univers = une entrée `Universe` dans `Ecosystem.all` :22identité (wordmark, accent, SF Symbol, tagline, domaine) + API (`listPath`,23`itemsKey`, `searchParam`, clés du total dans /api/stats) + un **mapping**24`[String: JSONValue] → KAItem`. TOUTES les vues (grille, explorateur, fiche,25recherche universelle, carte, accueil, favoris) consomment le `KAItem`26universel — aucune vue par univers.2728### Ajouter un futur univers (ex. Ora·Ka)29301. Ajouter l'entrée dans `Ecosystem.all` (accent officiel d'ecosystem.json du31   design system ka-ui, mapping calqué sur un adaptateur voisin).322. C'est tout : grille, recherche, carte (si lat/lng), accueil et favoris le33   prennent en charge automatiquement. Ajouter un test de mapping dans34   `KATests` avec un échantillon JSON réel de son API.3536## Connexion aux API3738- **Listes/recherche** : les API publiques des plateformes39  (`/api/listings|vehicles|jobs|products|restaurants|events|creators`,40  `?q=&limit=`), JSON décodé en `JSONValue` (forme libre) puis mappé.41- **Compteurs live** : `/api/stats` de chaque plateforme (`/api/status` pour42  Trouve·Ka).43- **KA Agent** : `POST https://www.api-ka.com/api/agent/chat` (SSE — events44  delta/tool/done/error), parsé par `AgentService.stream` (URLSession.bytes).45  La clé Anthropic vit côté serveur, jamais dans l'app.46- **Cache/hors ligne** : `APIClient` écrit chaque réponse sur disque ; TTL47  120 s (300 s pour les stats) ; en cas d'échec réseau, la dernière copie est48  servie. Les favoris sont persistés localement (Application Support).4950## Conventions5152- Swift 5, zéro dépendance externe. Couleurs par univers via `--accent` du53  design system web (mêmes hex que ka-ui/ecosystem.json).54- Sombre = papier/encre inversés (`KATheme.paper/ink(scheme)`), cartes avec55  bordure encre + ombre décalée (signature Groupe-KA), coins continus.56- Aucune donnée inventée : prix placeholders (≤ 0,2 $ épicerie, ≤ 50 $ loyers,57  ≤ 1 000 $ propriétés) masqués ; états vides propres partout.58- Haptique sur les gestes clés (favori, recherche, envoi agent).59