<?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: Charan Romi</title>
    <description>The latest articles on DEV Community by Charan Romi (@charan_romi_4645cad7b74f8).</description>
    <link>https://dev.to/charan_romi_4645cad7b74f8</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%2F4156094%2Fe4576044-f417-419b-92d8-59da6a0891cd.jpg</url>
      <title>DEV Community: Charan Romi</title>
      <link>https://dev.to/charan_romi_4645cad7b74f8</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/charan_romi_4645cad7b74f8"/>
    <language>en</language>
    <item>
      <title>SlothPlan AI: Let a Robotic Sloth Untangle Your To-Do List</title>
      <dc:creator>Charan Romi</dc:creator>
      <pubDate>Thu, 22 Oct 2026 08:10:51 +0000</pubDate>
      <link>https://dev.to/charan_romi_4645cad7b74f8/slothplan-ai-let-a-robotic-sloth-untangle-your-to-do-list-9d1</link>
      <guid>https://dev.to/charan_romi_4645cad7b74f8/slothplan-ai-let-a-robotic-sloth-untangle-your-to-do-list-9d1</guid>
      <description>&lt;p&gt;This is a submission for the Hacktoberfest Open-Source AI Challenge Week 3: Slow and Steady.&lt;/p&gt;

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

&lt;p&gt;Sometimes the hardest part of a task list is deciding where to start.&lt;/p&gt;

&lt;p&gt;I built SlothPlan AI, a personal planner that turns a messy brain dump into small, manageable steps—with breaks already included.&lt;/p&gt;

&lt;p&gt;You can type something like:&lt;/p&gt;

&lt;p&gt;Finish the project proposal today, 50 minutes; reply to emails, 15 minutes; book a dentist appointment, 10 minutes.&lt;/p&gt;

&lt;p&gt;With hosted Gemma configured, SlothPlan extracts task names, durations, priorities, effort levels, and deadlines. You review and edit those details before anything is saved.&lt;/p&gt;

&lt;p&gt;The planner then builds a daily schedule around your available hours and work budget.&lt;/p&gt;

&lt;p&gt;Its defining feature is Sloth Mode. Switch it on for:&lt;/p&gt;

&lt;p&gt;A smaller daily work budget.&lt;/p&gt;

&lt;p&gt;Focus sessions capped at 25 minutes.&lt;/p&gt;

&lt;p&gt;Breaks of at least 15 minutes.&lt;/p&gt;

&lt;p&gt;Easier, shorter tasks after urgent deadlines.&lt;/p&gt;

&lt;p&gt;Tasks that cannot fit remain visible. If an urgent task exceeds your capacity, the app explains the problem instead of quietly hiding it.&lt;/p&gt;

&lt;p&gt;It is for anyone who wants to spend less energy organizing their work—especially when their energy is already low.&lt;/p&gt;

&lt;p&gt;And yes, there is a sleepy robotic sloth supervising the dashboard.&lt;/p&gt;

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

&lt;p&gt;Live demo: &lt;a href="https://slothplan-ai.vercel.app/" rel="noopener noreferrer"&gt;https://slothplan-ai.vercel.app/&lt;/a&gt; &lt;/p&gt;

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

&lt;p&gt;GitHub repository: &lt;a href="https://github.com/charan2r/slothplan-ai.git" rel="noopener noreferrer"&gt;https://github.com/charan2r/slothplan-ai.git&lt;/a&gt; &lt;/p&gt;

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

&lt;p&gt;The stack is:&lt;/p&gt;

&lt;p&gt;React + TypeScript + Tailwind CSS for the interface.&lt;/p&gt;

&lt;p&gt;Python + FastAPI for the backend.&lt;/p&gt;

&lt;p&gt;SQLite for saved tasks, preferences, and schedules.&lt;/p&gt;

&lt;p&gt;Hosted Gemma 3 for natural-language task extraction.&lt;/p&gt;

