I built an app that turns your memories into works of art.
Because a single photo sitting in iCloud is not enough to take you back to a moment.
I have 12,000 photos in iCloud. I never look at them. The last time I opened an album was to free up space. And that day, I deleted photos I still regret today.
My old apartment. The view from the balcony. Nights with friends. Moments that felt unremarkable at the time. And six months later, were impossible to find.
The problem is not that we lack photos. It is that we have too many, and they all end up in the same place: an infinite album we never scroll. A photo without context is just a frozen image. There is no memory left behind it.
That realisation gave me an idea.
The trigger
One day, scrolling on the internet, I came across those drawn city posters. You know, the prints with streets in colour, the city name at the bottom, that you find in deco shops. They are beautiful. Graphic. They represent a precise place.
And I thought: imagine if every place that mattered to you had its own poster like that. Your first apartment. The city you grew up in. The place where you met someone. Not just a photo in an album. A poster with a visual identity, colours, a style. And behind that poster, your photos, your notes, a date.
A real memory. Not a frozen image.
What I built
MapArt is an app where you pick a place on a world map. The app takes that piece of map and turns it into an art poster. Streets are drawn, colours change based on the palette you choose. And to each poster, you attach your photos, a note, a date, tags.
All your memories appear on an interactive world map. You open the app, you see your whole life pinned on a map. Each pin is a place that mattered to you.
The goal was not to make yet another photo storage app. It was to create a place where every memory has its own identity. So that when you stumble back on it 5 years later, you do not just say "ah yes, that was there". You say "I remember exactly how that moment felt".
How it works behind the scenes
To explain the architecture, I use a metaphor everyone gets: a restaurant.
You are the customer, sitting at your table with the menu. That is your iPhone. The kitchen is the server. And the fridge with all the ingredients is the database.
You never order directly to the cook. You go through the waiter. You tell them "I want a salad". The waiter takes the order, goes to the kitchen, the cook checks the fridge for the ingredients, prepares the dish, and the waiter brings it back.
In an app, it is exactly the same. Your iPhone sends a request to the server. The server processes it, fetches data from the database, and returns the response. All of it in a fraction of a second, without you noticing.
And just like in a restaurant, there is a menu. Except instead of dishes, it is actions: create a memory, list memories, delete one, add photos. Each action is what we call an endpoint. A line on the restaurant menu.
The heart of the app: turning a map into a piece of art
This is the most technical and most satisfying part. Three steps.
Capture. Apple ships a tool called MapKit, the same one that powers Apple Maps. Inside, there is a feature that lets you capture any zone of the map as a high-resolution image. You give it coordinates, it gives you a clean image. No buttons, no UI. Just streets, parks, waterways. It is the raw material of the poster.
Filter. As-is, it is just a regular map. To transform it, I use Core Image, an Apple filter library. Four available styles. Monochrome replaces every colour with a single hue. Contrast crushes the nuances, two colours remain. Neon detects edges and draws them as glowing lines on a black background. Pastel softens everything, a watercolour feel.
Compose. Once the map is filtered, I assemble the poster. A background in the chosen palette. The map in the centre. The city name in caps at the bottom, a separator line, the country. Exactly like the real posters you find in deco stores.
12 palettes total: Classic, Midnight, Sunset, Ocean, Rose Gold, Forest, Neon, Lavender, Terracotta, Arctic, Coffee, Cherry. Each gives a completely different vibe.
The tech stack
Everything is in Swift. Front to back. The iOS app in SwiftUI. The server in Vapor, a server-side Swift framework. The win: one language, one universe, no context switching between frontend and backend.
The database is MongoDB Atlas, in the cloud. Authentication is Sign in with Apple. One button, Face ID, done. No form, no password.
And one important detail on the server side: when it receives a poster, it automatically generates a thumbnail version. That way, when you scroll through the app and see 20 memories, the thumbnails are what render. Instant. And when you tap a memory, it loads the full-resolution version.
The hurdles
The poster showed the wrong place
First big bug. I frame the Arc de Triomphe on my iPhone, I confirm, and the poster shows me a neighbourhood 500 metres away.
The problem: the iPhone screen is very tall, 9:19 aspect ratio. The poster is closer to a square, 3:4. When the app captures the map for the poster, it has to crop to switch ratios. And that crop shifts the centre. Sometimes by hundreds of metres.
Fix: recompute the capture region so it matches the poster ratio exactly. What you see on screen is what you get on the poster. Period.
The server could no longer find memories
You create a memory, it shows up. You try to delete it, the server says "I cannot find it". The memory exists in the database, but the server cannot retrieve it.
The problem: identifiers were stored in binary format in MongoDB, but the app sent them as text. It is like someone giving you a name in letters and you are searching a directory sorted by barcodes. They never matched.
Fix: store everything as plain text. No more conversion, no more problem.
The iPhone could not connect to the server
Everything worked on my Mac. On a real iPhone, "cannot reach the server". The server was running on my Mac, the iPhone tried to reach it over Wi-Fi.
Two issues. The server only listened to connections coming from itself, like an intercom that only works from inside the apartment. And by default, Apple blocks all unsecured HTTP connections on iPhone, to protect users.
Onboarding, or why the first 5 seconds matter more than anything
The app is functional. Everything works. You could ship it to the App Store and move on.
Except something crucial is missing. When someone downloads your app and opens it for the first time, you have 5 seconds to convince them to stay. If it looks ugly, confusing, or they do not understand what the app does, they close it and never come back.
Apple has very strict guidelines on this. Onboarding must communicate the value of the app. It must be short. And it must be skippable.
I built 3 screens. Each communicates a single idea. "Your places, your memories." "Turn them into works of art." "Bring back your favourite moments." Animated illustrations, not static text. The goal: spark interest, not explain.
Building the app is the simple part. The hard part is keeping users.
What I learned
A lone photo is nothing. It is an image asleep in an album that no one scrolls. But that same photo, attached to a poster that looks like it, a precise place, a context, a date, becomes a memory you actually want to revisit.
This is an MVP. There are things to improve, features to add. But the concept holds. And every memory I create in the app reminds me why I built it: so those moments stop disappearing.
We started from nothing, just an idea and a frustration. And we built a complete app: the poster engine, the server, the database, authentication, the world map, the memory editor, the collection, the onboarding. All of it in Swift, the same language end to end.
AI accelerates execution. But it does not replace vision.

Commentaires
Aucun commentaire pour le moment. Sois le premier !