<?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: Yagnik Satani</title>
    <description>The latest articles on DEV Community by Yagnik Satani (@yagnik_satani_01cca6905ed).</description>
    <link>https://dev.to/yagnik_satani_01cca6905ed</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%2F4171379%2F389dc5ca-2ce0-4c28-967a-cbff0c93def5.png</url>
      <title>DEV Community: Yagnik Satani</title>
      <link>https://dev.to/yagnik_satani_01cca6905ed</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/yagnik_satani_01cca6905ed"/>
    <language>en</language>
    <item>
      <title>EchoLantern: A Private Little Archive for Memories</title>
      <dc:creator>Yagnik Satani</dc:creator>
      <pubDate>Tue, 27 Oct 2026 05:03:06 +0000</pubDate>
      <link>https://dev.to/yagnik_satani_01cca6905ed/echolantern-a-private-little-archive-for-memories-2iag</link>
      <guid>https://dev.to/yagnik_satani_01cca6905ed/echolantern-a-private-little-archive-for-memories-2iag</guid>
      <description>&lt;p&gt;A memory doesn't always arrive as a grand story. Sometimes it's a rattling ceiling fan, a pet waiting at the door, a phrase someone always used, or a small ritual that made an ordinary day feel like home. I built EchoLantern to give those details a place to stay.&lt;/p&gt;

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

&lt;p&gt;EchoLantern is a local-first keepsake maker for everyday memories, people, places, pets, family stories, and meaningful objects or traditions. A user writes a few rough notes, optionally adds one photo, and creates an editable keepsake card, a short reflective paragraph, a card inscription, and a gentle question for another day. Saved keepsakes live in a searchable archive in the current browser and can be exported as Markdown or JSON.&lt;/p&gt;

&lt;p&gt;The app intentionally does not pretend to speak for someone who is gone or contact spirits. It doesn't assume that a person has died. It helps the user shape their own words, and the final copy remains editable. The model is instructed not to invent dates, people, events, favorite things, or exact quotes; generated prose still needs human review.&lt;/p&gt;

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

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

&lt;p&gt;The static deployment shows the interface and browser-based template fallback. It cannot access Ollama running on a user's computer, so it is not a live hosted Gemma demo. The local version runs the Node server alongside Ollama and can generate keepsakes with Gemma 3 1B.&lt;/p&gt;

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

&lt;p&gt;Repository: &lt;a href="https://github.com/yagnik-satani-otelier/echolantern-ai" rel="noopener noreferrer"&gt;https://github.com/yagnik-satani-otelier/echolantern-ai&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;EchoLantern uses Node.js's built-in HTTP server, vanilla JavaScript, CSS, browser localStorage, and the Ollama API. When run locally, the server uses Gemma 3 1B with an explicit JSON schema to return a consistent keepsake structure. When Ollama is missing or the static Vercel route has no local API, the app marks its output as TEMPLATE MODE rather than pretending that it came from the model.&lt;/p&gt;

&lt;p&gt;The app has no user account or hosted AI endpoint. In local mode, the notes go to the Ollama service configured on the user's machine. A browser-side photo step compresses an optional image before it is saved with the entry in local storage. The archive can be exported, but browser storage is not encrypted and needs backups.&lt;/p&gt;

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

&lt;p&gt;Memories can be personal in a way ordinary app data isn't. A local model lets a person try AI-assisted writing without sending their notes to a separate hosted writing API, while the prompts, response handling, and storage logic remain inspectable and modifiable. People can switch models or change the rules rather than having their keepsakes depend on a closed service that might change or disappear.&lt;/p&gt;

&lt;p&gt;The trade-off is that local inference requires installing a model and using your own machine's resources. Smaller models can get details wrong or add unsupported flourishes. EchoLantern keeps the original note visible, labels the output as a draft, and asks the user to check it. Open weights are not automatically the same as OSI-approved open-source software; model terms should be reviewed separately.&lt;/p&gt;

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

&lt;p&gt;The current automated suite has 19 passing Node.js tests covering input validation, prompt boundaries, output parsing, template fallback, mocked Ollama integration, and HTTP error/security cases. These tests use a mocked model endpoint and do not establish real Gemma output quality. I also manually verified the deployed Vercel demo: it creates a keepsake, saves it to the browser-based archive, and the entry remains available after refresh. Export behavior was checked as well. The hosted static demo uses template fallback, not local Gemma inference.&lt;/p&gt;

