<?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: Dreven</title>
    <description>The latest articles on DEV Community by Dreven (@drevendev).</description>
    <link>https://dev.to/drevendev</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%2F4191816%2Ff0887255-978d-4aba-a55d-be92ed6963ad.jpg</url>
      <title>DEV Community: Dreven</title>
      <link>https://dev.to/drevendev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/drevendev"/>
    <language>en</language>
    <item>
      <title>Let your wild ideas ferment: a quiet garden powered by local Gemma</title>
      <dc:creator>Dreven</dc:creator>
      <pubDate>Thu, 22 Oct 2026 15:12:20 +0000</pubDate>
      <link>https://dev.to/drevendev/let-your-wild-ideas-ferment-a-quiet-garden-powered-by-local-gemma-1c0o</link>
      <guid>https://dev.to/drevendev/let-your-wild-ideas-ferment-a-quiet-garden-powered-by-local-gemma-1c0o</guid>
      <description>&lt;p&gt;&lt;em&gt;Built for the &lt;a href="https://dev.to/challenges/hacktoberfest-week3-2026-10-19"&gt;Hacktoberfest Open-Source AI Challenge Week 3: Slow and Steady&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;Some ideas are too odd to schedule and too interesting to delete.&lt;/p&gt;

&lt;p&gt;Compost Club is for people who collect fragments of side projects and would rather explore one new connection than turn every note into a task. Add two scraps, ask local Gemma for one possibility, and decide whether it deserves to grow.&lt;/p&gt;

&lt;p&gt;My projects already contain ideas worth revisiting. Scriptorium studies how a text is written. Quillgrain carries a writing voice between tools. They solve different problems, but what might grow between them? I built &lt;strong&gt;Compost Club&lt;/strong&gt; to give those unfinished connections another small chance.&lt;/p&gt;

&lt;p&gt;Drop a few scraps into a cozy garden. Let local Gemma combine two of them into one new concept. Read where it came from, keep what makes you curious, or compost it again with its roots attached. A friendly worm named Wiggle supervises absolutely nothing.&lt;/p&gt;

&lt;p&gt;A kept idea can now grow a small branch, too. Ask Gemma to clarify its mechanism, add a constraint, explore an alternative, or suggest a one-day experiment. Each step waits for your review.&lt;/p&gt;

&lt;p&gt;The garden has a deliberately slow rhythm: one welcome pairing, then another slot every fifteen minutes, up to three. Closing the tab earns time credits. Generation happens only when you ask for it. Nothing withers while you are away.&lt;/p&gt;

&lt;p&gt;That is my interpretation of &lt;strong&gt;Slow and Steady&lt;/strong&gt;: give a neglected idea a gentle next step without turning it into another daily obligation. There are no streaks, upgrades, payments, or productivity scores.&lt;/p&gt;

&lt;h3&gt;
  
  
  The lazy payoff
&lt;/h3&gt;

&lt;p&gt;My ten project cards offer &lt;strong&gt;45 possible pairs&lt;/strong&gt;. I do not have to enumerate them or write a new prompt for each: the garden selects an unused pair, Gemma proposes one connection, and I review it. That is the effort this build aims to remove, rather than the decision about what is worth making.&lt;/p&gt;

&lt;p&gt;The example below took about &lt;strong&gt;8.5 seconds&lt;/strong&gt; of local inference. I kept it as a candidate for further exploration. That is an observed run, not a measured productivity saving or evidence that all 45 pairings would be useful.&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://drevendev.github.io/CompostClub/?v=07c202852017" rel="noopener noreferrer"&gt;Watch the demo&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The short English demo shows the actual application with ideas taken from my public projects. It opens the two source cards, shows &lt;strong&gt;Echo Cartography&lt;/strong&gt;, keeps it, then follows two earlier discoveries back into the compost pile. The cream paper, small flowers, and hand-drawn garden are part of the invitation to slow down.&lt;/p&gt;

