<?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: Ross Strachan</title>
    <description>The latest articles on DEV Community by Ross Strachan (@rbstrachan).</description>
    <link>https://dev.to/rbstrachan</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%2F4155314%2F4144b05e-da3d-4355-90fb-a5dc7a9a9748.jpeg</url>
      <title>DEV Community: Ross Strachan</title>
      <link>https://dev.to/rbstrachan</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rbstrachan"/>
    <language>en</language>
    <item>
      <title>Hacktoberfest Week 3 Challenge Submission — SlothSummary</title>
      <dc:creator>Ross Strachan</dc:creator>
      <pubDate>Mon, 19 Oct 2026 21:30:00 +0000</pubDate>
      <link>https://dev.to/rbstrachan/hacktoberfest-week-3-challenge-submission-slothsummary-1kn9</link>
      <guid>https://dev.to/rbstrachan/hacktoberfest-week-3-challenge-submission-slothsummary-1kn9</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;SlothSummary, a local-first web app designed to eliminate the exhausting task of reading through walls of text after time away from your desk. &lt;/p&gt;

&lt;p&gt;Waking up to hundreds of unread group chat messages? Arriving at your desk facing a chaotic fifty-email thread? Need to digest long developer status dumps? Catching up manually takes time and energy. SlothSummary processes messy, unorganised communication logs locally and reduces them into a zero-effort, two-line morning briefing. &lt;/p&gt;

&lt;p&gt;It tells you strictly what requires your attention and what can safely be ignored, allowing freelancers, remote workers and busy developers to channel their inner sloth, stay lazy, and reclaim their focus.&lt;/p&gt;

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

&lt;p&gt;The full &lt;a href="https://github.com/rbstrachan/hacktoberfest/blob/main/2026/week-3.html" rel="noopener noreferrer"&gt;source code for this project&lt;/a&gt; is available on GitHub.&lt;/p&gt;

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

&lt;p&gt;SlothSummary is made using lightweight frontend technology and with local open-weight models. &lt;/p&gt;

&lt;p&gt;The app is built to interface directly with local inference runtimes such as Ollama running lightweight models like Llama 3.2 3B or Phi-3 Mini, as well as WebGPU browser-based runtimes. When text is pasted into the tool, prompt structures direct the local open-weight model to ignore social noise, off-topic conversations and non-essential status updates. The model parses the raw text stream locally, extracts critical action items, and generates a concise summary. &lt;/p&gt;

&lt;p&gt;Because the entire interface runs within a clean HTML5 and JavaScript framework, the entire pipeline executes locally with zero reliance on cloud infrastructure.&lt;/p&gt;

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

&lt;p&gt;Total privacy is preserved. Group chats, internal team discussions and client emails contain sensitive conversations. Sending unread personal messages or company email threads through proprietary cloud AI endpoints creates data leak risks. Local open-weight models guarantee that raw messages never leave your personal computer.&lt;/p&gt;

&lt;p&gt;Zero operational cost rewards true automation. Using proprietary APIs to summarise casual daily chatter quickly becomes expensive. Open-source models allow you to run infinite summaries locally without ever worrying about rate limits, micro-transaction bills or API subscriptions.&lt;/p&gt;

&lt;p&gt;Open models give complete freedom over speed and resource consumption. Users on low-power devices can swap to a tiny quantised open model for instant results, whilst those on powerful hardware can load larger open models for nuanced document analysis.&lt;/p&gt;

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

&lt;p&gt;By running SlothSummary on overnight chat dumps and lengthy project threads, you can avoid spending twenty minutes every morning piecing together what happened while you were away. Pushing a single button produces an actionable summary in under two seconds, letting you skim the essential details and get back to enjoying your morning coffee.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>Hacktoberfest Week 2 Challenge Submission — VaultLedger</title>
      <dc:creator>Ross Strachan</dc:creator>
      <pubDate>Mon, 19 Oct 2026 04:15:00 +0000</pubDate>
      <link>https://dev.to/rbstrachan/hacktoberfest-week-2-challenge-submission-vaultledger-4nb0</link>
      <guid>https://dev.to/rbstrachan/hacktoberfest-week-2-challenge-submission-vaultledger-4nb0</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;I built Local Ledger AI, a local-first receipt and invoice parser designed specifically for freelancers, micro-agency owners and sole traders. &lt;/p&gt;

&lt;p&gt;Small business owners routinely process sensitive financial documents containing client names, tax identification numbers, residential addresses and confidential project scopes. Passing all that data through third-party cloud APIs poses serious privacy risks, and monthly subscription costs for traditional scanning software quickly stack up.&lt;/p&gt;

