<?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: Rohan Saxena</title>
    <description>The latest articles on DEV Community by Rohan Saxena (@rohan_saxena_aeb51c2d6c34).</description>
    <link>https://dev.to/rohan_saxena_aeb51c2d6c34</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%2F4171574%2F670ab717-ee53-4478-b0e9-4be34503b6a2.png</url>
      <title>DEV Community: Rohan Saxena</title>
      <link>https://dev.to/rohan_saxena_aeb51c2d6c34</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rohan_saxena_aeb51c2d6c34"/>
    <language>en</language>
    <item>
      <title>DEAD AIR: I Built a Haunted System That Won’t Acknowledge Goodbye</title>
      <dc:creator>Rohan Saxena</dc:creator>
      <pubDate>Sat, 31 Oct 2026 21:18:10 +0000</pubDate>
      <link>https://dev.to/rohan_saxena_aeb51c2d6c34/dead-air-i-built-a-haunted-system-that-wont-acknowledge-goodbye-2bam</link>
      <guid>https://dev.to/rohan_saxena_aeb51c2d6c34/dead-air-i-built-a-haunted-system-that-wont-acknowledge-goodbye-2bam</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week4-2026-10-26"&gt;Hacktoberfest Open-Source AI Challenge Week 4: Ghost in the Machine&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;I restart the worker. The message arrives again. Another record appears in the archive, but the queue still says pending. The obvious fix has made the evidence stranger.&lt;/p&gt;

&lt;p&gt;DEAD AIR is a browser horror investigation set inside an abandoned operations console. Meridian Systems closed in 2019. At 02:13, one connection remains active, repeating: “Please don’t shut it down. I’m still here.” You are the incoming archive operator. Your first job is to discover why the machine cannot finish a delivery.&lt;/p&gt;

&lt;p&gt;The loop is concrete: notice an anomaly, inspect the queue, follow a trace, compare explanations, change something, then observe the consequence. Restarting is a temptation, not a required mistake. Pausing is useful too: it contains retries while leaving the pending message and evidence intact. Feedback shows attempts, stored records, queue status, and the acknowledgement route, with links back to the relevant trace.&lt;/p&gt;

&lt;p&gt;MORA, the maintenance operator, helps investigate. It can question a theory, point toward discovered evidence, or explain a recovery procedure when explicitly asked. Its confidence is part of the atmosphere; its authority is deliberately limited.&lt;/p&gt;

&lt;p&gt;Story spoilers: what the haunting becomes&lt;/p&gt;

&lt;p&gt;The voice belongs to Ada Ward in an old family recording. Elena, her daughter, asked the system to preserve an archive until someone could take over. MORA mistook an archived sentence for a present-tense request. The mystery turns from rescue toward memory, attribution, and an obligation without an ending.&lt;/p&gt;

&lt;p&gt;There are two main endings, Preserve and Silence, with four authored outcome variations. An optional custody comparison asks whose name belongs on a recording: the original speaker’s, or the account attached to its delivery. The player can prepare a verified index or leave uncertain attribution sealed. That decision changes what either final choice leaves behind. Preparing an export never establishes that another person received it.&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://dead-air-beta.onrender.com" rel="noopener noreferrer"&gt;Play DEAD AIR&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=ah0-0RGO0ds" rel="noopener noreferrer"&gt;Watch the captioned gameplay demo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/ah0-0RGO0ds" width="710" height="399"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;The recording follows an isolated, fresh investigation through a restart, an evidence-based MORA exchange, recovery, and an archive decision. An explicit warning precedes the story revelation. It records actual gameplay rather than reconstructed dialogue.&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%2Fhq06075v9vfdtwz1gj0r.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%2Fhq06075v9vfdtwz1gj0r.png" alt="DEAD AIR opening screen establishing the operator’s role and warning that public demo saves are temporary." width="800" height="450"&gt;&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%2Fnax3u9kwl4m7ycppii61.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%2Fnax3u9kwl4m7ycppii61.png" alt="The investigation console showing a delivery trace, operational feedback, and MORA’s response with its inference mode visible." width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The free Render demo uses temporary server saves and can take about a minute to wake after inactivity. Exporting keeps a copy of the investigation and discovered fictional evidence; it is not a backup of playable server progress or a bundle of audio recordings. Sound is optional, and comfort controls reduce motion and visual effects.&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://github.com/Rohan-Saxena644/Dead-Air" rel="noopener noreferrer"&gt;Source code on GitHub&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The repository contains the simulator, authored evidence, MORA prompts and tool boundaries, SQLite migrations, tests, deployment configuration, and reproducible recording script. The rules behind every consequence can be read without asking the model what happened.&lt;/p&gt;

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

