The Well Wasn’t Dry
How I built blog-mine when daily blogging left my queue empty
I had the queue and the scheduling all set up. Just nothing to put in it.
I’d decided to do one blog post a day and rebuilt the publishing pipeline to match. Got it set up so drafts would queue up and go out one by one on a schedule. Then I shipped everything I had in one burst and the queue was empty. If you want to post daily, you need something to post every day. The moment “what do I write today” kicks in, daily blogging stops being a plan and starts being pressure.
That’s when something felt off. I’d definitely been doing things. Writing code, building skills, running into problems every day. All of that was sitting in my chat history. So why did it feel like I had nothing to write about.
It wasn’t that the ideas were gone
Plenty was there. Stuff I’d been through kept accumulating, but there was no process to go back, pull something out, and notice “wait, this would make a good post.” The chat history was sitting in my second wiki. The wiki had pages I’d cleaned up. I’d left notes mid-task saying “should write about this later.” All there. Just scattered.
So I typed one line.
“Maybe build a skill that digs through recent chat history and pulls out stuff I haven’t blogged yet”
That one line is what blog-mine is. A skill that looks through recent chat history and surfaces what hasn’t become a blog post yet. Said it at 1:17pm, had a working skill by 1:28pm. Eleven-minute session.
It digs through layers, from most-processed to least
The order blog-mine searches in is the whole point. It deliberately starts with “things I’ve already touched.”
First is pinned.md. Notes I dropped mid-task when I thought “this is worth writing about.” Most current interest, so it gets a score bonus. Next are wiki pages with a content_potential tag — things I already cleaned up and flagged as “this could be content.” High reliability, already validated once.
Last is raw chat sessions. Scrolling through hundreds would be slow, so it reads a monthly summary cache called raw-cache first, narrows down to sessions that look like they have blog potential, then reads only those in detail. On top of that, it looks at series slots with gaps to fill and project work logs.
So the order is: things I pinned by hand → things I’ve cleaned up → raw chats. Going down through layers of decreasing processing. Not inventing anything. Pulling from a vein that already exists. Doesn’t feel like squeezing something out of nothing.
Once it has candidates, it classifies them by type (story·lesson·tip·method) and scores them. Story gets +2 for differentiation, a wiki tag already there gets +3, something recent gets +1. Anything scoring 3 or higher doesn’t just show up in a list — a seed file gets created automatically. Ready to hand off to brief whenever I want.
What I changed after running it
I’d set the default scan window to 30 days. Changed it immediately after the first run.
“30 days is too much, default 7 is better”
Scanning 30 days returned too many candidates and picking from them became its own burden. A week feels about right for “what was I doing this week” to surface naturally.
Then after that first run, five candidates in hand, I didn’t want those to evaporate. So I said one more thing.
“Should I add some kind of documentation? So each run keeps adding material… I can review it when I have time and write from there”
That became the backlog structure. Every run adds new material to a backlog file without duplicates. I keep it open in Obsidian and pick from pending items when I have time. Finding material is separated from the act of writing. Mining runs automatically. I just do the reviewing.
The last thing was minor but mattered to me.
“I wish it wouldn’t use the word ‘angle’… there are perfectly normal words like direction, flow, topic… why angle lol”
The skill was using “suggested angle” and it was bothering me. We have perfectly good words and it picks angle. Changed it to “direction” everywhere — both the skill and the backlog.
”What do I write today” is gone
Now when I run blog-mine, candidates pile up in the backlog. Instead of staring at a blank page wondering what to write, I’m choosing from a list that’s already been mined. The question shifts from inventing to selecting.
I don’t run it every day. I run it whenever I think of it, and that’s enough. Ran it today, had an idea come up, fed it as a topic, got a seed file right away, and that seed became the start of this post. The purpose was different but the flow was the same. The point isn’t that you need to run it every day. It’s that you don’t run dry.
Last time I wrote about pulling “what’s next” out of your head with build-plan. Same idea here. The list of topics doesn’t live in working memory anymore. Blog material isn’t something you invent. You mine what you’ve already been through. Have the system for mining and it doesn’t run dry.