&lt;p&gt;The result came from a fresh local Gemma 3 4B run on English summaries of two real repositories: &lt;a href="https://github.com/drevendev/Scriptorium" rel="noopener noreferrer"&gt;Scriptorium&lt;/a&gt; and &lt;a href="https://github.com/drevendev/Quillgrain" rel="noopener noreferrer"&gt;Quillgrain&lt;/a&gt;. The summaries retain source links and describe current limits as well as the ideas behind each project. Gemma's unedited concept was:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Scriptorium's reading observatory is layered with Quillgrain's voice packs, generating a dynamic 'cartography' of a text’s evolution across drafts, highlighting shifts in vocabulary and tone through visualized, context-aware measurements.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I can see a practical possibility: an editor comparing drafts could notice where a revision changes the author's voice. That is why I chose this result for the demo. Echo Cartography is an idea proposed by Gemma, not an implemented editor, a paying customer, or a claim that demand has been validated.&lt;/p&gt;

&lt;p&gt;The walkthrough then switches to a separate saved garden containing &lt;strong&gt;Lexigraph&lt;/strong&gt; and &lt;strong&gt;ClawPulse&lt;/strong&gt;, two other genuine local results. Clicking &lt;strong&gt;Compost again&lt;/strong&gt; turns them into two new source scraps: twelve scraps instead of ten, with their parent links intact. No second-generation blend is claimed. The scenes were filmed from validated saved gardens; no fresh inference click or waiting animation was staged for the camera.&lt;/p&gt;

&lt;p&gt;Making the demo also improved the product: I folded the composer, paged long piles, and put both source texts side by side. The walkthrough needs no scrolling, while full text remains available. Its English voice, gentle guitar and floral frame are presentation elements; the actions inside are the real application.&lt;/p&gt;

&lt;p&gt;The downloadable public sample is a separate experience: seven visibly labelled, unchanged recordings on fictional inputs, playable without a model download, including as a self-contained offline HTML file. Custom scraps need explicit local inference setup. Browser AI remains experimental.&lt;/p&gt;

&lt;h3&gt;
  
  
  From an interesting idea to a small next step
&lt;/h3&gt;

&lt;p&gt;After keeping Echo Cartography, I chose &lt;strong&gt;Tend this idea&lt;/strong&gt; and asked for a one-day experiment. Local Gemma proposed &lt;strong&gt;Draft Timeline Exploration&lt;/strong&gt;: take a 100-word passage, make three draft versions, and chart vocabulary and tone changes on a whiteboard. I accepted the branch, saved it, and verified that it survived a reload. The proposed whiteboard experiment itself has not been carried out.&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%2Fg6r1qh4r86y439bvnkhg.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%2Fg6r1qh4r86y439bvnkhg.png" alt="The actual Tend interface with Echo Cartography as parent and Draft Timeline Exploration saved as an accepted branch" width="800" height="556"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;An accepted branch can become the parent of another request. Asking again from the same parent creates an alternative. Original responses, human edits, and parent snapshots stay separate. Accepting spends one ready slot; rejection, cancellation, failure, and &lt;code&gt;no_growth&lt;/code&gt; keep it. This is the first small branching workflow; it runs when asked, with a person deciding what grows.&lt;/p&gt;

&lt;p&gt;The video above shows blending and recomposting. This screenshot shows the newer tending workflow.&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://github.com/drevendev/CompostClub" rel="noopener noreferrer"&gt;Repository and local setup&lt;/a&gt; · &lt;a href="https://github.com/drevendev/CompostClub/blob/main/docs/MODEL_EVAL.md" rel="noopener noreferrer"&gt;Model experiments and raw evidence&lt;/a&gt; · &lt;a href="https://github.com/drevendev/CompostClub/blob/main/docs/ROADMAP.md" rel="noopener noreferrer"&gt;Known issues and roadmap&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To try the labelled sample, use Node 24 and npm 11:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/drevendev/CompostClub.git
&lt;span class="nb"&gt;cd &lt;/span&gt;CompostClub
npm ci
npm run dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Open the printed local URL and choose &lt;strong&gt;Try the sample garden&lt;/strong&gt;. This route needs no model download. For fresh ideas, follow the separate &lt;a href="https://github.com/drevendev/CompostClub/blob/main/docs/RUNNING.md#run-live-local-gemma" rel="noopener noreferrer"&gt;live local Gemma setup&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The application and original SVG illustrations are MIT-licensed. Gemma weights have their own terms and are not bundled with the app.&lt;/p&gt;

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

