<?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: Rudra Mahajan</title>
    <description>The latest articles on DEV Community by Rudra Mahajan (@rudra_mahajan_).</description>
    <link>https://dev.to/rudra_mahajan_</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%2F4156314%2F399644e2-9f8b-4556-b276-4fa7a634e9ab.png</url>
      <title>DEV Community: Rudra Mahajan</title>
      <link>https://dev.to/rudra_mahajan_</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rudra_mahajan_"/>
    <language>en</language>
    <item>
      <title>TouchGrass - Hacktoberfest Challenge Week 1</title>
      <dc:creator>Rudra Mahajan</dc:creator>
      <pubDate>Fri, 09 Oct 2026 16:20:22 +0000</pubDate>
      <link>https://dev.to/rudra_mahajan_/touchgrass-hacktoberfest-challenge-week-1-32j6</link>
      <guid>https://dev.to/rudra_mahajan_/touchgrass-hacktoberfest-challenge-week-1-32j6</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;TouchGrass is a gentle outdoor companion designed to help people get outside without turning that decision into a big, complicated ritual. Instead of asking users to plan a whole outing in advance, the app keeps the setup short and frictionless: choose the kind of place you are heading to, how much time you have, your energy level, your social comfort, and a quest style. The app then generates three optional outdoor quests that help you notice, connect, move, or play.&lt;/p&gt;

&lt;p&gt;The experience is intentionally simple. The goal is not to create another productivity app or a gamified checklist. The goal is to make it easier to step outside, notice the world around you, and enjoy a small, healthy moment of motion and attention.&lt;/p&gt;

&lt;p&gt;TouchGrass is built for everyday life. It is not trying to turn every walk into a challenge. It is trying to make a short walk feel a little more alive, a little more intentional, and a little less like a chore.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why This Exists
&lt;/h2&gt;

&lt;p&gt;A lot of people know they would feel better if they went outside, but they do not always know how to start. Low energy, stress, social discomfort, or limited time can make the idea feel heavy. TouchGrass lowers that barrier.&lt;/p&gt;

&lt;p&gt;The app is built around a few simple principles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Keep the experience light and low-pressure&lt;/li&gt;
&lt;li&gt;Make it easy to start in under a minute&lt;/li&gt;
&lt;li&gt;Respect real-world conditions and real-life energy levels&lt;/li&gt;
&lt;li&gt;Keep everything local and private&lt;/li&gt;
&lt;li&gt;Focus on small wins instead of guilt or performance&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The Experience&lt;/p&gt;

&lt;p&gt;TouchGrass asks a few short questions about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;where the user is going&lt;/li&gt;
&lt;li&gt;how much time they have&lt;/li&gt;
&lt;li&gt;their energy level&lt;/li&gt;
&lt;li&gt;how social they feel&lt;/li&gt;
&lt;li&gt;the kind of mood they want&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Based on these inputs, the app generates three optional outdoor quests. Each quest is short, practical, and designed to fit into a real walk rather than a hypothetical one. It might encourage noticing colors, sounds, or textures, connecting with a local place, moving gently, or adding a playful moment to an ordinary route.&lt;/p&gt;

&lt;p&gt;The app is not meant to judge or push. The quests are optional, easy to skip, and designed to feel supportive rather than demanding.&lt;/p&gt;

&lt;p&gt;Offline and Privacy-First&lt;/p&gt;

&lt;p&gt;TouchGrass is built to work in the real world, where internet access may be limited. It is an installable PWA, so once opened online, the app shell and curated content remain available offline.&lt;/p&gt;

&lt;p&gt;Privacy is also a core part of the experience:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;no accounts&lt;/li&gt;
&lt;li&gt;no cloud profile&lt;/li&gt;
&lt;li&gt;no streaks or leaderboards&lt;/li&gt;
&lt;li&gt;no personal data synced to a server&lt;/li&gt;
&lt;li&gt;no private notes sent anywhere&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;TouchGrass is not a free-form “generate anything” app. Quest generation must avoid risky, stressful, or inappropriate content, including pressure, unsafe behavior, or social situations that feel uncomfortable. The backend enforces these constraints before quests are shown.&lt;/p&gt;

