I deleted Instagram — then built a way to read the decade it held
I don't use social media. I stopped years ago, once I did the honest math on what it was costing me: hours a day, every day, in exchange for very little. So I stepped away — and got those hours back.
But the accounts were still sitting there. That's the part nobody warns you about. Deleting the app isn't deleting the account, and every so often I'd find myself back inside Instagram for no particular reason, just because it still existed. Eventually I decided to close it properly.
And on the way out, I noticed how old it was. Nearly ten years. A decade of messages, posts, and small forgotten things — some I had no interest in revisiting, and some I genuinely didn't want to lose. Before confirming the deletion, I took the data export Meta offers.
Then I opened it, and hit the actual problem: an export is not readable. What arrives is a pile of raw JSON files — technically complete, practically useless. Ten years of your life, delivered in a format designed for machines. If you want to actually look at it, you need a tool. So I designed one.
What it does
MetaDataViewer turns an export into something you can browse. Every category is reachable and searchable, with working links and media shown inline instead of as file paths. On top of that sits an analytics layer — activity over time, messaging patterns, what you engaged with, and how advertisers targeted you.
One design rule shaped that report more than any other: the numbers have to be honest. Meta exports some things completely and others as only a recent slice, so a naive chart would invent trends that aren't there. Every figure is labelled with the coverage of the data behind it, and the combined views are built only from complete sources. A statistic you can't trust is worse than no statistic.
Designed by me, vibecoded with Claude Code
I'll say this plainly, because I think it matters: I vibecoded this project with Claude Code. The concept, the design, the architecture, and every privacy decision in it are mine — what it should do, how the data should be shaped, what the tool is allowed and not allowed to do. The AI did the typing, and it did it fast.
That speed is the point. I started on 25 July, and by 10 August it had reached its first real milestone: not a prototype, but something other people could actually use. Two and a half weeks from "this export is unreadable" to a working, secured tool. Working this way didn't replace the engineering judgment — it removed the distance between having the judgment and shipping it.
The milestone: letting other people use it
The tool worked for me. The interesting problem was letting friends run their own exports through it — because the moment it stops being your own data on your own machine, every question becomes a question about trust.
The uncomfortable part is what this data actually is: a large slice of someone's life, sitting in a single export. And almost every tool in this space asks you to hand it over — upload it somewhere, trust a privacy policy, hope it's really deleted when you close the tab. I didn't want to build that. So I made a different call: the app is hosted entirely locally. It runs on a machine I control, and the data never touches a public server — not mine, not anyone's.
You upload your export, you get your report, you download it, and it gets wiped. That's the whole shape of it.
That decision solves the privacy problem and instantly creates a new one. If it only lives on a local machine, how does anyone else reach it — from their phone, or a laptop across the city — without punching a hole in my network? The usual answer — port forwarding, a public URL — is exactly the exposure I was trying to avoid. Open a port and you've invited the whole internet to knock.
The answer was ZeroTier.
What ZeroTier actually does
Think of it as giving your own devices a private LAN that happens to stretch across the internet. You create a network, and only devices you authorize can join it. Once they're in, they talk to each other directly, over an encrypted connection — as if they were sitting on the same Wi-Fi. To everyone else, the network may as well not exist.
Wiring it into a local server
The process was refreshingly boring, which is the highest compliment infrastructure can earn. Install ZeroTier on the machine running the app. Create a network and grab its ID. Join the server to it, then join each device that's actually meant to have access — and authorize every one of them by hand. Nobody joins because they found an address; they join because I approved them, one at a time. ZeroTier hands each device a stable private IP, so the server always sits at the same place inside the network. Point the app at that address, and that's it: from an approved phone, the app is just there. From anywhere else on earth, it's unreachable.
No port forwarding. No public endpoint. No inbound firewall rules. The server's real network stays completely closed.
The network is only the first lock
ZeroTier decides which machines can see the app. It says nothing about who's allowed in — so the app has its own front door on top of it. You still sign in.
And it's a login I deliberately don't fully own. I create your username; you set your own password — which means the one secret that unlocks your data is something I never chose and never see. On top of that there's two-factor authentication. So getting in takes three separate things: a device I authorized onto the network, a password only you know, and a second factor only you hold. Miss one and the door stays shut.
Your data, your rules
Once you're in, you decide what happens to your history — not me. When you log out, the app asks how long to keep it: delete it now, hold it for a few hours, a few days, or keep it indefinitely. There's no single policy I impose from above; it's a choice you make, every session.
Don't trust it — check
This is the part I'm most attached to. "We deleted your data" is the most over-promised sentence on the internet, and there's usually no way to know if it's true. So I didn't want you to take it on faith. There's a button that looks at the actual folder on disk where your export would live and tells you, right then, whether the files are still there. Deletion you can confirm with your own eyes beats deletion you were promised.
Looking back, there's one thread running through all of it. Every layer hands a decision to the person whose data it is — which devices connect, what the password is, how long anything is kept. And the last layer refuses to ask for trust at all: it lets you open the drawer and check that it's empty. For something as personal as an entire history, that felt like the only honest way to build it.
Which is a strange place to end up, given where it started. I set out to close an account and walk away from it. Instead I spent two and a half weeks making sure that a decade of someone's life could be read, understood, and then properly let go — on their terms, not a platform's. Leaving social media gave me back the time. This is some of what I did with it.
Building the private, careful version almost always costs more than the easy one — an extra layer, an extra week, a feature nobody asked for. Build it anyway. The people whose trust you're holding will rarely see that work, but they'll feel the difference. Doing right by someone when no one is watching is the whole job.