<?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: Omar Baró</title>
    <description>The latest articles on DEV Community by Omar Baró (@unfire).</description>
    <link>https://dev.to/unfire</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%2F4160885%2F41bd30d6-d1b9-4cf7-9909-2565a6756072.png</url>
      <title>DEV Community: Omar Baró</title>
      <link>https://dev.to/unfire</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/unfire"/>
    <language>en</language>
    <item>
      <title>BOLT Outside 15: a tiny local Qwen planner that helps me close the laptop</title>
      <dc:creator>Omar Baró</dc:creator>
      <pubDate>Thu, 08 Oct 2026 16:58:54 +0000</pubDate>
      <link>https://dev.to/unfire/bolt-outside-15-a-tiny-local-qwen-planner-that-helps-me-close-the-laptop-2dkp</link>
      <guid>https://dev.to/unfire/bolt-outside-15-a-tiny-local-qwen-planner-that-helps-me-close-the-laptop-2dkp</guid>
      <description>&lt;p&gt;&lt;em&gt;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;BOLT Outside 15&lt;/strong&gt; is a deliberately small, open-source CLI for moments when getting outside feels like another planning task. Pick &lt;em&gt;observe&lt;/em&gt;, &lt;em&gt;walk&lt;/em&gt;, or &lt;em&gt;garden&lt;/em&gt;, plus a time budget from 10 to 60 minutes. A local open-weight AI model generates a short activity idea. The last line is not an "autonomous agent" action; it is an explicit reminder that &lt;strong&gt;the human decides&lt;/strong&gt; whether the idea makes sense and conditions are safe.&lt;/p&gt;

&lt;p&gt;I developed this standalone prototype in Catalonia, Spain on October 8, 2026, during this challenge's build window. It is not a rebranded release of my earlier BOLT software. I wanted to avoid turning a simple outdoor break into an account, mapping app, or more screen time.&lt;/p&gt;

&lt;p&gt;The ideal interaction should last under a minute. Ask for one idea, leave the screen, and do the activity only if it is suitable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo — real local inference
&lt;/h2&gt;

&lt;p&gt;This command was executed on my MacBook with Ollama already running and Qwen2.5 1.5B installed:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;node src.mjs &lt;span class="nt"&gt;--mode&lt;/span&gt; observe &lt;span class="nt"&gt;--minutes&lt;/span&gt; 15
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;An actual model response started:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Prepare:&lt;/strong&gt; Choose a quiet spot and sit comfortably.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;First Two Minutes:&lt;/strong&gt; Breathe and observe colors, sounds and sensations.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Next Steps:&lt;/strong&gt; Engage in a simple activity.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Stop or Alternative:&lt;/strong&gt; Stop if uncomfortable and choose an indoor option.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;This is a truthful excerpt, not a curated claim of perfect generation.&lt;/strong&gt; The unfiltered live result also suggested talking to someone nearby despite my prompt discouraging approaching strangers. That exposed a limitation: a safety-aware prompt is not a guarantee. The CLI therefore warns that it is only a suggestion, not navigation, healthcare, accessibility or weather advice.&lt;/p&gt;

&lt;p&gt;You can reproduce the demo with the commands in the README. It runs entirely on the local machine after downloading the model.&lt;/p&gt;

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

&lt;p&gt;Public MIT-licensed source, installation instructions and five automated tests:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/ondmindmanagement-hub/bolt-outside-15" rel="noopener noreferrer"&gt;ondmindmanagement-hub/bolt-outside-15&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The repository was created for this challenge. It is a new and very small experiment, not a finished commercial product, and I do not claim adoption statistics or external beta users.&lt;/p&gt;

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

&lt;p&gt;The pipeline intentionally keeps the authority boundary simple:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mode + minutes
      |
      v
deterministic option validation
      |
      v
bounded activity prompt
      |
      v
Ollama on localhost:11434
      |
      v
Qwen2.5 1.5B text generation
      |
      v
four-part suggestion + human approval reminder
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I used &lt;strong&gt;Node.js&lt;/strong&gt;, the built-in &lt;code&gt;fetch&lt;/code&gt; API, &lt;strong&gt;Ollama&lt;/strong&gt;, and the open-weight &lt;strong&gt;Qwen2.5:1.5b&lt;/strong&gt; model. The model is central: it actually composes the suggestion. There is no prewritten activity database pretending to be an LLM. If inference fails, the program reports an error rather than inventing a successful AI reply.&lt;/p&gt;