&lt;p&gt;Gemma handles the interpretation: turning informal language into structured task data.&lt;/p&gt;

&lt;p&gt;Python handles the scheduling constraints: deadlines, priorities, available hours, focus blocks, breaks, and daily capacity. Keeping those rules explicit makes the resulting schedule easier to explain and test.&lt;/p&gt;

&lt;p&gt;The provider connection is configurable through environment variables. Credentials stay on the backend.&lt;/p&gt;

&lt;p&gt;Model output passes through server-side validation, and users review the extracted tasks before saving. If credentials are missing or the provider fails, the app can offer an explicitly labeled local-rule fallback. Manual task entry also remains available.&lt;/p&gt;

&lt;p&gt;Verification included 12 backend tests, 9 frontend tests, and 4 browser tests, alongside a production build and automated accessibility checks. Hosted-provider success and failure cases were tested with mocked HTTP responses.&lt;/p&gt;

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

&lt;p&gt;The useful freedom here is control over the model behind the planner.&lt;/p&gt;

&lt;p&gt;Gemma’s open weights make it possible to move from hosted inference to infrastructure I control, experiment with another model, or explore fine-tuning for better task extraction. The application’s UI and scheduling logic can remain the same.&lt;/p&gt;

&lt;p&gt;That flexibility matters because people describe their work differently. A student’s study plan, a freelancer’s client tasks, and someone’s household chores may need different interpretations.&lt;/p&gt;

&lt;p&gt;There is also an important privacy distinction: saved tasks live in SQLite on the backend machine, but hosted extraction sends the brain dump to the configured provider. This version does not claim fully offline AI inference. Open weights provide a path toward self-hosting when that becomes a requirement.&lt;/p&gt;

&lt;p&gt;My favorite part of the project is its small ambition: take the planning overhead off someone’s plate, give them a realistic next step, and leave room for a break.&lt;/p&gt;

&lt;p&gt;Sloth speed feels appropriate.&lt;/p&gt;

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

&lt;p&gt;Best Use of Gemma — Gemma provides the natural-language task extraction at the center of SlothPlan AI.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>ReceiptPilot: Turn a Pocket Full of Receipts into Organized Expenses with Gemma</title>
      <dc:creator>Charan Romi</dc:creator>
      <pubDate>Mon, 19 Oct 2026 05:52:03 +0000</pubDate>
      <link>https://dev.to/charan_romi_4645cad7b74f8/receiptpilot-turn-a-pocket-full-of-receipts-into-organized-expenses-with-gemma-27aa</link>
      <guid>https://dev.to/charan_romi_4645cad7b74f8/receiptpilot-turn-a-pocket-full-of-receipts-into-organized-expenses-with-gemma-27aa</guid>
      <description>&lt;p&gt;This is a submission for the Hacktoberfest Open-Source AI Challenge Week 2: Side Hustle&lt;/p&gt;

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

&lt;p&gt;Small purchases create surprisingly large amounts of paperwork.&lt;/p&gt;

&lt;p&gt;For freelancers and people running a side business, a receipt is easy to collect and easy to forget. Eventually, someone has to type its details into a spreadsheet.&lt;/p&gt;

&lt;p&gt;I built ReceiptPilot, a receipt and expense organizer that uses Gemma to turn receipt images and PDFs into editable expense records.&lt;/p&gt;

&lt;p&gt;The workflow is straightforward: upload, review, verify, export.&lt;/p&gt;

&lt;p&gt;ReceiptPilot can:&lt;/p&gt;

&lt;p&gt;Extract merchant, date, currency, subtotal, tax, total, category, and line items.&lt;/p&gt;

&lt;p&gt;Accept JPEG, PNG, WebP, and PDF files, including scanned PDFs.&lt;/p&gt;

&lt;p&gt;Display the original receipt beside editable fields.&lt;/p&gt;

&lt;p&gt;Flag missing information and inconsistent totals.&lt;/p&gt;

