<?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: Chestly Ace</title>
    <description>The latest articles on DEV Community by Chestly Ace (@chestly_ace).</description>
    <link>https://dev.to/chestly_ace</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%2F3945375%2F3c91eeeb-a9ed-410e-a60d-456ab771b786.jpg</url>
      <title>DEV Community: Chestly Ace</title>
      <link>https://dev.to/chestly_ace</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/chestly_ace"/>
    <language>en</language>
    <item>
      <title>DuckWalk: a rubber duck that won't talk to you until you go outside</title>
      <dc:creator>Chestly Ace</dc:creator>
      <pubDate>Mon, 12 Oct 2026 02:39:08 +0000</pubDate>
      <link>https://dev.to/chestly_ace/duckwalk-a-rubber-duck-that-wont-talk-to-you-until-you-go-outside-222j</link>
      <guid>https://dev.to/chestly_ace/duckwalk-a-rubber-duck-that-wont-talk-to-you-until-you-go-outside-222j</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;I kept skipping breaks while coding, not out of willpower but because leaving the desk felt like it would cost me my mental context. So I built something that removes that cost on purpose.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;DuckWalk&lt;/strong&gt; watches for when you're stuck, writes down exactly where you are so there's nothing to lose by leaving, and pings your phone with one line. Then it makes you actually go outside before it'll say another word. Once you're walking, a Socratic duck talks you through the problem by voice, your screen off the whole time, asking questions and never handing you the fix.&lt;/p&gt;

&lt;p&gt;A laptop daemon watches signals like time since your last break, failed test runs, how many times you've touched the same file, and undo ratio, and scores each 5-minute window with TabPFN. Cross a threshold, and it grabs a breadcrumb (your branch, diff, last terminal error) and compresses it into a 60-word note with Gemma. Your phone buzzes with that note, self-hosted so it never touches a third party's server. You tap "Walk," the screen goes black except for a stop button, and outside you talk it through while the duck asks questions back. When you're done, one screen tells you what you worked out and what to try next, readable in about ten seconds.&lt;/p&gt;

&lt;p&gt;The rule I held myself to the whole build: minimize time looking at a screen. If a feature didn't push work onto the AI, it got cut.&lt;/p&gt;

&lt;p&gt;Underneath, it's a durable Temporal workflow, every stage traced in Sentry, and the duck's voice is a 4B model I fine-tuned on Tinker until it matched a much larger cloud model on this specific job.&lt;/p&gt;

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

&lt;p&gt;I'm writing this at 2am, and the whole point of the project is a real walk outside, so I wasn't going to fake that with a clip filmed at my desk. What I can show instead is something that doesn't need daylight: a real crash mid-conversation, and Temporal picking it back up without losing a word.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Duck: It's intermittent. What distinguishes the times it passes from the times it doesn't?
You: I've got an integration test and go that times out sometimes...
--- worker process killed here, restarted 5 seconds later ---
Duck: Sorry, I lost you for a moment. Where were we?
You: I've got an integration test and go that times out sometimes...
Duck: It's intermittent. When it only gets two events, is the third one missing...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;That's a real transcript from killing the worker process mid-walk and bringing it back up five seconds later. The other three failure drills (Ollama going down, the phone going offline, a malformed detector input) are in &lt;a href="https://github.com/chestlyace/DuckWalk/blob/main/docs/traces/phase8-drills.md" rel="noopener noreferrer"&gt;docs/traces/phase8-drills.md&lt;/a&gt;, and the actual outdoor walk-through is scripted shot by shot in &lt;a href="https://github.com/chestlyace/DuckWalk/blob/main/docs/demo-script.md" rel="noopener noreferrer"&gt;demo-script.md&lt;/a&gt; for whenever the sun's up.&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/chestlyace" rel="noopener noreferrer"&gt;
        chestlyace
      &lt;/a&gt; / &lt;a href="https://github.com/chestlyace/DuckWalk" rel="noopener noreferrer"&gt;
        DuckWalk
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      A local-first AI companion that notices when a developer is stuck, gets them away from the screen, and helps them think out loud while they walk. The screen is the shortest part of the experience.
    &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;DuckWalk&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;A local-first AI companion that notices when a developer is stuck, gets them away from the screen, and helps them think out loud while they walk. The screen is the shortest part of the experience.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Setup&lt;/h2&gt;
&lt;/div&gt;

&lt;p&gt;Linux x86_64. Requires &lt;a href="https://docs.astral.sh/uv/" rel="nofollow noopener noreferrer"&gt;uv&lt;/a&gt;, &lt;a href="https://ollama.com" rel="nofollow noopener noreferrer"&gt;Ollama&lt;/a&gt;, git, cmake, a C++ compiler and curl.&lt;/p&gt;