&lt;p&gt;The code deliberately never requests current GPS coordinates, a user account, API keys or health information. Input validation rejects unknown activities, fractional time budgets and durations above 60 minutes.&lt;/p&gt;

&lt;p&gt;Verification on October 8:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;5/5 automated tests passed&lt;/strong&gt; using Node's built-in test runner.&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;separate real inference call&lt;/strong&gt; completed against the locally installed Qwen model.&lt;/li&gt;
&lt;li&gt;The actual output's imperfection is documented in the README, rather than silently discarded.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AI assistance was used to draft and review this prototype and write-up; the code was also exercised with automated tests and real local inference. I reviewed the visible results and am not presenting the model as an independently safety-certified planner.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Open Innovation Matters
&lt;/h2&gt;

&lt;p&gt;Local inference is meaningful here because a personal micro-break should not require telling a cloud service where I am, what I intend to do, or when I leave home. The actual model request stays on &lt;code&gt;127.0.0.1&lt;/code&gt;. The software and prompt are inspectable, and another builder can swap in a different Ollama-compatible model.&lt;/p&gt;

&lt;p&gt;This is also a good example of why &lt;em&gt;open&lt;/em&gt; does not mean &lt;em&gt;perfect&lt;/em&gt;: users can run the tests, see the limitations, and improve the model-independent checks instead of trusting a black box.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Would Improve
&lt;/h2&gt;

&lt;p&gt;Before I'd recommend this to strangers, I'd add a deterministic post-generation rule checker and an explicit consent screen; test the suggestions in multiple languages; use genuine user research to measure whether it helps anybody spend less time on screens; and build a smaller, accessible UI. Right now it's a &lt;strong&gt;working proof of concept&lt;/strong&gt;, not an accessibility or safety product.&lt;/p&gt;

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

&lt;p&gt;I'm entering the &lt;strong&gt;overall Week 1 open-source AI challenge&lt;/strong&gt; only. I have not integrated a partner product, so I am not claiming eligibility for sponsor-specific prizes.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Built by Omar Baró (Unfire), Spain. Source code: &lt;a href="https://github.com/ondmindmanagement-hub/bolt-outside-15" rel="noopener noreferrer"&gt;https://github.com/ondmindmanagement-hub/bolt-outside-15&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>Field Break: an open-weight AI that tells you to close the screen</title>
      <dc:creator>Omar Baró</dc:creator>
      <pubDate>Mon, 05 Oct 2026 22:55:45 +0000</pubDate>
      <link>https://dev.to/unfire/field-break-an-open-weight-ai-that-tells-you-to-close-the-screen-35j9</link>
      <guid>https://dev.to/unfire/field-break-an-open-weight-ai-that-tells-you-to-close-the-screen-35j9</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 built &lt;strong&gt;Field Break&lt;/strong&gt;, a deliberately small AI tool whose success condition is that you stop using it.&lt;/p&gt;

&lt;p&gt;You tell it four things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;how many minutes you have;&lt;/li&gt;
&lt;li&gt;your energy level;&lt;/li&gt;
&lt;li&gt;what kind of outdoor space is nearby;&lt;/li&gt;
&lt;li&gt;one constraint, such as “stay close to home” or “no car”.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It returns &lt;strong&gt;one&lt;/strong&gt; micro-adventure that can start almost immediately, plus a final instruction telling you when to lock the screen.&lt;/p&gt;