&lt;p&gt;Search and filter expenses by review status, category, and currency.&lt;/p&gt;

&lt;p&gt;Export all saved expenses to CSV.&lt;/p&gt;

&lt;p&gt;Detect uploads of the exact same receipt.&lt;/p&gt;

&lt;p&gt;Every AI extraction starts as a review. The user checks the original, corrects any mistakes, and explicitly verifies the expense.&lt;/p&gt;

&lt;p&gt;My intended customer is a freelancer or solo business owner who wants help organizing expenses without adopting a full accounting platform. The paid opportunity I want to explore is a lightweight tool that reduces repetitive entry and makes handing records to an accountant easier. Willingness to pay still needs validation.&lt;/p&gt;

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

&lt;p&gt;Demo: &lt;a href="https://recipe-pilot-livid.vercel.app/" rel="noopener noreferrer"&gt;https://recipe-pilot-livid.vercel.app/&lt;/a&gt; &lt;/p&gt;

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

&lt;p&gt;The source code and setup instructions are available here:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/charan2r/recipe-pilot.git" rel="noopener noreferrer"&gt;https://github.com/charan2r/recipe-pilot.git&lt;/a&gt; &lt;/p&gt;

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

&lt;p&gt;ReceiptPilot uses React, TypeScript, and Vite for the interface; FastAPI and Pydantic for the backend; and SQLite for persistent storage.&lt;/p&gt;

&lt;p&gt;The AI component is Gemma, an open-weight model accessed through Google’s hosted API. The backend sends receipt page images with instructions to return structured JSON matching the expense schema.&lt;/p&gt;

&lt;p&gt;Before extraction, the app checks file content, prepares images, and renders PDF pages locally. Uploaded images are oriented and resized for the model request.&lt;/p&gt;

&lt;p&gt;The extraction prompt asks Gemma to leave uncertain fields empty instead of inventing values. Server validation then checks the returned structure and flags issues such as missing fields or inconsistent subtotal, tax, and total amounts.&lt;/p&gt;

&lt;p&gt;A few implementation decisions matter to the everyday workflow:&lt;/p&gt;

&lt;p&gt;Human review is required. Successful extraction never automatically verifies an expense.&lt;/p&gt;

&lt;p&gt;Currencies stay separate. The dashboard does not combine different currencies into a misleading total.&lt;/p&gt;

&lt;p&gt;Credentials stay on the backend. The browser does not receive the provider API key.&lt;/p&gt;

&lt;p&gt;Manual entry remains available. Organizing expenses does not depend on model availability.&lt;/p&gt;

&lt;p&gt;The current version is a single-user application designed to run on the user’s computer. Expenses and original receipts are stored on the backend’s disk. AI extraction requires an internet connection and sends receipt images to Google after user consent.&lt;/p&gt;

&lt;p&gt;The repository includes API, provider-contract, and frontend utility tests. Mocked provider responses check integration behavior; they do not establish live extraction accuracy. Measuring accuracy on varied real receipts is an important next step.&lt;/p&gt;

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

&lt;p&gt;Open-weight AI makes it possible to build a focused product around a model while retaining a path to greater control over inference.&lt;/p&gt;

&lt;p&gt;For ReceiptPilot, that matters because receipts vary across merchants, languages, layouts, and currencies. Access to model weights creates possibilities for experimenting with specialized deployment and adaptation as the product develops.&lt;/p&gt;

&lt;p&gt;This version uses hosted Gemma to keep the initial setup manageable. It does not yet implement local inference or fine-tuning. Moving inference to infrastructure I control would require additional engineering, but Gemma’s open weights make that a practical direction to investigate.&lt;/p&gt;

&lt;p&gt;The application’s review and validation logic is also explicit in the code. I can change how uncertain fields are handled, add checks, and improve the workflow as users reveal where it breaks down.&lt;/p&gt;

&lt;p&gt;My goal is a small, useful tool: spend less time copying receipt details, retain the original evidence, and keep the user involved in deciding what is correct.&lt;/p&gt;

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

