This is a submission for the Hacktoberfest Weekend Challenge: Build for a Friend
What I Built
I built Driftnet for my friend Samuel.
Before I wrote any code I asked him one question: what is actually going wrong for you? Samuel is always busy and always building something, and ideas, links and opportunities reach him from everywhere. He did not give me a feature list. He told me a story.
I came across a hackathon on Instagram and copied the link to come back to later. Then I kept scrolling, saw someone else's build, and thought, "What if I build something around this?" I bookmarked that too.
When I finally opened my notes app, I pasted the link and wrote down what I could remember of the idea. But I couldn't remember the idea properly anymore. The link was in my notes and the idea was in my notes, and neither was useful. No context, no plan, no next step. I forgot about it completely.
Saved doesn't mean organised. Organised doesn't mean actionable. I don't need another place to dump things. I need something that takes the messy things I capture and helps me turn them into something I can work with.
His problem was never a lack of ideas. It was the gap between see, save, forget and see, capture, structure, continue. It was close to my own problem too, so I could build this with real certainty about what he needed.
Driftnet is one box. You paste, type or speak anything messy (a hackathon announcement, a link, a half-formed idea, "remind me to reply to Tobi about the pitch deck") and it works out what it is and files it:
- A hackathon announcement becomes a workspace: name, deadline converted to UTC, the tech mentioned, and a starter task list in the order you would actually do things.
- A related follow-up joins the workspace that already exists instead of creating a duplicate.
- A loose idea, link or reminder lands in the Inbox, typed as an idea, resource or task.
- It is an account, so whatever you capture on your laptop is there when you sign in on your phone.
The idea is catch, structure, act. A notes app gives you somewhere to write things down, which is exactly the effort I skip when I am busy. The real gap is the friction between seeing something and having it turned into something I can act on.
What Samuel Said
I sent Samuel the live link on a Saturday evening and asked him to break it. He opened it on his phone, captured a hackathon he was working on ("Bouncy Agent Hackathon"), and a few minutes later sent me this:
"One thing I can say is that this is crazy. Love it bro, it does just what you said it does."
Then the useful part:
"One thing I think you need to tweak is the inbox/task. I noticed that if I click on it, it doesn't prompt up and show more details on it which would be nice so fix that and it's all good to go."
He was right. The Inbox rows looked like they should open, and nothing happened. I fixed it that night: tapping any Inbox row, or a workspace title, now opens a detail view with every field Driftnet pulled out, plus your original capture word for word, so you can always check what it understood against what you actually said.
He also said:
"I love this honestly and I'll surely use it and share it with the guys too."
That last line is the one I care about most, because it is the test I set myself: not "does it work", but "will he keep using it".
Demo
Live: https://driftnet.onrender.com
I fed it the announcement of this very challenge. It came back as a hackathon workspace with the deadline (Oct 5, 06:59 UTC), the prize categories as tags, and a starter task list. A follow-up note about adding voice merged into the same workspace.
Code
Driftnet
Information doesn't disappear because you forgot it β it disappears because filing it away took more effort than it was worth. A link gets bookmarked and never found again. An idea surfaces mid-conversation and is gone by the time you open a notes app. A new project starts from a blank page every time, even though the structure it needs is basically the same as the last five.
Driftnet is a single capture point β type, paste, or speak β that catches whatever you throw at it and figures out what it actually is: a hackathon you just found with a deadline attached, a loose idea for later, a resource worth keeping. It files each one into a structured, ready-to-work-on workspace instead of another flat note, using templates for the kinds of things that come up again and again.
Built for Hacktoberfest's "Build for a Friend" weekend challenge, aroundβ¦
How I Built It
- Agent framework: Mastra. One agent classifies and extracts every capture. It sees the available templates (hackathon, idea, resource, task), the workspaces you already have, and today's date, so "next Friday" becomes a real date and a related capture joins the right workspace.
-
Model: Gemma 4 (
gemma-4-26b-a4b-it), an open-weight model. The whole filing decision happens inside it. - Voice: ElevenLabs Scribe turns a recording into text before it enters the same pipeline as typed input. Without a key, the app falls back to the browser's speech recognition.
- Accounts and storage: email and password sign-in, a signed token, and per-user rows in Postgres, so your data follows you between devices and no account can see another's.
- Frontend: Next.js and Tailwind, responsive for phone and laptop.
- Hosting: the agent, the frontend and the database all run on Render.
Templates are plain JSON files in agent/templates/. A new kind of workspace (a research project, a school assignment) is one file, not a code change.
Three things I learned the hard way:
- Gemma 4 thinks by default. My first capture took 84 seconds. Setting the thinking level to minimal brought it to 2 to 6 seconds with no loss of accuracy on this task. For structured extraction, thinking is wasted time.
- Models wrap JSON in prose and flatten schemas. A tolerant parser mattered more than a clever prompt.
- A capture must never be lost. If the model call fails, the text is still saved as a loose idea.
Why Does Open Innovation Matter?
Driftnet only works if people trust it with the messiest version of their thinking. Open models made four things possible that a closed API would not have.
Privacy. A capture log is the most private kind of data there is: half-formed thoughts, half-baked ideas, links, deadlines, plans, all written before anyone has decided what is worth keeping. Because Gemma is open-weight, that pipeline does not have to live on a closed model's servers. Right now Driftnet calls Gemma through Google's API, but the weights are open, so the same code can be pointed at a model running on a machine I control, and the log never has to leave it. For a tool whose whole job is to hold your unfinished thoughts, that is not a nice-to-have. It is a requirement.
Swappable. The filing logic is one prompt plus a model I can change with two environment variables. Midway through the build, the Gemma version I started with was retired. With a closed API that could have meant rewriting integration code. Here, switching to the next version was a one-line change, and I was back to building within minutes.
Cheap. Filing a capture is a small job: read a messy paragraph, decide what it is, pull out the fields. A small open model is more than enough for that, and so far I have not paid for a single capture. A tool you reach for twenty times a day cannot cost money every time you use it.
Contributable. What Driftnet knows how to file lives in plain JSON templates (hackathon, idea, resource, task). Anyone can read one, edit one or write a new one without touching the agent code, which makes it an easy project for other people to add to.
Prize Categories
- Best Use of Mastra: the agent that classifies, extracts and files every capture.
- Best Use of Gemma: Gemma 4 is the only reasoning model in the loop.
- Best Use of ElevenLabs: Scribe powers voice capture.
- Best Use of Render: the agent, the frontend and the database all run on Render.



Top comments (0)