Cover art by Constantin Marin for Wizards of the Coast
Every library is a self-portrait, and Mystical Archive is my attempt to build a home for mine: a room where books stand spine-out on wooden shelves, waiting to be pulled down, turned over in your hand, and put back. It began as a way to track what I read; it became a record of what I keep.
Why I built it
I've watched two communities disappear. When Twitter changed hands in 2022, the communities I was part of, from design to gaming, scattered: to Bluesky, to Mastodon, to Posts.cv. I followed. Then, in 2025, the founding team behind Read.cv was acquihired, and both Read.cv and its social companion Posts.cv wound down with them. That community vanished too. Twice now, the pattern held: the people move on, but the years of things you made and kept simply go dark. My hesitation to commit to any platform wasn't paranoia. It was precedent. Platforms go away.
Around the same time I found Steph Ango's file over app essay, which gave the feeling a name: your data should outlive the software that displays it. The experience can be as rich as you can make it, but it should be a layer over the data, not a cage around it. A whole movement is circling this idea, from Bluesky's AT Protocol to the ActivityPub network behind Mastodon and Pixelfed, each working to make identity and community portable at the protocol level. Mystical Archive is my first serious pass at applying that instinct at the scale of a single shelf: a deeply personal experience layered over a library that doesn't need it to survive.
How it works
The whole archive lives in a single portable file. Every book (title, dates, notes, shelves, even the cover image itself) is written into one JSON document that syncs through iCloud and exports with one tap. There's no server and no account. If this app disappeared tomorrow, the file would still open anywhere, covers included. That was the first decision I made, and everything else grew around it.
The bookshelf view renders books as true three-dimensional objects. Most books don't have spine artwork anywhere online, so the app makes one: it samples the dominant color from the cover, sets the title in type running down the spine, and gives each book a height and thickness seeded from its permanent internal identity. A book keeps the same body through every edit, export, and re-import, on every device, so the shelf looks organically uneven yet is exactly the same each time you return. And it's your copy of the book that has a body, not the platonic edition. Tap a spine and the book slides out and turns to face you; tilt your phone and it tilts with your hand.
[gif: tap-to-pull-out interaction, and/or the gyroscope tilt]
Design decisions
Ownership before progress. This one I owe to my partner, who asked a question I couldn't shake: what about cookbooks? Books you live with but never read front to back? So reading status is optional. A cookbook or a book of poems never has to pretend it's on a journey from "to read" to "read." It can simply belong to you. Tracking is opt-in, per book.
The export is the database. Most apps bolt an export feature onto a private store. Here they're the same file, so portability can never rot.
Social is intentional, not passive. There are no feeds, followers, or activity graphs here, but that doesn't make the archive solitary. The social moments it's built for happen in person: two people in a bookstore, one asking about a book, the other pulling up their shelf to check if they own it, how they rated it, what their notes say. Or roommates checking whether a book already lives somewhere in the house before buying a second copy. The app doesn't broadcast. It answers when asked.
Three ways of looking. The list is informative, the grid is visual (covers only, wall to wall), and the 3D shelf is experiential. Each layout indexes on a different way of loving books.
Indie by default. Every book links to real bookshops. Right now that means Flying Books and Type Books, my two neighborhood shops here in Toronto. There's a bigger-store option too, but you have to go turn it on, and even that favors a chain with a real local presence (Indigo, in Canada) over Amazon.
The open problem
Portability is solved; legibility isn't. My bar for this project was never just "can the data move." Exports are table stakes. The real question is whether someone who has never seen the app could open the file and understand my library. A single JSON document passes the first test and, honestly, only half-passes the second. It opens anywhere, but a wall of structured data with embedded images is readable to a developer, not to a rookie. I don't have the answer yet. That's the part I'm still designing.
What's next
A legible archive. Experiments with an export a human could browse without any app at all: markdown files and a folder of covers, a library you could print.
Books with real bodies. Back covers, real spine artwork where it exists, and thickness drawn from a book's actual page count, so the shelf gets more honest about what's on it. The day that ships, every shelf will reshuffle exactly once, as the books grow into their real bodies. I'm choosing to treat that as a small event rather than a migration.
Local everywhere. The geo-aware version of indie-by-default, so every reader's shelf links to their own neighborhood bookstores instead of mine.
People in rooms
This page opened with platforms disappearing, so it should close with the thing that doesn't. The communities were never really on the servers; those were just the rooms we happened to meet in, and rooms can be rebuilt. The durable social layer is people, together, in person: a friend in a bookstore aisle asking if you already own the book in their hand, someone leaning over your phone as a spine slides out to face them. Mystical Archive is a bet on that layer. If the library is durable and the experience is personal, community doesn't need a feed to survive. It needs a good reference object for the moments when people are already together, and a shelf that will still be standing whenever they arrive.
Read more about my take on communities, online and in person.
Built with
SwiftUI and SceneKit, with no third-party dependencies. CoreMotion for the gyroscope, iCloud Drive for sync, Google Books for lookup (with an Open Library fallback), Font Awesome for iconography. Designed and built solo, shipped through TestFlight.