Changelog
What's shipped, newest first. RSS
A full widget ecosystem — iPad extra-large boards, Lock Screen dice and gauges, art-wall launchers — plus a Fix Match for wrong games, a fill for missing info, and stats you can rearrange.
Widgets, everywhere
- iPad gets its biggest size, three ways. A Command Board (your game, its next objectives, the shelf, the week, the ring — one glance), a twelve-cover Shelf with status dots, and Where You Stand — a truthful progress bar for every game you’re playing.
- “Choose a Game for Me.” A die on your Home Screen picks something off your shelf and stands by it until you roll again. You choose what it may pick from — statuses, one system, whether finished games count (short retro games are endlessly replayable). It never rolls the same game twice in a row.
- A die on the Lock Screen too — tap and the app opens on a fresh random pick, with a dice-tumble haptic and a “Rolled:” banner with a re-roll button.
- The Lock Screen bar fills up: the completion ring is joined by the die, a week gauge measured against your own four-week pace, and a play streak that doesn’t count today against you until it’s over. The next-objective widget gained a real tick button — clear a boss without unlocking.
- Launchers that are portals. “Open To…” jumps straight into a collection, a status shelf, or a system — and at medium and large sizes it shows the actual games inside as an art wall. A system launcher wears the real console icon, nearly full-size on the small widget.
- Cover art fills its frame everywhere, edge to edge — no more letterbox bars, no more washed-out covers on Clear and Tinted Home Screens — and it stays full-colour where the system allows.
- A play heatmap (sixteen weeks, one square a day) and a library-wide finished ring join the Home Screen set.
Knowing your games are right
- Fix Match. If a game is matched to the wrong IGDB entry, the ⋯ menu now fixes it: search by name or id, pick the right one, and everything fetched is replaced while everything you wrote — name, rating, notes, tags, progress — stays put.
- Fill in missing info. One button looks up what your library never knew — release dates, genres, developers, covers — and only ever fills empty fields. What you’ve typed or corrected is never touched. Games IGDB can’t help with rest for a month instead of being offered forever, and “no series” is treated as the fact it usually is.
- Trackers say what they apply to. A tracker can now carry its scope — platform, edition, DLC or patch range — shown right beside its numbers, because numbers for the wrong edition aren’t true numbers.
- Achievement lists are labelled honestly all the way down. An imported RetroAchievements set now records itself as imported, not AI-generated — in the data, not just the badge — and a refresh that drops achievements you’d finished offers to keep them as Personal Goals instead of losing them silently.
Stats
- Arrange it yourself. Reorder the Stats cards by drag, hide the ones you don’t read — per device, with a reset that always brings everything back.
- Years fold into decades, expanding to tappable years, and phantom 1969 release dates from old imports no longer haunt the chart.
Recently Deleted arrives, the export file learns to come home as a real backup, and the app becomes legible at every text size — with VoiceOver that says what things are.
The safety net
- Recently Deleted. Deletion in LevelSelect has always been soft under the hood; now the way back is a screen. Settings → Your data → Recently Deleted lists every game, playthrough, and collection you’ve deleted, each with a one-tap Restore. Nothing auto-purges — what you deleted waits for you, however long that takes.
- Delete Forever is the only hard delete in the app, and it lives here, behind the app’s only double-confirmation. Everything else is always recoverable.
The export comes home
- Import LevelSelect export. The readable JSON file that Export writes is no longer a one-way record — pick it in Settings → Your data and the app restores whatever the file has that your library doesn’t: games, playthroughs, sessions, runs, tracker progress, completions, videos, maps and markers, collections.
- It never touches what’s already here. Import is additive by id — a record you still have is skipped, edits you’ve made since the export survive untouched, and running the same import twice changes nothing. You see exactly what will be restored, and what’s already present, before anything happens.
- Together, that closes the loop: export is now a real backup, not just a record. iCloud keeps devices in sync; the export file is the copy you keep.
Legible at every size
- The largest text sizes now reflow instead of clipping. At accessibility text sizes the game page stacks its cover above the details, Stats folds its overview into a 2×2 grid, and buttons that used to truncate (“P…”) show their symbol and speak their word.
- VoiceOver says what things are. A library row reads as one sentence — name, status, platform, rating. A tracker tick says what it ticks and whether it’s done. The play heatmap summarizes itself instead of reciting 105 squares. Missable warnings, count steppers, and remove buttons all have names now.
- Reduce Motion is honored everywhere — banners fade instead of sliding, joining the cover shine and timer pulse that already knew how to hold still.
RetroAchievements' badge art arrives on every imported row, a mastery wall lands in Stats — and beating a game becomes a recordable moment, past years included, separate from finishing your list.
RetroAchievements, visibly
- Every imported achievement wears its badge. The art RA’s community drew for each achievement now sits on its row — full colour once you’ve earned it, RA’s own greyed variant while you haven’t, so nothing unearned ever looks earned. One switch in Appearance turns the art off if you prefer plain rows. Already-installed sets pick their badges up on the next refresh.
- A trophy shelf in Stats. Every set you’ve mastered or completed, as a wall of RA’s game icons — gold border for hardcore mastery, because that distinction is RA’s and the app keeps it honest. Tap any icon to open that set on RetroAchievements.
- Doors out. The set’s page on RA from the tracker and from the game’s link row, and your own profile from RetroAchievements settings — all in the in-app browser.
Play blind, peek on purpose
- Hide item hints. A new Appearance switch strips tracker rows down to their names — no descriptions, no locations, no spoilers at a glance. Press and hold any row to peek at exactly that one item’s hint and location, so checking one objective never spoils the ones below it. With rows this bare, RetroAchievements badge art grows to fill the space.
Rolling credits is a moment, not a checklist
- Mark as Beaten. From a game’s page (the Beaten section, or the ⋯ menu): beat the game, 100%, New Game+, or your own words. Beating a game and finishing every item on your tracker are different achievements — now both are recordable and neither pretends to be the other. “100%” means all of your list, the one you chose to keep; it doesn’t claim a platinum.
- Dates as fuzzy as memory. An exact day for last night’s credits, a month for “sometime that spring,” a bare year for the game you beat in 2011 — stored and shown only as precisely as you actually know. Logging your history needs no sessions and no retroactive box-ticking.
- Stats answers “what did I beat this year?” The Completions card becomes Beaten & Completed: each year shows both counts and opens into the actual list of games.
- A beaten moment knows which run it capped. Marking a game beaten can point at the playthrough it finished — that run shows a checkered flag in the picker, and starting fresh leads the menu once your current run is done. Historical beats stay “just the game.”
- Status shelves grow up. Every shelf (Completed, Backlog, all of them) now sorts — name, last played, recently added, rating, release year — and can show as a cover grid.
Trackers are planned from the game's real identity instead of its name, run loadouts come from your own tracker, Stats grows the depth it was missing, and the wishlist becomes yours.
Generation
- The generator knows which game it is. Every request now carries the game’s database identity — and its genres, themes and a one-line summary — instead of a bare name. A 2026 Pokémon sandbox no longer gets a mainline Pokémon plan because the model recognised the franchise; spin-offs, remakes and games that share a title with something older all plan as themselves.
- Counted categories actually generate. A set the plan called “one counter up to 700” used to fail after ninety seconds with advice to rename the category — the count was never sent to the server. It is now, and a counter comes back as a counter.
- A failure names the real problem. The wrong-game error no longer blames a category name the plan itself chose.
Runs
- A run’s loadout comes from your tracker. The keepsake picker is your Keepsakes category — filtered to the ones you’ve unlocked — and aspects narrow to the weapon you chose. No more typing “Old Spiked Collar” by hand.
- Ending a run asks what only the end knows — which gods showed up, where you fell.
- Analytics, once you have a few runs. Win rate by weapon, by keepsake, by anything picked from a list — with the raw fraction always beside the percentage, because “100%” alone and “1/1” say very different things. Free-typed fields never aggregate; typos would fragment every group.
- History can filter to wins or losses once there’s enough of it.
Stats
- The depth the screen was missing: your finished share, average rating with how many games it’s an average of, the star distribution, hours and finishes by month, and a fifteen-week play heatmap.
- Every slice is a door. Genres, tags, series and release years don’t just show counts — tapping one opens everything in your library that matches, the same screens the game page links to.
- By system, counted the way the library groups them.
Widgets
- Cover art survives Clear and Tinted Home Screens. Covers now stay full-colour instead of flattening into white rectangles.
First run
- A welcome, once. New installs get one screen — what the app is, and that there’s nothing to sign up for — then the same two buttons the empty shelf offers. No tour, and it never comes back.
Search
- Search reaches everything a game page shows. Developer, publisher, genre, theme, perspective, mode and platform — typing “Capcom” surfaces everything Capcom made or published, without needing a filter for it.
Wishlist
- A wishlist of your own, beside the Deku Deals view instead of behind it. Games you’re watching live in the app now; Deku stays one tap away for prices.
- The button says “Add to Wishlist”, because that’s what it does.
- iPad no longer squeezes the wishlist into a 440-point strip.
Honesty
- Achievement lists say where they came from. An imported RetroAchievements set is labelled as the real, authored list; a generated set is labelled as a draft. The two never dress alike.
- The privacy policy now covers RetroAchievements — including the part worth knowing: your API key travels from your device to RetroAchievements directly, and never through this app’s servers.
- Each system appears once. The library’s system filter and headings no longer offer two identical “Switch” rows that quietly filtered different games.
- The CSV importer asks which app your spreadsheet came from — only when there’s one to name, and it’s the most useful answer on the form.
Ask what a game should be tracked by, fill one category at a time, and pull real achievement lists from RetroAchievements instead of generating a guess.
A tracker doesn’t have to arrive all at once
- Ask what a game should even be tracked by. “Suggest Categories” comes back in seconds with the sets that game is actually divided into — Shrines, Divine Beasts, Korok Seeds — as placeholders you can accept, rename or throw away before anything is generated.
- Fill one category at a time. Each placeholder has its own Generate button, and filling one leaves every other category exactly as it is. A big game no longer means one long generation that can fail entirely and leave you with nothing.
- Long lists actually arrive. A hundred-plus shrines used to run past the time limit and come back as though the generator had never heard of the game. Long categories now come back plainly — name and location, no padding — because a list that arrives beats a richer one that doesn’t.
- Nine hundred Korok seeds are one counter, not nine hundred rows. Sets too large to tick individually are tracked as a running total, and the placeholder says so before you generate it rather than promising rows it was never going to produce.
- Categories you’ve finished rise to the top, planned ones sink, and you can pin the ones you care about or hide the ones you haven’t started.
- A tracker can be thrown away, not only overwritten — and removing one tells you what progress goes with it first.
RetroAchievements
- Import the real achievement list. For a game RetroAchievements covers, this is the authored list the emulator itself pops up against — not a generated approximation. It arrives in a second, with the points each achievement is worth.
- Connect your own account and sync what you’ve earned. Unlocks land in a dedicated RetroAchievements playthrough, kept separate from a playthrough you’re timing by hand.
- A sync can only ever add. Nothing it doesn’t know about gets un-ticked — it has no idea you played the cartridge on real hardware last week, so silence from it is not evidence of anything.
- Your API key never touches our server. Those requests go straight from your device to RetroAchievements.
- Offered where it applies. On a game you’ve marked emulated, or on a console RetroAchievements covers, the import is a button rather than something buried in a menu.
- An imported set survives regeneration. Generating a tracker over a game that already has an achievement list now keeps the list and adds the generated categories beside it.
Collections
- Start from a question, not a blank name field. Templates ask something specific — the ones you keep meaning to get back to, the ones you’ve owned for years and will probably never open — and several fill themselves in from your own library.
- Pick from cover art. Choosing what goes in a collection is a grid of covers with a running count, so a collection meant to hold ten doesn’t quietly become thirty.
Knowing more about a game
- Critic scores and time-to-beat, where enough people have actually said so — a score built from two reviews isn’t a score, so it isn’t shown as one. Both can be turned off entirely if you’d rather judge for yourself.
- Connected games. Remasters, collections and sequels of the game you’re looking at, without the bad matches a plain name search produces.
- Every field is a way into your library. Tapping a developer, publisher, genre, year or perspective shows everything else you own by that measure.
- Personal collections show on the game page, distinct from a purchased bundle the game happens to belong to.
Elsewhere
- Running timers live on the first screen, with pause and stop, instead of only inside the game you started them from.
- An “ongoing” status for games that are never really finished, and Home shelves you can hide.
- Prerequisites are visible. A tracker can show what isn’t reachable yet, and warn you before ticking something that closes another objective off for good.
- The platform shown is the one you picked, not the one the app would have preferred.
- Only the category you pressed spins, and a failure you watched happen isn’t announced to you again on the next screen.
- Three cramped views now grow with your text size instead of clipping at the larger accessibility sizes.
Playing on a phone and a tablet no longer risks your playtime — plus honest sync status, safer tracker imports, and a long list of smaller fixes.
Sync you can trust
- Two devices, one timer. Start a session on your phone while one is already running on your tablet — or resume an old session on one while the other starts a new one — and the app now sorts it out the same way on every device: the timer you acted on most recently keeps running, the other one closes with exactly the time it earned. No doubled hours, no timer that stops itself while you’re watching it, no minutes counted twice.
- Nothing gets deleted on a hunch. Earlier builds could decide a playthrough that looked empty was a sync artifact and remove it — even when it was a real playthrough another device had just created and was still filling in. That guessing is gone. When two devices genuinely disagree, both copies stay visible and you decide.
- Progress merges instead of overwriting. If the same objective gets ticked on two devices, the more recent action wins everywhere, an item you deliberately unticked stays unticked, and two different notes on the same item are kept together rather than one quietly replacing the other.
- The Lock Screen keeps up. Stopping a session on one device now takes down the Live Activity on the other, instead of leaving a timer running with buttons that do nothing.
- Repairs happen when changes arrive, not just when you switch apps — so a page you’re already looking at updates on its own.
Knowing what’s actually happening
- Real iCloud status in Settings. Synced, syncing, signed out, or “iCloud is catching up” when Apple is rate-limiting your devices after a busy stretch — with the last successful sync time, so a slow moment never looks like lost data.
- Detached sessions are shown, not hidden. In rare cases iCloud can separate a recorded session from its game. The app no longer guesses where it belongs; it keeps the time and tells you it’s there.
- Tracker generation reports back. Generation takes a minute or two and you usually walk away — now a banner tells you when it finishes or fails, wherever you are in the app, with a button to jump straight to the game.
Trackers
- Pasted and generated lists keep every item. Three collectibles all called “Chest” stay three separate rows. Duplicate internal IDs — which used to make two rows share one checkmark — are cleaned up at every entry point: first generation, Replace, Add New Only, and pasted lists alike.
- Imported and locked lists survive regeneration, including when a generated tracker reuses their category name.
- Progress percentages stay honest. Adding a personal goal, replacing a tracker, or rescuing dropped items now updates every playthrough’s progress — not just the one you’re looking at.
- Removals you’d notice are reported. An item you’d written a note on, or revealed, now counts as work worth warning you about before a Replace takes it away.
Sessions and history
- Ending a forgotten session records when you actually stopped. For a paused session, that’s the pause — not a time invented from when you started.
- Clock differences between devices can’t create nonsense. No negative durations, no sessions recorded as ending in the future.
Smaller things
- The tracker page shows which game you’re in, not just the playthrough name.
- Add Game keeps “Add manually” reachable when a search fails or finds nothing.
- Rotating an iPad into the side-by-side layout no longer strands you on a duplicate tracker page.
- The “still playing?” prompt dismisses itself if you already answered it on another device, and its six-hour reminder can now break through silent mode.
- Export includes a stable ID for every record type it carries, and the app’s description of it matches what the file really is.
Regenerating a tracker can't quietly cost you progress any more — and you can now paste a checklist you already trust.
New
- Choose what a regeneration does. The button now says what it will do — add only what’s new, review the changes first, or replace everything — and you can pick a different one for a single run without changing your default. Add-only is the default, because it never removes or overwrites anything you already have.
- Review changes before they happen. See what a generation would add, remove and rename, grouped by category, and tick exactly what you want. Nothing is written until you say so.
- Paste a list. Drop in a community checklist — a markdown table, or sections of numbered items — and it becomes real tracker categories. No AI, no waiting, and nothing invented: every item comes from your text (list syntax is stripped, names and locations are read out of it, and anything unrecognised is reported rather than guessed at). Imported lists are locked, so a later regeneration can’t replace them.
- Your own notes on any item. Write whatever you want to remember. Your note is yours — no merge mode rewrites it, and a Replace carries it across wherever the item can still be matched.
- Rename anything. Categories and items, including generated ones. A generator’s naming is a suggestion; if the game calls them Achievements, call them Achievements.
Improved
- Progress follows renamed items. Generation doesn’t name things the same way twice. Previously that could silently reset your checkmarks; now progress moves with any item the merge can still match by name, the review tells you how many moved, and anything genuinely dropped can be kept as a personal goal instead.
- Long checklists are far shorter. Items sharing a location group under it once instead of repeating it on every row, and short items lay out in columns — one on a phone, more when there’s room.
- Checkboxes are easier to hit. Tap targets were smaller than they should have been.
- Timer controls are available with the tracker and a guide open side by side on iPad and Mac.
Fixed
- Tapping a second video in the list now actually changes the player — and each video keeps its own resume position instead of inheriting another’s.
- Every part of a playlist remembers where you got to, rather than the playlist remembering only one position across all of them.
- Run logging works on AI-generated trackers. “Log Runs for This Game” was a no-op on exactly the games most likely to want it.
- The Runs section no longer appears twice on iPad and Mac in compact tracker display.
- Generation keeps running when you move around the app, with elapsed time and a clearer sense of how long it takes.
The first build uploaded to TestFlight, ready for testers beyond my own devices.
- Use the built-in tracker. Some games ship with a hand-built tracker. If you’d generated over one, you can now switch back.
- Console art for PS3, Android, iPhone and iPad on the systems shelf.
- An honest note about how this app is made.
Rather than reconstruct every build, here's what LevelSelect already was when the beta opened.
- A private library. Your games, sessions and progress, synced through your own iCloud. No account, no ads, no analytics, no tracking.
- Session tracking with Live Activities, Home Screen widgets and an Apple Watch app.
- Objective trackers — checklists, collectibles and ranked upgrades — generated for a game or hand-built, with multiple playthroughs tracked separately.
- Run logging for roguelikes, kept separate from play time.
- Guides and videos attached to a game, with playback position remembered.
- Systems shelves with original console artwork.
- Import and export. Bring a library in from a CSV, and write your library out again as readable JSON whenever you like.
Everything here ships to TestFlight as it's ready — the beta starts with a small friends-and-family group, and you can ask for an invite. Builds go out when they're ready, not on a schedule.