&lt;p&gt;That last part is the product idea. Most AI apps optimize for more conversation. Field Break optimizes for the shortest useful interaction possible.&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%2F5n256n6yny7q5nxcllr3.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%2F5n256n6yny7q5nxcllr3.png" alt="Field Break UI" width="800" height="520"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;The 36-second demo is here:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://raw.githubusercontent.com/ondmindmanagement-hub/field-break/main/demo/field-break-demo.mp4" rel="noopener noreferrer"&gt;https://raw.githubusercontent.com/ondmindmanagement-hub/field-break/main/demo/field-break-demo.mp4&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A live Apertus 1.5 70B test was also captured during the challenge. Given 20 minutes, medium energy, neighbourhood streets and a small park, the model produced a “Neighbourhood Pocket Adventure” and ended with:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Turn off phone and let adventure unfold offline&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The exact prompt and result are preserved in the repository so the model evidence is inspectable rather than described from memory.&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/ondmindmanagement-hub" rel="noopener noreferrer"&gt;
        ondmindmanagement-hub
      &lt;/a&gt; / &lt;a href="https://github.com/ondmindmanagement-hub/field-break" rel="noopener noreferrer"&gt;
        field-break
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Open-weight AI micro-adventures that get you off the screen — Hacktoberfest Week 1
    &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;Field Break&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;Hacktoberfest Open-Source AI Challenge — Week 1: Touch Grass&lt;/p&gt;
&lt;p&gt;Field Break turns a small amount of free time into one simple outdoor micro-adventure, then explicitly tells the user to put the screen away.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Open-source AI core&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;The app is designed for the open-weight Apertus 1.5 model through an OpenAI-compatible endpoint. The provider/model are environment-configurable, so the project can switch to another open-weight deployment without changing the UI.&lt;/p&gt;
&lt;p&gt;Run with real model inference by setting:&lt;/p&gt;
&lt;p&gt;OPEN_MODEL_API_KEY
OPEN_MODEL_API_URL=&lt;a href="https://api.publicai.co/v1/chat/completions" rel="nofollow noopener noreferrer"&gt;https://api.publicai.co/v1/chat/completions&lt;/a&gt;
OPEN_MODEL_NAME=swiss-ai/apertus-v1.5-8b&lt;/p&gt;
&lt;p&gt;Without a key, the prototype runs a clearly labelled deterministic demo-policy; it never pretends that fallback output is model inference.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Why open innovation matters&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;The planning layer is not locked to one proprietary model or API. An open-weight model can be self-hosted, swapped, audited, or moved closer to the user's data. For a tiny tool whose purpose is to get you away from the screen, that simplicity matters.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Safety&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;Field…&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/ondmindmanagement-hub/field-break" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Repository: &lt;a href="https://github.com/ondmindmanagement-hub/field-break" rel="noopener noreferrer"&gt;https://github.com/ondmindmanagement-hub/field-break&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The project is intentionally dependency-light: a Python standard-library server, a small browser UI, three unit tests, and an OpenAI-compatible adapter for an open-weight model endpoint.&lt;/p&gt;

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

&lt;p&gt;The open model at the center is &lt;strong&gt;Apertus 1.5&lt;/strong&gt;, with the default configuration pointing to &lt;code&gt;swiss-ai/apertus-v1.5-8b&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The model receives only the context the user provides. The system prompt explicitly tells it not to invent live weather, trail closures, local conditions, or medical claims. It must prefer something local, simple, low-cost and reversible.&lt;/p&gt;

&lt;p&gt;The output is structured JSON:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;title;&lt;/li&gt;
&lt;li&gt;number of minutes;&lt;/li&gt;
&lt;li&gt;a short plan;&lt;/li&gt;
&lt;li&gt;what to bring;&lt;/li&gt;
&lt;li&gt;a &lt;code&gt;screen_exit&lt;/code&gt; instruction.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That structure matters because I did not want another chat interface that can drift into an endless conversation. Field Break asks for one decision and then gets out of the way.&lt;/p&gt;

&lt;p&gt;The provider and model are environment-configurable:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;OPEN_MODEL_API_KEY=...
OPEN_MODEL_API_URL=https://api.publicai.co/v1/chat/completions
OPEN_MODEL_NAME=swiss-ai/apertus-v1.5-8b
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If no model key is configured, the app switches to an explicitly labelled &lt;code&gt;demo-policy&lt;/code&gt;. It never claims that deterministic fallback output came from the model.&lt;/p&gt;

&lt;p&gt;I also added tests for JSON extraction, output normalization and the demo planner. All three are passing.&lt;/p&gt;

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

&lt;p&gt;For this project, open innovation is not a decorative technology choice.&lt;/p&gt;

&lt;p&gt;A closed planning API would make the smallest part of the product — deciding what to do outside — dependent on one vendor. With an open-weight model, the inference layer can be moved, swapped or self-hosted without changing the experience.&lt;/p&gt;