&lt;p&gt;Local Ledger AI runs structured optical character recognition and field extraction entirely on the user’s local machine. It automatically extracts key details such as vendor names, dates, invoice numbers, tax amounts, line items and expense categories. Users can parse hundreds of receipts in seconds, review the structured data instantly, and export clean summaries directly into CSV or JSON formats for their accounting software. Freelancers and privacy-conscious sole traders would gladly pay a one-off fee for software that handles their bookkeeping without risking client confidentiality or tying them into monthly API bills.&lt;/p&gt;

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

&lt;p&gt;The code repository is available on GitHub at &lt;a href="https://github.com/rbstrachan/hacktoberfest" rel="noopener noreferrer"&gt;https://github.com/rbstrachan/hacktoberfest&lt;/a&gt;.&lt;/p&gt;

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

&lt;p&gt;The site uses local open-weight vision models such as Llama 3.2 3B Vision and Phi-3 Mini running directly through Ollama and WebGPU. &lt;/p&gt;

&lt;p&gt;When a user drops an invoice or receipt image into the interface, the app streams the file directly to the local model endpoint via a REST interface or directly in the browser runtime. The system uses structured JSON schemas within the prompt pipeline to guarantee that the open-weight model outputs predictable key-value pairs representing the document structure. &lt;/p&gt;

&lt;p&gt;The frontend is constructed using plain HTML5, CSS3, and JavaScript, ensuring lightweight execution, instant loading times, and full offline functionality without any backend web server infrastructure.&lt;/p&gt;

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

&lt;p&gt;Client data privacy is absolute. Proprietary API providers retain the right to log, inspect or train on incoming payloads unless users pay exorbitant enterprise rates. By using an open-weight model running locally, financial data never touches a server or leaves the device, providing total compliance with strict data protection standards like GDPR out of the box.&lt;/p&gt;

&lt;p&gt;The economics of closed APIs break the business model for small software developers. Charging a freelancer a modest flat fee for software becomes impossible if every scan incurs a micro-transaction bill from a closed API provider. Local inference reduces per-parse API costs to absolute zero, allowing the tool to operate as a low-cost, perpetual software product without running up unsustainable infrastructure overheads.&lt;/p&gt;

&lt;p&gt;Open models allow seamless model swapping. If a user needs faster local inference on a low-spec laptop, they can toggle to a quantised lightweight model; if they require complex multi-currency detection, they can load a specialised fine-tuned open weights model instantly.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>Hacktoberfest Week 1 Challenge Submission — GrassCheck</title>
      <dc:creator>Ross Strachan</dc:creator>
      <pubDate>Mon, 12 Oct 2026 03:30:00 +0000</pubDate>
      <link>https://dev.to/rbstrachan/hacktoberfest-week-1-challenge-submission-grasscheck-3ad3</link>
      <guid>https://dev.to/rbstrachan/hacktoberfest-week-1-challenge-submission-grasscheck-3ad3</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;GrassCheck&lt;/strong&gt; is a self-contained, minimal and privacy-first web application designed to help people disconnect from their desks and step into nature.&lt;/p&gt;

&lt;p&gt;The app gives you a simple, real-world task, such as finding an interestingly shaped leaf, taking a photo of a tree canopy or capturing a patch of green grass. Once you step away from your screen, complete the task and take a photo, GrassCheck runs an open-source vision AI model directly inside your browser to analyse and verify that you completed the challenge.&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://github.com/rbstrachan/hacktoberfest/blob/main/2026/week-1.html" rel="noopener noreferrer"&gt;Download the &lt;code&gt;.html&lt;/code&gt; file from GitHub&lt;/a&gt;.&lt;/p&gt;

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

&lt;p&gt;GrassCheck is built around &lt;a href="https://huggingface.co/docs/transformers.js" rel="noopener noreferrer"&gt;Transformers.js&lt;/a&gt; by Hugging Face, an open-source library that allows state-of-the-art Machine Learning models to run natively in JavaScript using the ONNX Runtime and WebAssembly.&lt;/p&gt;

&lt;p&gt;It uses MobileViT (&lt;code&gt;Xenova/mobilevit-small&lt;/code&gt;), an efficient, open-weight vision transformer model optimised for non-desktop devices.&lt;br&gt;
All inference happens completely locally in the browser's runtime.&lt;/p&gt;

&lt;p&gt;Built with simple, lightweight HTML, JS and Tailwind CSS.&lt;/p&gt;

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

&lt;p&gt;This project is made possible through the use of open-weight models.&lt;/p&gt;

&lt;p&gt;Because the open-weight model runs entirely inside WebAssembly in the browser, photos are never uploaded to any server or third-party cloud.&lt;/p&gt;

&lt;p&gt;Using an open-weight model loaded client-side means hosting costs are non-existent. It also makes the application infinitely scalable without the need for server infrastructure.&lt;/p&gt;