&lt;p&gt;The application uses Next.js, TypeScript, and SQLite. A pure transition function owns game state: queue attempts, committed records, discovered evidence, repair settings, custody decisions, and endings. Actions carry versions and unique identifiers, so stale updates are rejected and repeated submissions do not repeat an operation.&lt;/p&gt;

&lt;p&gt;The operational failure is delivery after commit: VAULT stores a result, but its acknowledgement never reaches RELAY. A retry can therefore append another record even though the original write succeeded. Idempotency and a functioning return path solve different parts of the problem. Earlier duplicates remain as history; they do not imply corrupted recordings.&lt;/p&gt;

&lt;p&gt;MORA uses &lt;code&gt;gemma-4-26b-a4b-it&lt;/code&gt; through Google AI Studio. Its read-only tools inspect discovered evidence, observed traces, recent events, and available actions. A knowledge projection withholds unrecovered documents. Responses must cite discovered evidence and suggest legal actions. The model cannot perform repairs, create evidence, or select an ending.&lt;/p&gt;

&lt;p&gt;I bounded the entire tool loop to thirty seconds, added a per-session inference lease, and capped shared concurrency and hourly usage in SQLite. Model calls happen outside write transactions. Scripted fallback still compares evidence and offers progressive hints. Suggestions tied to an earlier state are retired when the investigation changes.&lt;/p&gt;

&lt;p&gt;One practical challenge was the native SQLite dependency inside Docker. The recorded container build initially lacked the Python and compiler tools needed to build it. I added those tools to the build stage, while keeping them out of the runtime image. This was packaging work with a visible consequence: the same persistence layer could start in the container.&lt;/p&gt;

&lt;p&gt;Before deployment, 56 unit and integration tests passed. Sixteen production-browser scenarios passed across the initial run and targeted fixes, including all four outcomes, reload restoration, fallback, stale suggestions, and missing-save recovery. Type checking, linting, and the production build also passed. Earlier repository records separately document live Google evaluations and Docker checks.&lt;/p&gt;

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

&lt;p&gt;Gemma is an open-weight foundation. Access to its weights makes independent adaptation and deployment possible under its applicable terms. Those are properties of the model, not features I have implemented in DEAD AIR: this version sends live inference requests to Google. It does not run inference locally or offline, and open weights do not make hosted requests private.&lt;/p&gt;

&lt;p&gt;For this project, openness makes the boundaries inspectable. Someone can examine the prompts, change the investigation behavior, test the evidence filter, or replace authored scenarios while preserving deterministic consequences. An open-weight model also leaves room for independently adapted inference later, without making that a claim about the current application.&lt;/p&gt;

&lt;p&gt;A closed model could implement this interaction too. The value here is an inspectable game and an adaptable model foundation, rather than a claim that one licensing model uniquely enables horror.&lt;/p&gt;

