<?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: Victoria</title>
    <description>The latest articles on DEV Community by Victoria (@adorablegamer).</description>
    <link>https://dev.to/adorablegamer</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%2F2957592%2F76ad9149-177a-4741-9c7b-0c0c6dadd69d.png</url>
      <title>DEV Community: Victoria</title>
      <link>https://dev.to/adorablegamer</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/adorablegamer"/>
    <language>en</language>
    <item>
      <title>Ledger: A Small-Business Finance Tracker with Groq-Hosted Open-Weight AI</title>
      <dc:creator>Victoria</dc:creator>
      <pubDate>Mon, 19 Oct 2026 00:27:38 +0000</pubDate>
      <link>https://dev.to/adorablegamer/ledger-a-small-business-finance-tracker-with-groq-hosted-open-weight-ai-1hn</link>
      <guid>https://dev.to/adorablegamer/ledger-a-small-business-finance-tracker-with-groq-hosted-open-weight-ai-1hn</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;Ledger&lt;/strong&gt; is a small-business finance tracker and AI pricing assistant for solo business owners and freelancers. It helps users record income and expenses, review business totals, and estimate prices for products or services.&lt;/p&gt;

&lt;p&gt;The Price Calculator keeps saved estimates separate from actual financial transactions. Users can calculate a price, review it, and save it as a pricing record. Saved prices can be searched, filtered, viewed, edited, deleted, or reused as calculator inputs. Reusing a record prefills the form but does not restore its old result; users must calculate again before saving a new price.&lt;/p&gt;

&lt;p&gt;Ledger is aimed at small business owners who want a simpler workflow than a full accounting suite.&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://ledger-01aq.onrender.com/" rel="noopener noreferrer"&gt;Try the live Ledger demo&lt;/a&gt;. &lt;/p&gt;

&lt;h2&gt;
  
  
  Screenshot
&lt;/h2&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%2F5jkjvofmxhyyft9xve6h.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%2F5jkjvofmxhyyft9xve6h.png" alt="Screenshot of the Overview" width="800" height="430"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Overview&lt;/em&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%2Ff0fv9ihpc8pzupm17n41.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%2Ff0fv9ihpc8pzupm17n41.png" alt="Screenshot of the Transactions" width="800" height="430"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Transaction&lt;/em&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%2Fzm652hfe07i9savuk9w4.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%2Fzm652hfe07i9savuk9w4.png" alt="Screenshot for Creating a Transaction" width="800" height="430"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Create a Transaction&lt;/em&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%2Flqtiq5hbjmvh12okzif2.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%2Flqtiq5hbjmvh12okzif2.png" alt="Screenshot for the Price Calculator" width="800" height="430"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Price Calculator&lt;/em&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%2Fc7xlbj2w6dwduocfdp3t.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%2Fc7xlbj2w6dwduocfdp3t.png" alt="Screen shot for AI recommended pricing" width="800" height="430"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;AI recommended Pricing&lt;/em&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%2F8bhdnmbntxje63hrizid.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%2F8bhdnmbntxje63hrizid.png" alt="Screenshot of Saved Prices" width="800" height="430"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Saved Prices&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/Victoria-vee/Ledger_2" rel="noopener noreferrer"&gt;Ledger on GitHub&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;p&gt;The frontend uses React, TypeScript, Vite, and Tailwind CSS. The backend is an Express and TypeScript API backed by MongoDB Atlas through Mongoose.&lt;/p&gt;

&lt;p&gt;Both AI flows use the same Groq client and configured model. The server uses the OpenAI SDK with Groq's OpenAI-compatible endpoint:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;OpenAI&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="nx"&gt;apiKey&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;baseURL&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://api.groq.com/openai/v1&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The default model ID is &lt;code&gt;openai/gpt-oss-120b&lt;/code&gt;. “OpenAI-compatible” describes the API protocol; inference requests go to Groq. This is hosted inference, not local inference, and the user's submitted text is sent to Groq.&lt;/p&gt;

