Kore
A capture-first second brain — anything you think, saved in under ninety seconds.
Kore turns any fragment — a screenshot, a half-sentence, a paste from Discord — into a discrete, dated thing you can close. It was built under one rule: if capture takes longer than ninety seconds, the tool has failed.
The challenge
Every note tool I tried wanted me to live inside it or invent yet another taxonomy of tags. Across three machines and a phone, none of them met me where the thought actually happened.
The real product question was never “is this good?” — it was “do I open it on a Tuesday morning?” Everything in Kore is bent toward that single moment of friction.
Approach
I deleted a beautiful native-first version after two weeks and rebuilt a worse-looking web version I actually used. That gap — admired vs. used — became the only metric I trusted.
The capture path is a single keyboard-first inbox. Everything else — organisation, search, linking — is deferred until after the thought is safely in.
What I built
Ninety-second capture
Global hotkey → typed or pasted → saved & dated. Zero required fields.
Deferred structure
Tags, links and collections are optional and applied later, never at capture.
Sub-500ms load
The capture screen opens in under half a second on a cheap laptop.
Safe migrations
A 12-line guard refuses any DB migration without a tested rollback.
Under the hood
a slice of the core logic1// capture is the only path that must never fail2export async function capture(input: string, source: Source) {3 const item = {4 body: input.trim(),5 source, // "hotkey" | "paste" | "share"6 createdAt: new Date(), // dated on the way in, always7 status: "open",8 };9 // optimistic: show it instantly, sync in the background10 store.add(item);11 await db.item.create({ data: item });12 return item; // < 90s from thought to saved13}