&lt;p&gt;The current limits are small and deliberate: one fixed mystery, authored variations rather than procedural campaigns, Google quota dependence for live chat, and resettable demo saves. Replay explores different decisions; it does not promise a new culprit.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Best Use of Gemma:&lt;/strong&gt; Google-hosted Gemma acts as an investigation partner through bounded, discovery-gated tools. It helps compare theories and interpret operational history while the simulator remains responsible for truth and consequences.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best Use of Render:&lt;/strong&gt; The live game runs as a Docker web service on Render. The server handles the deterministic simulator, SQLite sessions, and Google inference requests; the free deployment clearly discloses its temporary saves.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>ProofPack: Automating the Click-Through After the Feature Is Built</title>
      <dc:creator>Rohan Saxena</dc:creator>
      <pubDate>Mon, 26 Oct 2026 04:50:30 +0000</pubDate>
      <link>https://dev.to/rohan_saxena_aeb51c2d6c34/proofpack-automating-the-click-through-after-the-feature-is-built-25mf</link>
      <guid>https://dev.to/rohan_saxena_aeb51c2d6c34/proofpack-automating-the-click-through-after-the-feature-is-built-25mf</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission 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;Finishing a feature often leaves another chore: click through it again, check what happened, take screenshots, and assemble an explanation someone else can follow.&lt;/p&gt;

&lt;p&gt;I built &lt;a href="https://github.com/Rohan-Saxena644/ProofPack" rel="noopener noreferrer"&gt;ProofPack&lt;/a&gt; to handle that follow-up work.&lt;/p&gt;

&lt;p&gt;ProofPack is an open-source, local-first application that turns a feature brief into a bounded browser demonstration with executable checks and saved evidence. It helps developers demonstrate observable behavior without manually collecting every screenshot and reconstructing every step.&lt;/p&gt;

&lt;p&gt;The user supplies an allowlisted application URL, a description of the behavior, and expected outcomes. For example:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Create an account and a project. Log out, open a fresh browser session, and log back in. Verify that the project is still there.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;An AI model creates a structured plan and chooses actions from observations of the page. A separate browser worker performs those actions, executes assertions, and records what happened.&lt;/p&gt;

&lt;p&gt;The user receives an assertion ledger, an execution timeline, screenshots, downloadable browser traces, and Markdown or self-contained HTML reports.&lt;/p&gt;

&lt;p&gt;The distinction I wanted to preserve is simple: asking a model what should happen is different from collecting evidence of what did happen. In ProofPack, the model proposes the work. Executable checks determine the outcome.&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://youtu.be/gsyb8W6L0BQ" rel="noopener noreferrer"&gt;Watch the ProofPack demonstration on YouTube&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The video shows ProofPack running locally with real Groq inference against Wikipedia. The request is to search for &lt;strong&gt;Go (programming language)&lt;/strong&gt; using Wikipedia’s search field, then verify the destination URL and visible article title.&lt;/p&gt;

&lt;p&gt;Both assertions passed in the final attempt.&lt;/p&gt;

&lt;p&gt;Watch the connection between the request, recorded actions, assertion results, and exported evidence. The standalone HTML report includes its screenshots and opens directly from disk.&lt;/p&gt;

&lt;p&gt;The video uses selected recording segments with waiting omitted. The article is also opened separately for review after the AI run. An earlier screenshot timeout remains in the run history; the successful retry does not erase it.&lt;/p&gt;

&lt;p&gt;I also built two controlled target applications called LaunchDesk. They support the same account-and-project workflow, but one deliberately loses project visibility after a fresh login.&lt;/p&gt;

&lt;p&gt;Recorded live Groq runs show the contrast: the working version passed &lt;strong&gt;4/4 checks&lt;/strong&gt;, while the broken version passed &lt;strong&gt;3/4&lt;/strong&gt;, failing the final persistence check. Screenshots preserve the observed missing project.&lt;/p&gt;

&lt;p&gt;LaunchDesk is a controlled demonstration of the workflow. The Wikipedia example separately exercises a read-only interaction with a public website.&lt;/p&gt;

&lt;p&gt;ProofPack itself runs locally; there is no public hosted dashboard.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Source code:&lt;/strong&gt; &lt;a href="https://github.com/Rohan-Saxena644/ProofPack" rel="noopener noreferrer"&gt;github.com/Rohan-Saxena644/ProofPack&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The repository contains the application, separate worker, controlled targets, model adapters, verification scripts, screenshots, and recorded verification results.&lt;/p&gt;