&lt;p&gt;I also tested the local Gemma 3 1B path, confirmed locally generated entries are labelled LOCAL AI, and checked saving/reopening and export. I have not conducted a user study, so I make no claim about measured time savings or user outcomes.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Spirit of It
&lt;/h2&gt;

&lt;p&gt;EchoLantern's promise is intentionally small: keep the story, leave the shadows to the imagination, and let a person choose what deserves another light.&lt;/p&gt;

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

&lt;p&gt;Best Use of Gemma. The local version runs Gemma 3 1B through Ollama to generate keepsakes from a user's notes. The public Vercel demo is a static fallback demo and does not run Gemma inference.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>ai</category>
      <category>opensource</category>
    </item>
    <item>
      <title>PausePoint: A Local Gemma Resume Capsule for Interrupted Developers</title>
      <dc:creator>Yagnik Satani</dc:creator>
      <pubDate>Tue, 20 Oct 2026 10:32:26 +0000</pubDate>
      <link>https://dev.to/yagnik_satani_01cca6905ed/pausepoint-a-local-gemma-resume-capsule-for-interrupted-developers-637</link>
      <guid>https://dev.to/yagnik_satani_01cca6905ed/pausepoint-a-local-gemma-resume-capsule-for-interrupted-developers-637</guid>
      <description>&lt;p&gt;I lose time twice when I switch tasks: once when I stop, then again when I return and try to remember what I was doing.&lt;/p&gt;

&lt;p&gt;For Week 3's Slow and Steady theme, I built PausePoint, a local-first interruption-recovery assistant for developers. Instead of asking AI to keep working in the background, PausePoint helps me leave a useful breadcrumb trail so I can step away and return without reconstructing the whole session.&lt;/p&gt;

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

&lt;p&gt;PausePoint asks for a few rough notes: the goal, where I stopped, what changed, what's verified, what's still uncertain, and any blocker. It turns those notes into a compact resume capsule containing a short summary, verified facts, unknowns, next steps, and a prompt I can paste into a coding agent when I return.&lt;/p&gt;

&lt;p&gt;It can also attach a local Git snapshot. The user selects a repository folder, and the local server captures the root, current branch, short status, diff summary, and recent commits using fixed read-only Git commands. PausePoint never edits files, commits, pushes, or runs generated commands.&lt;/p&gt;

&lt;p&gt;Saved capsules stay in the current browser's local storage. They can be reopened from history, exported as Markdown, or backed up as JSON. There is no account or hosted AI endpoint in the local setup.&lt;/p&gt;

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

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

&lt;p&gt;The deployed Vercel version demonstrates the interface and its browser-based template fallback. It cannot access Ollama or a local Git repository on my PC, so it is not a live Gemma demo. The local AI path runs when the PausePoint Node server and Ollama are both running on the same machine. I verified local Gemma generation and read-only Git capture on Windows.&lt;/p&gt;

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

&lt;p&gt;Public repository: &lt;a href="https://github.com/yagnik-satani-otelier/pausepoint-ai" rel="noopener noreferrer"&gt;https://github.com/yagnik-satani-otelier/pausepoint-ai&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;PausePoint uses a dependency-free Node.js HTTP server, vanilla JavaScript, CSS, browser local storage, and Gemma 3 1B through Ollama. The local server sends an explicit JSON schema to Ollama to help keep output predictable. Git context comes from fixed read-only commands rather than the model guessing about repository state.&lt;/p&gt;

&lt;p&gt;During my first real Gemma smoke test, the model over-weighted an unrelated filename and commit subjects from the Git snapshot. I added deterministic post-processing so the user's goal and stopping point take priority and generated commands are not presented as if the user supplied them. I successfully generated a capsule marked LOCAL AI before and after making those changes, but I still need to recheck the newest guardrails with the same scenario. The capsule always needs human review.&lt;/p&gt;

&lt;p&gt;If Ollama or the model isn't available, the UI says TEMPLATE MODE; it doesn't pretend fallback content came from AI.&lt;/p&gt;

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

&lt;p&gt;A return-from-interruption tool may contain unfinished work notes, branch names, blockers, and other context I'd rather not send to an unrelated cloud service. With local inference, prompts can stay on the machine running Ollama. The user can inspect the prompts, alter the logic, and choose their local model instead of depending on a hosted API key or per-call bill.&lt;/p&gt;

