Aller au contenu
ShipFastDev
Tout le portfolio

Étude de cas

SkyEye : un globe 3D en temps réel avec avions, navires, satellites et un assistant IA

Par Adil Soukaini

, 6 min de lecture

SkyEye est un produit maison de ShipFastDev : un globe 3D dans le navigateur qui affiche en temps réel les avions, les navires et les satellites, avec JARVIS, un assistant IA qui interroge ces données et déplace la caméra vers ce dont il parle. SkyEye n'est pas public ; une démonstration est possible lors d'un appel.

Ce que l'utilisateur peut faire

  • Survoler toute la planète, relief et bâtiments 3D compris, et activer ou masquer des couches : avions, satellites (environ 16 000), navires, trains, bus et tramways, séismes, volcans, lancements de fusées, aéroports, caméras de circulation, sites du patrimoine mondial, alertes catastrophes, vélos en libre-service et feux actifs.
  • Cliquer sur n'importe quel objet pour ouvrir sa fiche : route et altitude d'un avion, pavillon, dimensions et destination d'un navire, données de catalogue d'un satellite, météo METAR et TAF décodée d'un aéroport, ou encore un pays ou une ville avec comptages en direct, météo et photos.
  • Suivre un vol, ou monter à bord : caméra de poursuite, vue cockpit et vue hublot qui suivent la trajectoire réelle de l'avion.
  • Remonter le temps : relecture des 12 dernières heures, cartes de chaleur du trafic aérien et maritime, « Au-dessus de moi » (avions et satellites visibles) et « Ce qui est passé ici » pour n'importe quel point.
  • Recevoir des alertes : descentes rapides, avions qui tournent en rond, navires qui cessent d'émettre, codes transpondeur d'urgence.

JARVIS, l'assistant

JARVIS est un assistant, à l'écrit comme à la voix, intégré au globe. On lui demande « Quelle est l'activité à Charles-de-Gaulle en ce moment ? » ou « Suis l'avion le plus haut au-dessus de Paris », et il répond en une ou deux phrases tout en sélectionnant et en survolant ce qu'il cite.

  • Des outils générés à partir des données. Chaque couche décrit ses champs dans un schéma, et les outils de JARVIS en sont dérivés : un nouveau jeu de données devient interrogeable sans écrire de nouveau code d'outil. Le modèle demande un outil, le serveur exécute la requête sur les données en direct et renvoie le résultat, selon la boucle d'appel d'outils documentée par Anthropic.
  • Modèle au choix. Claude ou DeepSeek, avec les mêmes outils et les mêmes actions de caméra.
  • Au-delà des réponses. Visites commentées (« montre-moi les cinq premiers… »), point quotidien, revues d'actualité épinglées sur le globe, et surveillances du type « préviens-moi quand le BA117 atterrit » ou « alerte-moi pour tout séisme de plus de 6 près de Tokyo », vérifiées sur les données en direct toutes les 20 secondes.
  • Mémoire. L'historique des conversations et une mémoire à long terme modifiable sont stockés en local, avec recherche plein texte dans les anciennes conversations.
  • Voix. Synthèse vocale du navigateur par défaut, ou voix neuronale optionnelle (Kokoro-82M) exécutée sur la machine : rien n'est envoyé à un service de synthèse. Un mode mains libres s'appuie sur une reconnaissance vocale locale.

Ce qui a été construit

SkyEye est un monorepo TypeScript en trois paquets : un serveur Node.js (Hono, WebSockets, SDK Anthropic), un client web (React 19, CesiumJS, Vite, Zustand) et du code partagé.

  • Plugins. Chaque jeu de données tient dans un dossier côté serveur (ingestion et schéma de champs) et une entrée côté client (style). Le schéma alimente la fiche de détail, l'API de recherche et les outils de JARVIS.
  • Transport. Un WebSocket par visiteur. Le serveur maintient un index spatial en grille par couche et n'envoie, en binaire, que les changements de la zone affichée : environ 33 octets par objet, avec un plafond (60 000 objets par couche par défaut).
  • Rendu. Un seul appel de dessin par couche. Entre deux mises à jour, les objets avancent sur le GPU le long de grands cercles : le coût CPU par image reste stable quel que soit le nombre d'objets. Une copie CPU du même calcul gère les clics, les étiquettes et l'objet sélectionné. Les surbrillances et les ombres sont de simples Primitives Cesium, construites de façon synchrone.
  • Satellites calculés dans le navigateur. Le serveur envoie une seule fois les éléments orbitaux du catalogue, et un Web Worker les propage avec SGP4 grâce à satellite.js. Les données GP de CelesTrak sont justement produites pour ce modèle.
  • Avions et navires. Les avions viennent d'OpenSky et d'adsb.lol. L'API REST d'OpenSky fonctionne en OAuth2 (client credentials) avec un quota quotidien de crédits (400 en anonyme, 4 000 pour un compte standard) : SkyEye adapte donc ses requêtes, avec un rafraîchissement mondial toutes les 90 secondes avec identifiants, toutes les 15 minutes sans. Les navires viennent d'aisstream.io, qui interdit les connexions directes depuis le navigateur : la clé reste sur le serveur.

