Upload a reading order file below — either one exported from this app, or one built by Claude. To build one, copy the instructions into a new Claude chat, then ask Claude to build or fix a reading order for a character. Claude researches it across two reference sites, applies this app's era, event, and formatting rules, and hands back a downloadable .json file. Save that file, then upload it below.
Optional. Select a file below and the uploaded eras and entries will be added to it instead of creating a new one. Existing entries and your progress stay untouched.
Choose a .json reading order file from Files or your downloads.
Export it as a file, which is handy if you want to send it to Claude to fix a broken order, or replace it outright with a corrected file. Replacing keeps your read/unread progress for any issues that still exist in the new file.
Every case file and all your progress, in one file. This app only lives in browser storage, with no account and no sync, so it's worth exporting a fresh copy every so often.
Pick the accent color palette for the whole app.
Name of the iOS Shortcut this app hands searches off to.
If something looks out of date after a new deploy, this clears the app's cached files and service worker and reloads fresh. Your reading orders and progress are stored separately and are not affected.
Work in this order, and don't skip straight to writing the list from memory. Keep this lean: two sources, not a research project.
1. Primary source: comicbooktreasury.com. Find the character or team's reading order page. Use its structure, meaning which issues it groups into which omnibus or trade paperback collections, as the backbone for the era breakdown and sequencing. This is the starting draft.
2. Merge in what's missing from comicbookreadingorders.com. Pull that site's order for the same character/run and diff it against the comicbooktreasury-based draft. comicbooktreasury tends to lag behind on recent releases and ongoing series, so treat comicbookreadingorders as the more current source: fold in anything it has that comicbooktreasury is missing. This is the only other source to check. Don't pull a third or fourth site just to be safe.
3. Only search again if about to assert a specific superlative or "definitive" claim in a note, such as "issues #225–232 are Armor Wars." Do one targeted search when such a claim is actually being written, not a standing third cross-check of the whole file.
4. After any edit that adds or moves content, re-verify the whole file's chronological order end-to-end. It's easy to strand a block in the wrong place, so this is a read-through, not a new search.
Every reading order needs a PUBLISHER: line, a single value for the whole case file (e.g. Marvel, DC, Image, Dark Horse), not per issue. New files should always include it right after SUBTITLE. When editing an existing file that doesn't have one yet, add it as part of the edit, even if not asked. If a character genuinely spans more than one publisher, use the majority publisher and note the exception in a NOTE: line.
ERA names describe what happens in the story (e.g. "Confronting a Legacy of Harm"), never the comic title, volume number, or writer's name.
EVENT names can just be the event's real name (Civil War II, Secret Empire, etc.). No rewording is needed.
Never reopen the same EVENT name multiple times to interleave it with era content. Keep the whole event as one contiguous block, or accept split cards, but not both.
Only split when the reader picks up a different comic title. Never split a single series just to name a single-issue "first appearance." Fold that into the surrounding run's description instead.
Split every different title within a crossover's tie-in list. Use one line per title, even if minor.
Consolidate consecutive same-title ranges, even across a small numbering-quality gap, but don't paper over a real renumbering jump (like legacy numbering) by pretending the range is continuous.
Never include an "id" field anywhere — on the character, an era, an entry, or a sub-entry. The app always generates its own ids on import; supplying one does nothing useful and risks a malformed file.
Every entry needs a "note". Bare titles with no description aren't allowed, except standalone NOTE callouts (see below) where the description lives in "note" instead of a separate field.
No ⭐ KEY or star emoji, and no separate "key issue" field. To mark a key issue, end its "note" text with the literal sentence "Key issue in this reading order." — that sentence is what the app looks for to treat it as a key issue.
Standalone tip callouts (not tied to a specific issue) are a normal entry with "isNote": true and the callout text in "note".
Must be valid JSON — double-quoted strings only, no trailing commas, no comments. Deliver it as an actual downloadable .json file, not plain text pasted into the chat — the file gets uploaded directly into the app's "New Case File" screen.
This is the JSON shape the app expects. Output a file matching this structure — an array is also accepted if delivering more than one character at once, e.g. [{ "name": "Wolverine", ... }, { "name": "X-23", ... }].
"name" is required. "sub" and "publisher" are optional on the object but publisher should always be included per the rule above. Each era needs "name", "years", and "entries". A plain entry needs "title" and "note". An EVENT-style entry (a crossover) is a plain entry that also has a "sub" array of { "title", "note"? } objects for its tie-in issues — the app shows the "Event" badge automatically whenever "sub" is present, no separate flag needed.
Re-run the research process above rather than patching only the flagged section, since there may be other issues nearby the person hasn't noticed. Preserve entry titles as closely as possible so read/unread progress (keyed off issue title text) carries over. Don't casually reword titles that don't need it. Add a "publisher" field if the file doesn't already have one. End with the full end-to-end chronological re-verification pass. Deliver the corrected file the same way — a downloadable .json file to re-upload, using "Append to an Existing File" or "Replace with a New File" in the app as appropriate, not plain text.