&lt;p&gt;Best Use of Gemma — Gemma powers the receipt-to-structured-expense extraction at the center of ReceiptPilot.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>Earthly: Less Screen, More Green with Gemma AI 🌿</title>
      <dc:creator>Charan Romi</dc:creator>
      <pubDate>Sun, 11 Oct 2026 13:05:59 +0000</pubDate>
      <link>https://dev.to/charan_romi_4645cad7b74f8/earthly-less-screen-more-green-with-gemma-ai-kek</link>
      <guid>https://dev.to/charan_romi_4645cad7b74f8/earthly-less-screen-more-green-with-gemma-ai-kek</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week1-2026-10-05"&gt;Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;Sometimes the hardest part of going outside is deciding what to do once you get there.&lt;/p&gt;

&lt;p&gt;I built &lt;strong&gt;Earthly&lt;/strong&gt;, an outdoor adventure app that turns a little spare time into a personalized nature quest. It’s for anyone who wants a break from their screen without needing to organize a big trip: developers between tasks, students after studying, or someone looking for a different way to explore their neighborhood.&lt;/p&gt;

&lt;p&gt;Choose your available time, mood, location, company, and mobility preferences. Earthly asks Gemma to create a short plan with activities that fit those choices.&lt;/p&gt;

&lt;p&gt;The experience is designed around getting you moving:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No login required:&lt;/strong&gt; start planning as a guest.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Personalized quests:&lt;/strong&gt; choose a peaceful pause, curious exploration, or an energized walk.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;One instruction at a time:&lt;/strong&gt; field mode keeps the next activity easy to read.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Phone-away reminders:&lt;/strong&gt; prompts encourage you to put the device away between moments.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Nature bingo:&lt;/strong&gt; notice small details such as clouds, leaves, textures, and sounds.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Text and photo observations:&lt;/strong&gt; save something interesting and ask Gemma for cautious context.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Optional voice instructions:&lt;/strong&gt; hear your next step through ElevenLabs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Adventure journal:&lt;/strong&gt; revisit your quests and observations afterward.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The completion recap estimates time spent away from the app by subtracting visible app time from elapsed quest time. It’s an estimate, not GPS verification or a measurement of total device screen time.&lt;/p&gt;

&lt;p&gt;My goal is simple: &lt;strong&gt;make the screen the shortest part of the adventure.&lt;/strong&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Live app:&lt;/strong&gt; &lt;a href="https://earthly-roan.vercel.app" rel="noopener noreferrer"&gt;https://earthly-roan.vercel.app&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;A walkthrough follows this journey:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open Earthly and start without logging in.&lt;/li&gt;
&lt;li&gt;Choose a 30-minute adventure and a mood.&lt;/li&gt;
&lt;li&gt;Enter a familiar public area or discover nearby places.&lt;/li&gt;
&lt;li&gt;Generate a quest and review its steps.&lt;/li&gt;
&lt;li&gt;Enter field mode, follow the activities, and mark nature bingo items.&lt;/li&gt;
&lt;li&gt;Save an observation and finish with a recap.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Previously saved quest instructions remain available offline. Generating new plans and requesting AI analysis require a connection.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;GitHub repository:&lt;/strong&gt; &lt;a href="https://github.com/charan2r/earthly.git" rel="noopener noreferrer"&gt;https://github.com/charan2r/earthly.git&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Earthly has a Next.js frontend and a NestJS backend, with MongoDB Atlas storing device profiles, quests, progress, and observations.&lt;/p&gt;

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

&lt;p&gt;Earthly’s core planner is &lt;strong&gt;&lt;a href="https://ai.google.dev/gemma/docs/core/gemma_on_gemini_api" rel="noopener noreferrer"&gt;Gemma 4&lt;/a&gt;&lt;/strong&gt;, Google’s open-weight model. The current integration uses &lt;code&gt;gemma-4-26b-a4b-it&lt;/code&gt; through the Gemini API.&lt;/p&gt;