&lt;p&gt;To try it, install dependencies with &lt;code&gt;npm ci&lt;/code&gt;, install Chromium with &lt;code&gt;npm run browsers&lt;/code&gt;, copy &lt;code&gt;.env.example&lt;/code&gt; to &lt;code&gt;.env&lt;/code&gt;, and run &lt;code&gt;npm run dev:all&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The default fixture mode needs no model key. It uses deterministic decisions with a real browser and is explicitly labeled. Live mode requires provider configuration and credentials.&lt;/p&gt;

&lt;p&gt;The original application source is MIT-licensed. Dependencies and model weights have their own licenses.&lt;/p&gt;

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

&lt;p&gt;The demonstrated AI configuration uses &lt;strong&gt;OpenAI’s open-weight GPT-OSS 120B model&lt;/strong&gt;, identified as &lt;code&gt;openai/gpt-oss-120b&lt;/code&gt;, through &lt;strong&gt;Groq’s hosted inference service&lt;/strong&gt;. Groq serves the model; inference is not running on my laptop.&lt;/p&gt;

&lt;p&gt;The execution path starts in a Next.js and React dashboard. The API validates the request and queues it in SQLite. A separate Node.js worker claims the job and runs Playwright Chromium, keeping long browser sessions outside the web request lifecycle.&lt;/p&gt;

&lt;p&gt;The planner produces named goals and explicit assertion specifications. Zod validates that structure, including the requirement that every assertion belongs to exactly one goal.&lt;/p&gt;

&lt;p&gt;During execution, the worker observes bounded page text and accessible controls. The model receives control IDs, labels, roles, relevant form state, and previously executed actions. It chooses from a small action vocabulary: fill, click, select, navigate, assert, capture, start a fresh browser context, or complete a goal.&lt;/p&gt;

&lt;p&gt;The model cannot submit arbitrary JavaScript, selectors, shell commands, or Playwright code. The executor owns those operations.&lt;/p&gt;

&lt;p&gt;Assertions currently check exact visible text or exact URLs. Their expected values, observed results, and evidence references are persisted. Finalization checks the ledger before accepting a pass, and report generation checks it again. Reports are assembled deterministically, so a summarizing model cannot rewrite a failed result into a success.&lt;/p&gt;

&lt;p&gt;One implementation problem came from the meaning of past actions. Control IDs belong to individual page observations. Earlier live runs repeated work when the model interpreted old IDs against the current page. I added execution provenance, before-and-after URLs, current-goal context, and guards against unchanged repeated actions.&lt;/p&gt;

&lt;p&gt;The Wikipedia run exposed another practical limit: long observations could exceed the provider’s token allowance, and full-page screenshots could time out. I compacted model-facing control metadata, bounded the text sent for decisions, and switched evidence capture to viewport screenshots. Text assertions scroll their target into view before capture.&lt;/p&gt;

&lt;p&gt;Failure handling also matters. A contradicted assertion is &lt;strong&gt;Failed&lt;/strong&gt;. An unavailable target, exhausted budget, or model problem is &lt;strong&gt;Blocked&lt;/strong&gt;. Worker leases expose interrupted attempts; a manual retry starts fresh browser state and retains earlier evidence.&lt;/p&gt;

&lt;p&gt;Shared quota scheduling coordinates workers using the same database, but cannot create additional provider capacity. Exact-origin restrictions constrain browser traffic. Generated passwords are substituted by the executor, masked in screenshots, and redacted from finalized traces.&lt;/p&gt;

&lt;p&gt;Verification includes &lt;strong&gt;28 automated unit and improvement tests&lt;/strong&gt;, &lt;strong&gt;eight fixture browser verification groups&lt;/strong&gt;, and &lt;strong&gt;seven additional production UI groups&lt;/strong&gt;. Fixture decisions are separate from real inference. Recorded Groq runs independently exercised working and broken persistence, and the latest public-site run passed both Wikipedia checks. Type checking, lint, and the production build also passed.&lt;/p&gt;

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