&lt;p&gt;For transaction entry, Ledger asks the model for JSON-formatted drafts, then validates the response on the server and checks whether amounts and dates are supported by evidence in the user's original text. Drafts are not saved automatically; the user reviews and confirms them. For pricing, the model offers qualitative advice around the deterministic calculation. The application validates the recommendation, while financial arithmetic remains ordinary application code.&lt;/p&gt;

&lt;p&gt;The standard selling-price formula is:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;(unit cost + additional costs per unit) × (1 + markup percentage / 100)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Saved prices have a dedicated Mongoose model and business-scoped API rather than being stored as transactions. One limitation: Ledger does not yet authenticate users or establish business ownership. A business ID scopes a request but does not prove that its caller owns the business, so this prototype should not be exposed as a private multi-user finance service until authorization is added.&lt;/p&gt;
&lt;h2&gt;
  
  
  Why Does Open Innovation Matter?
&lt;/h2&gt;

&lt;p&gt;Using an open-weight model gives Ledger another option beyond a proprietary model endpoint, and the OpenAI-compatible API meant the server could keep its existing client shape while switching inference providers. That is useful flexibility, but it is not the same as running the model locally or keeping data on the user's device. This version sends text to Groq, and I have not measured inference costs, extraction quality against other models, or customer willingness to pay.&lt;/p&gt;

&lt;p&gt;I also keep the boundary between model interpretation and financial decisions explicit: the model can help interpret language and suggest pricing context, but application code calculates prices, validates model output, and leaves consequential saves under user control.&lt;/p&gt;
&lt;h2&gt;
  
  
  My Agent Session
&lt;/h2&gt;

&lt;p&gt;This earlier session captures the Saved Prices work discussed here; it predates the switch to Groq:&lt;/p&gt;


&lt;div class="ltag-agent-session"&gt;
  &lt;div class="agent-session-header"&gt;
    
    &lt;span class="agent-session-tool-icon-badge" title="GitHub Copilot"&gt;
&lt;/span&gt;
    &lt;span class="agent-session-title"&gt;Building Ledger's Saved Prices and Preparing a Hacktoberfest Post&lt;/span&gt;
  &lt;/div&gt;

  &lt;div class="agent-session-scroll"&gt;

      &lt;div class="agent-session-message agent-session-user"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-user"&gt;
          You
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;Extend Ledger's saved-pricing feature with a dedicated business-scoped Saved Prices page: retrieve and filter real pricing records, show details, reuse stored inputs in the calculator, and support editing and confirmed deletion without touching transactions.&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;The existing pricing-record model and business-scoped GET/POST endpoints were reused. The Saved Prices page adds search and type/currency filters, detail views, calculator prefill without restoring an old result, direct record edits, and confirmed deletion. Business-scoped PATCH/DELETE routes validate updates and keep pricing records separate from transactions. Typechecks, production builds, 47 server tests, and a mobile browser check passed. The application still has no authentication or business-ownership layer, so IDs scope records but cannot prove requester ownership.&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-user"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-user"&gt;
          You
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;How should Mastra be included in this project? Plan an integration.&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;The proposed scope is the transaction-drafting flow only: use a bounded Mastra workflow for structured extraction while preserving Ledger's existing Zod schema, evidence-grounding checks, response contract, and review-before-save behavior. Do not give the model transaction or database tools.&lt;/p&gt;

                &lt;/div&gt;
              &lt;div class="agent-session-tool-call"&gt;
                
                  &lt;span class="agent-session-chevron"&gt;▸&lt;/span&gt;
                  &lt;span class="tool-name tool-name-dependencycompatibilitycheck"&gt;dependency_compatibility_check&lt;/span&gt;
                    &lt;span class="tool-input-preview"&gt;Check current Mastra package versions against Ledger's documented Node suppor...&lt;/span&gt;
                
                &lt;div class="agent-session-tool-detail"&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Input&lt;/div&gt;
                      &lt;pre class="agent-session-pre"&gt;&lt;code&gt;Check current Mastra package versions against Ledger's documented Node support floor and inspect dependency audit findings.&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Output&lt;/div&gt;
                      &lt;pre class="agent-session-pre"&gt;&lt;code&gt;Latest @mastra/core 1.78.0 requires Node &amp;gt;=22.13. Latest stable version compatible with Node 20 is 0.24.9; npm audit reports 6 high and 32 moderate vulnerabilities, with fix requiring the major upgrade.&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-user"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-user"&gt;
          You
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;Keep Node 20 support and defer Mastra integration.&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;Mastra was not retained as a dependency and no repository feature changes were made for this integration. The future option is to revisit the workflow when the runtime floor can move to Node 22.13+ or a safe compatible Mastra release is available.&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-user"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-user"&gt;
          You
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;Prepare a DEV post using the Hacktoberfest Week 2 Side Hustle structure and include an agent session.&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;The current code uses an OpenAI-backed parser and has no Mastra integration, so the Week 2 open-source AI eligibility should not be claimed. The user requested an honest project post using the challenge structure, not an eligible submission claim.&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;
  &lt;/div&gt;

  &lt;div class="agent-session-footer"&gt;
    &lt;span class="agent-session-meta"&gt;
        8 of 7 messages
    &lt;/span&gt;
  &lt;/div&gt;