&lt;p&gt;Architecture&lt;/p&gt;

&lt;p&gt;The project is a lightweight full-stack app:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Frontend: React + Vite PWA in apps/web&lt;/li&gt;
&lt;li&gt;API: Express service in apps/api&lt;/li&gt;
&lt;li&gt;Shared config and preference logic: packages/shared&lt;/li&gt;
&lt;li&gt;Local storage: browser storage for progress and notes&lt;/li&gt;
&lt;li&gt;AI: Ollama Cloud via the backend&lt;/li&gt;
&lt;li&gt;Delivery: installable PWA with offline support&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This keeps the app understandable, resilient, and easy to maintain while still allowing AI-powered personalization when available.&lt;/p&gt;

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

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/pI-jQeTTP2E" width="710" height="399"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;This project can be downloaded and ran locally as written in Readme file. Check github for it. &lt;br&gt;
And it will be available to use for everyone soon! &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/Rudraa-27" rel="noopener noreferrer"&gt;
        Rudraa-27
      &lt;/a&gt; / &lt;a href="https://github.com/Rudraa-27/touchgrass" rel="noopener noreferrer"&gt;
        touchgrass
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Second challenge for hacktoberfest. The theme: Touch Grass
    &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;TouchGrass&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;TouchGrass is a gentle companion for getting outside: choose the kind of place
you're heading to, your available time, energy, and social comfort, then get
three optional quests to help notice, connect, move, or play.&lt;/p&gt;
&lt;p&gt;TouchGrass has no accounts, streaks, leaderboards, or cloud sync. Quest
completions, points, skills, badges, saved quests, and private outing notes are
kept in browser storage on the current device. Nothing is submitted to MongoDB.&lt;/p&gt;
&lt;p&gt;The app is an installable PWA. Once it has been opened online, its app shell and
curated quest packs remain available offline. When online, the app tries the
local Ollama model first; if the API or model is unavailable, it uses the
bundled quest pack instead. Offline quest generation uses curated content, not
an on-device language model. The first visit still requires a network
connection to load and cache the app. Use &lt;strong&gt;Install this app&lt;/strong&gt; in the app header
when…&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/Rudraa-27/touchgrass" 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;p&gt;I built TouchGrass as a simple, privacy-first app designed to make it easier for people to step outside without turning it into a complicated ritual. The core idea was to reduce friction and make outdoor time feel light, intentional, and low-pressure.&lt;/p&gt;

&lt;p&gt;The app is split into a small full-stack architecture: a React + Vite frontend with PWA support, an Express API for validation and AI quest generation, and shared preference logic in a separate package. The frontend asks a few short questions about where the user is going, how much time they have, their energy level, social comfort, and desired mood. Based on that, it generates three optional outdoor quests.&lt;/p&gt;

&lt;p&gt;A major focus was offline reliability and privacy. TouchGrass is designed to work even with limited connectivity, and the app can be installed as a PWA with curated content available offline. It also avoids accounts, cloud sync, leaderboards, and remote tracking, keeping personal data in browser storage on the device.&lt;/p&gt;

&lt;p&gt;The AI layer is intentionally constrained. When Ollama is available locally, the backend validates the generated quests for safety, structure, duration, and appropriateness before returning them. If the model is unavailable, the app falls back to a curated local pack, so the experience still works without AI.&lt;/p&gt;

&lt;p&gt;I also designed the product around safety and user comfort. The quests are meant to be gentle, practical, and appropriate for real-world outdoor settings. They avoid pressure, risky behavior, or awkward social situations. The result is a product that supports small, healthy routines without creating stress or guilt.&lt;/p&gt;

