<?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: Linh Pham</title>
    <description>The latest articles on DEV Community by Linh Pham (@ryuuseiwa).</description>
    <link>https://dev.to/ryuuseiwa</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%2F4155222%2F1496cd5b-2159-4593-aae0-2f72574fd6d9.png</url>
      <title>DEV Community: Linh Pham</title>
      <link>https://dev.to/ryuuseiwa</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ryuuseiwa"/>
    <language>en</language>
    <item>
      <title>Shade Ledger: A Local AI That Sends You Outside to Notice Neighborhood Shade</title>
      <dc:creator>Linh Pham</dc:creator>
      <pubDate>Mon, 12 Oct 2026 05:32:34 +0000</pubDate>
      <link>https://dev.to/ryuuseiwa/shade-ledger-a-local-ai-that-sends-you-outside-to-notice-neighborhood-shade-3758</link>
      <guid>https://dev.to/ryuuseiwa/shade-ledger-a-local-ai-that-sends-you-outside-to-notice-neighborhood-shade-3758</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;&lt;strong&gt;Shade Ledger&lt;/strong&gt; is a small fieldwork companion that tries to get out of your way. Most outdoor apps turn a walk into more screen time: step counts, GPS trails, notifications. Shade Ledger does the opposite. It asks a locally running open-weight model to design a short, personalized outdoor mission, tells you to close your laptop, and then waits for you to come back with a few observations about your neighborhood.&lt;/p&gt;

&lt;p&gt;You pick how long you have (5–30 minutes), where you can go, how you'll explore (walking, a slow stroll, a wheelchair-friendly route, or seated observation), what you want to notice (shade and urban heat, trees and biodiversity, rainwater and drainage, urban nature, or public-space care), your pace, and a rough climate context. The model returns a mission with three steps, three things to notice, and one question to think about later.&lt;/p&gt;

&lt;p&gt;When you get back, you fill in a 60-second &lt;strong&gt;field receipt&lt;/strong&gt;: how many stops you made, how many felt shaded, how many planted or permeable surfaces and drainage features you spotted, and how being outside felt. It's saved to a local ledger so you can compare visits over time.&lt;/p&gt;

&lt;p&gt;It's for anyone who wants a gentle reason to step outside and pay attention, and especially for people curious about how city design shapes everyday comfort. Shade and greenery aren't just nice to look at; they're worth noticing. To be clear about what it isn't: the "shade share" is a simple count of the stops you chose, &lt;strong&gt;not&lt;/strong&gt; a measurement of temperature, canopy cover, or environmental impact.&lt;/p&gt;

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

&lt;p&gt;Shade Ledger is designed for local inference and local storage, so there's no hosted version. These screenshots are from the app running on my machine against the local Qwen2.5 model:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A mission generated locally by Qwen2.5 1.5B via Ollama:&lt;/strong&gt;&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%2Faavanz07g43r45e8xfb3.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%2Faavanz07g43r45e8xfb3.png" alt="Shade Ledger generating an outdoor mission with a local model" width="800" height="938"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The field receipt you fill in when you come back (shown with example values):&lt;/strong&gt;&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%2Fhm5g87x89dlk9a9licq6.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%2Fhm5g87x89dlk9a9licq6.png" alt="Shade Ledger field receipt showing a 50% observed shade share" width="800" height="938"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To run it yourself, setup takes a few minutes and is described in the README.&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/ryuuseiwa" rel="noopener noreferrer"&gt;
        ryuuseiwa
      &lt;/a&gt; / &lt;a href="https://github.com/ryuuseiwa/shade-ledger" rel="noopener noreferrer"&gt;
        shade-ledger
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Local open-weight AI that turns neighborhood walks into environmental fieldwork
    &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;🌿 Shade Ledger — Less scrolling. More noticing.&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;An outdoor-first, privacy-first neighborhood fieldwork app powered by an open-weight model running on your laptop.&lt;/strong&gt; Designed for the Hacktoberfest 2026 Open-Source AI Challenge, Week 1: Touch Grass.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;What makes it different&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Most outdoors apps turn a walk into more screen time, tracking, and GPS. Shade Ledger uses a &lt;strong&gt;local LLM to design a 5–30 minute mini field mission&lt;/strong&gt;, then sends you outside to notice shade, plantings, storm drains, and other neighborhood details. On return, make a 60-second &lt;strong&gt;field receipt&lt;/strong&gt; and learn how to compare your own observations over time. No GPS, login, paid API, location history, server database, or image upload.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A city-planning / environmental-justice-inspired field journal, not a scientific instrument.&lt;/strong&gt; The app does not infer measured temperatures, carbon capture, canopy cover, or safety from observations.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;How open-source AI powers it&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Model:&lt;/strong&gt; &lt;code&gt;qwen2.5:1.5b-instruct&lt;/code&gt; (open-weight, Apache 2.0) running through Ollama.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Inference:&lt;/strong&gt; locally…&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/ryuuseiwa/shade-ledger" 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;ul&gt;