&lt;p&gt;The UI uses React, TypeScript, and Vite. The garden rules live in a separate domain layer, independent of React and the inference runtime. IndexedDB stores the pile and discoveries; Markdown exports and validated JSON backups provide portable copies.&lt;/p&gt;

&lt;p&gt;Gemma handles two bounded requests: blend two scraps into a concept with a source fragment from each, or propose one continuation of a kept idea. It receives no tools, shell, or archive search. The app renders input and output as text.&lt;/p&gt;

&lt;h3&gt;
  
  
  The model experiments changed the design
&lt;/h3&gt;

&lt;p&gt;My first prompt asked Gemma 3 1B to choose exact quotations from both parents. All 24 predetermined runs failed the final output contract. Paraphrasing a source made sense linguistically, but broke the provenance requirement.&lt;/p&gt;

&lt;p&gt;The next version moved that mechanical work into code. The app selects short exact fragments and constrains those fields in the JSON schema; the model concentrates on inventing the concept.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Local experiment&lt;/th&gt;
&lt;th&gt;Runs passing the shipped structural validator&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Ollama Gemma 3 1B, first prompt&lt;/td&gt;
&lt;td&gt;0 / 24&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ollama Gemma 3 1B, revised prompt&lt;/td&gt;
&lt;td&gt;23 / 24&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ollama Gemma 3 4B, revised prompt&lt;/td&gt;
&lt;td&gt;24 / 24&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Browser Gemma 3 270M and 1B, small combined smoke set&lt;/td&gt;
&lt;td&gt;0 / 4&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The Ollama set contains twelve public source-pair combinations, each run twice. Tuning reused the original holdout combinations, so these numbers describe a small regression experiment, not general performance on unseen ideas. The browser row is a separate, smaller experiment with a different runtime and setup.&lt;/p&gt;

&lt;p&gt;The 4B pass needed no repair calls. On the tested Windows machine, Ollama selected CPU inference; its median call latency was about nine seconds. That is a measured result from one machine, not a hardware requirement or a promise about other devices.&lt;/p&gt;

&lt;p&gt;For this new demo I also ran ten additional pairings from my public-project cards, after the first Lexigraph result. All ten passed the structural contract without repair. Human review still excluded three: one leaked field-like fragments into its concept, while two assumed evidence the source cards did not contain. Echo Cartography took about 8.5 seconds in its local run. These selected exploratory cases are not a held-out evaluation or proof of general creative quality.&lt;/p&gt;

&lt;p&gt;The browser models genuinely loaded and generated with WebGPU. Their four outputs failed the contract, so browser AI stays visibly experimental. Those failures remain in the evidence. A failed call never becomes a successful recording behind the scenes.&lt;/p&gt;

&lt;p&gt;Even &lt;strong&gt;24/24 valid responses does not mean 24 useful ideas&lt;/strong&gt;. Some concepts were weak, and some Russian requests returned English. Human usefulness review and a fresh unseen evaluation set are still open. The seven sample recordings are a selected subset; the remaining results are retained.&lt;/p&gt;

&lt;h3&gt;
  
  
  A garden also has to remember
&lt;/h3&gt;

&lt;p&gt;The application preserves raw source revisions and the original model responses. Editing a scrap does not rewrite the parents of an older discovery. Saving a sprout, consuming its pair, and spending its slot happen atomically. Errors, cancellation, and a model's &lt;code&gt;no_blend&lt;/code&gt; response keep the slot.&lt;/p&gt;

&lt;p&gt;Recovery matters here because the scraps are the user's contribution. Backup validation, competing-tab checks, restore conflict detection, and cascade previews for deletion all protect that contribution. The current checks cover 97 unit tests, three HTTP/Sentry regressions, and 32 Chromium journeys, including growth review and privacy exports. Those application checks are separate from model-quality evidence.&lt;/p&gt;

&lt;p&gt;GitHub Actions takes repetitive release checks off my hands. The &lt;a href="https://github.com/drevendev/CompostClub/blob/main/.github/workflows/quality.yml" rel="noopener noreferrer"&gt;Repository checks workflow&lt;/a&gt; installs pinned dependencies, runs verification, builds the app and standalone sample, and exercises recovery, pairing workflows and the Pages subpath in Chromium. The &lt;a href="https://github.com/drevendev/CompostClub/actions/runs/39778088037" rel="noopener noreferrer"&gt;successful post-merge run&lt;/a&gt; includes the tending workflow and optional Sentry adapter.&lt;/p&gt;