Comment la fiabilité est assurée

  • Tests. 45 fichiers de tests Vitest, une suite de performance distincte pour le serveur, le client et le flux de données, et une vérification de types côté serveur et client. Le paramètre ?synthetic=50000 fait apparaître 50 000 objets mobiles pour tester la charge.
  • Des gains mesurés. La simplification des formes d'espaces aériens a fait passer leur cache de 260 Mo à 15 Mo et la mémoire du serveur de 2 Go à 0,4 Go ; une table horaire pré-agrégée a ramené la requête de carte de chaleur sur 72 heures de 12 s à 0,24 s. Les retards de la boucle d'événements et les pauses du ramasse-miettes figurent dans les statistiques du serveur.
  • Budget d'images. Préréglages de qualité (Économie de batterie, Équilibré, Max), 60 images par seconde uniquement pendant l'interaction, flux suspendu dans les onglets masqués et service worker qui met en cache les fichiers de Cesium.
  • Des revues systématiques. L'historique montre une revue numérotée après chaque fonctionnalité ; l'une d'elles a corrigé une faille de type SSRF avec une liste blanche des hôtes média.

Dernières versions

Le dépôt compte 210 commits entre le 23 septembre et le 3 octobre 2026. Les plus récents, les 2 et 3 octobre 2026 :

  • Train d'atterrissage rétractable sur 11 familles d'avions et cockpits texturés (poste de pilotage d'A350 pour les jets, tableau de bord de Cessna 172 pour l'aviation légère).
  • Une couche trains : tous les trains finlandais via Digitraffic, ainsi qu'Amtrak, VIA Rail et Brightline en Amérique du Nord.
  • Les sites du patrimoine mondial (1 154 sites, regroupés par identifiant officiel via Wikidata), les feux actifs de la NASA (FIRMS) et la qualité de l'air OpenAQ sur les fiches des villes.
  • Surveillances et alertes de JARVIS, recherche d'actualités, revues d'actualité sur le globe et photos des personnes et des lieux qu'il mentionne.
  • Une correction d'horloge : le serveur mesure son décalage par rapport à plusieurs sites, si bien que les objets ne se figent plus puis ne sautent plus entre deux mises à jour.

Pour un projet similaire

L'affichage de positions en direct sur un globe est détaillé dans Données en direct sur un globe 3D avec CesiumJS, et la partie assistant dans Ajouter des fonctions d'IA à votre produit. Pour un produit déjà en production, voir l'étude de cas Driveway Morocco, ainsi que les autres projets du portfolio.

Questions fréquentes

Peut-on essayer SkyEye en ligne ?

Non, SkyEye n'est pas public. Une démonstration en direct est possible lors d'un appel.

D'où viennent les données ?

De sources publiques : OpenSky et adsb.lol pour les avions, CelesTrak pour les satellites, aisstream.io pour les navires, ainsi que des sources nationales de transport, de météo, de sismologie et d'alertes catastrophes. Certaines exigent une clé gratuite (navires, feux actifs, qualité de l'air), et OpenSky rafraîchit plus souvent avec un compte.

La même approche fonctionne-t-elle avec mes propres données (flotte, capteurs) ?

C'est le rôle de la structure en plugins : un jeu de données se résume à une étape d'ingestion et un schéma de champs côté serveur, plus un style côté client, et ce schéma fournit aussi ses outils de recherche à l'assistant. Un flux privé suivrait le même modèle.

Quel modèle d'IA utilise JARVIS ?

Claude ou DeepSeek, au choix dans la configuration ; les deux partagent les mêmes outils. L'historique et la mémoire restent dans une base locale, et la voix neuronale optionnelle tourne sur la machine.

Sources

  1. CesiumJS API reference, Cesium, consulté en octobre 2026
  2. Primitive (référence CesiumJS), Cesium, consulté en octobre 2026
  3. OpenSky REST API, The OpenSky Network, consulté en octobre 2026
  4. A New Way to Obtain GP Data, CelesTrak, mis à jour en juin 2026
  5. satellite.js, contributeurs de satellite.js (GitHub), consulté en octobre 2026
  6. Documentation AIS Stream, aisstream.io, consulté en octobre 2026
  7. Tool use with Claude, Anthropic, consulté en octobre 2026

Ce type de travail pour votre produit ?

Parlez de votre projet à Adil. Réponse sous 1 jour ouvré, avec des créneaux pour un appel vidéo de 15 minutes.