&lt;p&gt;Gemma generates structured JSON containing a quest title, description, timed steps, and nine nature bingo items. The backend validates that response with Zod, checks that the step durations match the requested time, and applies a conservative filter for risky activity suggestions. Invalid output receives one validation retry.&lt;/p&gt;

&lt;p&gt;Gemma also powers text and photo observations. Its instructions emphasize uncertainty, observation from a distance, and avoiding claims about edibility or safe handling.&lt;/p&gt;

&lt;p&gt;The supporting stack includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Next.js, React, TypeScript, and Tailwind CSS&lt;/strong&gt; for the interface.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;NestJS&lt;/strong&gt; for request validation, session ownership, and provider integrations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MongoDB Atlas and Mongoose&lt;/strong&gt; for persistence.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SerpApi&lt;/strong&gt; for nearby public-place discovery.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ElevenLabs&lt;/strong&gt; for optional spoken instructions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Browser storage and a service worker&lt;/strong&gt; for saved progress and offline access to the app shell.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Place suggestions are starting points, not verified routes. Users still need to check local access, daylight, weather, and their surroundings.&lt;/p&gt;

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

&lt;p&gt;For Earthly, open innovation means having a path to control how the planner runs and evolves.&lt;/p&gt;

&lt;p&gt;Gemma’s available weights make self-hosting, experimentation, and future fine-tuning possible. I can explore adapting the model to produce shorter instructions, more consistent plans, or experiences suited to particular communities.&lt;/p&gt;

&lt;p&gt;The backend also separates the planning interface from the provider implementation. It supports Google-hosted inference and an OpenAI-compatible endpoint, giving the project room to experiment with other hosting environments.&lt;/p&gt;

&lt;p&gt;A closed API could generate similar plans, but it would not give me access to its underlying model weights for those experiments.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Agent Session
&lt;/h2&gt;

&lt;p&gt;I used Codex as a development partner to examine the codebase, simplify guest access, and update the app’s branding to Earthly.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Gemma:&lt;/strong&gt; personalized quest generation and nature-observation insights.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of MongoDB Atlas:&lt;/strong&gt; persistent storage for quests, progress, device profiles, and observations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of ElevenLabs:&lt;/strong&gt; optional spoken instructions during an adventure.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of SerpApi:&lt;/strong&gt; nearby public-place discovery to help users choose a starting point.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>NutriMate: A Gemma-Powered Meal Planner for My Friend</title>
      <dc:creator>Charan Romi</dc:creator>
      <pubDate>Mon, 05 Oct 2026 05:56:25 +0000</pubDate>
      <link>https://dev.to/charan_romi_4645cad7b74f8/nutrimate-a-gemma-powered-meal-planner-for-my-friend-434o</link>
      <guid>https://dev.to/charan_romi_4645cad7b74f8/nutrimate-a-gemma-powered-meal-planner-for-my-friend-434o</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;NutriMate&lt;/strong&gt; for a friend who wants meals that support their workout routine while keeping food expenses within an affordable budget.&lt;/p&gt;

&lt;p&gt;That gave me a concrete problem to work on: turn a fitness goal and a daily budget into practical meals using familiar Sri Lankan ingredients.&lt;/p&gt;

&lt;p&gt;NutriMate is a meal-planning app powered by &lt;strong&gt;Gemma&lt;/strong&gt;, Google’s open-weight model. It combines profile information, dietary preferences, budget, and previous meal feedback to generate personalized plans.&lt;/p&gt;

