<?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: Ujjwal Gupta</title>
    <description>The latest articles on DEV Community by Ujjwal Gupta (@ujjwal_gupta_e4460bbf99d9).</description>
    <link>https://dev.to/ujjwal_gupta_e4460bbf99d9</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%2F4162307%2Fb9e03dc3-2943-4755-8f7d-7d7797c89c29.jpg</url>
      <title>DEV Community: Ujjwal Gupta</title>
      <link>https://dev.to/ujjwal_gupta_e4460bbf99d9</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ujjwal_gupta_e4460bbf99d9"/>
    <language>en</language>
    <item>
      <title>12yFix — Find the friction. Fix the experience.</title>
      <dc:creator>Ujjwal Gupta</dc:creator>
      <pubDate>Sat, 24 Oct 2026 20:37:53 +0000</pubDate>
      <link>https://dev.to/ujjwal_gupta_e4460bbf99d9/12yfix-find-the-friction-fix-the-experience-2dc0</link>
      <guid>https://dev.to/ujjwal_gupta_e4460bbf99d9/12yfix-find-the-friction-fix-the-experience-2dc0</guid>
      <description>&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;12yFix&lt;/strong&gt; is an AI-assisted accessibility audit and remediation tool.&lt;/p&gt;

&lt;p&gt;It scans GitHub-hosted web applications using &lt;strong&gt;Playwright + axe-core&lt;/strong&gt;, identifies accessibility issues, and uses AI to generate targeted code fixes.&lt;/p&gt;

&lt;p&gt;Developers can then &lt;strong&gt;review, validate, visually test, and optionally create a GitHub PR&lt;/strong&gt; for the fix.&lt;/p&gt;

&lt;p&gt;The goal is simple: turn accessibility remediation from &lt;em&gt;finding a problem&lt;/em&gt; into &lt;em&gt;finding → fixing → validating → shipping&lt;/em&gt;.&lt;/p&gt;

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

&lt;p&gt;🎥 &lt;a href="https://youtu.be/bpaYJmbPYhI" rel="noopener noreferrer"&gt;https://youtu.be/bpaYJmbPYhI&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;💻 &lt;a href="https://github.com/heyujjwal/A11yFix" rel="noopener noreferrer"&gt;https://github.com/heyujjwal/A11yFix&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Frontend:&lt;/strong&gt; React, TypeScript, Vite, Tailwind CSS&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Backend:&lt;/strong&gt; Node.js, Express&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Accessibility:&lt;/strong&gt; axe-core + Playwright&lt;br&gt;&lt;br&gt;
&lt;strong&gt;GitHub:&lt;/strong&gt; Octokit + simple-git&lt;br&gt;&lt;br&gt;
&lt;strong&gt;AI:&lt;/strong&gt; OpenRouter with &lt;code&gt;inclusionai/ling-3.0-flash&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;AI is used for accessibility fixes and Playwright test generation, while the developer stays in the review loop.&lt;/p&gt;

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

&lt;p&gt;12yFix combines open-source tools like &lt;strong&gt;axe-core, Playwright, React, and GitHub APIs&lt;/strong&gt; with configurable AI models.&lt;/p&gt;

&lt;p&gt;Using open technologies makes the workflow easier to inspect, modify, extend, and experiment with instead of locking it to a single proprietary system.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Lazy Payoff
&lt;/h2&gt;

&lt;p&gt;Instead of manually jumping between accessibility reports, source code, browsers, tests, and GitHub, 12yFix brings the workflow together:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scan → Find → Fix → Validate → Review → PR&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Less repetitive investigation. More time spent actually improving the product.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>RailBreaker: a local, open-source AI planner for breaking a long Indian train journey into confirmed-seat hops</title>
      <dc:creator>Ujjwal Gupta</dc:creator>
      <pubDate>Sun, 18 Oct 2026 17:14:53 +0000</pubDate>
      <link>https://dev.to/ujjwal_gupta_e4460bbf99d9/railbreaker-a-local-open-source-ai-planner-for-breaking-a-long-indian-train-journey-into-314m</link>
      <guid>https://dev.to/ujjwal_gupta_e4460bbf99d9/railbreaker-a-local-open-source-ai-planner-for-breaking-a-long-indian-train-journey-into-314m</guid>
      <description>&lt;h2&gt;
  
  
  What I built