&lt;li&gt;
&lt;strong&gt;Model:&lt;/strong&gt; &lt;a href="https://ollama.com/library/qwen2.5:1.5b-instruct" rel="noopener noreferrer"&gt;Qwen2.5 1.5B Instruct&lt;/a&gt;, an Apache-2.0 open-weight model, running locally through &lt;strong&gt;Ollama&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Inference:&lt;/strong&gt; a plain HTTP call to Ollama's local &lt;code&gt;/api/generate&lt;/code&gt; endpoint at &lt;code&gt;127.0.0.1:11434&lt;/code&gt;, using Ollama's JSON mode for structured output. On my desktop (AMD RX 7900 GRE), a mission comes back in about 3 seconds.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prompting:&lt;/strong&gt; &lt;code&gt;engine.py&lt;/code&gt; builds a safety-constrained, mobility-aware prompt from your choices. It tells the model to keep you in public, accessible areas, never to suggest entering roads, trespassing, touching unknown plants or animals, or going out in unsafe weather, and not to invent routes, species, temperatures, or safety conditions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Validation:&lt;/strong&gt; the response is parsed and checked against a strict schema (a title, a mission, exactly three steps, exactly three things to notice, and a reflection question). Anything malformed is rejected with a clear error.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No fake fallback:&lt;/strong&gt; if the model isn't available, the app says so. There's no hardcoded list of canned missions pretending to be AI.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;UI and storage:&lt;/strong&gt; Streamlit for the interface; field receipts are appended to a local JSONL file that's git-ignored, viewable in the app, and exportable as JSON.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tests:&lt;/strong&gt; unit tests cover the schema validation, the scoring, and the prompt builder.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The whole flow is: &lt;strong&gt;your preferences → prompt → local Qwen model → validated mission → go outside → local field receipt.&lt;/strong&gt; No account, GPS, paid API, or cloud database.&lt;/p&gt;

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

&lt;p&gt;Where you walk and what you notice about your own neighborhood is personal. With an open-weight model running on my own machine, none of that leaves my computer. Once the model is downloaded, mission generation works with Wi-Fi off.&lt;/p&gt;

&lt;p&gt;Open weights also make the project adaptable. Anyone can swap in a different Ollama model from the sidebar, rewrite the prompt, or run it on smaller hardware, without asking a vendor or paying per request. Because the prompt, validation, and scoring are all plain, inspectable Python, the same idea could be reshaped into a campus accessibility walk, a stormwater observation log, or a neighborhood green-space journal.&lt;/p&gt;

&lt;p&gt;A closed API would have meant an account, a key, a per-mission cost, and sending people's reflections about their surroundings to a third party. For an app whose whole point is &lt;em&gt;less&lt;/em&gt; screen and &lt;em&gt;more&lt;/em&gt; attention, keeping the AI small, local, and open felt like the right fit.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>ai</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Barista Buddy: A Little More Confident, One Shift at a Time</title>
      <dc:creator>Linh Pham</dc:creator>
      <pubDate>Mon, 05 Oct 2026 04:08:57 +0000</pubDate>
      <link>https://dev.to/ryuuseiwa/barista-buddy-a-little-more-confident-one-shift-at-a-time-3a16</link>
      <guid>https://dev.to/ryuuseiwa/barista-buddy-a-little-more-confident-one-shift-at-a-time-3a16</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;p&gt;I built Barista Buddy during the challenge window; the project was not developed before the contest period.&lt;/p&gt;

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

&lt;p&gt;My friend recently moved to a new country and is training to become a barista. He’s learning drink recipes, customer phrases, and a new work environment at the same time. I wanted to give him somewhere to put all of that instead of trying to remember everything after a shift.&lt;/p&gt;

&lt;p&gt;So I built &lt;strong&gt;Barista Buddy&lt;/strong&gt;, a personal shift notebook and practice coach.&lt;/p&gt;

&lt;p&gt;He can log what he made, the steps his café taught him, what felt tricky, and advice from his trainer. Those entries become his own drink handbook. Before the next shift, he can review recall cards made from his latest saved notes, revisit workplace phrases, or ask the local AI coach what to focus on.&lt;/p&gt;

&lt;p&gt;The recipes come from what he records. That matters because I wanted him to learn his café’s routine, rather than memorize a random recipe from the internet.&lt;/p&gt;

&lt;p&gt;There’s also a small progress view showing what he has practiced and his own confidence ratings. Sample entries are clearly labeled, and he can remove them when he starts his real notebook.&lt;/p&gt;