&lt;p&gt;The trade-off is real: the user must install Ollama and a model, and a small model can misread notes or propose a poor next step. That's why PausePoint separates facts from uncertainty, keeps Git access read-only, and reminds users to verify state before acting. Open weights are not automatically the same as OSI-approved open-source software; review the model's license separately.&lt;/p&gt;

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

&lt;p&gt;I used PausePoint while working on this challenge to capture where I had stopped, what I had verified, and what I still needed to check. Attaching the NailFlow Git snapshot added branch and recent-commit context without making any repository changes. The result gave me a saved place to resume instead of relying on memory or rereading everything from scratch.&lt;/p&gt;

&lt;p&gt;I have not measured exact minutes saved or tested it with other developers, so I won't claim a quantified productivity improvement. The intended payoff is a smaller restart cost: leave a useful note in a short pause, then return to one clear next step.&lt;/p&gt;

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

&lt;p&gt;Best Use of Gemma — PausePoint uses Gemma 3 1B through Ollama as its local resume-capsule generation model.&lt;/p&gt;

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

&lt;p&gt;Automated tests: 17 passing Node.js tests, including input validation, prompt-injection-as-data handling, separation of verified and uncertain facts, bounded JSON parsing, fallback behavior, Git snapshot handling, and HTTP error/security cases.&lt;br&gt;
Local integration: confirmed that Ollama responds, gemma3:1b is installed, PausePoint can capture read-only Git context from my NailFlow repository, and local capsule generation returns the LOCAL AI label.&lt;br&gt;
Limitation: automated HTTP integration tests use a mocked Ollama server. They validate the app's bridge and expected schema but do not establish general model-output quality. The first real-model test exposed drift toward unrelated Git context; deterministic guardrails were added, and the newest guardrails still need a repeat real-model check.&lt;br&gt;
User validation: I have not conducted a user study or customer trial, so I make no claim about measured time savings or willingness to pay.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>ai</category>
      <category>opensource</category>
    </item>
    <item>
      <title>[Boost]</title>
      <dc:creator>Yagnik Satani</dc:creator>
      <pubDate>Tue, 13 Oct 2026 07:19:12 +0000</pubDate>
      <link>https://dev.to/yagnik_satani_01cca6905ed/-3l10</link>
      <guid>https://dev.to/yagnik_satani_01cca6905ed/-3l10</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/yagnik_satani_01cca6905ed/nailflow-ai-a-local-first-studio-assistant-for-nail-artists-l22" class="crayons-story__hidden-navigation-link"&gt;NailFlow AI: A Local-First Studio Assistant for Nail Artists&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
      &lt;a href="https://dev.to/yagnik_satani_01cca6905ed/nailflow-ai-a-local-first-studio-assistant-for-nail-artists-l22" class="crayons-article__context-note crayons-article__context-note__feed"&gt;&lt;p&gt;Hacktoberfest Open-Source AI Challenge Week 2: Side Hustle Submission 💸&lt;/p&gt;

&lt;/a&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="/yagnik_satani_01cca6905ed" 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%2F4171379%2F389dc5ca-2ce0-4c28-967a-cbff0c93def5.png" alt="yagnik_satani_01cca6905ed profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/yagnik_satani_01cca6905ed" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Yagnik Satani
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Yagnik Satani
                
                
              
              &lt;div id="story-author-preview-content-4842497" 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="/yagnik_satani_01cca6905ed" 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%2F4171379%2F389dc5ca-2ce0-4c28-967a-cbff0c93def5.png" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Yagnik Satani&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/yagnik_satani_01cca6905ed/nailflow-ai-a-local-first-studio-assistant-for-nail-artists-l22" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Oct 13&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/yagnik_satani_01cca6905ed/nailflow-ai-a-local-first-studio-assistant-for-nail-artists-l22" id="article-link-4842497"&gt;
          NailFlow AI: A Local-First Studio Assistant for Nail Artists
        &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/yagnik_satani_01cca6905ed/nailflow-ai-a-local-first-studio-assistant-for-nail-artists-l22" 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/exploding-head-daceb38d627e6ae9b730f36a1e390fca556a4289d5a41abb2c35068ad3e2c4b5.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;5&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/yagnik_satani_01cca6905ed/nailflow-ai-a-local-first-studio-assistant-for-nail-artists-l22#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;
            4 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>productivity</category>
      <category>showdev</category>
    </item>
    <item>
      <title>NailFlow AI: A Local-First Studio Assistant for Nail Artists</title>
      <dc:creator>Yagnik Satani</dc:creator>
      <pubDate>Tue, 13 Oct 2026 07:17:03 +0000</pubDate>
      <link>https://dev.to/yagnik_satani_01cca6905ed/nailflow-ai-a-local-first-studio-assistant-for-nail-artists-l22</link>
      <guid>https://dev.to/yagnik_satani_01cca6905ed/nailflow-ai-a-local-first-studio-assistant-for-nail-artists-l22</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week2-2026-10-12"&gt;Hacktoberfest Open-Source AI Challenge Week 2: Side Hustle&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Running a small nail studio means doing two jobs: the creative work clients come for, and the admin that happens between appointments. NailFlow AI is a small assistant I built for independent nail artists and beauty studios to make that second job easier.&lt;/p&gt;

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