&lt;p&gt;Also, nature walks and hikes often take people into places with little to no internet connection. Once loaded into the browser cache, open-weight models can perform image classification deep in the forest or on a remote trail with no connectivity at all.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>Hacktoberfest 2026 Launch Weekend Challenge Submission — Nuançais</title>
      <dc:creator>Ross Strachan</dc:creator>
      <pubDate>Mon, 05 Oct 2026 00:00:00 +0000</pubDate>
      <link>https://dev.to/rbstrachan/hacktoberfest-2026-launch-weekend-challenge-submission-nuancais-23b</link>
      <guid>https://dev.to/rbstrachan/hacktoberfest-2026-launch-weekend-challenge-submission-nuancais-23b</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;nuançais&lt;/strong&gt;, a small and very basic proof-of-concept for a python-based English-French assistant created to help a French-speaking friend of mine learn and better understand nuanced English words and phrases.&lt;/p&gt;

&lt;p&gt;My friend is a French native who is working with English-speaking colleagues on English-as-a-main-language projects. She is at an intermediate level in English and so already knows core grammar and vocabulary, but idioms, phrases and expressions are difficult for her.&lt;/p&gt;

&lt;p&gt;Researching these phrases, as they often depend heavily on context, are not really translatable in the literal sense into French. On top of that, generic online translation tools force her to break her reading flow which is incredibly frustrating.&lt;/p&gt;

&lt;p&gt;I think a dedicated helper that is always available on her desktop above her other apps to explain nuance in clear, plain, intermediate-level English (and French) will allow her to quickly and seamlessly verify her understanding without losing context or forgetting what she just read.&lt;/p&gt;

&lt;p&gt;This project is only a proof of concept. It aims to provide an interactive cloud notebook (on Google Colab) where one can paste any tricky English snippet and in just a few seconds (please be patient!) get synchronised dual-language responses.&lt;/p&gt;

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

&lt;p&gt;Below is a screenshot processing an example phrase:&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%2Fucscnir62zi1g9pp1fr6.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%2Fucscnir62zi1g9pp1fr6.png" alt="screenshot of the UI running in Google Colab with an input field, run button, process status and an output with two tabs, one for English and the other for French" width="800" height="352"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;(English Text Area)
"We need to wrap up this project by Friday so we don't end up back at square one."

("Explain Phrase" Button) → wait a few seconds

(English Tab)
Meaning: "Wrap up" means to complete or finish something, while "back at square one" means returning to the starting point.
Alternatives: "We need to finish this project by Friday so we don't have to restart."
Pronunciation: "Wrap" is pronounced /ræp/ (the 'w' is silent).

(Français Tab)
Sens: "Wrap up" signifie terminer ou finaliser quelque chose, et "back at square one" signifie recommencer depuis le début.
Alternatives: "We need to finish this project by Friday so we don't have to restart."
Prononciation: Le 'w' de "wrap" est muet (se prononce /ræp/).

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;&lt;a href="https://github.com/rbstrachan/hacktoberfest/blob/3857f190e5506a33e3198915ec35157dc0ed5632/2026/launch-weekend.py" rel="noopener noreferrer"&gt;github.com/rbstrachan/hacktoberfest&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;The functionality for this assistant comes from Llama 3.2 (1B) running locally via Ollama.&lt;/p&gt;

&lt;p&gt;The Ollama daemon is initialised and loads the &lt;code&gt;llama3.2:1b&lt;/code&gt; model. For this proof-of-concept, the "UI" is built using &lt;code&gt;ipywidgets&lt;/code&gt;, but the full-fledged program would likely use &lt;code&gt;tkinter&lt;/code&gt;. The model is asked to return a single JSON response containing English and French translations which are then parsed into the UI.&lt;/p&gt;

&lt;p&gt;The pronunciation explanation from the model could be better. It currently attempts to provide a phonetic (IPA) transliteration of the word or phrase in question but this particular model seems incapable of doing so. Instead, it produces incomprehensible rubbish that has nothing to do with the input.&lt;/p&gt;

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

&lt;p&gt;There are a few ways that open-source AI was beneficial to this project in ways that closed-source models would not have been.&lt;/p&gt;

&lt;p&gt;There are no API keys, tokens or billing to worry about. It doesn't cost anything, which allows me to run infinite queries and have infinite debug and refactor attempts without the fear of hitting limits or costing myself hundreds. Also, it can be easily embedded into a projects runtime, like an &lt;code&gt;.exe&lt;/code&gt; so that the person using it has nothing to install, setup or pay.&lt;/p&gt;

&lt;h2&gt;
  
  
  Handing It Over
&lt;/h2&gt;

&lt;p&gt;Unfortunately, this is only a proof-of-concept. I didn't have time to build the full thing and so did not hand this over to my friend to try. &lt;/p&gt;

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