<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Inioluwa Aroyewun</title>
    <description>The latest articles on DEV Community by Inioluwa Aroyewun (@ifrenzy).</description>
    <link>https://dev.to/ifrenzy</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F99mvlsfu5tfj9m7ku25d.png</url>
      <title>DEV Community: Inioluwa Aroyewun</title>
      <link>https://dev.to/ifrenzy</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ifrenzy"/>
    <language>en</language>
    <item>
      <title>Driftnet: one box that catches everything I would otherwise forget</title>
      <dc:creator>Inioluwa Aroyewun</dc:creator>
      <pubDate>Sat, 03 Oct 2026 21:56:08 +0000</pubDate>
      <link>https://dev.to/ifrenzy/driftnet-one-box-that-catches-everything-i-would-otherwise-forget-25f7</link>
      <guid>https://dev.to/ifrenzy/driftnet-one-box-that-catches-everything-i-would-otherwise-forget-25f7</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-weekend-2026-10-01"&gt;Hacktoberfest Weekend Challenge: Build for a Friend&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;I built &lt;strong&gt;Driftnet&lt;/strong&gt; for my friend &lt;strong&gt;Samuel&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;His problem was never a lack of ideas. It was the gap between &lt;em&gt;see, save, forget&lt;/em&gt; and &lt;em&gt;see, capture, structure, continue&lt;/em&gt;. It was close to my own problem too, so I could build this with real certainty about what he needed.&lt;/p&gt;

&lt;p&gt;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:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A hackathon announcement becomes a &lt;strong&gt;workspace&lt;/strong&gt;: name, deadline converted to UTC, the tech mentioned, and a starter task list in the order you would actually do things.&lt;/li&gt;
&lt;li&gt;A related follow-up joins the workspace that already exists instead of creating a duplicate.&lt;/li&gt;
&lt;li&gt;A loose idea, link or reminder lands in the &lt;strong&gt;Inbox&lt;/strong&gt;, typed as an idea, resource or task.&lt;/li&gt;
&lt;li&gt;It is an account, so whatever you capture on your laptop is there when you sign in on your phone.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The idea is &lt;strong&gt;catch, structure, act&lt;/strong&gt;. 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.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Samuel Said
&lt;/h2&gt;

&lt;p&gt;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:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"One thing I can say is that this is crazy. Love it bro, it does just what you said it does."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Then the useful part:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"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."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;He also said:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"I love this honestly and I'll surely use it and share it with the guys too."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;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".&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0iqplgzw4gp3otnmbg77.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0iqplgzw4gp3otnmbg77.jpeg" alt="Samuel feedback" width="514" height="1080"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;Live: &lt;a href="https://driftnet.onrender.com" rel="noopener noreferrer"&gt;https://driftnet.onrender.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkmpkzabm3ks58fo1bd5v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkmpkzabm3ks58fo1bd5v.png" alt="Workspace and Inbox" width="800" height="774"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdu5njbt52z1c2jmeul6k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdu5njbt52z1c2jmeul6k.png" alt="Brief pasted" width="799" height="562"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/Ipramking" rel="noopener noreferrer"&gt;
        Ipramking
      &lt;/a&gt; / &lt;a href="https://github.com/Ipramking/driftnet" rel="noopener noreferrer"&gt;
        driftnet
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Driftnet&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;Built for Hacktoberfest's "Build for a Friend" weekend challenge, around…&lt;/p&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/Ipramking/driftnet" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Agent framework:&lt;/strong&gt; &lt;a href="https://mastra.ai" rel="noopener noreferrer"&gt;Mastra&lt;/a&gt;. 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.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Model:&lt;/strong&gt; Gemma 4 (&lt;code&gt;gemma-4-26b-a4b-it&lt;/code&gt;), an open-weight model. The whole filing decision happens inside it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Voice:&lt;/strong&gt; 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.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Accounts and storage:&lt;/strong&gt; 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.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Frontend:&lt;/strong&gt; Next.js and Tailwind, responsive for phone and laptop.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hosting:&lt;/strong&gt; the agent, the frontend and the database all run on Render.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Templates are plain JSON files in &lt;code&gt;agent/templates/&lt;/code&gt;. A new kind of workspace (a research project, a school assignment) is one file, not a code change.&lt;/p&gt;

&lt;p&gt;Three things I learned the hard way:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Gemma 4 thinks by default.&lt;/strong&gt; 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.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Models wrap JSON in prose and flatten schemas.&lt;/strong&gt; A tolerant parser mattered more than a clever prompt.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A capture must never be lost.&lt;/strong&gt; If the model call fails, the text is still saved as a loose idea.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Why Does Open Innovation Matter?
&lt;/h2&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Privacy.&lt;/strong&gt; 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.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Swappable.&lt;/strong&gt; 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.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cheap.&lt;/strong&gt; 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.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Contributable.&lt;/strong&gt; 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.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prize Categories
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Mastra:&lt;/strong&gt; the agent that classifies, extracts and files every capture.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Gemma:&lt;/strong&gt; Gemma 4 is the only reasoning model in the loop.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of ElevenLabs:&lt;/strong&gt; Scribe powers voice capture.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Render:&lt;/strong&gt; the agent, the frontend and the database all run on Render.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
      <category>hf26challenge</category>
    </item>
  </channel>
</rss>