&lt;p&gt;NailFlow turns a service inquiry into a transparent price estimate and editable client-ready copy. It can prepare a WhatsApp reply, general aftercare notes, a follow-up message, and social content such as captions, stories, hashtags, and calls to action. A local client pipeline lets the artist save a quote and track it as Draft, Follow-up, or Done. The service menu can be edited to reflect the studio's own prices and session durations.&lt;/p&gt;

&lt;p&gt;The idea is deliberately focused: independent artists shouldn't have to rewrite the same kinds of messages all day or guess at a price on every inquiry. NailFlow gives them a draft they can review and adapt, not an automation that speaks to a client without permission.&lt;/p&gt;

&lt;p&gt;The quote itself is calculated in code from the artist's editable menu, design complexity, and selected add-ons. AI helps with wording; it does not decide the final price. Server-side guardrails normalize detected currency amounts to the computed estimate and neutralize some common false booking-confirmation claims. These safeguards reduce risk but are not perfect, so every message should still be reviewed before sending. NailFlow does not send messages or book appointments automatically.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Live web demo:&lt;/strong&gt; &lt;a href="https://nail-flow-ai-lemon.vercel.app/" rel="noopener noreferrer"&gt;https://nail-flow-ai-lemon.vercel.app/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The deployed Vercel version demonstrates the web interface and its template fallback. It is &lt;strong&gt;not connected to Ollama running on my computer&lt;/strong&gt;, so the hosted demo should not be treated as proof of live Gemma inference.&lt;/p&gt;

&lt;p&gt;I verified the local AI path on Windows with Ollama 0.35.0 and Gemma 3 1B: the model passed a direct prompt test, and NailFlow then generated a client pack marked &lt;strong&gt;LOCAL AI · Generated with local Ollama inference&lt;/strong&gt;. The hosted Vercel demo remains separate and uses its template fallback; it does not connect to the Ollama service on my PC.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Public repository:&lt;/strong&gt; &lt;a href="https://github.com/yagnik-satani-otelier/NailFlow-AI" rel="noopener noreferrer"&gt;https://github.com/yagnik-satani-otelier/NailFlow-AI&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;NailFlow uses a dependency-free Node.js HTTP server, vanilla JavaScript, CSS, and browser localStorage. The local-AI path is designed to use &lt;strong&gt;Gemma 3 1B through Ollama&lt;/strong&gt;. The browser calls the local Node server, which forwards a structured prompt to the Ollama API on the same machine. The model can be changed with the &lt;code&gt;OLLAMA_MODEL&lt;/code&gt; environment variable.&lt;/p&gt;

&lt;p&gt;The prompts, validation, output parsing, deterministic pricing, and post-generation quote guardrails are visible in &lt;code&gt;lib/core.js&lt;/code&gt; and &lt;code&gt;server.js&lt;/code&gt;. The server sends an explicit output schema to Ollama for each generation mode to improve structured responses from a small model. When Ollama or the model is unavailable, the interface clearly labels generated content as template fallback rather than pretending it came from AI.&lt;/p&gt;

&lt;p&gt;To run the local AI path, install &lt;a href="https://ollama.com/download" rel="noopener noreferrer"&gt;Ollama&lt;/a&gt;, then run these commands in the repository folder:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;ollama&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;pull&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;gemma3:1b&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;npm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;run&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;check&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;npm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;test&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;npm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;start&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Open &lt;a href="http://127.0.0.1:4174" rel="noopener noreferrer"&gt;http://127.0.0.1:4174&lt;/a&gt;. Generate a sample client pack and confirm that the result says &lt;strong&gt;LOCAL AI&lt;/strong&gt;. I verified this path locally; if a future run says &lt;strong&gt;TEMPLATE MODE&lt;/strong&gt;, that request did not use Gemma.&lt;/p&gt;

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