&lt;p&gt;That becomes especially interesting for a tool whose philosophy is &lt;strong&gt;less cloud, less screen, less dependency&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The project can use a hosted Apertus endpoint today, but the interface is deliberately compatible with a future local or privately hosted deployment. The user interface does not need to know which provider is behind it.&lt;/p&gt;

&lt;p&gt;Open weights also make the model choice inspectable. The project is not pretending that “AI” is a magic black box; the model family, prompt, evidence and fallback behavior are all visible in the repo.&lt;/p&gt;

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

&lt;p&gt;The challenge theme pushed me to reverse the normal metric.&lt;/p&gt;

&lt;p&gt;Instead of “How many messages can the user send?”, I asked:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How quickly can the software become unnecessary?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That changed the design:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;no feed;&lt;/li&gt;
&lt;li&gt;no history requirement;&lt;/li&gt;
&lt;li&gt;no engagement loop;&lt;/li&gt;
&lt;li&gt;one plan;&lt;/li&gt;
&lt;li&gt;one exit instruction.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The best output is not the most impressive paragraph. It is the one that makes someone say “okay” and leave the desk.&lt;/p&gt;

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

&lt;p&gt;I am entering the &lt;strong&gt;overall Hacktoberfest Open-Source AI Challenge Week 1&lt;/strong&gt; category.&lt;/p&gt;

&lt;p&gt;I did not add a partner category just to increase eligibility; the project only claims technologies it actually uses.&lt;/p&gt;

&lt;h2&gt;
  
  
  Build Evidence
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;New project created during the Week 1 challenge window.&lt;/li&gt;
&lt;li&gt;Public GitHub repository.&lt;/li&gt;
&lt;li&gt;3/3 tests passing.&lt;/li&gt;
&lt;li&gt;Live Apertus 1.5 70B evidence captured from Public AI / CSCS infrastructure.&lt;/li&gt;
&lt;li&gt;Short demo video and screenshots included in the repo.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Field Break is small on purpose. The screen should be the shortest part of the experience.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>BOLT PayFlow Guard: Open AI That Cannot Spend Without You</title>
      <dc:creator>Omar Baró</dc:creator>
      <pubDate>Mon, 05 Oct 2026 05:18:11 +0000</pubDate>
      <link>https://dev.to/unfire/bolt-payflow-guard-open-ai-that-cannot-spend-without-you-2536</link>
      <guid>https://dev.to/unfire/bolt-payflow-guard-open-ai-that-cannot-spend-without-you-2536</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;I built &lt;strong&gt;BOLT PayFlow Guard&lt;/strong&gt;, a governed AI payment workflow designed around one rule: &lt;strong&gt;AI can propose, but a person must authorize the consequential action.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I built it for &lt;strong&gt;a close friend&lt;/strong&gt;, who uses AI tools but does not want an AI agent to have silent authority over money. The problem is not whether AI can understand a payment request; it is whether that recommendation can become an irreversible action without explicit human control.&lt;/p&gt;

&lt;p&gt;A user can write a natural-language request such as:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Pay 1 EUR for a test purchase.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The local AI turns that into structured JSON with whether a payment is recommended, the proposed amount, and the reason.&lt;/p&gt;

&lt;p&gt;But nothing is paid. A separate approval gate blocks the payment path until explicit human authorization exists.&lt;/p&gt;

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

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

&lt;p&gt;The demo shows the complete decision flow: intent, AI recommendation, blocked state, human approval, and the PayPal Sandbox path.&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/ondmindmanagement-hub" rel="noopener noreferrer"&gt;
        ondmindmanagement-hub
      &lt;/a&gt; / &lt;a href="https://github.com/ondmindmanagement-hub/bolt-payflow-guard" rel="noopener noreferrer"&gt;
        bolt-payflow-guard
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Governed AI payment workflow prototype using PayPal Orders API
    &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;BOLT Payflow Guard&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;BOLT Payflow Guard is a governed AI-to-payment workflow prototype for the PayPal AI Hackathon.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Flow&lt;/h2&gt;
