- Nature
- App iOS
- Stack
- App iOSSwiftUINode.jsTypeScriptFastifyWebSocketStoreKitDocker
Et si chaque commune de France avait un cours de bourse, qui réagit à ce qui s'y passe vraiment : un festival, des travaux, une alerte météo, un match ? Towndom est un jeu de stratégie construit sur cette idée. La monnaie est fictive (2 000 € au départ) : rien ne se gagne ni ne se perd en vrai.
Ce que fait l'app
- Achat et vente de parts dans près de 35 000 communes, avec graphique de prix et ordre validé par un geste de glissement.
- Un plateau qui reprend les 96 départements : plus on investit dans une ville, plus sa tour prend d'étages.
- Le joueur qui détient le plus de parts d'une ville en devient maire et touche un loyer quotidien.
- Deux modes : une saison mensuelle avec ligues et classement, ou un mode Chill, sans compétition et jamais remis à zéro.
- Des enchères sur de vraies gares, un fil d'événements en direct, des achats intégrés uniquement cosmétiques.
Stack et architecture
Le client est une app iOS native en SwiftUI (iOS 18 et plus, iPad compris), avec un mode démo qui s'appuie sur des données figées quand le serveur est injoignable. Le serveur de jeu est écrit en Node 22 et TypeScript, avec Fastify. Les routes REST servent les ordres, les portefeuilles et les classements, et un canal WebSocket pousse les événements en direct. Les prix s'appuient sur des sources ouvertes : OpenAgenda, Bison Futé, Open-Meteo, geo.api.gouv.fr. Les reçus d'achat sont vérifiés côté serveur. L'état des joueurs est écrit sur disque, sauvegardé chaque nuit et conservé 14 jours. Le serveur tourne dans un conteneur Docker sur un VPS, derrière un Caddy partagé qui gère le TLS.
Ce qui a été difficile
Le premier déploiement a buté sur deux détails. Corepack installait une version de pnpm trop récente, qui refusait le script d'installation d'esbuild : la version est désormais épinglée sur celle du lockfile dans l'image. Ensuite, le build compilé cassait le chemin vers le fichier des communes : le serveur est donc lancé avec tsx, comme en développement. Il a aussi fallu servir l'API en DNS seul, sans proxy Cloudflare, pour laisser passer les connexions WebSocket. Côté jeu, ajouter le mode Chill a demandé de migrer les parties existantes vers deux jeux distincts par joueur, sans rien perdre.
Publication
La fiche App Store est rédigée en français et en anglais, avec les notes de revue, et un build a été envoyé à App Store Connect. Le site towndom.app présente le jeu.