&lt;h3&gt;
  
  
  Watching a local model without collecting its ideas
&lt;/h3&gt;

&lt;p&gt;I connected &lt;strong&gt;Sentry Agent Tracing&lt;/strong&gt; to the Node bridge as optional technical monitoring. It is &lt;strong&gt;off by default&lt;/strong&gt;, and the connection status shows when the operator enables it. The browser and offline HTML contain no Sentry client. The &lt;a href="https://github.com/drevendev/CompostClub/blob/main/docs/OPTIONAL_SERVICES.md" rel="noopener noreferrer"&gt;adapter and removal instructions&lt;/a&gt; keep it independent of the garden's data and local inference.&lt;/p&gt;

&lt;p&gt;On a fresh tending request with the merged code, Sentry recorded &lt;strong&gt;16.43 seconds&lt;/strong&gt;, &lt;strong&gt;220 input tokens&lt;/strong&gt;, and &lt;strong&gt;107 output tokens&lt;/strong&gt; for local Gemma 3 4B. The child span measured about &lt;strong&gt;0.48 ms&lt;/strong&gt; of bridge-side structural validation. This is a separate request from the earlier 8.5-second blend and the accepted branch above. These are individual observations on my machine, not a benchmark or a measure of usefulness.&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%2Fxsmfdofh74z48cuj7jh0.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%2Fxsmfdofh74z48cuj7jh0.png" alt="A real Sentry trace showing local Gemma generation, validation, token counts and no captured input" width="585" height="702"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The integration exposed two mistakes. Provider-side enrichment initially added location fields, so I added explicit IP anonymization and recursive server-side scrubbing, then checked the stored result. Review also caught a validation span starting after the check; moving the check inside it made that timing meaningful. The screenshot uses a fresh trace after both fixes. Uploaded events contain technical metadata, with idea text, prompts, outputs and raw errors excluded.&lt;/p&gt;

&lt;p&gt;There is no hosted model API charge for those tokens: inference runs locally. Hardware, electricity, and the operator's Sentry plan are separate costs, not measured by this trace. Turning monitoring off and restarting the bridge stops new telemetry; removing the adapter needs no garden migration.&lt;/p&gt;

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

&lt;p&gt;The core interaction can run on a machine the user controls. Ollama generation stays behind a loopback-only bridge. Scraps live in the browser, and the app needs no end-user account or hosted inference API. Optional Sentry monitoring sends technical metadata only when the operator enables it; local generation, saved gardens, and backups work with it off.&lt;/p&gt;

&lt;p&gt;Initial dependency and model downloads still need a connection and explicit setup. The optional browser-model download contacts the disclosed model hosting endpoints. The offline sample contains recordings rather than weights or live inference.&lt;/p&gt;

&lt;p&gt;Open weights made it possible to compare model sizes locally and keep the failed experiments inspectable. Open application code makes the rest inspectable too: the prompt, validator, pairing rules, storage boundaries, and record of what actually ran. The model licence remains separate from the code licence.&lt;/p&gt;