&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;bash scripts/setup.sh&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;This installs Python 3.12 and the dependencies, pulls &lt;code&gt;gemma4:e4b&lt;/code&gt; (local default), and puts the Temporal CLI, whisper.cpp (&lt;code&gt;base.en&lt;/code&gt;) and the Piper voice (&lt;code&gt;en_US-lessac-medium&lt;/code&gt;) under &lt;code&gt;vendor/&lt;/code&gt; (gitignored). It also creates &lt;code&gt;.env&lt;/code&gt; from &lt;code&gt;.env.example&lt;/code&gt;. Add your &lt;code&gt;SENTRY_DSN&lt;/code&gt; there. To use Ollama's cloud instead of a local model, set &lt;code&gt;OLLAMA_MODEL=gemma4:31b-cloud&lt;/code&gt; (requires &lt;code&gt;ollama signin&lt;/code&gt; and &lt;code&gt;ollama pull gemma4:31b-cloud&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;Then check everything:&lt;/p&gt;

&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;vendor/bin/temporal server start-dev     &lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; separate terminal; UI at http://localhost:8233&lt;/span&gt;
uv run python scripts/doctor.py          &lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; pass/fail table for every service&lt;/span&gt;
uv run python scripts/doctor.py --sentry-test   &lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; also sends a test error to Sentry&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;The Flutter…&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/chestlyace/DuckWalk" 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;The stuck detector runs on TabPFN: six features per 5-minute window, no hyperparameter tuning, no feature engineering past picking honest signals. It's meant to be the thing that decides &lt;em&gt;for you&lt;/em&gt; that it's time to stop, which only works if it's not annoying about it, so there's also flow protection (don't nudge during a high-edit-rate streak with nothing broken) and natural-break timing (hold the nudge for the next commit or green test instead of interrupting mid-thought).&lt;/p&gt;

&lt;p&gt;Gemma writes the breadcrumb and the nudge. &lt;code&gt;gemma4:e4b&lt;/code&gt; runs locally by default, and the same prompts work fine against &lt;code&gt;gemma4:31b-cloud&lt;/code&gt; on machines that can't run it locally. The breadcrumb is really the whole trick that makes leaving the desk feel safe: the model writes down where you were so you don't have to.&lt;/p&gt;

&lt;p&gt;The duck's own voice needed something narrower than general-purpose chat: always exactly one question, never the fix, plain and short. Gemma isn't available through Tinker, so I fine-tuned Qwen3.5-4B on filtered teacher dialogues instead. The untuned model passed a frozen 8-criteria rubric 68% of the time; after tuning, 98%. Measured against the deployed cloud Gemma duck (80%), I'd call that equal quality from a 4B model, not better. A second, independent judge put the two within noise of each other, and I wrote up that caveat along with the rest of the methodology in &lt;a href="https://github.com/chestlyace/DuckWalk/blob/main/eval/results.md" rel="noopener noreferrer"&gt;eval/results.md&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The whole thing runs as one Temporal workflow: breadcrumb, nudge, wait for movement, voice loop, brief, with retries on every LLM call. I needed this because a real walk can drop off wifi for ninety minutes and come back, and the workflow just waits it out. It's also what let the crash-and-resume above happen without losing the conversation.&lt;/p&gt;

&lt;p&gt;Sentry traces every stage, tagged with model and token counts. That's how I found a real bottleneck instead of guessing at one: per-turn timings showed speech-to-text eating about 4 seconds a turn, way past the LLM call (0.76s) or the TTS (0.63s). Turned out whisper.cpp was running 5-beam search by default. Switching to greedy decoding cut it to about 2.6 seconds, 36% faster, with identical transcription text. Before-and-after numbers are in &lt;a href="https://github.com/chestlyace/DuckWalk/blob/main/docs/traces/phase8-bottleneck.md" rel="noopener noreferrer"&gt;docs/traces/phase8-bottleneck.md&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The phone side is Flutter, three screens (nudge, walking, return brief), and it has to handle a walk going out of range: live-streamed to the laptop when reachable, an on-device Gemma conversation when it isn't, syncing the transcript back once it reconnects so the laptop still writes the final brief with the bigger model.&lt;/p&gt;

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

&lt;p&gt;Everything above runs on my own machine unless I deliberately opt out of that. Gemma through Ollama, whisper.cpp, Piper for text-to-speech, a self-hosted push server instead of someone else's, TabPFN doing inference on-device. No code, diffs, prompts, or transcripts leave the laptop. The only thing that goes out is Sentry trace metadata, and by design that's never the content of what you said, just how long each stage took.&lt;/p&gt;

&lt;p&gt;Being able to swap the pieces is also what let me actually measure anything instead of trusting a vendor's claim. I pointed the duck's backend at Ollama, a local llama-server, and Tinker's cloud, one env var at a time, and compared them directly. The fine-tuning number above only exists because Tinker made training and serving a small open model cheap enough to run that comparison for real.&lt;/p&gt;

&lt;p&gt;And it costs nothing to run every day, which matters for something meant to interrupt you several times a shift. A tool you hesitate to use because of a bill is a tool you turn off.&lt;/p&gt;

&lt;h2&gt;
  
  
  Results
&lt;/h2&gt;