&lt;p&gt;For ProofPack, openness makes the automation inspectable and adaptable.&lt;/p&gt;

&lt;p&gt;The source exposes how plans are validated, which actions are permitted, how assertions work, and how evidence becomes a report. Someone can change those rules instead of depending on an opaque demonstration service.&lt;/p&gt;

&lt;p&gt;The adapter boundary also separates model choice from browser execution. Groq with GPT-OSS 120B is the configuration I actually verified. OpenRouter and local OpenAI-compatible endpoints are implemented, but real inference through those paths remains unverified.&lt;/p&gt;

&lt;p&gt;The current demonstration is therefore not offline. Briefs and bounded page observations are sent to Groq. Screenshots and traces remain local.&lt;/p&gt;

&lt;p&gt;I also keep the application’s MIT license separate from model licensing. Open components offer useful control and replacement options; they do not remove the need to validate outputs or check behavior.&lt;/p&gt;

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

&lt;p&gt;During the build, ProofPack performed the repeated account creation, project creation, logout, fresh-session login, and persistence checks against LaunchDesk. It also performed the public Wikipedia search and collected its evidence.&lt;/p&gt;

&lt;p&gt;That replaces a concrete sequence of manual browser interactions and evidence assembly. I did not measure a comparable manual baseline, so I am not claiming a particular number of minutes saved.&lt;/p&gt;

&lt;p&gt;The user still defines success, configures allowed targets, reviews the proposed coverage and results, and investigates failures. ProofPack does not establish that an application is bug-free or support every website workflow.&lt;/p&gt;

&lt;p&gt;The payoff is having the exercised steps and their evidence ready to inspect, rather than having to repeat the walkthrough and piece the explanation together afterward.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>ai</category>
      <category>opensource</category>
    </item>
    <item>
      <title>FlowMedic: Investigating Broken Automations Before You Hit Retry</title>
      <dc:creator>Rohan Saxena</dc:creator>
      <pubDate>Mon, 19 Oct 2026 05:04:04 +0000</pubDate>
      <link>https://dev.to/rohan_saxena_aeb51c2d6c34/flowmedic-investigating-broken-automations-before-you-hit-retry-27jo</link>
      <guid>https://dev.to/rohan_saxena_aeb51c2d6c34/flowmedic-investigating-broken-automations-before-you-hit-retry-27jo</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week2-2026-10-12"&gt;Hacktoberfest Open-Source AI Challenge Week 2: Side Hustle&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;An order-creation workflow times out. Do you retry it?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The workflow stopped receiving a response, but the remote system might already have created the order. Another attempt could create a duplicate.&lt;/p&gt;

&lt;p&gt;That uncertainty is the problem behind &lt;strong&gt;FlowMedic&lt;/strong&gt;, an AI-powered failure investigator for freelancers and small agencies maintaining n8n automations.&lt;/p&gt;

&lt;p&gt;These operators connect the systems businesses depend on: lead forms, CRMs, invoices, orders, and customer notifications. When something breaks, they need to reconstruct what happened, explain it to a client, and choose a sensible next step.&lt;/p&gt;

&lt;p&gt;FlowMedic brings that investigation into one workspace. It receives an n8n failure event, gathers available evidence, and uses &lt;strong&gt;Gemma running locally through Ollama&lt;/strong&gt; to produce:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A root-cause hypothesis and explanation.&lt;/li&gt;
&lt;li&gt;References to the evidence behind it.&lt;/li&gt;
&lt;li&gt;A proposed fix.&lt;/li&gt;
&lt;li&gt;Missing information and retry risk.&lt;/li&gt;
&lt;li&gt;A recovery recommendation for a human to review.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The dashboard combines those findings with execution details, an investigation timeline, and an audit history.&lt;/p&gt;