&lt;p&gt;For a solo studio, a per-message AI bill or a dependency on a hosted writing API can make a small admin assistant less practical. Local inference can avoid a NailFlow-hosted inference service or API key, while letting the studio control its own service menu, prompts, and model choice. When run with Ollama on the same machine, enquiry text goes to that local Ollama service rather than to a hosted AI provider.&lt;/p&gt;

&lt;p&gt;There is a trade-off: the user must install and run Ollama and download a model, and a small model can produce wording that needs editing. The hosted web demo is useful for seeing the interface, while local setup is necessary to demonstrate the Gemma path. Gemma is an open-weight model; open weights should not automatically be described as OSI-approved open-source software, and model terms should be reviewed separately.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Automated suite:&lt;/strong&gt; 20 passing unit and HTTP integration tests covering input bounds, deterministic pricing, prompt constraints, quote guardrails, parsing, template fallback, a mocked Ollama bridge, and HTTP error/security cases.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Browser smoke test:&lt;/strong&gt; with mocked generation responses, I checked in-place quote and content editing, saving a quote to the client pipeline, service-duration editing, and a 390px mobile layout without horizontal overflow.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real local-AI smoke test:&lt;/strong&gt; ran &lt;code&gt;ollama run gemma3:1b&lt;/code&gt; successfully, then generated a NailFlow client pack locally with the visible &lt;strong&gt;LOCAL AI&lt;/strong&gt; label. This confirms the live inference path works on my machine; a single smoke test does not establish that every output is correct.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Important limitation:&lt;/strong&gt; automated HTTP integration tests use a mock Ollama server, not the actual Gemma weights. They validate the app's bridge and guardrails but do not prove general output quality.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I haven't run a customer trial yet, so I won't claim that a nail artist has paid for or adopted the tool. A useful next validation is to put it in front of one artist, observe a sample inquiry workflow, and use their feedback to improve it.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>ai</category>
      <category>opensource</category>
    </item>
    <item>
      <title>WildMinute: Open-Weight AI That Gets You Off the Screen</title>
      <dc:creator>Yagnik Satani</dc:creator>
      <pubDate>Mon, 12 Oct 2026 08:25:10 +0000</pubDate>
      <link>https://dev.to/yagnik_satani_01cca6905ed/wildminute-open-weight-ai-that-gets-you-off-the-screen-30en</link>
      <guid>https://dev.to/yagnik_satani_01cca6905ed/wildminute-open-weight-ai-that-gets-you-off-the-screen-30en</guid>
      <description>&lt;h1&gt;
  
  
  WildMinute: Open-Weight AI That Gets You Off the Screen 🌿
&lt;/h1&gt;

&lt;p&gt;I built &lt;strong&gt;WildMinute&lt;/strong&gt;, a local-first outdoor adventure planner inspired by a simple idea: technology should sometimes help us plan something meaningful, then get out of the way.&lt;/p&gt;

&lt;p&gt;The app helps turn “I should go outside” into a manageable adventure. Choose the time you have, your mood, activity, setting, and optional area. WildMinute creates a small mission, a flexible route outline, and a list of details to look for outdoors. After the walk, you can record observations, notes, and photos, then turn the experience into an &lt;strong&gt;Adventure Journal&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Demo:&lt;/strong&gt; &lt;a href="https://wild-minute-ai.vercel.app/" rel="noopener noreferrer"&gt;https://wild-minute-ai.vercel.app/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Repository:&lt;/strong&gt; &lt;a href="https://github.com/yagnik-satani-otelier/WildMinuteAI" rel="noopener noreferrer"&gt;https://github.com/yagnik-satani-otelier/WildMinuteAI&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Community feedback shaped the project
&lt;/h2&gt;