&lt;p&gt;The fine-tuning went from 68% to 98% on a frozen 50-prompt rubric, matching a much larger cloud model on a 4B budget. Full caveats in &lt;a href="https://github.com/chestlyace/DuckWalk/blob/main/eval/results.md" rel="noopener noreferrer"&gt;eval/results.md&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;For reliability: a 2-hour run, 23 walk sessions back to back across 5 bug scenarios and 3 scripted conversations, zero failures and no manual intervention. My dev machine actually rebooted partway through the night, so I confirmed this straight from Temporal's own workflow history rather than a log file that didn't survive.&lt;/p&gt;

&lt;p&gt;All four failure drills pass. Ollama going down makes the nudge and brief fall back to canned text instead of killing the walk. The worker restarting mid-conversation resumes without losing anything. The phone going offline just syncs later. A malformed detector input fails with a clear error instead of hanging.&lt;/p&gt;

&lt;p&gt;What isn't done: the stuck detector has no real held-out precision or recall yet. Hand-labeling real work windows didn't get finished before the deadline, so I'm saying that plainly instead of papering over it with a synthetic number. &lt;code&gt;ml/train_detector.py&lt;/code&gt; is ready to produce the real learning curve the moment there's labeled data to feed it.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Best Use of Gemma.&lt;/strong&gt; Writes the breadcrumb, the nudge, the walk-mode pick, and the return brief, and was also the teacher model behind the fine-tuning data and the eval judge.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best Use of TabPFN.&lt;/strong&gt; Classifies each 5-minute window as stuck or flow from six local signals with no feature engineering or tuning. I'll say the caveat up front: real held-out metrics aren't collected yet, for the reason above. The classifier, its Sentry instrumentation, and its failure handling are all real and tested regardless.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best Use of Tinker.&lt;/strong&gt; Took a 4B model from 68% to 98% on an 8-criteria behavioral rubric, with real before-and-after numbers and a second judge checking the first one's work, not just a vibe.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best Use of Temporal.&lt;/strong&gt; The crash-and-resume up top isn't a demo trick. It's the actual thing that turns a phone losing signal for an hour into a non-event instead of a risk of losing the whole walk.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best Use of Sentry Agent Tracing.&lt;/strong&gt; Full per-stage tracing is what turned a guess about the bottleneck into a measured 36% fix, and it's the backbone of all four failure drills.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>opensource</category>
      <category>ai</category>
    </item>
    <item>
      <title>Plumb: I built my friend a tutor for her own codebase, because "the AI writes the code now"</title>
      <dc:creator>Chestly Ace</dc:creator>
      <pubDate>Sun, 04 Oct 2026 17:24:15 +0000</pubDate>
      <link>https://dev.to/chestly_ace/plumb-i-built-my-friend-a-tutor-for-her-own-codebase-because-the-ai-writes-the-code-now-1lni</link>
      <guid>https://dev.to/chestly_ace/plumb-i-built-my-friend-a-tutor-for-her-own-codebase-because-the-ai-writes-the-code-now-1lni</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-weekend-2026-10-01"&gt;Hacktoberfest Weekend Challenge: Build for a Friend&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;A friend of mine, a software engineer, asked me a question I couldn't shake: &lt;strong&gt;why should she keep learning when an AI agent can write the code?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I didn't want to answer with a lecture, so I built her an answer instead. &lt;strong&gt;Plumb&lt;/strong&gt; is a tutor for &lt;em&gt;her own&lt;/em&gt; codebase. It doesn't write code. It makes sure she stays the person who understands it.&lt;/p&gt;