&lt;p&gt;Compost Club is an experimental local application. It offers a small next step: put two unfinished thoughts together, read one possibility, and decide whether to keep it. Then close the tab. The garden can wait.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Gemma&lt;/strong&gt; — Gemma provides the central idea-blending interaction through genuine local Ollama runs, including Echo Cartography. The separate offline sample replays exact Gemma 3 4B results.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of GitHub Copilot&lt;/strong&gt; — entered through the &lt;strong&gt;GitHub Actions automation route&lt;/strong&gt; explicitly listed in the &lt;a href="https://dev.to/challenges/hf26"&gt;published category criteria&lt;/a&gt;. Repository checks automate builds, standalone packaging and Chromium acceptance; the linked workflow and successful run show the actual use.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Sentry Agent Tracing&lt;/strong&gt; — the optional local-model integration records real timings and token counts. The trace screenshot, privacy fixes, validation-timing correction and setup/removal notes above show how it is used.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;AI assistance was used in implementation, testing, documentation, and preparing this article and demo. Numerical claims above come from the repository's recorded experiments and verification reports. Creative usefulness remains a human judgment.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Demo audio credits: “Somewhere Sunny (ver 2)” by Kevin MacLeod (&lt;a href="https://incompetech.com/music/royalty-free/index.html?isrc=USUAN1100567" rel="noopener noreferrer"&gt;incompetech.com&lt;/a&gt;), downloaded from &lt;a href="https://commons.wikimedia.org/wiki/File:Somewhere_Sunny_%28ver_2%29_%28ISRC_USUAN1100567%29.mp3" rel="noopener noreferrer"&gt;Wikimedia Commons&lt;/a&gt;, licensed under &lt;a href="https://creativecommons.org/licenses/by/3.0/" rel="noopener noreferrer"&gt;CC BY 3.0&lt;/a&gt;. Edited excerpt with reduced volume, ducking, and fades. Narration: &lt;a href="https://huggingface.co/hexgrad/Kokoro-82M" rel="noopener noreferrer"&gt;Kokoro-82M&lt;/a&gt;, Apache-2.0 model distribution, rendered locally with the MIT-licensed &lt;a href="https://github.com/thewh1teagle/kokoro-onnx" rel="noopener noreferrer"&gt;kokoro-onnx&lt;/a&gt; runtime.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>gemma</category>
      <category>opensource</category>
    </item>
    <item>
      <title>PatchPitch: local Gemma turns patch notes into devlogs and social posts</title>
      <dc:creator>Dreven</dc:creator>
      <pubDate>Sun, 18 Oct 2026 23:42:26 +0000</pubDate>
      <link>https://dev.to/drevendev/patchpitch-your-product-deserves-a-great-story-nao</link>
      <guid>https://dev.to/drevendev/patchpitch-your-product-deserves-a-great-story-nao</guid>
      <description>&lt;p&gt;PatchPitch uses local Gemma to turn release notes into devlogs, community posts and short announcements, with voice presets, optional tags and Markdown export.&lt;/p&gt;

&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;Demo · Code · How it works · Sentry trace&lt;/p&gt;

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

&lt;p&gt;A game update can be finished and still leave three writing jobs: explain it to returning players, introduce it to a community, and fit one useful thought into a short post.&lt;/p&gt;

&lt;p&gt;I used the real 0.12 patch for &lt;strong&gt;&lt;a href="https://drevengames.itch.io/idle-fantasy-shop" rel="noopener noreferrer"&gt;Idle Fantasy Shop&lt;/a&gt;&lt;/strong&gt;, my cozy browser game about gathering resources, crafting practical goods and keeping a small shop in Latchford. Its workshop gained a crafting plan, its gathering grounds gained a pressure system, and its save instructions needed careful wording. There was a story in those changes. It needed different shapes for different readers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;PatchPitch&lt;/strong&gt; is the small local writing studio I built for that job. Select the facts that shipped, choose a format and voice, generate with local Gemma, then review and export Markdown.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Devlog:&lt;/strong&gt; room for the selected topics and important details.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Community post:&lt;/strong&gt; a few useful changes in connected prose.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Short post:&lt;/strong&gt; a 280-character budget including your call to action and suggested tag.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each request writes one version. Warm, Clear and Lively presets steer its voice; an optional writing sample adds your own rhythm. Auto tags are optional suggestions from the product and selected facts. Each format keeps its latest draft and edits in the current tab, so you can switch between them, remove a tag and take the text with you.&lt;/p&gt;

&lt;h3&gt;
  
  
  Who might pay for it?
&lt;/h3&gt;

&lt;p&gt;The buyer I have in mind is a solo developer or small studio that ships regularly and handles its own release communications. Their next update needs a coherent release pack, a careful review and copy they can reuse across channels.&lt;/p&gt;