&lt;p&gt;Overall, I built TouchGrass to be simple, resilient, and useful in real life. The goal was to help people get outside more easily while keeping the experience respectful, private, and easy to use.&lt;/p&gt;

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

&lt;p&gt;Open innovation matters because better ideas grow when more people contribute to them. TouchGrass is a project designed to make it easier for people to step outside and feel better, but that challenge is too personal and too varied to solve alone. Different people have different routines, energy levels, anxieties, and environments. Open collaboration helps us build something more practical, more inclusive, and more useful for real life.&lt;/p&gt;

&lt;p&gt;When people contribute openly, they can spot blind spots, improve accessibility, and suggest better experiences. That is especially important for a wellbeing-focused project, where small details matter. A concept that feels simple to one person may feel stressful or unhelpful to another. Open innovation helps us refine the product with empathy and real-world feedback.&lt;/p&gt;

&lt;p&gt;For Hacktoberfest, open innovation reminds us that progress is not built in isolation. It happens when we share ideas, build together, and improve things for everyone. TouchGrass is about helping people reconnect with the world around them. That mission is stronger when it is shaped by many voices, not just one.&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://dev.to/challenges/hf26#best-use-of-gemma"&gt;&lt;strong&gt;Best Use of Gemma&lt;/strong&gt;&lt;/a&gt; : Used Gemma to power safer, more personal outdoor quest generation. The model helps turn a few user preferences—like time, energy, mood, and social comfort—into gentle, context-aware suggestions. This lets Gemma add creativity and variety while the app stays safe, practical, and aligned with real-world wellbeing goals.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/challenges/hf26#best-use-of-github-copilot"&gt;&lt;strong&gt;Best Use of Github Copilot&lt;/strong&gt;&lt;/a&gt; : Used GitHub Copilot to speed up development across the full stack—writing boilerplate, generating components, suggesting API logic, and helping us iterate faster on the app structure. It was especially useful for turning product ideas into working code quickly, while keeping the team focused on product decisions, safety constraints, and user experience.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>NutriTracker - Build an app for my gym rat friend to track on his nutritions</title>
      <dc:creator>Rudra Mahajan</dc:creator>
      <pubDate>Mon, 05 Oct 2026 17:39:40 +0000</pubDate>
      <link>https://dev.to/rudra_mahajan_/nutritracker-build-an-app-for-my-gym-rat-friend-to-track-on-his-nutritions-7k</link>
      <guid>https://dev.to/rudra_mahajan_/nutritracker-build-an-app-for-my-gym-rat-friend-to-track-on-his-nutritions-7k</guid>
      <description>&lt;p&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;/p&gt;

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

&lt;p&gt;I  wanted to build a nutrition tracker that didn't make me do the most annoying part of nutrition tracking: manually searching for every food, figuring out the serving size, and entering everything one value at a time.&lt;/p&gt;

&lt;p&gt;So I built NutriTrack.&lt;/p&gt;

&lt;p&gt;The idea is simple: I should be able to type something like:&lt;/p&gt;

&lt;p&gt;"2 boiled eggs, a glass of milk and 250g chicken"&lt;/p&gt;

&lt;p&gt;and have the app turn that into useful nutrition data.&lt;/p&gt;

&lt;p&gt;It started as a small React prototype. Then I kept adding things to it.&lt;/p&gt;

&lt;p&gt;Authentication. Firebase. Firestore. Gemini. Food logs. Goals. Streaks. Date handling.&lt;/p&gt;

&lt;p&gt;Eventually, the frontend was doing way too much. Every new feature seemed to create another problem somewhere else.&lt;/p&gt;

&lt;p&gt;So instead of continuing to patch it, I rebuilt it properly as a full-stack MERN application.&lt;/p&gt;

&lt;p&gt;Now it has:&lt;/p&gt;