&lt;p&gt;You run &lt;code&gt;tutor&lt;/code&gt; in a repo and it opens a chat:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Before a change&lt;/strong&gt;, describe what you're about to build ("let users mark items as favorites"). Plumb reads the real files, explains what the change touches and which patterns to follow, then asks 2–3 questions about the design choices. Each has 2–3 reasonable answers, never trick distractors.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"I don't understand"&lt;/strong&gt; is always an option. Plumb then explains the concept &lt;em&gt;using her own code&lt;/em&gt;, and checks with one question.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;After the change&lt;/strong&gt;, &lt;code&gt;/review&lt;/code&gt; reads the diff and compares it with the decisions she made earlier: followed, changed, or not addressed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;/tour&lt;/code&gt;&lt;/strong&gt; walks the repo from an entry point outward, one file per stop.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Skip is free.&lt;/strong&gt; Any question can be skipped. Skipped topics come back later, at a calm moment, never as a nag.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Two things matter more than any feature:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Every claim cites &lt;code&gt;file:lines&lt;/code&gt;, and Plumb checks every citation against the real file&lt;/strong&gt; before she sees it. Wrong files, lines past the end, or lazy ranges like &lt;code&gt;models.py:14-113&lt;/code&gt; are struck through on screen.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Every "why" is labeled.&lt;/strong&gt; &lt;em&gt;documented&lt;/em&gt; means a commit message or doc said so, and Plumb verifies it actually saw that commit. &lt;em&gt;inferred&lt;/em&gt; means it's the model's reading. &lt;em&gt;confirmed&lt;/em&gt; means she agreed. A guess is never presented as fact.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;What she knows, what she skipped and what she decided live in a &lt;code&gt;.tutor/&lt;/code&gt; folder of plain JSON files in her project, which she can open, edit or delete.&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/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2s4lakx9s5crlosqeboq.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2s4lakx9s5crlosqeboq.gif" alt="Plumb walking through a change in the FastAPI full-stack template" width="720" height="434"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That's a real, unedited session on the public &lt;a href="https://github.com/fastapi/full-stack-fastapi-template" rel="noopener noreferrer"&gt;FastAPI full-stack template&lt;/a&gt;. Waits are fast-forwarded. In order:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the request is typed;&lt;/li&gt;
&lt;li&gt;the explanation streams in, with citations highlighted;&lt;/li&gt;
&lt;li&gt;two citations get rejected as too broad;&lt;/li&gt;
&lt;li&gt;a design question about the N+1 problem;&lt;/li&gt;
&lt;li&gt;"I don't understand" on the next one;&lt;/li&gt;
&lt;li&gt;an explanation built from the repo's own &lt;code&gt;User&lt;/code&gt; / &lt;code&gt;UserPublic&lt;/code&gt; models;&lt;/li&gt;
&lt;li&gt;a check question.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This recording used the hosted &lt;code&gt;gemma4:31b-cloud&lt;/code&gt; through Ollama. On her laptop it runs on a local Gemma.&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/chestlyace" rel="noopener noreferrer"&gt;
        chestlyace
      &lt;/a&gt; / &lt;a href="https://github.com/chestlyace/Plumb-cli" rel="noopener noreferrer"&gt;
        Plumb-cli
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Plumb-cli is a local-first command-line tool that teaches a developer her own codebase, and checks she understands each architectural decision before and after code is written. It is built for one real person: a software-engineer friend who asked why she should keep learning when an AI agent can write the code.
    &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;Plumb&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/chestlyace/Plumb-cli/assets/plumb-demo.gif"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fchestlyace%2FPlumb-cli%2FHEAD%2Fassets%2Fplumb-demo.gif" alt="Plumb walking through a change in the FastAPI full-stack template"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Plumb is a local-first tutor for &lt;strong&gt;your own codebase&lt;/strong&gt;. Before you build a
feature, it walks you through what the change touches in your code and asks
you a few questions about the design choices. After you've built it, it
reviews what changed against what you decided. It can also give you a guided
tour of the repo, one file at a time.&lt;/p&gt;
&lt;p&gt;It was built for one real person: a software-engineer friend who asked why
she should keep learning when an AI agent can write the code. Plumb's answer
let the agent write code if you like, but stay the person who understands it.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Runs on your laptop.&lt;/strong&gt; An open-weight model (Gemma) served by Ollama
Your code stays on your machine.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Grounded in your files.&lt;/strong&gt; Every claim cites &lt;code&gt;file:lines&lt;/code&gt;, and Plumb checks
each citation against the real file before you see it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Honest about the "why".&lt;/strong&gt;…&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/chestlyace/Plumb-cli" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;She's on Windows, so installing is one line in PowerShell:&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;irm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;https://raw.githubusercontent.com/chestlyace/Plumb-cli/main/install.ps1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;iex&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then &lt;code&gt;tutor&lt;/code&gt; in any project. The first run is a short guided setup:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;It finds Ollama, or offers to install it and starts it.&lt;/li&gt;
&lt;li&gt;It reads her RAM and recommends a model: &lt;code&gt;gemma4:e2b&lt;/code&gt; (4.6 GB) on an 8 GB laptop, &lt;code&gt;gemma4:e4b&lt;/code&gt; (6.6 GB) with more. Then it downloads her pick with a progress bar.&lt;/li&gt;
&lt;li&gt;It lets her choose a cloud fallback, or none. It says plainly that a cloud model means her files leave the laptop while it's in use, and it walks her through signing in to Ollama if she picks one.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;(macOS and Linux get the same thing with &lt;code&gt;curl … install.sh | sh&lt;/code&gt;.)&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Gemma 4 via Ollama.&lt;/strong&gt; Her laptop has no GPU, so Plumb runs a small Gemma 4 on the CPU and picks the size from her memory. The model is one setting. If the local model fails, Plumb switches to the fallback she chose (Gemma 4 31B on Ollama's cloud, by default) for the rest of the session, and tells her so.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Code does the heavy lifting, and each model call gets one small job.&lt;/strong&gt; A small model gets a narrow context and a single task:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a &lt;strong&gt;repo map&lt;/strong&gt;: tree-sitter symbols, an import graph across Python, JS/TS, Dart and a dozen other languages, git history and entry points, cached by file hash;&lt;/li&gt;
&lt;li&gt;six &lt;strong&gt;read-only tools&lt;/strong&gt; (&lt;code&gt;read_file&lt;/code&gt;, &lt;code&gt;grep&lt;/code&gt;, &lt;code&gt;list_dir&lt;/code&gt;, &lt;code&gt;git_log&lt;/code&gt;, &lt;code&gt;repo_map&lt;/code&gt;, &lt;code&gt;memory&lt;/code&gt;) that refuse anything outside the repo, ignored files and &lt;code&gt;.env&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;narrow calls&lt;/strong&gt;: explore and explain, write questions, explain a concept, and a tiny classifier that tells "describe a change" apart from "ask a question".&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;PydanticAI as the agent loop,&lt;/strong&gt; behind my own driver interface, with guardrails I wrote around it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a step limit;&lt;/li&gt;
&lt;li&gt;one retry on invalid output;&lt;/li&gt;
&lt;li&gt;loop detection, so the model can't re-read the same file forever;&lt;/li&gt;
&lt;li&gt;a scripted fake model, so the 187 tests run without Ollama.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Textual&lt;/strong&gt; for the chat UI. The engine never imports it, and &lt;code&gt;--plain&lt;/code&gt; gives the same chat as plain text.&lt;/p&gt;

