CLCTN · IMPORT PIPELINE · OCTOBER 2026
TESTED ON A REAL FILE
Drop a spreadsheet. Get a shelf. Only answer the questions we can't.
Your friend's Jeux collection.csv is a good stress test because it's not a database export. It has 485 games in a grid of 20 platform columns, and 126 cells carry notes in French: “cartouche + manuel”, “boite endommagé”, “cartouche ko”, “doublon”, “dédicace JDG”. There are also typos (“Donckey Kong”, “Game Boy advence”) and bundles (“Heavy rain / beyond 2 souls”). Each of those cells already contains something the app uses: parts, condition, duplicate, edition. The user's whole job is to drop the file and confirm one sentence.
01 · THE PIPELINE · WHO DOES WHAT
{{ s.where }}
{{ s.b }}
USER: {{ s.user }}
ON DEVICE · FREE · PRIVATE
BACKEND · KEYS, RATE LIMITS, CACHE
02 · THE SCREENS · FIVE, AND TWO OF THEM ARE WAITING
Total user effort for this file: one drop, one confirm, about 20 taps on exceptions, which can be postponed. Everything else happens while the shelf is already visible.
BRING YOUR COLLECTION
Already listed it somewhere?
A CSV or TSV in any layout, any language, typos included. We'll do the sorting.
CSV
Jeux collection.csv
SHARED FROM FILES · 31 KB
Your file is read on this phone. Only titles leave it, to find the games.
01 · DROP
The most common way in is the share sheet from Files, Mail or Numbers, so the user never has to find an import menu. Only CSV, TSV and pasted text are accepted. Excel and Numbers export to CSV in two taps, so we skip binary formats and OCR.
READ IN 2 SECONDS
485 video games on 20 platforms, into a collection called Jeux.
Build my shelf
Something's off
02 · ONE SENTENCE TO CONFIRM
The user never sees a column mapper. The model reports what it understood in one sentence, the user checks it in a second and taps. Dashed chips are headers it renamed (“Game Boy advence” → GBA). “Something's off” opens the mapper, the only escape hatch.
PS1 · 41 OF 73 FOUND
Your shelf is arriving.
281 / 485 FOUNDCOVERS · 3D NEXT
You can close the app. We'll let you know when the last box is on the shelf.
03 · THE WAIT IS THE REWARD
Covers fill in as the backend finds them, platform by platform, and the boxes turn 3D once their textures are ready. The import is the first time the user sees their collection in the app. Nothing blocks on review, and the user can leave.
3 OF 21 · NO RUSH
Which Tetris?
YOU WROTE · “Tetris version alternative (cartouche)” · GAME BOY
None of theseKeep as I wrote it
STILL TO SORT
04 · ONLY THE EXCEPTIONS, ONE TAP EACH
This queue only holds real ambiguities: variants, bundles to split, digital copies. Each one is a single tap with the cover art shown. Nothing is ever dropped. “Keep as I wrote it” is the default: the item stays on the shelf as written, without a match. The queue sits as a badge on the shelf and is never a gate.
YOUR SHELF · 485 GAMES
We noticed a few things while unpacking.
{{ n.k }}
{{ n.t }}
{{ n.b }}
See the shelf
05 · PAYOFF FROM THEIR OWN NOTES
The notes he typed into his spreadsheet become features on day one: an Imperfect list, a duplicate, a signed copy, a series to complete. This is the same idea as onboarding 46: the first thing the app shows is something he didn't know.
03 · CELL → ITEM · REAL CELLS FROM THE FILE
This is the extraction step, and where a typed-extraction model earns its keep. The input is a messy cell plus its column. The output is a typed object that matches video-game.yml. It must never invent a value: anything it can't read goes into note, untouched.
CELL · COLUMN
EXTRACTED
WHAT IT BECOMES
{{ c.out }}
{{ c.becomes }}
03B · CLCTN.CSV · THE FAST LANE, NEVER THE ONLY LANE
A template we publish, with one row per item and fixed headers. If a file matches it, there's no model and no guessing, and the import is instant and free. The template is optional, though. Your friend won't rewrite 485 cells into new columns, and asking him to would lose him before the first box shows up. The template is for people starting from scratch, and it's the same format the app exports. Exporting and re-importing a collection gives back exactly what went out, and that's what makes people trust the app with their data.
CLCTN.CSV · VIDEO GAME · UTF-8 · COMMA
type,platform,title,region,parts,condition,signed_by,note
game,n64,Super Mario 64,PAL,box|cart,box:worn,,
game,nes,Teenage Mutant Ninja Turtles,PAL,cart|manual,,JDG,
game,ps4,Heavy Rain + Beyond Two Souls,PAL,case|disc,,,bundle
game,megadrive,Moonwalker,PAL,cart,cart:faulty,,
DESIGN RULES FOR THE TEMPLATE
04 · ARCHITECTURE CALLS
{{ a.k }}
{{ a.t }}
{{ a.b }}
05 · WHERE MATCHES COME FROM · CHECKED OCTOBER 2026
There's no general product search to rely on: Amazon and Google have both closed theirs. Use one game database for identity and one for box scans, with Wikidata stitching IDs together. All calls go through the backend, which caches by title + platform + region.
{{ s.t }}
{{ s.verdict }}
{{ s.role }}
{{ s.b }}
06 · HOW IT'S GROUPED · ONE COLLECTION, NOT TWENTY
A collection is a choice the user makes. A platform is a fact about the game. His file is called Jeux collection, and he chose to keep it as one sheet. So the import creates exactly one collection, “Jeux”, and the 20 platforms become shelves inside it, generated from the subtype. Twenty collections would be a mess on day one: Switch would get a collection for one game and CD-i one for three.
Jeux
COLLECTION · 485 · VIDEO GAME
SHELVES · ONE PER PLATFORM · AUTOMATIC
VIEWS · BUILT FROM HIS NOTES · LIVE, NOT COPIES
WHAT IN THE FILE BECOMES WHAT
{{ g.from }}
→
{{ g.to }}
On screen 02, the collection's name is part of the sentence the user confirms (“…into a collection called Jeux”), and they can rename it there. If the shelf already has a video-game collection, the import offers to merge into it instead.
07 · OPEN QUESTIONS