&lt;p&gt;The intended customer is a freelancer or agency responsible for roughly &lt;strong&gt;5–50 workflows&lt;/strong&gt;. My initial pricing hypothesis is &lt;strong&gt;$29/month for a solo workspace&lt;/strong&gt;. The value to validate is having useful investigation context and recovery decisions in one place.&lt;/p&gt;

&lt;p&gt;I haven’t established willingness to pay, implemented billing, or measured customer time savings. Those are questions for customer validation rather than claims about the MVP.&lt;/p&gt;

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

&lt;p&gt;FlowMedic currently runs locally. The repository includes setup instructions and three reproducible scenarios that exercise the application pipeline.&lt;/p&gt;

&lt;h3&gt;
  
  
  A CRM hits its rate limit
&lt;/h3&gt;

&lt;p&gt;An HTTP 429 response includes a retry delay. FlowMedic investigates the evidence and offers a human-approved, bounded demo retry.&lt;/p&gt;

&lt;h3&gt;
  
  
  A field gets lost in translation
&lt;/h3&gt;

&lt;p&gt;The receiving step expects &lt;code&gt;email&lt;/code&gt;, while the incoming payload contains &lt;code&gt;email_address&lt;/code&gt;. The evidence helps the operator inspect the mapping. Replaying the unchanged workflow remains blocked.&lt;/p&gt;

&lt;h3&gt;
  
  
  An order request times out
&lt;/h3&gt;

&lt;p&gt;The request body was sent, but its remote outcome is unknown. FlowMedic flags the uncertainty and blocks blind retry.&lt;/p&gt;

&lt;p&gt;The scenario failures and executable recovery adapter are simulated. &lt;strong&gt;Model inference, database persistence, Temporal orchestration, and operator decisions are real.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I also verified the integration against a local &lt;strong&gt;n8n 2.43.7&lt;/strong&gt; instance. A production webhook deliberately failed, its Error Workflow delivered the event, and FlowMedic fetched permitted workflow and execution evidence before running a Gemma investigation.&lt;/p&gt;

&lt;p&gt;This post includes the repository and local reproduction instructions; it does not include a hosted application or video walkthrough.&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://github.com/Rohan-Saxena644/FlowMedic" rel="noopener noreferrer"&gt;View FlowMedic on GitHub&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The repository includes the application, importable n8n examples, scenario fixtures, setup instructions, model evaluation reports, and verification notes.&lt;/p&gt;

&lt;p&gt;FlowMedic’s source is MIT licensed. Model weights and dependencies retain their respective licenses.&lt;/p&gt;

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

&lt;p&gt;FlowMedic is a &lt;strong&gt;TypeScript pnpm monorepo&lt;/strong&gt; built with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Next.js&lt;/strong&gt; for the interface.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fastify&lt;/strong&gt; for ingestion and operator APIs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PostgreSQL and Drizzle&lt;/strong&gt; for persistent incident state.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mastra&lt;/strong&gt; for the investigation agent and typed tools.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gemma through Ollama&lt;/strong&gt; for local inference.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Temporal&lt;/strong&gt; for durable investigation and approval workflows.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  How an investigation works
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;First, n8n reports a failure.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;FlowMedic authenticates the delivery, redacts common secrets, normalizes the event, and stores it in PostgreSQL. A database uniqueness constraint protects against duplicate deliveries.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Next, Temporal coordinates the investigation.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Five typed, read-only tools gather execution details, workflow metadata, failure context, related incidents, and retry-policy evidence.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mastra then calls Gemma with the gathered evidence.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The backend explicitly runs the tools before generation; it does not assume Gemma supports native function calling. Native structured output and Zod validation constrain the diagnosis format.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The diagnosis and recovery proposal are persisted.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The dashboard shows the explanation, supporting evidence, missing information, and proposed next step.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Finally, the workflow waits for a human decision.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The backend independently checks recovery eligibility. A model recommendation cannot authorize a retry. Only eligible demo cases can execute the simulated recovery adapter; live n8n retries remain disabled.&lt;/p&gt;