&lt;h3&gt;
  
  
  Things Gemma taught me
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Gemma answered in prose instead of calling an output tool.&lt;/strong&gt; With PydanticAI's default tool-based structured output, the model kept writing the question as nicely formatted prose and only produced valid output on its retry. Switching to &lt;em&gt;prompted&lt;/em&gt; JSON output gave 3 out of 3 with no retries. That one change is what makes the questions reliable.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It cites lines confidently and imprecisely.&lt;/strong&gt; In review mode, citations into a diff were off by one or two lines, because a diff only gives a starting line per hunk. Numbering every diff line with its line in the current file fixed that. Now the review points at exactly the right lines.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It cites whole files when it's lazy,&lt;/strong&gt; so citations wider than 60 lines are rejected. A tutor that says "see lines 1-400" isn't teaching.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Her code stays on her laptop.&lt;/strong&gt; A tool that reads your whole codebase should not need to send it to a server you don't control. With an open-weight model running locally, it doesn't.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It costs nothing to run,&lt;/strong&gt; so she can ask "I don't understand" as many times as she wants. A tutor you hesitate to use because of a bill is a bad tutor.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The model is swappable.&lt;/strong&gt; It's one line in a config file. When a better small open model ships, she switches. I could also test exactly how Gemma behaves (prose instead of tool calls, imprecise line numbers) and design around it, instead of hoping an API keeps behaving the same.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Everything is inspectable.&lt;/strong&gt; The model, the agent loop, the tools and the memory files are all open. When it tells her something about her code, she can check where it came from. That's the whole point of a tutor.&lt;/li&gt;
&lt;/ul&gt;

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

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

&lt;p&gt;&lt;strong&gt;Best Use of Gemma.&lt;/strong&gt; Gemma 4 is the only model family Plumb uses: a local &lt;code&gt;gemma4:e2b&lt;/code&gt; or &lt;code&gt;gemma4:e4b&lt;/code&gt; sized to her laptop, and &lt;code&gt;gemma4:31b-cloud&lt;/code&gt; as the default fallback. The design is shaped around what a small Gemma can do reliably: narrow calls, prompted JSON, checked citations.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
      <category>hf26challenge</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Kyuutai: Turning Fandom Into a Living Diary of Gaming, Anime, and Music</title>
      <dc:creator>Chestly Ace</dc:creator>
      <pubDate>Mon, 13 Jul 2026 06:34:04 +0000</pubDate>
      <link>https://dev.to/chestly_ace/kyuutai-turning-fandom-into-a-living-diary-of-gaming-anime-and-music-3em4</link>
      <guid>https://dev.to/chestly_ace/kyuutai-turning-fandom-into-a-living-diary-of-gaming-anime-and-music-3em4</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for &lt;a href="https://dev.to/challenges/weekend-2026-07-09"&gt;Weekend Challenge: Passion Edition&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;Kyuutai is a fandom devotion platform for people who want to track, reflect on, and celebrate the things they love most. Instead of treating fandom like a casual list of favorites, it turns it into an interactive experience built around three passions: gaming, anime, and music.&lt;/p&gt;