&lt;/h2&gt;

&lt;p&gt;I live in Mumbai. Home is Lucknow, about 24 hours away by train. A flight is out of budget and the direct train is almost always waitlisted. So I end up trying combinations by hand: "Mumbai → Bhopal tonight, then Bhopal → Lucknow tomorrow?" IRCTC only searches direct trains, and nothing lists the break-journey options for you.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;RailBreaker&lt;/strong&gt; lists every schedule-feasible way to make the trip in 1 to 3 separate sittings. It ranks them by extra time over the fastest direct train, estimated fare, class and layover risk. Each plan ends in a copy-paste IRCTC checklist, so I only check seats on a short list instead of guessing.&lt;/p&gt;

&lt;p&gt;It covers combinations I could never enumerate by hand:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;different break stations (Nagpur, Bhopal, Itarsi, Jhansi, Kanpur...)&lt;/li&gt;
&lt;li&gt;the &lt;em&gt;same train booked as two tickets&lt;/em&gt;, which adds zero extra time and often fixes a waitlisted full journey&lt;/li&gt;
&lt;li&gt;switching between stations of one city (Dadar ↔ LTT) and nearby destinations with a road leg&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Demo
&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%2Flsu2wqpsj2dfoys4312n.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%2Flsu2wqpsj2dfoys4312n.png" alt="the Plan tab" width="800" height="426"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Code: &lt;a href="https://github.com/heyujjwal/p5y-pathify" rel="noopener noreferrer"&gt;https://github.com/heyujjwal/p5y-pathify&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The open-source stack
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Piece&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;Gemma 3 via Ollama&lt;/strong&gt; (open weights, runs on my laptop)&lt;/td&gt;
&lt;td&gt;understands trips typed in English, Hindi or Hinglish, turns "via MP, no night layovers, 3AC or better" into filters, explains trade-offs, and reads availability screenshots&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;DataMeet railways dataset&lt;/strong&gt; (open data)&lt;/td&gt;
&lt;td&gt;stations, trains and schedules&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Python + Streamlit&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;the engine and the UI&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The routing is deterministic Python (a pruned search over a timetable graph). The model only handles language and reading. It never does the routing or the arithmetic, so it can't invent a train.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why open innovation mattered here
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Private and offline.&lt;/strong&gt; My trips and my IRCTC screenshots never leave my laptop. Gemma runs locally through Ollama.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Free to run.&lt;/strong&gt; There is no per-query API bill, so the tool can stay free for students and people on a tight budget. A closed API would charge per request, which breaks the business for exactly the people who need this.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Swappable and tunable.&lt;/strong&gt; I can change the model (Gemma, Qwen, Llama) with one environment variable. I can also fine-tune a small model on Hinglish travel phrasing, which a general API handles poorly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No lock-in on data.&lt;/strong&gt; Open timetable data means I can fix a wrong train or add days-of-run myself, instead of waiting for a vendor.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Honest split of work.&lt;/strong&gt; Using a small local model only where language is involved kept it fast on a laptop and kept the numbers trustworthy.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Would anyone pay for this?
&lt;/h2&gt;

