This is a submission for the Hacktoberfest Open-Source AI Challenge Week 3: Slow and Steady
What I Built
My worst planning happens at midnight.
Not because the plans are bad — because there is no plan, just a head full of loose items doing laps. The report for work. A call I owe my mum. Coffee and eggs, because we ran out this morning and I will absolutely forget by tomorrow. Something about motorbike tax. A dentist appointment on Friday that I'd rather not think about, which is of course why I think about it at 1 a.m.
The standard advice is to write it all down before bed. Fine advice. I have never once taken it. Sitting up, opening a notes app, sorting the junk drawer into projects and priorities — that is a whole second job, and midnight me declines it every time.
So I built the version midnight me will actually use.
SlothBrief Offline takes a one-minute voice dump — you, in bed, talking in no order whatsoever — and turns it into a morning brief, entirely on your own laptop:
- It transcribes the dump locally with the open-weight Whisper model, through faster-whisper. Nothing is uploaded. Offline mode is forced in code.
- It files each sentence as it goes: things that sound like tasks, people to contact, errands, anything with a time attached, worries, and ideas that are clearly a someday problem.
- Then it applies the only rule I actually care about: tomorrow gets at most three things. Everything else is parked or deferred in the same file, written down where you can see it's safe — and safely ignore it.
Three is not a summary setting. It's the whole philosophy. This week's theme points at the sloth — International Sloth Day is October 20, apparently, which feels about right — and the sloth's actual trick isn't slowness. It's refusal. A sloth doesn't run a fourteen-item day badly; it simply never agrees to one. SlothBrief is my attempt to give a to-do list that same spine.
Demo
Here's a real, unedited run. This spoken dump went in — about 30 seconds of it:
"Okay, brain dump before bed. I need to finish the report for work and send it to my manager before ten tomorrow morning. I have to call my mum about the weekend visit. Remember to buy coffee and eggs because we ran out this morning. I should renew my motorbike tax sometime this week. Maybe someday I could try selling my old sketches online, that is a next month idea. I keep thinking about the dentist appointment on Friday at nine, I am a bit worried it will hurt. Oh, and I need to text Budi about borrowing his ladder. Also fix the leaking tap in the bathroom when I get a chance."
Whisper transcribed it locally, word for word, and the brief that came out looks like this (unedited):
The two-line version
You dumped 7 thing(s) that sound like tasks and 2 parked idea(s). Tomorrow asks for at most three.
Start with: I need to finish the report for work and send it to my manager before 10 tomorrow morning.
Tomorrow: at most three things
- I need to finish the report for work and send it to my manager before 10 tomorrow morning.
- I have to call my mom about the weekend visit.
- Remember to buy coffee and eggs because we ran out this morning.
Not tomorrow — parked and deferred on purpose
- Maybe someday I could try selling my old sketches online.
- I should renew my motorbike tax sometime this week.
- Oh, and I need to text Booty about borrowing his ladder.
- Also, fix the leaking tap in the bathroom when I get a chance.
- I keep thinking about the dentist appointment on Friday at 9.
Yes. Booty. Whisper heard my friend Budi's name as "Booty", and the brief faithfully filed it, because the tool files what it hears and does not tidy up after itself. I'm keeping that in the demo on purpose — it's the most honest sentence in this post about what a local small model does and doesn't do. Budi has been informed. He is taking it well.
The full output is committed in the project as demo-output.md, next to the sample audio, so anyone can reproduce the run end to end. The sample voice is synthetic, generated with a TTS voice, purely so the demo doesn't depend on my personal recordings — a real phone memo, yours included, goes through the identical pipeline.
Code
The whole thing is one Python file, plus ffmpeg. The demo output above sits in the project as demo-output.md, alongside the sample dump audio, so the run is reproducible end to end. There's also a --text mode that sorts a typed dump through the same logic, which is how I tested the sorter without re-recording myself fifty times.
How I Built It
Three steps, all local, and by now a familiar shape — this is the third week I've built on this pipeline, and boring is starting to feel like a compliment:
- Decode. ffmpeg turns whatever the phone produced into 16 kHz mono WAV, which is what Whisper expects.
-
Transcribe. faster-whisper runs Whisper's open weights on CPU (
int8, CTranslate2) from a local model folder. As in my previous two builds, I feed the model the audio as a NumPy array of samples rather than a file path — real phone files trigger a class of container-decoding errors that this sidesteps completely. The demo dump transcribed in about 17 seconds on an ordinary laptop. - Sort. The transcript is split into sentences, and each one is matched against small, explicit patterns: task phrases ("need to", "remember to", "have to"), contact verbs with a name after them, errand words, time words, parking markers ("maybe", "someday", "next month"), worry phrases. The first three task-like sentences, in the order you said them, become tomorrow's list. Spoken order turns out to be a decent priority signal at midnight — the thing doing the loudest laps is usually the thing you say first.
No LLM at the sorting step, same as my previous two submissions, and for the same reason: a generative model tidying my midnight rambling could invent a task, merge two errands into one that doesn't exist, or quietly drop the dentist because it sounded unpleasant. SlothBrief is not allowed any of that. It files what you said, shows you the full transcript at the bottom of every brief so you can audit it in seconds, and then — this part matters more than it sounds — it refuses to show you the rest as tomorrow's problem.
That refusal is the actual product. Every planner I've tried is generous: unlimited lists, someday folders, priority flags, a whole second junk drawer with better UX. Deferred items in SlothBrief aren't hidden, they're right there in the brief, under a heading that calls them safely ignorable. Seeing "renew the motorbike tax" written down, parked, handled by being written down, is what stops it doing laps. It doesn't need doing tomorrow. It needs to stop pretending it's urgent at 1 a.m.
Why Does Open Innovation Matter?
A brain-dump is the most private text most of us ever produce, and I don't think that's an exaggeration.
In one minute of mine: a work deliverable and my manager, a family visit, a household running out of food, a tax obligation, a health appointment, and a low-grade worry about pain. That is a work file, a family file, a finance file and a medical file, dictated in one breath, by a tired person, in bed. Sending that to a cloud transcription service — however reputable, however encrypted — means the single most unfiltered minute of my day is the one I hand to a server I don't control, under a retention policy I have not read, at the exact moment I'm least equipped to think about it.
With a local open-weight model, that entire category of concern is just... absent. There's no server in the story. Whisper's weights are open (MIT License), they sit in a folder on my laptop, and the tool forces offline mode in code so an accidental network fetch isn't unlikely — it's impossible by construction. My midnight junk drawer stays mine, not because I trust a policy, but because there's nowhere for it to go.
The other open-innovation wins are quieter but real. It works where the laziness happens: in bed, on night buses, in places with the kind of Wi-Fi that makes cloud tools spin. A local model doesn't care. It costs nothing per dump, so dumping nightly for a year is free, which is exactly the frequency at which this habit either becomes a ritual or dies. And the model is swappable — small is today's sweet spot on my CPU, but a better fine-tune for my language drops into the same slot tomorrow without the tool changing at all. A closed API can reprice, deprecate, or read my dentist anxiety. A folder of open weights cannot do any of those things.
The Lazy Payoff
Counted honestly, the payoff here is twofold. The dump itself takes a minute of talking instead of ten minutes of typing-and-sorting I was never going to do — so call it nine minutes saved, though "saved" undersells it, because the alternative wasn't a slower method, it was nothing. The dump simply wouldn't happen.
The second payoff is the morning. I used to start days by re-deriving my priorities from a vague sense of dread. Now the brief is just there: three things, the first one named in the summary line. I don't open an app, I don't triage, I don't negotiate with a list of fourteen. Three things, done calmly, is a finished day. The sloth was right about the maths all along — it just took me building a tool with a hard cap of three to actually believe it.
Honest Limitations
- The sorter is heuristics, not understanding. "Maybe I should call the dentist" gets parked because "maybe" outranks "should" in my rules — a choice I made deliberately, and one that will occasionally park something real. The full transcript sits at the bottom of every brief precisely so the human can overrule the sloth in ten seconds.
- Names are the small model's weakest point, as Budi — sorry, Booty — demonstrates. Anything where a wrong name would actually matter needs your eyes before it leaves the brief.
- The three-item cap is a genuine opinion, and some days genuinely have five non-negotiable things. On those days SlothBrief will still show three and defer two, and you will disagree with it, and it will not mind at all.
What's Next
A one-line morning-after check ("of yesterday's three, which actually got done?"), pattern files per language so the sorter can learn how other people phrase a midnight dump, and an optional read-back of the brief as audio — generated on-device, obviously — for people too committed to the bit to even read three bullet points. The sloth approves. Probably. It's still deciding, slowly.
One minute of talking at night. Three things in the morning. Everything else, parked where it can't keep you awake. Slow and steady isn't the consolation prize for people who can't go fast — some weeks, it's the entire strategy.
Prize Categories
Category: Overall. Built with open-source/open-weight AI: Whisper (MIT) via faster-whisper (MIT), ffmpeg. No partner technology used.
Top comments (0)