J'ai codé une app qui transforme tes souvenirs en œuvres d'art.
Parce qu'une photo toute seule dans iCloud, ça suffit pas à te replonger dans un moment.
J'ai 12 000 photos dans iCloud. Je les regarde jamais. La dernière fois que j'ai ouvert un album, c'était pour libérer de l'espace. Et ce jour-là, j'ai supprimé des photos que je regrette encore aujourd'hui.
Mon ancien appart. La vue depuis le balcon. Des soirées avec des potes. Des moments qui, sur le coup, avaient l'air banals. Et qui, six mois plus tard, étaient devenus introuvables.
Le problème, c'est pas qu'on manque de photos. C'est qu'on en a trop, et qu'elles finissent toutes au même endroit : un album infini qu'on ne scrolle jamais. Une photo sans contexte, c'est juste une image figée. Y'a plus de souvenir derrière.
Ce constat-là m'a donné une idée.
Le déclic
Un jour, en scrollant sur Internet, je suis tombée sur ces posters de villes dessinés. Tu sais, les affiches avec les rues en couleur, le nom de la ville en bas, qu'on trouve dans les boutiques déco. C'est beau. C'est graphique. Et ça représente un lieu précis.
Et je me suis dit : imagine si chaque endroit qui compte pour toi avait son propre poster comme ça. Ton premier appart. La ville où t'as grandi. L'endroit où t'as rencontré quelqu'un. Pas juste une photo dans un album. Un poster avec une identité visuelle, des couleurs, un style. Et derrière ce poster, tes photos, tes notes, une date.
Un vrai souvenir. Pas une image figée.
Ce que j'ai construit
MapArt, c'est une app où tu choisis un lieu sur une carte du monde. L'app prend ce bout de carte et le transforme en poster artistique. Les rues sont dessinées, les couleurs changent selon la palette que tu choisis. Et à chaque poster, tu rattaches tes photos, une note, une date, des tags.
Tous tes souvenirs apparaissent sur une carte du monde interactive. Tu ouvres l'app, tu vois ta vie entière épinglée sur une carte. Chaque pin, c'est un endroit qui a compté pour toi.
Le but, c'était pas de faire une app de plus pour stocker des photos. C'est de créer un endroit où chaque souvenir a sa propre identité. Pour que quand tu retombes dessus dans 5 ans, tu te dises pas juste "ah oui c'était là". Tu te dises "je me souviens exactement de ce moment".
Comment ça marche en coulisses
Pour expliquer l'architecture, j'utilise une métaphore que tout le monde comprend : un restaurant.
Toi, t'es le client, assis à ta table avec le menu. C'est ton iPhone. La cuisine, c'est le serveur. Et le frigo avec tous les ingrédients, c'est la base de données.
Tu commandes jamais directement au cuisinier. Tu passes par le serveur. Tu lui dis "je veux une salade". Le serveur prend ta commande, va en cuisine, le cuisinier regarde dans son frigo s'il a les ingrédients, prépare le plat, et le serveur te le ramène.
Dans une app, c'est exactement pareil. Ton iPhone envoie une demande au serveur. Le serveur traite, va chercher dans la base de données, et renvoie la réponse. Tout ça en une fraction de seconde, sans que tu t'en rendes compte.
Et comme dans un restaurant, il y a une carte. Sauf qu'au lieu de plats, c'est des actions : créer un souvenir, afficher la liste, supprimer, ajouter des photos. Chaque action, c'est ce qu'on appelle un endpoint. Une ligne sur la carte du restaurant.
Le cœur de l'app : transformer une carte en œuvre d'art
C'est la partie la plus technique et la plus satisfaisante. Trois étapes.
Capturer. Apple fournit un outil qui s'appelle MapKit, le même qui fait tourner Apple Maps. Dedans, il y a une fonctionnalité qui permet de capturer n'importe quelle zone de la carte en image haute résolution. Tu lui donnes des coordonnées, il te retourne une image propre. Sans les boutons, sans l'interface. Juste les rues, les parcs, les cours d'eau. C'est la matière première du poster.
Filtrer. À l'état brut, c'est juste une carte classique. Pour la transformer, j'utilise Core Image, une bibliothèque de filtres Apple. Quatre styles disponibles. Le monochrome remplace toutes les couleurs par une seule teinte. Le contraste écrase les nuances, il reste deux couleurs. Le néon détecte les contours et les dessine comme des lignes lumineuses sur fond noir. Et le pastel adoucit tout, un rendu aquarelle.
Composer. Une fois la carte filtrée, il reste à assembler le poster. Un fond de la couleur de la palette choisie. La carte au centre. Le nom de la ville en majuscules en bas, un trait de séparation, le pays. Exactement comme les vrais posters qu'on trouve en déco.
12 palettes au total : Classic, Midnight, Sunset, Ocean, Rose Gold, Forest, Neon, Lavender, Terracotta, Arctic, Coffee, Cherry. Chacune donne un univers complètement différent.
La stack technique
Tout est en Swift. Du début à la fin. L'app iOS en SwiftUI. Le serveur avec Vapor, un framework Swift côté serveur. L'avantage : un seul langage, un seul univers, pas besoin de switcher de contexte entre frontend et backend.
La base de données, c'est MongoDB Atlas, dans le cloud. L'authentification, c'est Sign in with Apple. Un bouton, Face ID, c'est fait. Pas de formulaire, pas de mot de passe.
Et un détail important côté serveur : quand il reçoit un poster, il génère automatiquement une version miniature. Comme ça, quand tu scrolles dans l'app et que tu vois 20 souvenirs, c'est les miniatures qui s'affichent. Instantané. Et quand tu tapes sur un souvenir, là il charge la version haute résolution.
Les galères
Le poster montrait le mauvais endroit
Premier gros bug. Je cadre l'Arc de Triomphe sur mon iPhone, je valide, et le poster me montre un quartier à 500 mètres.
Le problème : l'écran de l'iPhone est très allongé, format 9:19. Le poster, c'est un carré, format 3:4. Quand l'app capture la carte pour le poster, elle doit recadrer pour changer de format. Et ce recadrage décale le centre. Parfois de plusieurs centaines de mètres.
La solution : recalculer la zone de capture pour qu'elle corresponde exactement au format du poster. Ce que tu vois à l'écran, c'est ce que tu retrouves sur le poster. Point.
Le serveur qui ne retrouvait plus les souvenirs
Tu crées un souvenir, il apparaît. Tu veux le supprimer, le serveur te dit "je le trouve pas". Le souvenir existe dans la base de données, mais le serveur est incapable de le retrouver.
Le problème : les identifiants étaient stockés en format binaire dans MongoDB, mais l'app les envoyait en texte. C'est comme si quelqu'un te donnait un nom en lettres et que toi, tu cherchais dans un annuaire trié par codes-barres. Ça matchait pas.
La solution : tout stocker en texte simple. Plus de conversion, plus de problème.
L'iPhone qui ne se connectait pas au serveur
Tout marchait sur mon Mac. Sur le vrai iPhone, "impossible de se connecter au serveur". Le serveur tournait sur mon Mac, l'iPhone essayait de le joindre via le Wi-Fi.
Deux problèmes. Le serveur n'écoutait que les connexions venant de lui-même, comme un interphone qui ne fonctionne que depuis l'intérieur de l'appart. Et Apple bloque par défaut toutes les connexions HTTP non sécurisées sur iPhone, pour protéger les utilisateurs.
L'onboarding, ou pourquoi les 5 premières secondes comptent plus que tout
L'app est fonctionnelle. Tout marche. On pourrait la mettre sur l'App Store et passer à autre chose.
Sauf qu'il manque quelque chose de crucial. Quand quelqu'un télécharge ton app et l'ouvre pour la première fois, t'as 5 secondes pour le convaincre de rester. Si c'est moche, confus, ou qu'il comprend pas ce que l'app fait, il ferme et il revient jamais.
Apple a des guidelines très strictes là-dessus. Un onboarding doit montrer la valeur de l'app. Il doit être court. Et il doit être skippable.
J'ai fait 3 écrans. Chacun communique une seule idée. "Tes lieux, tes souvenirs." "Transforme-les en œuvres d'art." "Ravive tes plus beaux moments." Des illustrations animées, pas du texte statique. L'objectif : donner envie, pas expliquer.
Le développement est simple. Le dur, c'est de garder les utilisateurs.
Ce que j'ai appris
Une photo toute seule, c'est rien. C'est une image qui dort dans un album qu'on ne scrolle jamais. Mais cette même photo, rattachée à un poster qui lui ressemble, un lieu précis, un contexte, une date, ça devient un souvenir qu'on a envie de rouvrir.
C'est un MVP. Il y a des choses à améliorer, des features à ajouter. Mais le concept tient. Et chaque souvenir que je crée dans l'app me rappelle pourquoi je l'ai construite : pour que ces moments ne disparaissent plus.
On est parti de rien, juste d'une idée et d'une frustration. Et on a construit une app complète : le moteur de posters, le serveur, la base de données, l'authentification, la carte du monde, l'éditeur de souvenirs, la collection, l'onboarding. Tout ça en Swift, le même langage du début à la fin.
L'IA accélère l'exécution. Mais elle ne remplace pas la vision.

Commentaires
Aucun commentaire pour le moment. Sois le premier !