FILE: LAB_RECORD.dat

Tiero v2: accounts for an app that worked fine without them

How my tier-list maker got optional sign-in and cloud sync, while people who never sign in didn't notice a thing.

Tiero is a tier-list maker. You drag things into rows, name the rows, export a PNG and send the link to your friends so they can tell you you’re wrong. The first version shipped in May 2026 with no accounts at all. Everything lived in your browser, and honestly that was part of the charm.

v2 went live on July 29th with optional Google sign-in, cloud backup for your lists and publishing under your own name. This is the story of how it got built, and what I’d tell past me before starting.


Why bother with accounts?

By v1.12 Tiero could do a lot: themes, image tiles, share links with preview cards, AI suggestions, a reveal mode for streams, even comparing two lists side by side. But all of it kept running into the same walls:

  • A share link belonged to whichever browser made it. Clear your browser data, and you could no longer delete your own share.
  • Your lists lived on one device. Start a list on the laptop, and your phone had no idea it existed.
  • Shared images stayed in storage until someone deleted them or a weekly cleanup found them.

I wrote these walls down in the roadmap early on and gave myself one rule: don’t sneak in half of an accounts system “to get a head start”. Anything built locally for that would get thrown away the moment real accounts showed up.

Picking the pieces

Before writing any code I spent a day on research: who handles sign-in, where the data lives, and how I’d move off Vercel if I ever had to.

Sign-in. I went with better-auth, and the deciding factor was portability. Accounts live in Tiero’s own database, so deleting an account is one transaction with no third party holding a copy for another 90 days. Switching sign-in providers or adding new ones stays simple and never hits a limit. Clerk came a close second, mostly because I wouldn’t have had to own any auth code.

Data. Neon Postgres in Frankfurt. Shares moved there too: updating a share in Vercel Blob could take up to a minute to show up, and people expect to see their change the moment they hit save.

A way out. I wrote down which parts are tied to Vercel on purpose, and which numbers would make me move. Sounds boring, I know. But it meant “what if I leave?” had an answer before anything depended on it.

What does v2 actually do?

The whole idea fits in one sentence: you can use Tiero forever without an account, and signing in only adds things.

  • Signing in uploads nothing. Your lists stay on your device until you press Back up this list, one list at a time.
  • Sync never eats your work. Edits save by themselves and survive going offline. If two devices disagree, Tiero asks which version to keep, or keeps both.
  • Private until you publish. Publishing puts one exact version of a list at /u/{handle}/{slug}. Keep editing all you want: nobody sees the changes until you press Publish changes.
  • Old links come with you. On your first sign-in, Tiero finds the anonymous shares you made in that browser and offers to move them into your account. The old links keep working.
  • Leaving is easy. One archive exports everything you have, and deleting your account takes effect right away, public links included.

How it shipped

I used AI agents a lot for planning things out: the research above, the product spec, and a roadmap I kept up to date whenever the plan changed.

Launch day itself was quiet on purpose. The new code went to production with accounts switched off. I turned them on for myself first, then for a small allowlist, and then for everyone once everything checked out.

What I learned

Write down what you can’t do yet. Those three walls saved me more than once. A few “small” v1 ideas were accounts in disguise, and having the list in front of me made that obvious before I started building them.

Cut from the design too. The original design had way more in it: a whole effects suite for reveals, two board shapes that aren’t really tier lists, background removal for images. I cut them halfway through. Each of those board shapes would have needed support in shares, preview images and export, forever.

Pick what you can move away from. Portability decided sign-in and storage for me more than developer experience did.

Check that things are alive. On launch day, of all days, the Redis instance behind rate limiting was gone. Tiero only keeps throwaway rate-limit counters there, so nothing had talked to it for a while, and the free plan archived it for inactivity. The environment variables were still sitting there, looking perfectly fine, while the address they pointed to didn’t even resolve anymore. A fresh instance fixed it and nothing was lost. Now a daily job actually talks to Redis, Postgres and Blob storage and tells me when one of them stops answering.

Let cosmetic stuff fail quietly. Share preview images with list covers once broke on Vercel because of an image library problem. Now that route falls back to a plain text preview when covers can’t be drawn, and sharing keeps working.

What’s next?

Since v2.0, v2.1 added version history, public profile pages and embedding lists on other sites. Templates are next.

Open Tiero · v2 changelog