&lt;/div&gt;



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

&lt;p&gt;Based on the implemented technology and available project evidence, these are the partner categories I can substantiate:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Render&lt;/strong&gt; — Ledger runs as a single Render web service serving the API and built React app, with a configured health check.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of MongoDB Atlas&lt;/strong&gt; — Ledger persists its business data and saved pricing records through Mongoose; the deployment setup uses an Atlas connection string, and the live health check reports a connected database.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of GitHub Copilot&lt;/strong&gt; — Copilot was used to implement, debug, and test Ledger; the embedded agent session documents part of that work.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>ai</category>
      <category>opensource</category>
    </item>
    <item>
      <title>out'n'about - wander into a world of wonder</title>
      <dc:creator>Victoria</dc:creator>
      <pubDate>Sun, 11 Oct 2026 13:34:35 +0000</pubDate>
      <link>https://dev.to/adorablegamer/outnabout-wander-into-a-world-of-wonder-5edh</link>
      <guid>https://dev.to/adorablegamer/outnabout-wander-into-a-world-of-wonder-5edh</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;out'n'about is a web app designed to encourage people to step away from their screens and reconnect with the world around them.&lt;/p&gt;

&lt;p&gt;out'n'about uses AI to generate outdoor challenges that encourage users to slow down, explore their surroundings, and notice the little things they might usually overlook.&lt;/p&gt;

&lt;p&gt;After completing a challenge, users can write down their observations on paper, take a picture of their handwritten notes, and save the experience in their personal journal. AI also helps interpret their handwritten reflections, making it easier to revisit those little outdoor moments later.&lt;/p&gt;

&lt;p&gt;It's for users who are looking to get off their screen but are always left with a "now what" feeling. This gives them something refreshing and entertaining to do&lt;/p&gt;

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