&lt;p&gt;Possible ways to charge (these are ideas I haven't tested with customers):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a small yearly pass for students and migrants who travel home during festival season&lt;/li&gt;
&lt;li&gt;a version for relocation companies and PG operators to give newcomers&lt;/li&gt;
&lt;li&gt;a "waitlist predictor" add-on trained on user-reported outcomes&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What it does not do (read this)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;It plans &lt;em&gt;possible&lt;/em&gt; journeys. It does &lt;strong&gt;not&lt;/strong&gt; know live seat availability and never touches IRCTC. You check the listed legs yourself, or paste the screenshot back so the local model marks plans Verified or Blocked.&lt;/li&gt;
&lt;li&gt;The free dataset is an old snapshot (around 2016) with no days-of-run, so trains default to daily. I added a days-file override and a validator that prints direct trains to compare with IRCTC.&lt;/li&gt;
&lt;li&gt;Fares are estimates.&lt;/li&gt;
&lt;li&gt;Separate tickets are not protected if the first train runs late.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/heyujjwal/p5y-pathify.git
&lt;span class="nb"&gt;cd &lt;/span&gt;railbreaker
pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; requirements.txt
ollama pull gemma3:4b
python scripts/build_real_data.py &lt;span class="nt"&gt;--download&lt;/span&gt; &lt;span class="nt"&gt;--from&lt;/span&gt; Mumbai &lt;span class="nt"&gt;--to&lt;/span&gt; Lucknow
streamlit run app.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The README has a step-by-step build guide and a one-page use-case doc.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>python</category>
      <category>opensource</category>
    </item>
    <item>
      <title>[Boost]</title>
      <dc:creator>Ujjwal Gupta</dc:creator>
      <pubDate>Sat, 17 Oct 2026 18:56:51 +0000</pubDate>
      <link>https://dev.to/ujjwal_gupta_e4460bbf99d9/-5cd3</link>
      <guid>https://dev.to/ujjwal_gupta_e4460bbf99d9/-5cd3</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/ujjwal_gupta_e4460bbf99d9/green-stop-a-mumbai-commute-reset-that-runs-on-a-local-open-weight-model-5ceb" class="crayons-story__hidden-navigation-link"&gt;Green Stop: a Mumbai commute reset that runs on a local open-weight model&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/ujjwal_gupta_e4460bbf99d9" class="crayons-avatar  crayons-avatar--l  "&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%2Fuser%2Fprofile_image%2F4162307%2Fb9e03dc3-2943-4755-8f7d-7d7797c89c29.jpg" alt="ujjwal_gupta_e4460bbf99d9 profile" class="crayons-avatar__image" width="96" height="96"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/ujjwal_gupta_e4460bbf99d9" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Ujjwal Gupta
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Ujjwal Gupta
                
                
              
              &lt;div id="story-author-preview-content-4830354" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/ujjwal_gupta_e4460bbf99d9" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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%2Fuser%2Fprofile_image%2F4162307%2Fb9e03dc3-2943-4755-8f7d-7d7797c89c29.jpg" class="crayons-avatar__image" alt="" width="96" height="96"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Ujjwal Gupta&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/ujjwal_gupta_e4460bbf99d9/green-stop-a-mumbai-commute-reset-that-runs-on-a-local-open-weight-model-5ceb" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Oct 10&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/ujjwal_gupta_e4460bbf99d9/green-stop-a-mumbai-commute-reset-that-runs-on-a-local-open-weight-model-5ceb" id="article-link-4830354"&gt;
          Green Stop: a Mumbai commute reset that runs on a local open-weight model
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/devchallenge"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;devchallenge&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/hf26challenge"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;hf26challenge&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ai"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ai&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/opensource"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;opensource&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/ujjwal_gupta_e4460bbf99d9/green-stop-a-mumbai-commute-reset-that-runs-on-a-local-open-weight-model-5ceb" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;1&lt;span class="hidden s:inline"&gt;&amp;nbsp;reaction&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/ujjwal_gupta_e4460bbf99d9/green-stop-a-mumbai-commute-reset-that-runs-on-a-local-open-weight-model-5ceb#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              &lt;span class="hidden s:inline"&gt;Add&amp;nbsp;Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            3 min read
          &lt;/small&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
      <category>ai</category>
      <category>llm</category>
      <category>machinelearning</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Green Stop: a Mumbai commute reset that runs on a local open-weight model</title>
      <dc:creator>Ujjwal Gupta</dc:creator>
      <pubDate>Sat, 10 Oct 2026 21:57:44 +0000</pubDate>
      <link>https://dev.to/ujjwal_gupta_e4460bbf99d9/green-stop-a-mumbai-commute-reset-that-runs-on-a-local-open-weight-model-5ceb</link>
      <guid>https://dev.to/ujjwal_gupta_e4460bbf99d9/green-stop-a-mumbai-commute-reset-that-runs-on-a-local-open-weight-model-5ceb</guid>
      <description>&lt;h2&gt;
  
  
  The problem
&lt;/h2&gt;

&lt;p&gt;Mumbai commuters lose hours to traffic: a 1-hour trip becomes 3. Telling tired people to "go touch grass" after that doesn't work, since nobody wants a detour. So I built something that fits green time into the commute they already have.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Green Stop&lt;/strong&gt; takes where you are and how many minutes you can spare. It finds a green spot you can walk to and back in that time and gives you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the spot's name and full address&lt;/li&gt;
&lt;li&gt;walking time and total time needed&lt;/li&gt;
&lt;li&gt;live temperature and AQI&lt;/li&gt;
&lt;li&gt;a Google Maps walking-directions link&lt;/li&gt;
&lt;li&gt;a short friendly note from a local LLM, in English, Hindi or Marathi&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The screen is used for about 30 seconds. The rest is a walk.&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%2Fb4bcmsfds5jza7s4l1us.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%2Fb4bcmsfds5jza7s4l1us.png" alt="Result description" width="800" height="428"&gt;&lt;/a&gt;&lt;/p&gt;

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


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://github-production-user-asset-6210df.s3.amazonaws.com/107796383/670562951-3c4aff6c-a99f-405e-8e7b-5feb83e2aa84.mp4?X-Amz-Algorithm=AWS4-HMAC-SHA256&amp;amp;X-Amz-Credential=AKIAVCODYLSA53PQK4ZA%2F20261010%2Fus-east-1%2Fs3%2Faws4_request&amp;amp;X-Amz-Date=20261010T215745Z&amp;amp;X-Amz-Expires=300&amp;amp;X-Amz-Signature=e6ad64a25977d36e1b804f2b1ba967b57cd1514a0e20e26a6356bafb3506506b&amp;amp;X-Amz-SignedHeaders=host&amp;amp;response-content-type=video%2Fmp4" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;github-production-user-asset-6210df.s3.amazonaws.com&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Code: &lt;a href="https://github.com/heyujjwal/green-stop" rel="noopener noreferrer"&gt;https://github.com/heyujjwal/green-stop&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How it works
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Place you type
  → OpenStreetMap geocoding
  → my hand-picked CSV spots + OpenStreetMap parks/gardens/beaches
  → distance math (walk there + 5 min + back)
  → Python builds the facts card
  → Gemma 3 4B via Ollama writes a 2-sentence note
  → Gradio UI
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A key design choice: &lt;strong&gt;Python finds the facts and the LLM only adds a human note.&lt;/strong&gt; Small models invent places if asked to recall them. Here the model is never trusted with facts, so every address, distance and time comes from data.&lt;/p&gt;

&lt;p&gt;Stack: Ollama + &lt;code&gt;gemma3:4b&lt;/code&gt; (open weights), OpenStreetMap (Nominatim + Overpass), Open-Meteo, Gradio, Python.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why open mattered
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Privacy:&lt;/strong&gt; your daily commute route is sensitive. The model runs on my laptop and the app has no accounts, no tracking and no cloud LLM. The place cache stays local.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Works with a bad signal:&lt;/strong&gt; the model, matching logic and cached results run without internet. Only first-time lookups and Google Maps navigation need a connection.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Free:&lt;/strong&gt; no API keys and no per-call cost. OpenStreetMap and Open-Meteo are open data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Swappable:&lt;/strong&gt; I changed models by editing one line in &lt;code&gt;config.py&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Local knowledge:&lt;/strong&gt; open map data plus my own CSV means I can add small gardens and shaded lanes that big map apps miss.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Taking it outside
&lt;/h2&gt;

&lt;p&gt;I tested Green Stop on my own commute from [10th Oct]. Here is a real run:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Input:&lt;/strong&gt; Marine Lines Station, Mumbai, [50] minutes, English&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What the app returned:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Spot:&lt;/strong&gt; Marine Drive Promenade (seafront)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Walk:&lt;/strong&gt; about 3 min each way (0.3 km)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Total time needed:&lt;/strong&gt; about 11 min (there, 5 min break, back)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backup options:&lt;/strong&gt; SK Patil Garden (7 min), Navi Wadi Garden (8 min)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Directions:&lt;/strong&gt; a Google Maps walking link opened straight from the result&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Note from the local model:&lt;/strong&gt; a short, friendly line suggesting I sit on the sea wall and breathe&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Day&lt;/th&gt;
&lt;th&gt;Starting point&lt;/th&gt;
&lt;th&gt;Minutes spared&lt;/th&gt;
&lt;th&gt;Spot suggested&lt;/th&gt;
&lt;th&gt;Did I go?&lt;/th&gt;
&lt;th&gt;Mood before → after&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Marine Lines Station&lt;/td&gt;
&lt;td&gt;[11 min]&lt;/td&gt;
&lt;td&gt;Marine Drive Promenade (3 min walk)&lt;/td&gt;
&lt;td&gt;[Yes/No]&lt;/td&gt;
&lt;td&gt;[e.g. tired → calmer]&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;What worked&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The spot was only a 3-minute walk from the station, so it cost almost no extra time. That is the whole idea: green time inside the commute I already had.&lt;/li&gt;
&lt;li&gt;The Google Maps link opened walking directions in one tap.&lt;/li&gt;
&lt;li&gt;The result was specific (spot, distance, total time) rather than vague advice.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;What went wrong&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The address was not precise.&lt;/strong&gt; OpenStreetMap's reverse lookup returned "Mumbai Coastal Road - Phase I, Navjeevan Wadi, Kalbadevi..." instead of "Marine Drive". The pin sits on the promenade edge, so the lookup picked a nearby road. Fix: I can type verified addresses into my CSV, which the app uses first.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Live weather and AQI showed "unknown (offline)"&lt;/strong&gt; &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The model's caution line was generic.&lt;/strong&gt; Because conditions were unknown, it still added "if AQI is above 150 or raining..." That is noise, not information. Fix: only ask for a caution when real data exists.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Honest limitations
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The model runs on my laptop, so the app only works while the laptop is on. A home mini PC or a phone-native build is the next step.&lt;/li&gt;
&lt;li&gt;Park pins point to the middle of the park, not the gate.&lt;/li&gt;
&lt;li&gt;OpenStreetMap data is uneven, so I curate my own spots for places I actually use.&lt;/li&gt;
&lt;li&gt;Walk times are estimates (straight-line distance × 1.3 at 5 km/h), not live routing.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What's next
&lt;/h2&gt;

&lt;p&gt;Phone-native version with an on-device model, automatic gate/entrance detection, shade and crowd info, and more cities.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>ai</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Creator Compass — A Private AI Advisor for a Creator's Real Life</title>
      <dc:creator>Ujjwal Gupta</dc:creator>
      <pubDate>Mon, 05 Oct 2026 04:58:00 +0000</pubDate>
      <link>https://dev.to/ujjwal_gupta_e4460bbf99d9/creator-compass-a-private-ai-advisor-for-a-creators-real-life-2pld</link>
      <guid>https://dev.to/ujjwal_gupta_e4460bbf99d9/creator-compass-a-private-ai-advisor-for-a-creators-real-life-2pld</guid>
      <description>&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;I built &lt;strong&gt;Creator Compass&lt;/strong&gt;, a personal AI advisor for a friend who recently started her Instagram creator journey while pursuing her PhD at IIT.&lt;/p&gt;

&lt;p&gt;She's a talented singer, plays tennis, enjoys spending time with friends, and loves creating reels, carousels, memes, jokes, sarcasm, and self-love content.&lt;/p&gt;

&lt;p&gt;The problem wasn't that she had no content ideas.&lt;/p&gt;

&lt;p&gt;The problem was deciding &lt;strong&gt;when to create, what to create, and when not to create at all.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;She wants to grow as a creator, but she also worries about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Whether a post will actually fit her personality and audience&lt;/li&gt;
&lt;li&gt;Constantly worrying about views and engagement&lt;/li&gt;
&lt;li&gt;Running out of ideas&lt;/li&gt;
&lt;li&gt;Spending too much time creating content&lt;/li&gt;
&lt;li&gt;Whether content creation will interfere with her PhD and research&lt;/li&gt;
&lt;li&gt;Sharing personal thoughts and daily life with an AI service&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So instead of building another "AI that generates Instagram captions", I built something closer to a &lt;strong&gt;personal creator advisor&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;She tells Creator Compass:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How she's feeling&lt;/li&gt;
&lt;li&gt;What happened during her day&lt;/li&gt;
&lt;li&gt;How much time she has&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Creator Compass then recommends whether she should:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🟢 Create today&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;🟡 Keep it low-effort&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;🔴 Don't post today — focus on your actual life&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When it recommends creating, it suggests a content idea, format, hook, reasoning, and estimated effort.&lt;/p&gt;

&lt;p&gt;The goal isn't to promise virality.&lt;/p&gt;

&lt;p&gt;The goal is to help her grow &lt;strong&gt;without letting Instagram take over her life.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&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%2Fjzba8un214up5jk4rxww.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%2Fjzba8un214up5jk4rxww.png" alt=" " width="800" height="428"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;GitHub: &lt;a href="https://github.com/heyujjwal/creator-compass/" rel="noopener noreferrer"&gt;https://github.com/heyujjwal/creator-compass/&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Creator Compass is built around &lt;strong&gt;local open-source AI&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Architecture
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;React
   ↓
Spring Boot REST API
   ↓
Ollama
   ↓
Qwen3
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The frontend collects the creator's current context and sends it to a Spring Boot backend.&lt;/p&gt;

&lt;p&gt;The backend constructs the advisor prompt and sends it to a locally running Qwen3 model through Ollama.&lt;/p&gt;

&lt;p&gt;The model returns the recommendation, which is displayed in the frontend.&lt;/p&gt;

&lt;p&gt;For the MVP, I intentionally kept the architecture simple:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;React for the interface&lt;/li&gt;
&lt;li&gt;Spring Boot for the backend API&lt;/li&gt;
&lt;li&gt;Ollama for local model inference&lt;/li&gt;
&lt;li&gt;Qwen3 as the open-weight AI model&lt;/li&gt;
&lt;li&gt;No database&lt;/li&gt;
&lt;li&gt;No Instagram credentials&lt;/li&gt;
&lt;li&gt;No automatic posting&lt;/li&gt;
&lt;li&gt;No external AI API&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This keeps the project small, understandable, and easy to extend.&lt;/p&gt;

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

&lt;p&gt;This project deals with something that isn't just technical data.&lt;/p&gt;

&lt;p&gt;The friend I'm building it for may share things about her mood, personal life, PhD work, research, relationships, and daily experiences.&lt;/p&gt;

&lt;p&gt;Sending all of that to a third-party AI API wasn't something I wanted to make a requirement.&lt;/p&gt;

&lt;p&gt;Using an open-weight model with local inference changed what I could build.&lt;/p&gt;

&lt;p&gt;With Ollama, the AI can run locally on the user's machine instead of requiring every personal thought to leave the machine and go to a hosted AI service.&lt;/p&gt;

&lt;p&gt;It also means the AI isn't a black box that I have to completely depend on.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Change the model&lt;/li&gt;
&lt;li&gt;Modify the system prompt&lt;/li&gt;
&lt;li&gt;Run the application offline&lt;/li&gt;
&lt;li&gt;Experiment with different open-weight models&lt;/li&gt;
&lt;li&gt;Customize the advisor's personality&lt;/li&gt;
&lt;li&gt;Extend the system without changing the entire architecture&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's what open innovation made possible here:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I could build an AI around a person's actual life without making a closed AI API the center of the product.&lt;/strong&gt;&lt;/p&gt;

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

&lt;p&gt;The biggest thing I learned while building this was that an AI project doesn't need to solve a massive problem.&lt;/p&gt;

&lt;p&gt;It can solve a very specific problem for one person.&lt;/p&gt;

&lt;p&gt;Instead of asking:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"What AI product can I build?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I started with:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"What is something my friend actually struggles with?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That changed the project completely.&lt;/p&gt;

&lt;p&gt;Creator Compass isn't trying to replace her creativity.&lt;/p&gt;

&lt;p&gt;It's trying to give her a second opinion — and sometimes tell her that &lt;strong&gt;she doesn't need to post anything today.&lt;/strong&gt;&lt;/p&gt;

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