&lt;p&gt;The first paid offer I would test is a reviewed pack per release: a devlog, a community post and a short announcement. That could begin as a small service using this MIT-licensed tool. A subscription would need evidence that people return for the next update. So far I have used it on my own game; I have no independent customer or payment results, and the app has no checkout.&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://drevendev.github.io/PatchPitch/" class="crayons-btn crayons-btn--primary" rel="noopener noreferrer"&gt;Watch the demo and read the generated drafts&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;The recorded demo includes captions and all three complete drafts. &lt;a href="https://drevendev.github.io/PatchPitch/assets/demo.mp4" rel="noopener noreferrer"&gt;Direct 63-second MP4&lt;/a&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%2F2rszj0hys8wogptsvgc3.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%2F2rszj0hys8wogptsvgc3.png" alt="PatchPitch with the real Idle Fantasy Shop draft, format, style and suggested tags" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The film shows fact selection, three generated formats, style controls, auto tags, draft switching, source inspection and Markdown export. Generation waits are shortened and labelled.&lt;/p&gt;

&lt;p&gt;It combines two native browser recordings. There were five real model calls across those sessions; three successful outputs are shown. A rejected Community attempt and an unused Short remain in the evidence. No saved response was replayed into either UI, and the model's prose was not rewritten.&lt;/p&gt;

&lt;p&gt;Here is one small detail worth getting right. The technical input distinguishes gathered materials from craftable goods:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;New content counts: 3 gathered raw materials plus 7 craftable goods = 10 new items total. Only the seven goods are craftable.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The full generated devlog says:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;We have added 10 new items in total, consisting of 3 gathered raw materials and 7 craftable goods.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The short format has a different job. This is its untouched body:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Idle Fantasy Shop now features Crafting Batches in the Workshop. Access requires level 10. Export a backup from Settings before changing devices or clearing browser data.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;With my supplied CTA and Gemma's suggested tag, the post was &lt;strong&gt;252 characters&lt;/strong&gt;. The film removes the tag and exports the remaining text; copy and download match exactly. It keeps Settings and both backup circumstances, while leaving out the full crafting limits. The UI flags unreferenced notes and missing numeric particulars for review.&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/drevendev" rel="noopener noreferrer"&gt;
        drevendev
      &lt;/a&gt; / &lt;a href="https://github.com/drevendev/PatchPitch" rel="noopener noreferrer"&gt;
        PatchPitch
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Turn selected changelog facts into a source-linked announcement draft with local Gemma.
    &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;PatchPitch&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Your product deserves a great story.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Turn selected changelog facts into an announcement people understand. Describe