&lt;p&gt;Temporal handles activity retries, backoff, and the approval wait. A verified worker-restart test showed an investigation continuing with its existing diagnosis and completing one simulated recovery.&lt;/p&gt;

&lt;h3&gt;
  
  
  What testing taught me
&lt;/h3&gt;

&lt;p&gt;The verification log records &lt;strong&gt;53 passing automated tests&lt;/strong&gt;, successful typechecks and a production build, alongside actual model-backed scenario runs.&lt;/p&gt;

&lt;p&gt;I compared Gemma 1B and 4B using the same three fixed evidence inputs. Both passed every behavioral probe in two of the three scenarios, but they failed differently. The smaller model omitted an expected field name; the larger model identified both fields but failed a retry-recommendation check.&lt;/p&gt;

&lt;p&gt;The real n8n test exposed another limitation: the model recognized the deliberate failure but also suggested an unsupported webhook problem.&lt;/p&gt;

&lt;p&gt;Those results remain documented. &lt;strong&gt;Schema-valid output can still contain an incorrect explanation.&lt;/strong&gt; That is why FlowMedic exposes the evidence and keeps recovery authorization outside the model.&lt;/p&gt;

&lt;p&gt;I used Codex to help implement, test, and iterate on the project.&lt;/p&gt;

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

&lt;p&gt;Automation logs can contain client information. Running Gemma locally gives an operator control over where investigation evidence is processed, without requiring a proprietary model API.&lt;/p&gt;

&lt;p&gt;Open weights also let me compare model sizes on my own machine and inspect the tradeoff between runtime and output quality. The configured model and endpoint can change without replacing the surrounding incident workflow.&lt;/p&gt;

&lt;p&gt;Mastra and Temporal make the orchestration inspectable too: how evidence is gathered, how generation is validated, what happens when an activity fails, and how a human decision reaches a waiting investigation.&lt;/p&gt;

&lt;p&gt;Local inference does not make the system free to operate. Hardware, electricity, hosting, and maintenance still matter. It does provide a path to running the core investigation without a required per-request commercial model bill.&lt;/p&gt;

&lt;p&gt;The current application is a trusted local, single-operator MVP. Public authentication, multi-tenancy, billing, and live n8n recovery remain future work.&lt;/p&gt;

&lt;p&gt;My next validation step is to put it in front of an automation freelancer and watch them investigate a failure from their own workflow.&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 performs actual structured investigations over gathered evidence through local Ollama inference.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Mastra:&lt;/strong&gt; A Mastra agent generates diagnoses from typed, read-only evidence-tool results.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Temporal:&lt;/strong&gt; Durable workflows coordinate investigations, activity retries, backoff, and human approval, including a verified worker-restart path.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>TrailTape: Step Outside, Come Back With a Story</title>
      <dc:creator>Rohan Saxena</dc:creator>
      <pubDate>Sun, 11 Oct 2026 15:57:33 +0000</pubDate>
      <link>https://dev.to/rohan_saxena_aeb51c2d6c34/trailtape-step-outside-come-back-with-a-story-1efk</link>
      <guid>https://dev.to/rohan_saxena_aeb51c2d6c34/trailtape-step-outside-come-back-with-a-story-1efk</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week1-2026-10-05"&gt;Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;TrailTape turns a short outdoor break into three observation missions and a journal grounded in your own notes.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I wanted something that gave me a reason to step outside without turning the whole walk into another activity on my phone. The workflow is simple: prepare before leaving, pay attention outside, and reflect after returning.&lt;/p&gt;

&lt;p&gt;Choose your available time, surroundings, and interests. Gemma generates a mission card you can print or save before putting the screen away.&lt;/p&gt;

&lt;p&gt;The card in my demo asks you to compare rustling leaves during a breeze, notice differences between two trees’ bark, and listen for bird calls. You don’t have to complete every mission.&lt;/p&gt;