&lt;p&gt;Here's a link to the demo video: &lt;a href="https://youtu.be/fLFJYft4Dng" rel="noopener noreferrer"&gt;https://youtu.be/fLFJYft4Dng&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Below are some screen shots:
&lt;/h3&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%2Fgithub.com%2Fuser-attachments%2Fassets%2F97e0bfb1-07a3-4d4b-b281-34290b45f09e" class="article-body-image-wrapper"&gt;&lt;img width="1920" height="1008" alt="image" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F97e0bfb1-07a3-4d4b-b281-34290b45f09e"&gt;&lt;/a&gt;Home Page&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%2Fgithub.com%2Fuser-attachments%2Fassets%2Faea49177-296f-420b-940a-ebf627359c75" class="article-body-image-wrapper"&gt;&lt;img width="1920" height="1008" alt="image" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2Faea49177-296f-420b-940a-ebf627359c75"&gt;&lt;/a&gt;Challenge Generation&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%2Fgithub.com%2Fuser-attachments%2Fassets%2Fbf0d586a-f2ff-4223-b12e-f5784166f622" class="article-body-image-wrapper"&gt;&lt;img width="1920" height="1008" alt="image" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2Fbf0d586a-f2ff-4223-b12e-f5784166f622"&gt;&lt;/a&gt;Challenge Description&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%2Fgithub.com%2Fuser-attachments%2Fassets%2F21d0f551-acaa-493d-8cba-f02451f1cc97" class="article-body-image-wrapper"&gt;&lt;img width="1920" height="1008" alt="image" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F21d0f551-acaa-493d-8cba-f02451f1cc97"&gt;&lt;/a&gt;Submission&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%2Fgithub.com%2Fuser-attachments%2Fassets%2Fbcaef6d1-7188-4e7a-a9fe-292e2b2f4fdd" class="article-body-image-wrapper"&gt;&lt;img width="800" height="420" alt="image" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2Fbcaef6d1-7188-4e7a-a9fe-292e2b2f4fdd"&gt;&lt;/a&gt;Journal History&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%2Fgithub.com%2Fuser-attachments%2Fassets%2F2fe007da-a706-4b00-bdcf-3a3e7a963c1b" class="article-body-image-wrapper"&gt;&lt;img width="800" height="420" alt="image" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F2fe007da-a706-4b00-bdcf-3a3e7a963c1b"&gt;&lt;/a&gt; Journal Entry&lt;/p&gt;

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

&lt;p&gt;Here is a link to the repository: &lt;a href="https://github.com/Victoria-vee/TouchGrass" rel="noopener noreferrer"&gt;https://github.com/Victoria-vee/TouchGrass&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;I built out'n'about with React and Vite for the frontend, Node.js and Express for the backend, and MongoDB Atlas to store prompts and their journal entries.&lt;/p&gt;

&lt;p&gt;The AI component is powered by Gemma 3 4B, an open-weight model run locally using Ollama. I used the model to generate outdoor challenges and help interpret users' handwritten reflections from uploaded photos. Running inference locally allowed me to experiment with an open-weight model without depending on a paid, proprietary AI API.&lt;/p&gt;

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

&lt;p&gt;For a project like out'n'about, open innovation made experimentation more accessible.&lt;/p&gt;

&lt;p&gt;Using an open-weight model meant I could explore AI-powered features without building the entire experience around a closed API. Running Gemma locally with Ollama also gave me more control over how I tested and integrated the model. That made it possible for me to learn and build something around an idea I cared about while working with the resources available to me.&lt;/p&gt;

&lt;p&gt;I also like that open innovation gives developers room to explore unconventional ideas. AI doesn't always have to be about doing more things on a screen or making existing digital experiences more engaging. It can also help us create experiences that encourage us to step away.&lt;/p&gt;

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

&lt;p&gt;A snippet of my codex session during the instantiation of my project&lt;/p&gt;


&lt;div class="ltag-agent-session"&gt;
  &lt;div class="agent-session-header"&gt;
    
    &lt;span class="agent-session-tool-icon-badge" title="Codex"&gt;
