PatchPitch: Your product deserves a great story A developer built PatchPitch, an MIT-licensed local writing studio that uses locally run Gemma to turn shipped game-update facts into release copy across formats such as devlogs, community posts and short announcements, with voice presets, optional writing samples, auto tags and Markdown export. The tool was tested on the developer's own browser game Idle Fantasy Shop 0.12 patch, where five real model calls produced three successful outputs, and the verified commit passed 121 tests using mocked or offline inference. The developer reports no independent customers or payment results and the app has no checkout. This is a submission for the Hacktoberfest Open-Source AI Challenge Week 2: Side Hustle https://dev.to/challenges/hacktoberfest-week2-2026-10-12 . 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. I used the real 0.12 patch for Idle Fantasy Shop https://drevengames.itch.io/idle-fantasy-shop , 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. PatchPitch 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. 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. 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. 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. Watch the 63-second walkthrough https://drevendev.github.io/PatchPitch/assets/demo.mp4 . 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. 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. Here is one small detail worth getting right. The technical input distinguishes gathered materials from craftable goods: New content counts: 3 gathered raw materials plus 7 craftable goods = 10 new items total. Only the seven goods are craftable. The full generated devlog says: We have added 10 new items in total, consisting of 3 gathered raw materials and 7 craftable goods. The short format has a different job. This is its untouched body: 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. With my supplied CTA and Gemma's suggested tag, the post was 252 characters . 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. drevendev/PatchPitch https://github.com/drevendev/PatchPitch — MIT . The verified implementation is 38619a8 https://github.com/drevendev/PatchPitch/commit/38619a887fe1109631a9825f6cd1ba8f6c32d0c9 ; its GitHub Actions run https://github.com/drevendev/PatchPitch/actions/runs/39177318747 passed 121 tests . Automated tests use mocked inference or an offline transport; the recorded model calls are separate evidence. The README https://github.com/drevendev/PatchPitch run-locally has the setup commands: Python 3.11+, Ollama, the selected Gemma model and the pinned Python requirements. The app runs at 127.0.0.1:8000 ; Ollama stays on loopback. The 12B default needs enough local memory, and another model needs its own writing-quality check. 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. 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. I prepared the example notes from Idle Fantasy Shop's actual 0.11.1 → 0.12 code patch , 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 original devlog https://drevengames.itch.io/idle-fantasy-shop/devlog/1714671/title-012-plan-a-little-let-the-fields-rest was comparison material only: its prose is absent from the model input. The recorded model was gemma4:12b through Ollama 0.40.6, using direct generation for all three formats. The selected requests took 74.7s for Devlog, 12.7s for Community and 4.5s for Short on this machine. Those are observations, not a speed promise. 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. 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 Draft — review before publishing . Source inspection and the maker's final edit belong in the workflow. 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: The model call took 15.064s ; validation took 4.015ms . Ollama reported gemma4:12b , 1,590 input tokens and 302 output tokens . 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. A separate CONTROLLED FAILURE fed a saved draft containing a TODO placeholder into validation. It produced invalid draft and a linked error event, with no fabricated inference span. 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. 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. 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. BeautifulRepo's release-note guide https://github.com/drevendev/BeautifulRepo/blob/master/guides/release-notes.md 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. Your product deserves a great story.