&lt;p&gt;I have not handed the app to my friend yet, so this submission does not include user feedback.&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://ryuuseiwa.github.io/barista-buddy/" rel="noopener noreferrer"&gt;Open Barista Buddy&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/ryuuseiwa/barista-buddy" rel="noopener noreferrer"&gt;Browse the source on GitHub&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A quick walkthrough:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open &lt;strong&gt;Today&lt;/strong&gt; and load the sample notebook, or save a drink of your own.&lt;/li&gt;
&lt;li&gt;Open &lt;strong&gt;Drink notebook&lt;/strong&gt; to see the latest recipe notes and earlier shift entries.&lt;/li&gt;
&lt;li&gt;Try &lt;strong&gt;Practice → Drink recall&lt;/strong&gt;, reveal your saved notes, and mark what you want to review.&lt;/li&gt;
&lt;li&gt;Open &lt;strong&gt;Settings &amp;amp; backup → Prepare AI coach&lt;/strong&gt; while online to download the open model. The initial model download is several hundred MB and may be slow or fail on some connections; sample recall practice works without it.&lt;/li&gt;
&lt;li&gt;Try &lt;strong&gt;Practice → AI coach&lt;/strong&gt; with a question such as “What should I focus on before my next shift?”&lt;/li&gt;
&lt;li&gt;In a drink draft, try &lt;strong&gt;Organize my steps with AI&lt;/strong&gt;, then review the suggested steps before applying them.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The source repository includes a local launcher so the app can also be handed over as a laptop app served on localhost.&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://github.com/ryuuseiwa/barista-buddy" rel="noopener noreferrer"&gt;Browse the MIT-licensed source project&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The application code is MIT licensed. The included runtime libraries retain their own licenses, and model weights are downloaded separately.&lt;/p&gt;

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

&lt;p&gt;I built the interface with HTML, CSS, and JavaScript. Drink notes and practice records are stored in &lt;strong&gt;IndexedDB&lt;/strong&gt; on the user’s own browser. JSON export and import make it possible to back up the notebook or move it to another device.&lt;/p&gt;

&lt;p&gt;For the AI, I used &lt;strong&gt;&lt;a href="https://huggingface.co/HuggingFaceTB/SmolLM2-360M-Instruct" rel="noopener noreferrer"&gt;SmolLM2-360M-Instruct&lt;/a&gt;&lt;/strong&gt;, an Apache-2.0 open-weight model, through &lt;strong&gt;&lt;a href="https://huggingface.co/docs/transformers.js/en/index" rel="noopener noreferrer"&gt;Transformers.js&lt;/a&gt;&lt;/strong&gt; and ONNX Runtime Web. The app uses a pinned model revision and quantized q4 weights. Generation runs in a browser worker, using the device’s CPU through WebAssembly.&lt;/p&gt;

&lt;p&gt;The model has two jobs: tidy up steps the user already wrote and respond to questions using recent saved training notes. It is instructed to avoid inventing recipes, quantities, or café rules. Since a small model can still make mistakes, its suggestions are labeled and kept separate from the notebook until the user reviews them.&lt;/p&gt;

&lt;p&gt;Recall practice uses the saved notes directly. It does not treat an AI-generated recipe as the correct answer. Cards marked for review are prioritized, alongside drinks with lower self-rated confidence.&lt;/p&gt;

&lt;p&gt;A service worker caches the app and bundled inference runtime. Transformers.js caches downloaded model files. There is no API key and no remote model endpoint receiving the user’s notes.&lt;/p&gt;

&lt;p&gt;In local browser checks, the interface rendered at desktop (1280x900) and narrow (390x844) sizes without horizontal overflow. A sample recall answer and self-rating updated the progress view, and sample records were removed afterward. The browser worker attempted to download the pinned model twice, but the Hugging Face CDN failed with an HTTP/2 protocol error (around 72% on the first try and 64% on retry). I could not verify a browser-generated AI response or offline AI inference in this test. The model did generate from sample trainer notes using local ONNX inference in Node on the original build machine; that is not a browser inference test. I have not yet tested the app with my friend, so I have no user feedback to report.&lt;/p&gt;

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

&lt;p&gt;My friend should be able to write “I forgot this” or “I’m still struggling with this” without sending that learning history to a remote AI service.&lt;/p&gt;

&lt;p&gt;The design uses an open-weight model to run the coach on his own device. After the initial download, inference does not need a paid model API or upload his notes for processing. The browser is intended to cache the model so local offline use is possible when all required files remain available. It does need internet for the first download, and offline access depends on the browser and its cache.&lt;/p&gt;

&lt;p&gt;I can also inspect and change the prompts, replace the model, or adjust how much of his notebook the coach sees. The project isn’t tied to one hosted model provider.&lt;/p&gt;

&lt;p&gt;For this particular app, that’s the intended benefit of open innovation: he can keep a private learning notebook and, once the model is successfully installed, get personalized help from it without a paid model API or model server. Browser inference and offline use still need to be confirmed on his device.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Best Use of GitHub Copilot:&lt;/strong&gt; The GitHub Actions workflow automates publishing the app to GitHub Pages on every push to &lt;code&gt;main&lt;/code&gt; and supports manual deployment runs.&lt;/p&gt;

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