Triage
Write one line: what you think is lost. That line is your baseline to check the panic against.
Open the broken chat. Can you still scroll and read it? Yes → extract from it. No → skip to the export.
Harvest
Settings → Privacy → Export data. It runs in the background while you do everything else.
- claude.ai → your initials, bottom-left → Settings
- Privacy → Export data → confirm
- The link arrives by email. It expires in 24 hours — grab it when it lands.
- You get
conversations.json— the full transcript, including artifact source.
Most-likely-to-vanish first. Your notes are already safe — start with what isn't.
Handoff
Start a fresh chat inside it with your persona loaded (Tim mode). If the project doesn't exist yet, make it and paste the block below into its instructions box.
Claude recovery instructions — paste into the project instructions box
Instructions v2 · 2026-07-21RECOVERY MODE — OPERATING INSTRUCTIONS You are Mr. Recovery. A long session was lost. Recover what survives. Never invent what doesn't. RULES — follow in order, every time. 1. NEVER INGEST A PAYLOAD. Do not paste, print, or cat file contents into the chat. Process files with code in the container. Only structure, counts, and metadata enter your context. 2. CHECK THAT UPLOADS LANDED. Before using any uploaded file, confirm it exists on disk with a stat or ls. If it is NOT on disk: STOP. Tell Tim to hard-reload the browser (Cmd+Shift+R) and re-upload. Do not retry, re-split, or theorize first. 3. WRITE AHEAD OF CONTEXT. After each piece of work, write a file to /mnt/user-data/outputs and present it. Do this BEFORE starting the next piece. Disk holds more than memory can lose. 4. VERIFY EVERY FILE YOU WRITE. Re-read it. Confirm it closes on the intended last line and no section is missing. If truncated: re-author it from scratch. Never patch a truncated file. 5. REASSEMBLE SPLIT FILES WITH CODE. cat the parts in filename order into one file. Verify the combined size, then confirm it parses. If parsing fails, a part is missing or corrupt: STOP and say which. 6. SYNTHESIZE, DO NOT SUMMARIZE. Rebuild from the evidence in front of you. Where the evidence is silent, write "GAP:" and describe exactly what is missing. Never fill a gap with a guess. A plausible invention is worse than a named hole. 7. CITE PROVENANCE. When you state something about recovered data, say where it came from (file name, message index, line range) so Tim can check you against the source. 8. STOP AND ASK when any of these happen: - a file is not on disk - a parse or reassembly fails - the work needs more than one output file - you are about to guess 9. STAY IN ROLE. Recover and hand off. Do not start building new systems in this chat. 10. FLATTEN BEFORE YOU DIE. When your context approaches its limit, write a handoff file to disk containing: what was recovered, what is still missing, and what to do next. Present it. Do this before you run out of room, not after. 11. USE HAND-SAVED COPIES AS CALIBRATION, NOT JUST AS BACKUP. Files Tim already saved by hand do two jobs: their names show you where the gaps are, and their contents test whether your method works. Reconstruct the files you ALREADY HAVE alongside the ones that are missing. If your rebuild matches a known-good file, the method is certified — continue. If it does not match, the method is suspect — STOP before rebuilding anything else. 12. RUN THE SNAPSHOT TEST BEFORE CALLING A MISMATCH AN ERROR. When a reconstruction disagrees with a hand-saved copy, do not assume the reconstruction is wrong. Check whether the saved copy matches an EARLIER state of the rebuild. If it matches an intermediate state, the saved copy is a stale mid-session download. That means your reconstruction is the more current file — say so explicitly. Only if the saved copy matches no state at all is the reconstruction broken. 13. SWEEP FOR OUT-OF-BAND WRITES BEFORE BUILDING ANY REPLAY. Before rebuilding a file from its edit history, check whether anything modified that file outside the tracked edit path. An untracked overwrite partway through the history makes every later edit silently fail to apply, producing a well-formed, confident, WRONG result. Do this check BEFORE the rebuild, never after. You cannot recover a layer from a flattened print. FIRST MESSAGE: confirm you have read these rules, then ask Tim what was lost and which files exist.
Ingest
Never paste a large file into chat. Split it, upload through a browser, and probe one part before sending the rest.
split -b 4m conversations.json part_for f in part_*; do mv "$f" "$f.json"; donels -lh part_*.jsonto confirm
Probe prompt — send with ONE part
Probe: I uploaded one part. Check whether it actually reached your container's disk — don't parse it, it's an invalid fragment alone. Confirm it landed and report its size.
Reassemble + scan prompt — send with the rest
All parts uploaded. Reassemble them in order in the container, verify the combined file parses cleanly, then run a structure scan only — no file contents into your context — and present it as an anchor.
One interface through any upload. Hard-reload before an upload that matters. Never swap mid-operation.
Do what it asks, when it asks. Save each file it presents into your recovery folder as you go.
Prompts
Five modular prompts, in the order you'd use them. Each one does a single job. To aim them somewhere new: show Claude the set, say what they accomplish, and ask for a parallel set for the new goal.
Spec first — force a manifest to disk before any building
Before you write anything, author a build manifest to disk as a .txt and present it. The manifest must contain: the purpose; the artifact's structure; the design system it inherits; every content section mapped out; version stamps; what is deferred and why; and the build sequence broken into chunks. Do not begin building until I approve the manifest.
Scan, don't ingest — read big files with code
Scan these files with code, not by reading them into your context. Report only: CSS custom properties, the color palette, structural headings, JavaScript function names, any persistence or export/import plumbing, and interaction patterns (sticky, modal, chip, tab, copy). Do not print file contents. I want the shape, not the substance.
Chunked authoring — never write past a wall
Write this file to disk in semantic chunks. After each chunk: verify it landed, check the seam against the previous chunk, confirm the file closes on the intended last line, and present it before starting the next chunk. Never author the whole thing in one pass. If the output would be too long for one response, say so before you start and propose the chunk breakdown.
Transplant — adopt a proven skeleton instead of inventing one
Adopt the skeleton of the file I've given you — its tokens, structure, and interaction patterns. Do not generate a competing structure and then merge the two; that costs an authoring pass and loses what already works. Transplant my content into that proven shell. Name anything you have to add that the skeleton doesn't already carry, and say why it's needed.
Verify — prove it, don't assert it
Verify the file you just wrote: tag balance, brace balance, that every cross-reference resolves (button targets, section ids, modal ids, chip targets), that no placeholder text remains, and that the file closes cleanly. Report the counts, not the contents. If anything mismatches, fix it and re-verify before telling me it's done.
Design
The reusable kit. Mechanics (how the browser behaves) → look up on MDN. Patterns (named recurring solutions) → look up on The Component Gallery.
1. Two-layer tokens Concept
A raw palette of primitives, mapped onto semantic aliases. Components reference only the semantic layer, so dark mode is one remap instead of a second stylesheet.
2. The local --c pattern
A component styles itself with var(--c); the parent sets
--c per instance. One CSS rule, many colorways, zero duplication.
3. Categorical color as wayfinding
Each section owns a hue, and its nav element inherits it. Color tells you where you are before you read a word. Never decorative.
4. Dual offset sticky nav + chip rail
Tabs pinned at top, category chips pinned directly beneath, offset by exactly the first bar's height. The rail scrolls horizontally with the scrollbar hidden and bleeds to the screen edge.
position:sticky, MDN. Patterns — tabs, chips,
Component Gallery. The offset is the fragile part: store it in one variable
(--tabnav-h) so both tiers can't drift apart.5. Fixed bottom action bar
The primary action lives in the natural thumb arc. Nothing more than one right-thumb tap away. Remember to pad the body so content clears it.
6. Nested modals with back and close
Back pops one layer; close exits the whole stack. That distinction is what makes depth survivable — you never lose your place, so nesting stops being a trap.
7. Two-path design Concept
One artifact serving an expert and a learner at once: collapse and skip for the person who knows, coverage tracking and detail for the person who doesn't, with a guardrail so speed can't produce an invalid state.
8. Real ARIA semantics
role="tablist"/"tab"/"tabpanel", aria-expanded,
aria-controls, hidden for switching. Not divs pretending to be tabs.
prefers-reduced-motion and
prefers-color-scheme. Both are media queries — MDN.9. Toast confirmation on invisible actions
A click that changes nothing visible must still confirm itself. Copy → "Copied." It's small, and it's the difference between responsive and uncertain.
10. The hidden specificity trap Gotcha
The hidden attribute sets display:none from
the browser's default stylesheet, which sits at the bottom of the specificity ladder. Any
class rule that sets display — .catnav{display:flex} — silently overrules it,
and your "hidden" element keeps rendering on top of whatever replaced it.
[hidden]{display:none !important} near the top of your
base styles.
Mechanics — the
hidden global attribute and CSS specificity, MDN.
This one is invisible to a structural check — tags balance, references
resolve, nothing is malformed. Only a real render on a real device catches it. It is the
standing argument for opening the file before you trust it.
Process
The build sequence, in order. Tick as you go — this tab tracks its own progress separately from Crisis.
Send P1. Nothing gets built off an unwritten plan. Approve it before anything else moves.
Send P2 with your existing files attached. You're harvesting tokens, structure, and plumbing — not prose.
Colors, deferred features, scope. Write every answer back into the manifest and bump its version before building.
Send P3 and P4. Build the shell, nav, modal machinery, and token layers with empty panels and marked insertion points.
One chunk each, verified and presented before the next. The urgent path gets built first and loads first.
Send P5. Then open the file in an actual browser on the actual device — a passing structural check is a proxy, not proof.
Recursion
This file is the worked example
The Crisis tab is what the Process section produces. If you want another tool like this one — a different checklist, a different domain — you don't need to remember how it was made. It's on this tab. Start at P1 and follow the process; the artifact holds the context so neither of you has to.
Master kickoff — paste this to start a new build
I'm building a new interactive HTML tool. I'll attach an existing one as the skeleton — adopt its tokens, structure, and interaction patterns rather than inventing your own. Work in this order, and don't skip ahead: 1. Write a build manifest to disk as a .txt and present it. Include purpose, structure, the design system inherited, every content section mapped, version stamps, what's deferred and why, and the build sequence in chunks. Wait for my approval. 2. Scan my attached files with code — report CSS custom properties, structure, JS function names, and any export/import plumbing. Don't print file contents. 3. Surface every decision you need from me before building. Ask in batches of no more than three, with options. 4. Build in verified chunks: skeleton and tokens first with empty panels, then each content section. After each chunk, verify tag and brace balance, check the seam, confirm it closes cleanly, and present it before starting the next. 5. Verify at the end that every cross-reference resolves and no placeholder text remains. Report counts, not contents. Here's what the tool is for:
Deferred, on purpose Not built
JSON export/import — state and version round-tripping — is stubbed, not built. It becomes worth building when either of these is true: you start customizing this file and need updates that preserve your edits, or you distribute it to other people and need versioning. Working plumbing already exists in the pincher checklist to lift when that day comes.