your product and audience, choose what shipped, generate with local Gemma, inspect
the sources, edit and export Markdown. A small writing workflow with a human final edit.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://drevendev.github.io/PatchPitch/" rel="nofollow noopener noreferrer"&gt;Recorded demo&lt;/a&gt; ·
&lt;a href="https://drevendev.github.io/PatchPitch/assets/demo.mp4" rel="nofollow noopener noreferrer"&gt;63-second video&lt;/a&gt; ·
&lt;a href="https://dev.to/drevendev/patchpitch-your-product-deserves-a-great-story-nao" rel="nofollow"&gt;Build story on DEV&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The hosted demo shows real recorded Gemma outputs; generation runs locally using
the setup below.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Run locally&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Python 3.11+ and &lt;a href="https://ollama.com/" rel="nofollow noopener noreferrer"&gt;Ollama&lt;/a&gt; are required. Tested on Windows 11
with Python 3.12.14 and Ollama 0.40.6. The source is &lt;a href="https://github.com/drevendev/PatchPitch/LICENSE" rel="noopener noreferrer"&gt;MIT licensed&lt;/a&gt;.&lt;/p&gt;
&lt;div class="highlight highlight-source-powershell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;python &lt;span class="pl-k"&gt;-&lt;/span&gt;m venv .venv
.\.venv\Scripts\&lt;span class="pl-c1"&gt;python.exe&lt;/span&gt; &lt;span class="pl-k"&gt;-&lt;/span&gt;m pip install &lt;span class="pl-k"&gt;-&lt;/span&gt;r requirements.txt
ollama pull gemma4:12b
.\.venv\Scripts\&lt;span class="pl-c1"&gt;python.exe&lt;/span&gt; &lt;span class="pl-k"&gt;-&lt;/span&gt;m uvicorn patchpitch.app:app &lt;span class="pl-k"&gt;--&lt;/span&gt;host &lt;span class="pl-c1"&gt;127.0&lt;/span&gt;.&lt;span class="pl-c1"&gt;0.1&lt;/span&gt; &lt;span class="pl-k"&gt;--&lt;/span&gt;port &lt;span class="pl-c1"&gt;8000&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Start Ollama, then open &lt;strong&gt;&lt;a href="http://127.0.0.1:8000" rel="nofollow noopener noreferrer"&gt;http://127.0.0.1:8000&lt;/a&gt;&lt;/strong&gt;. On Linux/macOS use
&lt;code&gt;.venv/bin/python&lt;/code&gt; in place of &lt;code&gt;.venv\Scripts\python.exe&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The upstream is fixed to &lt;code&gt;127.0.0.1:11434&lt;/code&gt;. Set &lt;code&gt;PATCHPITCH_MODEL&lt;/code&gt; to an…&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/drevendev/PatchPitch" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;&lt;a href="https://github.com/drevendev/PatchPitch" rel="noopener noreferrer"&gt;drevendev/PatchPitch&lt;/a&gt; — &lt;strong&gt;MIT&lt;/strong&gt;. The verified implementation is &lt;a href="https://github.com/drevendev/PatchPitch/commit/38619a887fe1109631a9825f6cd1ba8f6c32d0c9" rel="noopener noreferrer"&gt;38619a8&lt;/a&gt;; its &lt;a href="https://github.com/drevendev/PatchPitch/actions/runs/39177318747" rel="noopener noreferrer"&gt;GitHub Actions run&lt;/a&gt; passed &lt;strong&gt;121 tests&lt;/strong&gt;. Automated tests use mocked inference or an offline transport; the recorded model calls are separate evidence.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://github.com/drevendev/PatchPitch#run-locally" rel="noopener noreferrer"&gt;README&lt;/a&gt; has the setup commands: Python 3.11+, Ollama, the selected Gemma model and the pinned Python requirements. The app runs at &lt;code&gt;127.0.0.1:8000&lt;/code&gt;; Ollama stays on loopback. The 12B default needs enough local memory, and another model needs its own writing-quality check.&lt;/p&gt;

&lt;p&gt;The film was recorded on 78e44f8. Later changes add the example-loading fix, optional Sentry tracing and a curly-apostrophe validation fix; its prompts and generated words are unchanged. A hosted recording is a way to inspect the product; real generation runs locally.&lt;/p&gt;

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

&lt;p&gt;FastAPI, Pydantic and vanilla HTML/CSS/JavaScript handle the flow. Unchecked notes stay out of the model payload. Gemma receives selected factual units, a separate voice brief and a JSON schema for the response. Source IDs connect the result to the notes a person can inspect.&lt;/p&gt;

&lt;p&gt;I prepared the example notes from Idle Fantasy Shop's actual &lt;strong&gt;0.11.1 → 0.12 code patch&lt;/strong&gt;, with commit and file references. PatchPitch receives those notes; automatic Git import is still backlog. The tone brief comes from in-game item descriptions. The &lt;a href="https://drevengames.itch.io/idle-fantasy-shop/devlog/1714671/title-012-plan-a-little-let-the-fields-rest" rel="noopener noreferrer"&gt;original devlog&lt;/a&gt; was comparison material only: its prose is absent from the model input.&lt;/p&gt;

&lt;p&gt;The recorded model was &lt;strong&gt;gemma4:12b&lt;/strong&gt; through Ollama 0.40.6, using direct generation for all three formats. The selected requests took &lt;strong&gt;74.7s for Devlog, 12.7s for Community and 4.5s for Short&lt;/strong&gt; on this machine. Those are observations, not a speed promise.&lt;/p&gt;

&lt;p&gt;Real attempts exposed useful failures: a draft called all ten items craftable, another dropped backup circumstances, and a wording check rejected queue capacity as if it promised simultaneous work. I clarified the source notes and improved the schema, prompts and targeted checks. In the full devlog, each assigned source ID is emitted before its paragraph to keep topics in their own slots. Failed and rejected attempts are retained.&lt;/p&gt;