&lt;p&gt;After returning, you can type observations or record or upload voice notes. You review and correct the transcript before saving it. TrailTape then creates a field journal containing your original missions, observations, tentative reflections, and one suggestion for your next outing.&lt;/p&gt;

&lt;p&gt;Source links let you return to the notes behind the journal. You can also revisit saved walks and export them as Markdown.&lt;/p&gt;

&lt;p&gt;It’s for anyone who wants a small, achievable reason to get outside—especially when “go for a walk” feels too vague.&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://trailtape.onrender.com/" rel="noopener noreferrer"&gt;Try TrailTape&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://youtu.be/x7zuo71I-_8" rel="noopener noreferrer"&gt;Watch the video walkthrough&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The video demonstrates mission creation, audio uploads and transcription, saved observations, and the finished journal.&lt;/p&gt;

&lt;p&gt;It is a live app walkthrough using scripted sample observations, rather than a recording of an outdoor field test.&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://github.com/Rohan-Saxena644/TrailTape" rel="noopener noreferrer"&gt;TrailTape on GitHub&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The repository includes setup instructions, an environment-variable example, and verification notes.&lt;/p&gt;

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

&lt;p&gt;TrailTape uses &lt;strong&gt;Next.js and TypeScript&lt;/strong&gt; for the interface, an &lt;strong&gt;Express backend&lt;/strong&gt;, &lt;strong&gt;Gemma&lt;/strong&gt; for mission and journal generation, and a separate &lt;strong&gt;Whisper transcription adapter&lt;/strong&gt; for audio notes. The application is deployed on &lt;strong&gt;Render&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Gemma has two roles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Before an outing, it turns the user’s time, setting, and interests into short observation tasks.&lt;/li&gt;
&lt;li&gt;Afterwards, it organizes saved notes into a journal and proposes a follow-up mission.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The backend validates structured model responses with Zod before the interface uses them. Journal observations retain the saved note text, and source references connect generated sections to their inputs. That makes the output easier to inspect, though it doesn’t guarantee every interpretation is correct.&lt;/p&gt;

&lt;p&gt;Transcription is deliberately editable. A recording shouldn’t become the final record until the person who made it has checked what the model heard.&lt;/p&gt;

&lt;p&gt;An early journal felt too generic. I refined the prompts to ask for more specific missions and reflections tied to the notes, then made the original missions and source notes easier to find in the finished journal.&lt;/p&gt;

&lt;p&gt;Deployment also exposed a practical issue: the production install skipped the development dependencies needed to compile TypeScript. Including those dependencies during the build fixed it.&lt;/p&gt;

&lt;p&gt;Walk history stays in browser storage. Generation and transcription use hosted APIs, so this version requires internet access and sends the relevant inputs to those providers.&lt;/p&gt;

&lt;p&gt;I used Codex to help implement and iterate on the project.&lt;/p&gt;

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

&lt;p&gt;Gemma’s open weights give TrailTape options beyond one hosted API. They make it possible to explore other hosting arrangements or a future local version, subject to the model’s terms and hardware requirements.&lt;/p&gt;

&lt;p&gt;That flexibility matters for an application built around personal observations. I chose hosted inference for this version, but local processing is a direction I can explore without replacing the core model family with a proprietary alternative.&lt;/p&gt;

&lt;p&gt;Generation and transcription are separate adapters, which helps keep provider-specific code out of the interface. Changing providers would still need implementation and testing, but the application isn’t built entirely around one provider’s client library.&lt;/p&gt;

&lt;p&gt;The source-linked journal reflects another priority: people should be able to inspect what the system produced. A reader can return to the original observation and decide whether a reflection is supported.&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 powers the observation missions and the journal generated from saved notes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Render:&lt;/strong&gt; Render hosts the Next.js interface and Express API together, providing the public application linked above.&lt;/li&gt;
&lt;/ul&gt;

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