&lt;p&gt;The project is organized around four connected experiences:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Devotion Log — a journal for recording what I watched, played, or listened to, with mood tags, voice dictation, and a timeline view.&lt;/li&gt;
&lt;li&gt;Weekly Recap — an AI-generated narrated summary of the last 7 days of fandom activity, with audio playback.&lt;/li&gt;
&lt;li&gt;Passion Card — a personalized passion radar that analyzes top games, anime, and artists into an archetype profile, recommendations, and a downloadable visual card.&lt;/li&gt;
&lt;li&gt;OST Detective — a soundtrack guessing game built around real game and anime clips, with AI-written questions and narrator reactions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Team submission:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dylane(&lt;a href="https://dev.to/yveane"&gt;https://dev.to/yveane&lt;/a&gt;) — anime&lt;/li&gt;
&lt;li&gt;Ace — gaming&lt;/li&gt;
&lt;li&gt;Kanjo(&lt;a href="https://dev.to/alchemycodes"&gt;https://dev.to/alchemycodes&lt;/a&gt;) — music&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal was to make fandom feel personal, expressive, and a little dramatic — like a living diary for obsession, taste, and identity.&lt;/p&gt;

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

&lt;p&gt;Live demo: &lt;a href="https://kyuutai.vercel.app" rel="noopener noreferrer"&gt;https://kyuutai.vercel.app&lt;/a&gt;&lt;br&gt;
Video demo: &lt;/p&gt;
&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;p&gt;GitHub repository: &lt;br&gt;
&lt;/p&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/yvesdylane" rel="noopener noreferrer"&gt;
        yvesdylane
      &lt;/a&gt; / &lt;a href="https://github.com/yvesdylane/kyuutai" rel="noopener noreferrer"&gt;
        kyuutai
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Kyuutai is a passion journal with a twist: tell it what game, anime, or song owned your brain today - by voice or text - and it grows into a living timeline of your fandom.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    


&lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/yvesdylane/kyuutai" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;
.

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

&lt;p&gt;Kyuutai is built with Next.js 16, React 19, TypeScript, Tailwind CSS 4, PostgreSQL, NextAuth, Google Gemini, and ElevenLabs.&lt;/p&gt;

&lt;p&gt;I kept the app organized with a clean App Router structure and a route -&amp;gt; service -&amp;gt; repository pattern so the HTTP layer, business logic, and SQL stay separated.&lt;/p&gt;

&lt;p&gt;Google Gemini powers the intelligence layer. It generates weekly recap scripts, analyzes favorite media into a structured passion profile, and writes the short question/reaction text used in OST Detective. Each feature uses a different prompt style: recap narration is warm and dramatic, passion profiles return structured JSON, and OST Detective uses short game-show-style lines.&lt;/p&gt;

&lt;p&gt;ElevenLabs handles the voice layer. It turns recap scripts and passion blurbs into audio files saved under public/audio/, which makes the app feel more like a fandom experience than a standard dashboard.&lt;/p&gt;

&lt;p&gt;The Devotion Log also uses browser speech recognition for hands-free note-taking, while OST Detective pulls real soundtrack clips from YouTube using yt-dlp and trims them with ffmpeg for short blind-test rounds.&lt;/p&gt;

&lt;p&gt;On the database side, the app uses raw SQL with parameterized queries, UUIDs, and a schema designed around journal entries, recap history, passion cards, and game sessions.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Best Use of Google AI&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Google Gemini is the intelligence layer behind multiple parts of Kyuutai, not just a single feature. It writes the weekly recap narration, transforms favorite media into a structured passion profile, and powers the short question and reaction text in OST Detective. I used different prompt styles for each experience: narrative generation for recap audio, strict JSON output for the Passion Card, and concise game-show style writing for the trivia game. That made Google AI central to both the app’s core functionality and its personality.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Best Use of ElevenLabs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ElevenLabs brings Kyuutai’s emotional layer to life through voice. The app converts AI-generated recap scripts and passion blurbs into spoken audio, making the experience feel like a fandom show rather than just a dashboard. In practice, ElevenLabs is used to create weekly recap narration and the Passion Card voice profile, giving users something they can listen to, not just read. The audio output is part of what makes the app feel immersive and polished.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
    </item>
    <item>
      <title>My First Global Hackathon: What I Learned Building Moonsu Link</title>
      <dc:creator>Chestly Ace</dc:creator>
      <pubDate>Sat, 04 Jul 2026 02:14:15 +0000</pubDate>
      <link>https://dev.to/chestly_ace/my-first-global-hackathon-what-i-learned-building-moonsu-link-508j</link>
      <guid>https://dev.to/chestly_ace/my-first-global-hackathon-what-i-learned-building-moonsu-link-508j</guid>
      <description>&lt;p&gt;This was my first global hackathon, with 500+ participants from around the world, and although I didn’t win, I’m honestly proud of how much I learned from the experience.&lt;/p&gt;

&lt;p&gt;I worked on &lt;strong&gt;Moonsu Link&lt;/strong&gt;, a project I care about deeply. It wasn’t just about building something technical. It was about trying to solve a real problem and pushing an unfinished idea all the way into something more complete, more usable, and more meaningful.&lt;/p&gt;

&lt;p&gt;Like many hackathon projects, Moonsu Link came with its own challenges. There were moments of uncertainty, moments where the product needed more structure, and moments where it would have been easy to slow down or stop. But I kept going because I believed the idea was worth finishing.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Power of Collaboration &amp;amp; Community
&lt;/h2&gt;

&lt;p&gt;What made this experience special was the teamwork. Building with others, sharing ideas, dividing responsibilities, and trying to keep the momentum alive taught me a lot about collaboration. A hackathon is not just about code. It is also about communication, trust, iteration, and resilience.&lt;a class="mentioned-user" href="https://dev.to/alchemycodes"&gt;@alchemycodes&lt;/a&gt; @yvesdylane &lt;/p&gt;

&lt;p&gt;I also learned that progress matters, even when the final result is not a win. Finishing something, improving it, and learning through the process can be just as valuable as a prize.&lt;/p&gt;

&lt;p&gt;One of the things I’m happy about is that I received a badge from the DEVPost community. That recognition means a lot to me because it reflects the effort, growth, and persistence behind the project.&lt;/p&gt;




&lt;h2&gt;
  
  
  Key Takeaways
&lt;/h2&gt;

&lt;p&gt;This hackathon reminded me that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;First attempts are still valuable&lt;/strong&gt; – Every expert was once a beginner. Starting is half the battle.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Teamwork makes a huge difference&lt;/strong&gt; – Bouncing ideas off others and distributing tasks accelerates growth.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Challenges are part of the process&lt;/strong&gt; – Friction and bugs are inevitable; navigating them builds engineering maturity.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Not winning does not mean losing&lt;/strong&gt; – The knowledge and connections gained are permanent assets.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Learning and finishing count&lt;/strong&gt; – Shipping a complete product cycle is a victory in itself.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Moving Forward
&lt;/h2&gt;

&lt;p&gt;Moonsu Link may not have taken the top prize, but it gave me something important: experience, confidence, and a stronger mindset for the next challenge. &lt;/p&gt;

&lt;p&gt;I’m grateful for the opportunity, grateful for the people I worked with, and grateful that I chose not to give up. &lt;/p&gt;




&lt;p&gt;&lt;em&gt;Have you ever participated in a global hackathon? What was your biggest takeaway from your first dev challenge? Let's connect in the comments below!&lt;/em&gt;&lt;/p&gt;

</description>
      <category>githubchallenge</category>
      <category>devchallenge</category>
      <category>hackathon</category>
      <category>learning</category>
    </item>
    <item>
      <title>From Prototype to Production: Finishing Moonsu Link, a Chat-Native Agricultural Marketplace for Cameroon</title>
      <dc:creator>Chestly Ace</dc:creator>
      <pubDate>Sun, 07 Jun 2026 23:58:08 +0000</pubDate>
      <link>https://dev.to/chestly_ace/from-prototype-to-production-finishing-moonsu-link-a-chat-native-agricultural-marketplace-for-16bo</link>
      <guid>https://dev.to/chestly_ace/from-prototype-to-production-finishing-moonsu-link-a-chat-native-agricultural-marketplace-for-16bo</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the GitHub Finish-Up-A-Thon Challenge&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;What We Built&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Moonsu Link is a chat-native agricultural marketplace built for farmers and buyers in Cameroon.&lt;/p&gt;

&lt;p&gt;In Cameroon, agriculture is central to daily life, but the way products are bought and sold is still fragmented. In many towns, roadside markets and middlemen control access to buyers. In rural areas, farmers often depend on word of mouth, informal contacts, or market days to move their goods.&lt;/p&gt;

&lt;p&gt;That creates real friction.&lt;/p&gt;

&lt;p&gt;A farmer in Bamenda, Bafoussam, Douala, or Yaoundé may have produce ready, but still struggle to find a buyer quickly, get a fair price, or know where demand is strongest. At the same time, many people already use WhatsApp and Telegram every day, while mobile data costs, app installs, and complicated onboarding can get in the way. Language matters too. Cameroon is bilingual, and any useful product has to feel natural in both English and French while staying simple enough for users with different levels of digital comfort.&lt;/p&gt;

&lt;p&gt;Moonsu Link was built to close that gap by bringing the marketplace into the chat apps people already use. The goal is to reduce friction and make trade feel more direct, local, and trustworthy.&lt;/p&gt;

&lt;p&gt;The idea is simple:&lt;br&gt;
help farmers list produce easily, help buyers search in plain language, and let both sides trade without needing a separate app.&lt;/p&gt;

&lt;p&gt;Instead of pushing users into a dashboard-first experience, Moonsu Link works through WhatsApp and Telegram, the platforms people already know.&lt;/p&gt;

&lt;p&gt;With Moonsu Link, a farmer can list produce with location, price, quantity, and optional photos. Buyers can search naturally, compare listings, check market prices, and express interest. The platform also supports farmer verification, community reports, farming advice, voice messages, and cross-platform use across WhatsApp and Telegram.&lt;/p&gt;

&lt;p&gt;What began as an unfinished idea is now a real product with a clear user flow, a polished web presence, and a backend that connects messaging, AI, search, verification, and notifications into one system.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Demo&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Live app: &lt;a href="https://moonsulink.vercel.app" rel="noopener noreferrer"&gt;https://moonsulink.vercel.app&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;GitHub repository:&lt;a href="https://github.com/yvesdylane/Moonsun-Link-api" rel="noopener noreferrer"&gt;https://github.com/yvesdylane/Moonsun-Link-api&lt;/a&gt; , &lt;a href="https://github.com/yvesdylane/MoonsuLinkFrontend" rel="noopener noreferrer"&gt;https://github.com/yvesdylane/MoonsuLinkFrontend&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Video walkthrough: &lt;a href="https://youtu.be/6skq9w_mw-s?si=c5YCVunZ3RC5Qfqs" rel="noopener noreferrer"&gt;https://youtu.be/6skq9w_mw-s?si=c5YCVunZ3RC5Qfqs&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Screenshots:!Moonsu Telegram Bot(&lt;a href="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/b1ewivz77iwyli4gh01a.jpeg" rel="noopener noreferrer"&gt;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/b1ewivz77iwyli4gh01a.jpeg&lt;/a&gt;) , 
!Moonsu Whatsapp (&lt;a href="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/op3lmh99vio6zbxu4bcl.jpg" rel="noopener noreferrer"&gt;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/op3lmh99vio6zbxu4bcl.jpg&lt;/a&gt;) , 
!Moonsu Admin Dahboard(&lt;a href="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cit70l8bc84pijmworrj.jpg" rel="noopener noreferrer"&gt;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cit70l8bc84pijmworrj.jpg&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;The Comeback Story&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;!Moonsu website before finishathon(&lt;a href="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2nlqiwperncglto84re2.png" rel="noopener noreferrer"&gt;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2nlqiwperncglto84re2.png&lt;/a&gt;)&lt;br&gt;
Moonsu Link did not start as a finished product. It began as a prototype built around a real problem, but like many hackathon projects, it never fully crossed the finish line.&lt;/p&gt;

&lt;p&gt;The idea was strong, but the product needed more structure, cleaner UX, better flow, and real end-to-end functionality before it could genuinely help users.&lt;/p&gt;

&lt;p&gt;For this challenge, We came back to it with a different mindset. We treated it like a real product, not just a demo.&lt;/p&gt;

&lt;p&gt;That meant focusing on the things that matter most:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;making the experience feel unified across WhatsApp, Telegram, and the web&lt;/li&gt;
&lt;li&gt;refining the landing page so the product story is clear immediately&lt;/li&gt;
&lt;li&gt;building a visual identity that reflects a Cameroon-first agricultural context&lt;/li&gt;
&lt;li&gt;improving backend flows for messaging, listings, verification, search, and notifications&lt;/li&gt;
&lt;li&gt;making the product feel trustworthy, usable, and ready to present to real users&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The biggest difference is that the project is no longer just an idea. It now has a clear user journey, a stronger brand, and real functionality that shows what the product is supposed to do.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Our Experience with GitHub Copilot&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;GitHub Copilot helped me move faster and finish with more confidence.&lt;/p&gt;

&lt;p&gt;It was especially useful for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;building repetitive frontend sections faster&lt;/li&gt;
&lt;li&gt;cleaning up component structure&lt;/li&gt;
&lt;li&gt;speeding up backend boilerplate and integrations&lt;/li&gt;
&lt;li&gt;iterating on UI copy and layout&lt;/li&gt;
&lt;li&gt;reducing friction while refactoring and finishing incomplete parts of the project&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What mattered most was not just speed, but momentum.&lt;/p&gt;

&lt;p&gt;Copilot helped us keep the project moving when we needed to turn unfinished ideas into working features and a coherent product experience.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Why This Project Matters&lt;/em&gt;&lt;br&gt;
 Agriculture is one of the most important parts of everyday life in Cameroon, but many farmers still struggle with discovery, pricing, trust, and access to buyers.&lt;/p&gt;

&lt;p&gt;Moonsu Link tries to solve that with one simple idea:&lt;/p&gt;

&lt;p&gt;Meet users where they already are.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No app install&lt;/li&gt;
&lt;li&gt;No complicated onboarding&lt;/li&gt;
&lt;li&gt;No unfamiliar workflow&lt;/li&gt;
&lt;li&gt;Just a practical marketplace inside the chat platforms people already use&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is why this project felt worth finishing. It is not just a technical build. It is a tool that could genuinely reduce friction for farmers and buyers.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The Stack&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Frontend:&lt;br&gt;
Next.js 16, React 19, TypeScript, Tailwind CSS v4, Framer Motion&lt;/p&gt;

&lt;p&gt;Backend:&lt;br&gt;
FastAPI, PostgreSQL, Telegram Bot API, WhatsApp integration, AI-powered message handling, translation, voice transcription, image upload, and admin APIs&lt;/p&gt;

&lt;p&gt;&lt;em&gt;What Changed During the Comeback&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The project went from unfinished to presentable by focusing on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a clearer product story&lt;/li&gt;
&lt;li&gt;a stronger landing page&lt;/li&gt;
&lt;li&gt;better visual consistency&lt;/li&gt;
&lt;li&gt;real cross-platform marketplace flows&lt;/li&gt;
&lt;li&gt;verification and trust features&lt;/li&gt;
&lt;li&gt;AI-assisted handling of user messages&lt;/li&gt;
&lt;li&gt;more polished communication for farmers and buyers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Authors&lt;/strong&gt;&lt;br&gt;
Main Author: &lt;em&gt;Yves Dylane &lt;a class="mentioned-user" href="https://dev.to/yveane"&gt;@yveane&lt;/a&gt; _&lt;br&gt;
Co-Author: _Chestly Amahndong &lt;a class="mentioned-user" href="https://dev.to/chestly_ace"&gt;@chestly_ace&lt;/a&gt;&lt;/em&gt;&lt;br&gt;
Co-Author: _Kanjo Elkamira &lt;a class="mentioned-user" href="https://dev.to/alchemycodes"&gt;@alchemycodes&lt;/a&gt;&lt;br&gt;
_&lt;/p&gt;

</description>
      <category>githubchallenge</category>
      <category>devchallenge</category>
      <category>githubcopilot</category>
      <category>ai</category>
    </item>
  </channel>
</rss>