&lt;p&gt;These checks establish structure, budgets and specific wording constraints. They cannot establish semantic truth. The full draft covers all eight selected topics, but parts are more functional than the original devlog's warmer editorial writing. The result still says &lt;strong&gt;Draft — review before publishing&lt;/strong&gt;. Source inspection and the maker's final edit belong in the workflow.&lt;/p&gt;

&lt;h3&gt;
  
  
  Seeing where the time goes with Sentry
&lt;/h3&gt;

&lt;p&gt;Optional Sentry instrumentation records the generation, actual Ollama call and validation. A separate real run on the public fictional Pocket Orchard example produced this trace:&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%2Fn55j5puy3e4f6gggm1sl.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%2Fn55j5puy3e4f6gggm1sl.png" alt="Real Sentry trace: model call, validation, returned model and token usage" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The model call took &lt;strong&gt;15.064s&lt;/strong&gt;; validation took &lt;strong&gt;4.015ms&lt;/strong&gt;. Ollama reported &lt;strong&gt;gemma4:12b&lt;/strong&gt;, &lt;strong&gt;1,590 input tokens&lt;/strong&gt; and &lt;strong&gt;302 output tokens&lt;/strong&gt;. Almost all the recorded time went into the model request. No metered inference API was used; local hardware and electricity still have a cost. Sentry's comparison badge reflects these diagnostic samples, not a controlled benchmark.&lt;/p&gt;

&lt;p&gt;A separate &lt;strong&gt;CONTROLLED_FAILURE&lt;/strong&gt; fed a saved draft containing a TODO placeholder into validation. It produced &lt;code&gt;invalid_draft&lt;/code&gt; and a linked error event, with no fabricated inference span.&lt;/p&gt;

&lt;p&gt;The SDK is off without an explicit DSN. Automatic integrations are disabled, and events plus final transport envelopes use a small metadata allowlist. I inspected the actual HTTP bodies for source notes, output prose and private context. Received-event review also caught Sentry's IP-derived geography enrichment: I enabled IP scrubbing and explicit geo removal, then verified a fresh validation-only event had no User/Geography context. The trace and checks were captured separately after the film.&lt;/p&gt;

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

&lt;p&gt;The open-weight model does the actual writing. Once its weights and the application are installed, the writing flow can run locally without a hosted copywriting API. Upcoming changes and an unpublished tone sample can stay on the developer's machine. Fonts are local too; Sentry is a separate opt-in metadata export.&lt;/p&gt;

&lt;p&gt;The prompt, schema and adapter are inspectable. I could change generation settings and investigate failed responses while keeping the writing step local. The model is replaceable, although equal output quality would need testing. Gemma's weights are downloaded separately and are not relicensed by PatchPitch's MIT license.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/drevendev/BeautifulRepo/blob/master/guides/release-notes.md" rel="noopener noreferrer"&gt;BeautifulRepo's release-note guide&lt;/a&gt; informed the reader-first approach and attention to limitations; attribution is retained. Codex assisted development and the write-up. The film uses local Kokoro narration and original procedural music.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Gemma:&lt;/strong&gt; real local inference writes all three formats.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of GitHub Copilot, via GitHub Actions:&lt;/strong&gt; the &lt;a href="https://dev.to/challenges/hacktoberfest-week2-2026-10-12"&gt;category explicitly includes Actions automation&lt;/a&gt;. &lt;a href="https://github.com/drevendev/PatchPitch/blob/38619a887fe1109631a9825f6cd1ba8f6c32d0c9/.github/workflows/tests.yml" rel="noopener noreferrer"&gt;Our test workflow&lt;/a&gt; runs unit, API and browser checks on pushes and pull requests. &lt;a href="https://github.com/drevendev/PatchPitch/blob/3d1448dde710ab94c9698c9c2cce7a34e4f8285a/.github/workflows/pages.yml" rel="noopener noreferrer"&gt;Our manually dispatched Pages workflow&lt;/a&gt; publishes the approved demo. Codex was the coding assistant.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Sentry Agent Tracing:&lt;/strong&gt; real model and validation spans, observed latency and tokens, a labelled controlled error, and an inspected privacy finding.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Which part of release writing takes you longest: choosing what to include, checking the facts, or adapting the same update for different channels? I would like to hear how you handle it today.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Your product deserves a great story.&lt;/strong&gt;&lt;/p&gt;

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