&lt;p&gt;Natural-language food logging using AI&lt;/p&gt;

&lt;p&gt;Daily calorie and macro tracking for calories, protein, carbs and fats&lt;/p&gt;

&lt;p&gt;Date-based food history&lt;/p&gt;

&lt;p&gt;Custom nutrition goals&lt;/p&gt;

&lt;p&gt;Daily logging streaks&lt;/p&gt;

&lt;p&gt;JWT authentication and protected routes&lt;/p&gt;

&lt;p&gt;MongoDB persistence for users, food logs and goals&lt;/p&gt;

&lt;p&gt;A separate Express API between the frontend, database and AI layer&lt;/p&gt;

&lt;p&gt;Validation and error handling for things that inevitably go wrong.&lt;/p&gt;

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

&lt;p&gt;NutriTrack: &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%2Fodbld6rerymusfp2eiut.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%2Fodbld6rerymusfp2eiut.png" alt="DashBoard" width="800" height="519"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Register/Login → Dashboard → Describe what you ate → AI analyzes it → Food gets logged → Daily totals update&lt;/p&gt;

&lt;p&gt;You can also change dates, edit nutrition targets, delete food entries, and track your logging streak. &lt;/p&gt;

&lt;h2&gt;
  
  
  Code
&lt;/h2&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%2F7h02gsn5e7lffdxpxyjj.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%2F7h02gsn5e7lffdxpxyjj.png" alt="Github repo" width="800" height="392"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/Rudraa-27/NutriTracker" rel="noopener noreferrer"&gt;Github&lt;/a&gt; &lt;/p&gt;

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

&lt;p&gt;The frontend is built with React, Vite and Tailwind CSS.&lt;/p&gt;

&lt;p&gt;The backend uses Node.js and Express.js to expose REST APIs for authentication, food logs and nutrition goals.&lt;/p&gt;

&lt;p&gt;MongoDB + Mongoose handle persistent data storage, while JWT and bcrypt handle authentication and password security.&lt;/p&gt;

&lt;p&gt;For the AI layer, I used the Gemini API to analyze natural-language food descriptions and return structured nutrition data such as calories, protein, carbohydrates and fats.&lt;/p&gt;

&lt;p&gt;One of the biggest architectural changes was moving the AI call from the frontend to the backend:&lt;/p&gt;

&lt;p&gt;React → Express → Gemini → MongoDB → React&lt;/p&gt;

&lt;p&gt;That keeps the API key away from the client and makes the AI layer something I can improve or replace without rewriting the whole application. &lt;/p&gt;

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

&lt;p&gt;This project probably wouldn't exist in its current form without the huge ecosystem of tools and ideas I could build on.&lt;/p&gt;

&lt;p&gt;React, Vite, Tailwind CSS, Express, MongoDB, Mongoose, JWT libraries and the rest of the JavaScript ecosystem let me focus on building the product instead of reinventing basic infrastructure.&lt;/p&gt;

&lt;p&gt;For the AI part, I used Gemini through its API rather than running an open-weight model locally. That means the AI itself isn't open-source, and I don't want to pretend otherwise.&lt;/p&gt;

&lt;p&gt;What the open ecosystem did give me was the ability to build the application around modular pieces. The AI is just one service in the architecture. I can change the model, change the nutrition-analysis logic, or eventually run a different model locally without rebuilding the entire application.&lt;/p&gt;

&lt;p&gt;For me, that's what open innovation made possible: taking existing tools, combining them in a way that solves a real problem, breaking things when I inevitably got ambitious, and then rebuilding them better. &lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://dev.to/challenges/hf26#best-use-of-mongodb-atlas"&gt;Best use of MongoDB Atlas&lt;/a&gt;&lt;br&gt;
&lt;a href="https://dev.to/challenges/hf26#best-use-of-github-copilot"&gt;Best use of Github Copilot&lt;/a&gt;&lt;/p&gt;

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