&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;A local AI model running in Ollama analyzes a natural-language payment request and returns a structured recommendation. The AI is advisory only and cannot execute payments.&lt;/li&gt;
&lt;li&gt;A separate BOLT approval gate blocks the payment step unless explicit human approval is present.&lt;/li&gt;
&lt;li&gt;After approval, the PayPal module authenticates with OAuth 2.0 and creates a PayPal Orders v2 Sandbox order.&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;AI integration&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;The demo uses Ollama with &lt;code&gt;qwen2.5:7b&lt;/code&gt; by default, so the AI part can run locally without cloud credentials.&lt;/p&gt;
&lt;p&gt;Run:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;npm run ai -- "Pay 1 EUR for a test purchase"&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;The model returns JSON with &lt;code&gt;should_pay&lt;/code&gt;, &lt;code&gt;amount_eur&lt;/code&gt;, and &lt;code&gt;reason&lt;/code&gt;.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;PayPal integration&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;Requires PayPal Sandbox credentials. Keep them in environment variables only:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;PAYPAL_CLIENT_ID&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;PAYPAL_CLIENT_SECRET&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;optional &lt;code&gt;PAYPAL_BASE_URL&lt;/code&gt; (defaults to the Sandbox API)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Then explicitly approve the sandbox transaction with &lt;code&gt;BOLT_APPROVED=1&lt;/code&gt; and…&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/ondmindmanagement-hub/bolt-payflow-guard" 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/ondmindmanagement-hub/bolt-payflow-guard" rel="noopener noreferrer"&gt;https://github.com/ondmindmanagement-hub/bolt-payflow-guard&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;The open-source AI core is &lt;strong&gt;Ollama running Qwen 2.5 7B locally&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The Node.js AI module sends the natural-language request to a local Ollama endpoint and asks the model to return structured JSON containing &lt;code&gt;should_pay&lt;/code&gt;, &lt;code&gt;amount_eur&lt;/code&gt;, and &lt;code&gt;reason&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The model is advisory only. It never receives PayPal credentials and it cannot execute a transaction.&lt;/p&gt;

&lt;p&gt;A separate BOLT approval layer evaluates whether explicit authorization exists. Without approval, the workflow stops before contacting PayPal. With approval, the payment module can authenticate with &lt;strong&gt;PayPal OAuth 2.0&lt;/strong&gt; and create an order using the &lt;strong&gt;PayPal Orders v2 Sandbox API&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The architecture is intentionally simple:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;natural-language intent → local open model → structured proposal → human approval gate → PayPal Sandbox&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;That separation keeps AI reasoning independent from financial authority.&lt;/p&gt;

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

&lt;p&gt;Running Qwen locally through Ollama changes the trust model.&lt;/p&gt;

&lt;p&gt;The payment request can be interpreted without sending the user's prompt to a closed hosted model. The model can be swapped, inspected, run offline, or replaced with another open-weight model without changing the governance layer.&lt;/p&gt;

&lt;p&gt;With local inference:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;prompts can remain on the user's machine,&lt;/li&gt;
&lt;li&gt;there is no AI API key to manage,&lt;/li&gt;
&lt;li&gt;inference can keep working without a cloud model provider,&lt;/li&gt;
&lt;li&gt;the model can be changed without redesigning the workflow,&lt;/li&gt;
&lt;li&gt;and payment credentials remain completely separate from the AI process.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Open AI makes the reasoning layer portable. Human approval keeps the authority layer explicit.&lt;/p&gt;

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

&lt;p&gt;The useful boundary is not “AI versus no AI.” It is &lt;strong&gt;recommendation versus authority&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;An AI system can automate interpretation and planning while still requiring a person to approve the final consequential step. That pattern can extend to spending limits, role-based approvals, risk checks, multi-step authorization, and other high-impact workflows.&lt;/p&gt;

&lt;h2&gt;
  
  
  Built With
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Ollama&lt;/li&gt;
&lt;li&gt;Qwen 2.5 7B&lt;/li&gt;
&lt;li&gt;Node.js&lt;/li&gt;
&lt;li&gt;PayPal Orders v2 Sandbox API&lt;/li&gt;
&lt;li&gt;PayPal OAuth 2.0&lt;/li&gt;
&lt;li&gt;Human-in-the-loop approval gating&lt;/li&gt;
&lt;/ul&gt;

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