Structure Beats Magic ← All writing

For knowledge workers

Bring Your AI Chat History Under Structure (Part 4: The Heap Becomes a Timeline)

You've had thousands of conversations with AI. They're sitting in an export file you'll never open. To close out the skills thread, I take the messiest pile I own — 2,799 ChatGPT conversations and every Claude thread — and route them onto my calendar so they stop being a graveyard and start being a timeline that summarizes itself.

By Jaco van der Laan · 2026-07-04
Bring Your AI Chat History Under Structure (Part 4: The Heap Becomes a Timeline)
Same conversations, different future. On the left, one giant inert conversations.json in Downloads — 2,799 chats you can't search, filter, or build on. On the right, the same conversations routed onto a time-structured spine that rolls up day to year. The heap becomes a compounding asset.

The most valuable data you're throwing away

Somewhere in your account is a record of what you were actually thinking about for the last year or two. Every problem you worked through, every decision you talked yourself into, every thing you learned at 11pm from a patient machine. Thousands of conversations.

And it's inert. It lives inside a chat app's sidebar, searchable only by scrolling, and the moment you export it — which you should — it becomes a single massive JSON file that you will open exactly never. I checked mine: 2,799 conversations in the ChatGPT export alone, plus every Claude thread. A hundred and twenty megabytes of my own thinking, in a format built for machines, filed under Downloads.

That's not an archive. That's a heap. And a heap is what you get when you have data without structure — the exact problem this whole series is about. So let's fix it, for real, with the machinery I've been describing: a skill, a ruleset, and the calendar spine.


The plan: route the pile onto the spine

The core move is simple and it's the same one that organizes my entire vault: everything dated hangs off the calendar. A conversation happened on a day. So it belongs in that day's folder, next to the receipts and notes and captures from the same day. Not in a separate "AI chats" silo — on the timeline, where it becomes context for everything else that happened around it.

So the ruleset writes itself:

Import everything — nothing thrown away — and extract the good bits on top. Complete archive plus curated signal. That's the structure-over-heap trade made concrete.


Show the machinery: the parser

Here's where I have to be honest about the un-glamorous part, because the two exports are shaped very differently and a skill that pretends otherwise would just break.

Claude's export is civilized. A flat array of conversations. Each one has a name, a created_at in plain ISO-8601, and a chat_messages list where each message says who sent it (human or assistant) and what they said. You iterate the array; the messages are already in order. Ten lines of code.

ChatGPT's export is a tree. Each conversation is a mapping of nodes with parent and children links, because the app lets you edit and regenerate messages, which forks the conversation. To reconstruct what you actually saw, you start at the current_node, walk backwards up the parent links to the root, and reverse that path. Along the way you skip the invisible system nodes, the deleted branches (weight: 0.0), and the hidden scaffolding. The message text is buried in content.parts. Its timestamps are Unix epoch floats, and some are null. It is, frankly, a bit of a maze.

I'm showing you this because it's the reality behind "just import your chats." The machinery absorbs that mess once — a script encodes the tree-walk, the filtering, the two timestamp formats, the calendar-spine routing — so that from then on, importing is one command. (In my own vault this grew the honest way: a PowerShell importer I'd already written to file conversations into day-folders, now wrapped by a skill that adds the parsing front-end and the signal-extraction back-end.) That's what this layer is for: you solve the ugly thing a single time and never touch it again. The mess goes in the file; the command stays clean.


The safety gate (because 2,799 files is a lot to get wrong)

One hard rule, and it's the difference between a tool you trust and a tool that wrecks your vault: dry-run first, always.

The first pass writes nothing. It parses the whole export and shows me a plan — this many conversations, landing in these months, this many decision-flags, this many cross-links, and here are the weird ones (undated threads, empty transcripts, a monster 400-message epic). Only when I've looked at that and said yes does it write a single file. When you're about to file thousands of documents into your second brain, "let me see the plan first" isn't caution, it's the whole design.

Everything else follows the same discipline the rest of my system runs on: private by default (these are my conversations), idempotent (re-run after the next export and it skips what's already in), never clobber an existing file, never touch a hand-written section.


The payoff: a heap becomes a Living Timeline

Here's the part that turned this from a tidy-up into something I actually care about — and it's the reason the calendar spine beats a dumb "chat-archive" folder every time.

My calendar doesn't just store dated things. It summarizes itself. Days roll up into weeks, weeks into months, months into quarters, quarters into the year — cascade summaries that already pull together what happened in each period. It's a Living Timeline: not a place where dated things go to rest, but a spine that keeps re-telling the story at every zoom level.

The instant my AI conversations land on that spine, they join that story. Suddenly I can ask questions that were impossible while they sat in a JSON heap:

The conversations stopped being a pile I'll never open and became part of the narrative of my life, at every scale from a single day to the whole year. Same data — 2,799 conversations — but on the spine instead of in a heap, it went from dead weight to living context. That is the entire thesis of this series in one worked example: the value wasn't in the conversations. It was in the structure I gave them.


The recipe, and the kitchen, one last time

That's the series. Four parts, and I've given away the whole recipe: skills are the unit that compounds, here's how to build one, here's how they fit with prompts and plugins and data sources, and here — the messiest real example I have — is one doing genuine work on 2,799 conversations.

All of it, freely. Because the recipe should be free. Knowing that a repeated procedure wants a skill, that dated things want a spine, that structure beats a heap — that's the kind of understanding I want everyone to have.

And the kitchen is still the kitchen. Turning these ideas into a whole system that holds together — the conventions, the data sources, the skills that don't collide, the timeline that actually summarizes itself for your life or your organization — that's not a download. It's an architecture, designed on purpose, tuned to how you really work. The recipe I'll hand you all day long. Building the kitchen with you is the part worth sitting down for.

The magic was never the model, and it was never the chat log. It's the machinery you give it — and a heap you route onto a spine is a machine that finally tells you what you've been thinking about all along.

Structure + Data + AI + Rules + Skills → Systems

← More writing Work with Jaco →