<?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: imalKesara</title>
    <description>The latest articles on DEV Community by imalKesara (@imalkesara).</description>
    <link>https://dev.to/imalkesara</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1155803%2Ff73b0793-39f4-4c0a-aab8-59308f2113d1.jpeg</url>
      <title>DEV Community: imalKesara</title>
      <link>https://dev.to/imalkesara</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/imalkesara"/>
    <language>en</language>
    <item>
      <title>BottleBuddy</title>
      <dc:creator>imalKesara</dc:creator>
      <pubDate>Sun, 04 Oct 2026 10:22:49 +0000</pubDate>
      <link>https://dev.to/imalkesara/bottlebuddy-23pb</link>
      <guid>https://dev.to/imalkesara/bottlebuddy-23pb</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;BottleBuddy&lt;/strong&gt;, a small AI-powered product discovery app for a friend.&lt;/p&gt;

&lt;p&gt;The idea came from a simple problem: browsing a large list of products and manually applying filters can be annoying when you already know roughly what you want.&lt;/p&gt;

&lt;p&gt;Instead, BottleBuddy lets my friend describe what they're looking for in natural language.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"I'm looking for beer under Rs. 5,000 (LKR) with a lower ABV."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;BottleBuddy interprets that request and converts it into structured filters such as budget, category, brand, and ABV range. It then searches the product data stored in MongoDB and displays matching products.&lt;/p&gt;

&lt;p&gt;I also included regular filters so the application isn't dependent entirely on AI.&lt;/p&gt;

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

&lt;p&gt;BottleBuddy currently runs locally because the AI model is running directly on my machine through Ollama.&lt;/p&gt;

&lt;p&gt;Here's a video showing the complete flow:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://youtube.com/shorts/uuS9bb2CIQA?feature=share" rel="noopener noreferrer"&gt;https://youtube.com/shorts/uuS9bb2CIQA?feature=share&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the demo, I show:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;entering a natural-language request&lt;/li&gt;
&lt;li&gt;Gemma interpreting the request&lt;/li&gt;
&lt;li&gt;BottleBuddy finding matching products&lt;/li&gt;
&lt;li&gt;product information coming from MongoDB&lt;/li&gt;
&lt;li&gt;manual filtering/search functionality&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;GitHub repository : &lt;a href="https://github.com/ImalKesara/BottleBuddy" rel="noopener noreferrer"&gt;https://github.com/ImalKesara/BottleBuddy&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;I built BottleBuddy using &lt;strong&gt;SvelteKit and TypeScript&lt;/strong&gt; for the application.&lt;/p&gt;

&lt;p&gt;The AI part uses &lt;strong&gt;Gemma 3&lt;/strong&gt;, Google's open-weight model, running locally through &lt;strong&gt;Ollama&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;When someone enters a request such as:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Beer under Rs. 5,000 lkr, preferably lower strength"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;BottleBuddy sends the text from the SvelteKit server to the locally running Gemma model.&lt;/p&gt;

&lt;p&gt;Gemma's responsibility is not to invent or recommend products. Instead, it interprets the natural-language request and converts it into structured search filters.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;{&lt;br&gt;
  "maxBudget": 5000,&lt;br&gt;
  "category": "beer",&lt;br&gt;
  "brand": null,&lt;br&gt;
  "minAbv": null,&lt;br&gt;
  "maxAbv": 5&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;BottleBuddy then uses those filters to search the actual product data stored in &lt;strong&gt;MongoDB Atlas&lt;/strong&gt;.&lt;/p&gt;

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

&lt;p&gt;Open innovation made the core idea behind BottleBuddy possible.&lt;/p&gt;

&lt;p&gt;Because Gemma is an open-weight model, I was able to run the model locally on my own machine using Ollama and integrate it directly into my application.&lt;/p&gt;

&lt;p&gt;That gave me much more control over how the AI part of the application works. The application is not tied to a closed AI API for its core natural-language search feature, and the model can be run on infrastructure I control.&lt;/p&gt;

&lt;p&gt;It also made experimenting much easier. I could test prompts, structured outputs, and different ways of extracting search filters while keeping inference local.&lt;/p&gt;

&lt;p&gt;For BottleBuddy specifically, this showed me that useful AI features don't always require sending requests to a large proprietary hosted service. An open-weight model running locally can be enough to build the core experience.&lt;/p&gt;

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