&lt;p&gt;The app includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Multi-day meal plans with estimated calories, protein, carbohydrates, fat, and cost.&lt;/li&gt;
&lt;li&gt;Ingredients and preparation instructions for each meal.&lt;/li&gt;
&lt;li&gt;Meal replacements that must fit the rest of the day’s plan.&lt;/li&gt;
&lt;li&gt;A grocery list generated from the planned meals.&lt;/li&gt;
&lt;li&gt;Meal completion tracking and plan history.&lt;/li&gt;
&lt;li&gt;Feedback through ratings, comments, and tags such as “too expensive” or “too spicy.”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Sri Lankan food is central to the experience. The generation prompts emphasize dishes and ingredients such as red rice, dhal, string hoppers, eggs, fish, and local vegetables.&lt;/p&gt;

&lt;p&gt;My friend has no special cooking restrictions, so the focus is affordability and workout-related meal planning. The app also supports dietary exclusions and allergy information for users who need them.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;&lt;a href="https://drive.google.com/drive/folders/1m9L4f9kfHT88joQW3xmM69XyJY434GFV?usp=drive_link" rel="noopener noreferrer"&gt;https://drive.google.com/drive/folders/1m9L4f9kfHT88joQW3xmM69XyJY434GFV?usp=drive_link&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;GitHub repository: &lt;a href="https://github.com/charan2r/nutri-mate.git" rel="noopener noreferrer"&gt;https://github.com/charan2r/nutri-mate.git&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

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

&lt;p&gt;NutriMate is built as a mobile app for easy usage.&lt;/p&gt;

&lt;p&gt;The stack is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;React Native and Expo&lt;/strong&gt; for the mobile interface.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;NestJS and TypeScript&lt;/strong&gt; for the backend.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PostgreSQL and TypeORM&lt;/strong&gt; for profiles, plans, meals, and feedback.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gemma&lt;/strong&gt;, served through Google’s hosted API, for meal plan and replacement generation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The generation flow is:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Profile and preferences → Gemma → structured meal data → validation → saved plan and groceries&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A major part of the work was deciding what should happen when a model returns incomplete or unsuitable information.&lt;/p&gt;

&lt;p&gt;The backend rejects missing meal slots, incomplete nutrition, invalid numbers, unknown catalogue IDs, and missing prices. Each day must meet its calorie target within a 10% tolerance and stay within its budget. Reported calories are also checked against the meal’s macros for plausibility.&lt;/p&gt;

&lt;p&gt;When a model selects a reviewed database meal, the backend uses that record’s actual ingredients and nutrition before validating the plan.&lt;/p&gt;

&lt;p&gt;Replacement generation is also the same. A proposed swap must fit the complete plan, and saving it updates the meal, totals, validation results, and groceries in one database transaction.&lt;/p&gt;

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

&lt;p&gt;For this project, the value of open weights is the ability to choose how the AI runs as the application develops.&lt;/p&gt;

&lt;p&gt;Gemma handles the core generation tasks. Its available weights create a path toward running the model on infrastructure I control and adapting it to a more specific food-planning task. That matters for an application built around personal preferences and regional food knowledge.&lt;/p&gt;

&lt;p&gt;I separated inference behind a provider interface, allowing the hosting implementation to change without rebuilding the mobile experience or validation engine.&lt;/p&gt;

&lt;p&gt;The current version uses &lt;strong&gt;hosted Gemma&lt;/strong&gt;, so the profile context and feedback included in prompts are sent to Google. Self-hosting and fine-tuning are future possibilities, rather than features demonstrated in this version.&lt;/p&gt;

&lt;p&gt;Open innovation also makes the surrounding application easier to inspect and improve. Someone can review the budget rules, contribute better Sri Lankan meal data, improve ingredient matching, or change how feedback influences future plans.&lt;/p&gt;

&lt;p&gt;For my friend’s use case, those improvements matter: better local food knowledge and more realistic prices can make a meal plan more useful in everyday life.&lt;/p&gt;

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

&lt;p&gt;Gemma is the central model for generating meal plans and replacement recipes. The application’s prompts, structured response handling, and validation workflow are built around those tasks.&lt;/p&gt;

&lt;p&gt;Render is used to host the backend of the application. &lt;/p&gt;

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