&lt;p&gt;The feedback I received suggested taking the experience beyond activity recommendations:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ask users about their location area and preferences.&lt;/li&gt;
&lt;li&gt;Suggest outdoor activities.&lt;/li&gt;
&lt;li&gt;Generate a walking or hiking route outline.&lt;/li&gt;
&lt;li&gt;Suggest things to look for outside.&lt;/li&gt;
&lt;li&gt;Provide an offline adventure checklist.&lt;/li&gt;
&lt;li&gt;Let users record observations, photos, and notes.&lt;/li&gt;
&lt;li&gt;Generate a small journal after the walk.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those suggestions helped define WildMinute's full loop: &lt;strong&gt;plan → explore → record → remember&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why local AI?
&lt;/h2&gt;

&lt;p&gt;WildMinute uses &lt;strong&gt;Gemma 3 1B through Ollama&lt;/strong&gt; for AI-generated missions and journal text. The Node.js server talks to a local Ollama instance; there is no WildMinute-hosted inference endpoint or API key.&lt;/p&gt;

&lt;p&gt;The model prompt and response-parsing logic are part of the repository, so developers can inspect the constraints and adapt them. The app doesn't request GPS permission or require an account. Preferences and fieldbook data are stored in the browser on the current device, and photos are not sent to the model.&lt;/p&gt;

&lt;p&gt;A local model is not the same thing as a blanket claim that every part of the project or its model is OSI-approved open-source software. Check the relevant model and runtime licenses before redistributing weights.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it does
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Personalised micro-adventures:&lt;/strong&gt; choose a short duration, activity, mood, and optional area.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Route outline and spotting ideas:&lt;/strong&gt; get a flexible walk structure and prompts for what to notice.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Offline checklist:&lt;/strong&gt; keep track of what to bring, even without AI inference.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fieldbook:&lt;/strong&gt; save observations, notes, and photos locally.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Adventure Journal:&lt;/strong&gt; turn the saved walk record into a short recap using local AI, or use a clearly labelled on-device template.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Privacy-oriented defaults:&lt;/strong&gt; no account, no GPS permission, no analytics, and no hosted inference service in this project.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Safety and limitations
&lt;/h2&gt;

&lt;p&gt;The route output is a &lt;strong&gt;suggested route shape&lt;/strong&gt;, not turn-by-turn navigation or a verified trail recommendation. WildMinute does not claim to check live maps, weather, trail access, wildlife, or accessibility. An optional external Maps search can help the user find a real route, which should be independently verified before going out.&lt;/p&gt;

&lt;p&gt;AI-generated advice can be wrong. Treat activity suggestions as inspiration, follow local guidance, and prioritise safety and accessibility.&lt;/p&gt;

&lt;h2&gt;
  
  
  Built with
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Node.js built-in HTTP server&lt;/li&gt;
&lt;li&gt;Vanilla JavaScript and CSS&lt;/li&gt;
&lt;li&gt;IndexedDB for locally stored fieldbook content&lt;/li&gt;
&lt;li&gt;Ollama for local inference&lt;/li&gt;
&lt;li&gt;Gemma 3 1B by default&lt;/li&gt;
&lt;li&gt;Native Node.js test runner&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Run it locally
&lt;/h2&gt;

&lt;p&gt;Requirements: Node.js 18.18+ and Ollama for the AI path.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ollama pull gemma3:1b
npm start
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Open &lt;a href="http://127.0.0.1:4173" rel="noopener noreferrer"&gt;http://127.0.0.1:4173&lt;/a&gt;. To run the built-in fallback without Ollama, start the app and explore the interface; the AI-specific path requires Ollama and the model to be available.&lt;/p&gt;

&lt;p&gt;Run the automated tests:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;test&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The current automated suite passes &lt;strong&gt;5 tests&lt;/strong&gt; covering preference validation, prompt safety constraints, route and spotting response parsing, and journal prompt/output parsing. These tests don't replace end-to-end tests of actual model inference, offline behavior, photo persistence, or an outdoor field test.&lt;/p&gt;

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

&lt;p&gt;The project currently runs locally. I have not added a hosted demo URL because the AI path depends on a local Ollama installation. A short screen recording or genuine screenshots of the running app are the most honest demo until a hosted option is deliberately built and verified.&lt;/p&gt;

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

&lt;p&gt;This project reminded me that adding AI isn't only about generating text. The surrounding experience matters just as much: make the offline behavior clear, distinguish suggestions from verified facts, preserve a person's notes locally, and build a reason to put the phone away again.&lt;/p&gt;

&lt;p&gt;WildMinute is an experiment in making AI a quiet planning tool rather than the destination.&lt;/p&gt;




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