DEV Community

Cover image for My new app looks like a flea-market app. You can't buy anything. That's the point.
Kei
Kei

Posted on

My new app looks like a flea-market app. You can't buy anything. That's the point.

COLLEMO is a collection log for people who own too many retro games and can't remember which shelf they're on. I shipped it. Here's the story, the screenshots, and the bug I almost shipped with it.

Hi, it's Kei again. Solo iOS developer in Japan, maker of many small apps that almost nobody downloads, writer of Medium posts that are cheaper than therapy.

Last time I told you about an AI-built video factory that made 465 App Store previews and got rejected by Apple twice. This time the story is smaller and, I think, nicer.

I shipped a new app. It's called COLLEMO. It's free. It has no ads, no in-app purchases, no account, and it never touches the network. It is, financially speaking, the worst idea I've had in two years of indie development, and I'm weirdly proud of it.

COLLEMO — Collection Log


Why I built it

I collect things. Game Boy cartridges. Super Famicom boxes. A WonderSwan that I keep meaning to sell "when the price goes above ¥8,000." Books I've bought twice because I forgot I owned them.

Every collector has the same three problems:

  1. Did I already buy this?
  2. Where did I put it?
  3. What did I pay for it, and what is it worth now?

I tried spreadsheets. I tried notes apps. I tried a "collection manager" app with a cloud sync subscription that wanted me to log in before it would let me type the word "Pokémon." None of it stuck, and I eventually understood why.

The best UI ever designed for describing one physical object is not a spreadsheet. It's the listing form in a flea-market app. Mercari here in Japan, Vinted or Depop or eBay elsewhere — they all trained hundreds of millions of people to do the same thing without thinking: tap the plus, add a photo, type a title, pick a category, pick a condition, add a price, add some tags, done.

Everybody already knows how to fill that form in. So I took that form, and that card grid, and that dark marketplace look, and pointed it inward. You're not listing anything for sale. You're registering your own memory of something you own.

That's COLLEMO. Collection + memo. I'm not a naming person.


What it actually does

Home timeline, collection grid, and item detail

  • Items and memos live in the same timeline. "Pokémon Red, GB cartridge, ¥4,200" sits next to "Things to look for at the used game shop this weekend." Both are part of collecting. Most apps only let you log one of them.
  • Photos are optional. Up to 10 per item, but if you have none, the card shows an emoji on a colour that follows the category. You can log "I own this" in five seconds and add the photo never.
  • 15 fields for one belonging. Title, category, condition, tags, description, purchase price, current value, purchase date, where you bought it, where it's stored, a URL… and a memo can be linked to the item it's about.
  • Search that forgives Japanese. Hiragana and katakana are treated as the same thing, and so are full-width and half-width characters, so ぽけもん finds ポケモン. (If you don't read Japanese: this is a surprisingly common reason search fails in Japanese apps, and fixing it is a small library nobody sees.)
  • Dark theme, four accent colours, and that's your whole settings screen. There's nothing else to configure because there's nothing else going on.

Search across title, tags and shelf

And everything it doesn't do, which I consider features:

  • No account. No sign-in. No "continue with Apple."
  • No network access at all. It doesn't have a server to talk to.
  • No ads. No subscription. No "unlock pro." Export a backup whenever you like and it's a file on your phone.
  • No AI. I know. I use AI to build apps all day; I didn't want it inside this one.

I had a moment, right before submitting, where I stared at the App Store Connect "Pricing" page and thought, this is the first app I've ever shipped with literally zero ways to make money. Then I submitted it anyway. Some things you build because you want them to exist.


How it got built (the honest version)

I designed the whole thing first as a clickable mock-up — nine screens, with actual hex values, spacing and font sizes written into them. Then I handed that mock-up to Claude Code and we built the real app on top of it: SwiftUI, SwiftData for storage, photos saved as files on disk with only the filename in the database. The pure logic (search normalisation, backup encoding, price formatting) lives in a separate Swift package with 83 unit tests that run in a few seconds without a simulator.

The first working build came together in a day. Multi-language support came right after: I keep every string in one TSV file per language, a script regenerates Xcode's string catalog from them, and a second script fails the build if a key is missing, a format specifier is the wrong type, or a plural form is missing. Thirty-five languages. The App Store listing went out in 39 locales.

That sounds tidy. It wasn't. Three things I'd rather you learn from me than from your own users:

1. The bug I almost shipped. Every item gets an emoji and a colour based on its category. My code looked that up by the category's display name. The display name is, of course, translated. So in every language except Japanese, no category matched, every item fell back to the default 📦, and the colours changed depending on what language your phone was in. I found it only because I went digging through the localisation code before shipping and traced where the emoji actually came from. It never reached the store — but only because I happened to look.

2. Screenshots that were "successfully" broken, five different ways. I automated the store screenshots (35 languages × 5 screens) and every step reported success while being wrong. The compositor wrote its output over its input, so re-running it produced a device frame inside a device frame, and my automated checks happily passed all 195 of them because the size and colours were correct. The frame image's "screen" area turned out to be opaque black, not transparent, so for a while the screenshots were a beautiful phone displaying nothing. The upload tool crashed with server errors and still got 194 out of 195 files in, which I only learned by counting them through the API. The fix for all of this was the same boring sentence: don't trust the exit code, count the actual result.

3. The sample data is suspiciously specific. The items you see in the screenshots — the Pokémon Red cartridge, the WonderSwan with a note to sell it "when the price goes above ¥8,000," the memo titled "things to look for at the used game shop" — came straight out of my design mock-up. I meant to replace them with neutral placeholder data before shooting the store screenshots. I didn't, and by the time I noticed, I liked them better than anything neutral I could have invented. So that's what's on the App Store now. Make of it what you will.


What's still missing

I'd rather tell you now than have you find out:

  • Prices are shown in yen, full stop. There's no per-item currency yet. I deliberately didn't make the formatter "locale-aware," because that would turn ¥12,000 into "12 000 €" on a French phone — the same number displayed as a different currency, which is worse than no localisation at all. Real multi-currency means storing a currency per item, and that's a future version.
  • Backup is export-only right now. The import side of the codec is written and tested; it isn't wired to a button yet.
  • No drag-to-reorder for photos. They appear in the order you added them.
  • No iPad layout. It's an iPhone app.

What I'm asking for

Nothing big, as usual.

  1. If you collect anything — games, books, records, figures, teacups, yarn — I'd genuinely love to hear what fields you'd want that I didn't think of. I'm one person with one kind of collection, and that shows.
  2. If you try it and it's confusing in your language, tell me which one. I can read about six of the 35 and I'm relying on automated checks for the rest.
  3. If you've solved the "did I already buy this?" problem a different way, I want to know, because I'm clearly the target user.

Links

Thank you for reading. I still don't make money from this one, and for once that's exactly how I designed it.

— Kei

Top comments (0)