&lt;/span&gt;
    &lt;span class="agent-session-title"&gt;Touch Grass: Local AI Outdoor Quests and Reflection Journal&lt;/span&gt;
  &lt;/div&gt;

  &lt;div class="agent-session-scroll"&gt;

      &lt;div class="agent-session-message agent-session-user"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-user"&gt;
          You
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;I’m building Touch Grass for Hacktoberfest 2026: a small web app that encourages people to step away from screens and spend time outdoors. Inspect the project and verify the development environment before implementation.&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;The project uses a React + Vite client and a separate Node.js + Express server. The AI provider is local Ollama running Gemma 3 4B. The implementation was kept small and separate across client and server.&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-user"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-user"&gt;
          You
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;Build a calm home screen, then connect its challenge button to the backend. Preserve the visual design and provide loading, error, and retry states.&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;The frontend challenge flow requests one outdoor activity from the Express API and presents loading, retry, and result states.&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-user"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-user"&gt;
          You
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;Add the outdoor session journey: require paper and pen, let the user go offline, return when ready, and reflect on handwritten notes. Support a note photo and optional typed summary.&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;The frontend journey includes preparation confirmation, an active session, reflection, photo preview and replacement/removal, and completion. Reflection AI feedback is optional; the selected photo and typed text are retained through request errors.&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-user"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-user"&gt;
          You
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;Add local Gemma reflection feedback and clarification when handwriting is unclear. Diagnose timeout and runtime errors without hiding failures or removing image support.&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;The Express reflection endpoint reuses the Ollama configuration and returns structured feedback and handwriting interpretation. The client supports follow-up clarification using the original photo and notes, with bounded attempts and retry states.&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-user"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-user"&gt;
          You
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;Connect MongoDB Atlas for one local user. Persist completed quests and reflections, require a handwritten photo for completion, award exactly 5 XP once, and reject reused photo hashes.&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;The backend uses Mongoose completion records with stable completion IDs, unique photo hashes, and idempotent retries. The journal exposes saved entries and photo references. Photos remain in local server storage rather than MongoDB.&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-user"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-user"&gt;
          You
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;Review and update the open-source README using verified commands, directories, environment variables, and the actual local photo-storage limitation. Do not invent a license.&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;The README documents the React/Vite and Express/Mongoose/Ollama stack, local setup, the six server environment variables and defaults, usage, contribution guidance, local photo storage in server/uploads, and the repository’s current lack of a license file. The environment example uses safe placeholders.&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-user"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-user"&gt;
          You
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;Refine the full-screen responsive meadow and make the grass divider an upside-down double wave that fades into the page.&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;The existing meadow artwork now fills the hero viewport below the navbar. The inline divider keeps its aspect-ratio behavior, uses two downward wave layers in matching sage colors, and fades to the page cream at the bottom. The Vite production build passed.&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;
  &lt;/div&gt;

  &lt;div class="agent-session-footer"&gt;
    &lt;span class="agent-session-meta"&gt;
        14 of 14 messages
    &lt;/span&gt;
  &lt;/div&gt;
&lt;/div&gt;


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

&lt;ul&gt;
&lt;li&gt;Best use of MongoDB Atlas&lt;/li&gt;
&lt;li&gt;Best use of Gemma&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>hacktoberfest</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Hello Dev.to</title>
      <dc:creator>Victoria</dc:creator>
      <pubDate>Wed, 19 Mar 2025 13:59:24 +0000</pubDate>
      <link>https://dev.to/adorablegamer/hello-devto-46c6</link>
      <guid>https://dev.to/adorablegamer/hello-devto-46c6</guid>
      <description>&lt;p&gt;Hey guys. This is kinda my intro post here.&lt;br&gt;
I've been coding for a while now though I've not been making progress(due to laziness, procrastination, lack of motivation and discipline).I never had the motivation to go forward until my internship program as a frontend developer last year. During that period, I started progressing. I learnt HTML, CSS and JavaScript(a little) and worked on some projects. But after my internship program, I started slacking off again.&lt;br&gt;
I joined dev.to hoping that posting my progress would keep me determined, disciplined and motivated.&lt;br&gt;
So I would be starting from the beginning (for the nth time).&lt;/p&gt;

&lt;p&gt;Wish me luck.&lt;/p&gt;

</description>
      <category>new</category>
      <category>firstpost</category>
      <category>codingjouurney</category>
      <category>careerdevelopment</category>
    </item>
  </channel>
</rss>
