<?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: Anton Luckshman</title>
    <description>The latest articles on DEV Community by Anton Luckshman (@anton_luckshman).</description>
    <link>https://dev.to/anton_luckshman</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%2F4162794%2Fcbb1fca3-4dfd-4f5f-a048-ce9332e6522f.png</url>
      <title>DEV Community: Anton Luckshman</title>
      <link>https://dev.to/anton_luckshman</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/anton_luckshman"/>
    <language>en</language>
    <item>
      <title>Ghost Archive: a home for stories that stay, powered by local open-weight AI</title>
      <dc:creator>Anton Luckshman</dc:creator>
      <pubDate>Sat, 31 Oct 2026 06:55:09 +0000</pubDate>
      <link>https://dev.to/anton_luckshman/ghost-archive-a-home-for-stories-that-stay-powered-by-local-open-weight-ai-4od8</link>
      <guid>https://dev.to/anton_luckshman/ghost-archive-a-home-for-stories-that-stay-powered-by-local-open-weight-ai-4od8</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;Ghost Archive is a small, private writing room for two kinds of stories: the ones that make an empty hallway feel occupied, and the ones that make a person feel a little less far away.&lt;/p&gt;

&lt;p&gt;In ghost-story mode, a few fragments become supernatural fiction. A light that comes on at 3:17. A radio without a power cord. A second cup on an empty table.&lt;/p&gt;

&lt;p&gt;In remembrance mode, those fragments become a tribute: a favorite song, a windowsill full of marigolds, a small ritual someone left behind. This mode has a separate prompt that forbids inventing biography, impersonating a loved one, or claiming contact with the dead. A tribute is something to review and keep, rather than a simulated conversation.&lt;/p&gt;

&lt;p&gt;The app is inspired by Halloween and by the act of keeping memories alive. It does not claim to reproduce an ofrenda or speak for any cultural tradition.&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%2F137953yd5q4gdy01u30j.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%2F137953yd5q4gdy01u30j.png" alt=" " width="800" height="783"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Try It Locally
&lt;/h2&gt;

&lt;p&gt;The source is available in the &lt;a href="https://github.com/antonluckshman/ghost-archive" rel="noopener noreferrer"&gt;Ghost Archive repository&lt;/a&gt;. To use it on your own computer:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Start Ollama and download Qwen3-4B with &lt;code&gt;ollama pull qwen3:4b&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;python server.py&lt;/code&gt; and open &lt;code&gt;http://127.0.0.1:8787&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Open Model &amp;amp; settings, refresh, and choose the downloaded model.&lt;/li&gt;
&lt;li&gt;Begin a story, watch the prose stream in, and keep or export it.&lt;/li&gt;
&lt;li&gt;Disconnect from the internet after setup and repeat the writing flow.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Three labeled illustrative samples let someone explore the archive before installing a model. They are sample content, not evidence of live model inference.&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://github.com/antonluckshman/ghost-archive" rel="noopener noreferrer"&gt;View the source on GitHub: antonluckshman/ghost-archive&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The app is MIT-licensed. It contains a Python standard-library server, plain HTML/CSS/JavaScript, original SVG artwork and tests. There is no frontend build step, Python package installation or external asset dependency.&lt;/p&gt;

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

&lt;p&gt;The writing engine is &lt;a href="https://huggingface.co/Qwen/Qwen3-4B" rel="noopener noreferrer"&gt;Qwen3-4B&lt;/a&gt;, an Apache 2.0 open-weight model, served by the MIT-licensed &lt;a href="https://github.com/ollama/ollama" rel="noopener noreferrer"&gt;Ollama runtime&lt;/a&gt;. Other locally downloaded chat models can be selected in settings.&lt;/p&gt;

&lt;p&gt;The browser posts fragments to a loopback Python server. The server checks the input and verifies the model is in Ollama's local model list, excluding models marked as remote or cloud. It sends the source material with the appropriate fiction or remembrance system prompt to Ollama's &lt;a href="https://docs.ollama.com/api/chat" rel="noopener noreferrer"&gt;chat endpoint&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The response is streamed back as newline-delimited JSON. If the stream fails, the reader keeps the words that arrived as an unfinished draft. A successful completion saves the prose in browser storage. The source fragments are not saved to the server.&lt;br&gt;
&lt;/p&gt;

&lt;pre data-lang="mermaid"&gt;&lt;code&gt;flowchart LR
    A[Browser editor] --&amp;gt; B[Python on loopback]
    B --&amp;gt; C[Ollama]
    C --&amp;gt; D[Local open-weight model]
    C --&amp;gt;|Streamed prose| B
    B --&amp;gt; A
    A --&amp;gt; E[Local browser archive]
    A --&amp;gt; F[Text or JSON export]&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;A simple bridge was enough for this task. &lt;a href="https://dev.to/damiano_builds/call-a-local-model-from-plain-python-no-sdk-no-dependencies-3gp5"&gt;Damiano's dependency-free Python/Ollama article&lt;/a&gt; helped ground that choice. &lt;a href="https://dev.to/nazar-boyko/running-local-llms-with-ollama-for-private-development-4924"&gt;Nazar Boyko's discussion of local inference&lt;/a&gt; informed the explicit context budget and attention to local-model memory and latency.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Validation so far:&lt;/strong&gt; 13 Python HTTP contract tests and 8 frontend behavior checks pass. They cover streaming, partial output, Unicode, invalid requests, remote-model filtering, storage failures and backup validation. Browser review covered category filters, sample provenance, saving, favorites, persistence across reload, search empty states, the remembrance editor and a mobile layout with no horizontal overflow. These checks used a simulated Ollama service; actual model inference was not tested on the build machine.&lt;/p&gt;

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

&lt;p&gt;A memory should not require an account on a service that may disappear.&lt;/p&gt;

&lt;p&gt;Open weights let the writing engine live alongside the archive. Once the runtime and model are downloaded, a session does not depend on an internet connection. The app sends no memories to a hosted model provider.&lt;/p&gt;

&lt;p&gt;The prompts are editable Python source. The model can be replaced. If another model writes better in a family's language, the app does not need to be rebuilt around a new provider. The archive can leave the app too, as plain text or JSON.&lt;/p&gt;

&lt;p&gt;There is no per-request AI service fee. Local hardware, disk space and electricity still have costs, and a small CPU model will not match the speed or quality of every hosted model. This project chooses local control because its material can be personal, and the task is narrow enough for a small model.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Spirit of It
&lt;/h2&gt;

&lt;p&gt;The visual design leaves room for both a shiver and a memory: lavender shadows, candlelight, a small floating ghost, and a book that remains open.&lt;/p&gt;

&lt;p&gt;The idea is simple: let a spooky story be fiction, and let a remembrance belong to the person who brings it.&lt;/p&gt;

&lt;h2&gt;
  
  
  AI Assistance
&lt;/h2&gt;

&lt;p&gt;AI assistance was used to implement this application, create illustrative sample prose and draft this write-up. The included sample stories are illustrative examples.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>Slow and Steady: a local AI file tidier for my inner sloth</title>
      <dc:creator>Anton Luckshman</dc:creator>
      <pubDate>Sun, 25 Oct 2026 03:12:20 +0000</pubDate>
      <link>https://dev.to/anton_luckshman/slow-and-steady-a-local-ai-file-tidier-for-my-inner-sloth-ibb</link>
      <guid>https://dev.to/anton_luckshman/slow-and-steady-a-local-ai-file-tidier-for-my-inner-sloth-ibb</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;My downloads folder is a list of decisions I keep postponing. &lt;strong&gt;Slow and Steady&lt;/strong&gt; is a local AI assistant that suggests where files belong, so I can review a list instead of sorting everything manually.&lt;/p&gt;

&lt;p&gt;It uses &lt;strong&gt;Qwen2.5 1.5B through Ollama&lt;/strong&gt; to classify filenames into categories such as finance, work, personal and reading. An invoice and meeting notes can both be text files while belonging in different folders.&lt;/p&gt;

&lt;p&gt;The workflow is: &lt;strong&gt;plan → review → approve → tidy → undo&lt;/strong&gt;. Planning never moves existing files. Applying displays the proposed paths and requires approval tied to that exact plan. Uncertain files stay put.&lt;/p&gt;

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

&lt;p&gt;To try the disposable sample inbox after installing Python and local Ollama:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ollama pull qwen2.5:1.5b
python -m sloth_tidy demo demo-inbox
python -m sloth_tidy plan demo-inbox
~~~

The planner saves a JSON file. Review it and pass its path to:

~~~text
python -m sloth_tidy apply "PATH_TO_SAVED_PLAN"
~~~

The displayed approval token is required before any files move.

## Code

**GitHub repository:** [antonluckshman/slow-and-steady-ai](https://github.com/antonluckshman/slow-and-steady-ai)

The project uses Python 3.11+ and has no third-party Python runtime dependencies. Setup and undo instructions are included in the README.

## How I Built It

Ollama's [structured output API](https://docs.ollama.com/capabilities/structured-outputs) returns category decisions. The model sees filenames, suffixes, byte counts and integer IDs. File contents and absolute inbox paths are excluded from requests.

The model cannot choose arbitrary paths or run commands. Python validates every decision, constructs destinations under the inbox and checks file hashes before moving anything. Existing destinations are refused. Recent files, partial downloads, links and junctions are left alone.

A journal records intent before each move. Exclusive hard-link creation followed by removal of the original directory entry avoids overwriting destination data. Approved undo can restore the original paths and reconcile an interrupted move on supported filesystems.

The existing automated suite completed with **27 passing tests and one skipped symlink test** because Windows denied symlink-creation privileges. The separate junction test passed. Tests cover the HTTP contract, approval, collisions, stale files and interrupted undo. Model accuracy and latency have not been independently benchmarked.

## Why Does Open Innovation Matter?

The open pieces provide the actual semantic planner: [Ollama](https://github.com/ollama/ollama) runs inference, and the default [Qwen2.5 1.5B weights](https://huggingface.co/Qwen/Qwen2.5-1.5B-Instruct) use Apache 2.0. This assistant's source is MIT-licensed.

After downloading the model and disabling Ollama's cloud features, the workflow can run offline. Personal filenames need not visit a hosted model. There is no per-request API charge, although hardware and electricity still cost resources.

I can inspect the prompt, edit categories or replace the local model while keeping the same approval and movement checks. That control over data location, model choice and behavior matters more for this chore than access to a hosted model. Small-model judgment still needs human review.

## Related Community Reading

🦥 [sloth-sorter: a lazy file tidier that runs Gemma locally](https://dev.to/ghalmeidadev/sloth-sorter-a-lazy-file-tidier-that-runs-gemma-locally-21lc), by [@ghalmeidadev](https://dev.to/ghalmeidadev), reports an imperfect classification in its small demo—a useful reminder to review suggestions. [Read Full Discussion on DEV](https://dev.to/ghalmeidadev/sloth-sorter-a-lazy-file-tidier-that-runs-gemma-locally-21lc).

⚙️ [Ollama Structured Outputs in Practice — Getting Type-Safe JSON from Local LLMs with Pydantic](https://dev.to/jangwook_kim_e31e7291ad98/ollama-structured-outputs-in-practice-getting-type-safe-json-from-local-llms-with-pydantic-m38), by [@jangwook_kim_e31e7291ad98](https://dev.to/jangwook_kim_e31e7291ad98), discusses schema-based output and small-model limitations; this project uses a standard-library validator. [Read Full Discussion on DEV](https://dev.to/jangwook_kim_e31e7291ad98/ollama-structured-outputs-in-practice-getting-type-safe-json-from-local-llms-with-pydantic-m38).

*AI assistance disclosure: this project and article were created with AI assistance.*
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>InvoiceMate Local: A Private Invoice Assistant Powered by Open-Weight AI</title>
      <dc:creator>Anton Luckshman</dc:creator>
      <pubDate>Sat, 17 Oct 2026 02:21:30 +0000</pubDate>
      <link>https://dev.to/anton_luckshman/invoicemate-local-a-private-invoice-assistant-powered-by-open-weight-ai-5ck</link>
      <guid>https://dev.to/anton_luckshman/invoicemate-local-a-private-invoice-assistant-powered-by-open-weight-ai-5ck</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;Meet &lt;strong&gt;InvoiceMate Local&lt;/strong&gt; 🧾 a local-first AI invoice assistant designed for freelancers and small businesses.&lt;/p&gt;

&lt;p&gt;Managing invoices can be surprisingly time-consuming. You receive PDFs and receipt images, manually copy supplier details and amounts into spreadsheets, organize expenses, and double-check everything.&lt;/p&gt;

&lt;p&gt;InvoiceMate Local aims to make that process easier.&lt;/p&gt;

&lt;p&gt;With InvoiceMate Local, users can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;📄 Extract invoice information from digital PDFs and receipt images.&lt;/li&gt;
&lt;li&gt;🤖 Use AI to identify suppliers, invoice numbers, dates, currencies, subtotals, taxes, and totals.&lt;/li&gt;
&lt;li&gt;🗂️ Organize expenses into categories.&lt;/li&gt;
&lt;li&gt;✅ Review and correct extracted information before saving it.&lt;/li&gt;
&lt;li&gt;💾 Store invoice records in a local SQLite database.&lt;/li&gt;
&lt;li&gt;📊 View expense summaries and export records to CSV.&lt;/li&gt;
&lt;li&gt;🔒 Process documents locally instead of sending invoice text to a cloud AI API.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The intended users are freelancers, independent contractors, and small business owners who want to reduce repetitive data entry while keeping control of their financial documents.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The side-hustle idea:&lt;/strong&gt; Start with a free local tool and explore paid features such as bulk invoice processing, customizable expense categories, and advanced reporting if users find them valuable.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Project status:&lt;/strong&gt; Local MVP implementation.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub repository:&lt;/strong&gt; &lt;a href="https://github.com/antonluckshman/InvoiceMate-Local" rel="noopener noreferrer"&gt;https://github.com/antonluckshman/InvoiceMate-Local&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Screenshots:&lt;/strong&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%2Fr9jrms42a4b8onmskyik.png" alt=" " width="800" height="371"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The application is designed to run locally using Streamlit and Ollama. It is not presented as a publicly deployed web service.&lt;/p&gt;

&lt;p&gt;The planned demo workflow is straightforward:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Upload a sample invoice.&lt;/li&gt;
&lt;li&gt;Extract the document text.&lt;/li&gt;
&lt;li&gt;Let the local AI model identify the invoice fields.&lt;/li&gt;
&lt;li&gt;Review and correct the extracted information.&lt;/li&gt;
&lt;li&gt;Save the record and export the results to CSV.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The demo will use fictional invoice data rather than real customer documents.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Repository:&lt;/strong&gt; &lt;a href="https://github.com/antonluckshman/InvoiceMate-Local" rel="noopener noreferrer"&gt;https://github.com/antonluckshman/InvoiceMate-Local&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The project is built with Python and organized into small modules:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;app.py&lt;/code&gt; — Streamlit interface and application workflow.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;invoice_extractor.py&lt;/code&gt; — PDF/image text extraction and local AI inference.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;validators.py&lt;/code&gt; — Field normalization, validation warnings, and duplicate detection.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;database.py&lt;/code&gt; — Local SQLite storage.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;exporter.py&lt;/code&gt; — CSV generation.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;tests/&lt;/code&gt; — Automated tests for validation logic.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal is to keep the code understandable and make it easy to extend the application without depending on a proprietary AI service.&lt;/p&gt;

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

&lt;p&gt;I chose a local-first architecture using Python, Streamlit, Ollama, and an open-weight language model.&lt;/p&gt;

&lt;p&gt;Here is how the pipeline works:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Invoice PDF or image → Text extraction/OCR → Local AI → Structured data → Human review → SQLite → CSV export&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  The technology stack
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Python:&lt;/strong&gt; Application logic and data processing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Streamlit:&lt;/strong&gt; A simple interface for uploading documents, reviewing extracted fields, and viewing expenses.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ollama:&lt;/strong&gt; Runs the language model locally.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Qwen2.5 3B Instruct:&lt;/strong&gt; The selected starting model for extracting structured invoice information from text.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PyMuPDF:&lt;/strong&gt; Extracts text from digital PDF documents.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tesseract OCR:&lt;/strong&gt; Reads text from supported receipt images.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pydantic:&lt;/strong&gt; Validates the structure of the AI-generated output.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SQLite:&lt;/strong&gt; Stores invoice records on the user's computer.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pandas:&lt;/strong&gt; Prepares CSV exports.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I deliberately avoided training a model from scratch. For this task, a pretrained open-weight model combined with structured output, deterministic validation, and a simple user interface is a more practical starting point.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why combine AI with conventional code?
&lt;/h3&gt;

&lt;p&gt;A language model can help interpret different invoice layouts, but it can also misread a date or invent a plausible-looking value.&lt;/p&gt;

&lt;p&gt;That is why InvoiceMate Local does not treat the model's response as unquestionable truth.&lt;/p&gt;

&lt;p&gt;The model proposes structured fields. Python validates the output, checks for missing information, flags possible arithmetic inconsistencies, and helps identify duplicate invoices. Users can then correct the information before saving it.&lt;/p&gt;

&lt;p&gt;The validation checks are warnings rather than a guarantee of accounting or tax correctness.&lt;/p&gt;

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

&lt;p&gt;For InvoiceMate Local, &lt;strong&gt;open innovation is about giving users more control over their data, AI model, and operating costs.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Invoices can contain supplier information, addresses, business expenses, and other sensitive details. Some freelancers and small businesses may not want to send these documents to an external AI provider.&lt;/p&gt;

&lt;p&gt;Running an open-weight model locally offers a different approach.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Privacy by design
&lt;/h3&gt;

&lt;p&gt;The application uses local inference through Ollama instead of relying on a cloud AI API for invoice extraction.&lt;/p&gt;

&lt;p&gt;After installing the application dependencies and downloading the model, the core workflow is designed to operate without an internet connection. Offline operation still needs to be verified in the target environment.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. No per-document cloud AI API fees
&lt;/h3&gt;

&lt;p&gt;The local inference approach avoids a separate cloud AI API charge for every document processed.&lt;/p&gt;

&lt;p&gt;That makes experimentation easier for a small tool intended for freelancers. However, local processing still has hardware, electricity, and maintenance costs.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Freedom to experiment
&lt;/h3&gt;

&lt;p&gt;The model can be replaced with another compatible model, and the extraction prompts, validation rules, and expense categories can be customized.&lt;/p&gt;

&lt;p&gt;This makes it possible to experiment with different models and workflows without rebuilding the entire application around one provider's API.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. A practical local-first alternative
&lt;/h3&gt;

&lt;p&gt;A cloud AI API can be convenient, but it introduces an external service dependency and potentially recurring usage costs.&lt;/p&gt;

&lt;p&gt;InvoiceMate Local explores whether a small open-weight model running on an ordinary computer can provide enough value for a focused business task.&lt;/p&gt;

&lt;p&gt;The important part is not simply using an open model. It is building the actual workflow around local inference, local storage, and user-controlled verification.&lt;/p&gt;

&lt;p&gt;Local storage is not automatically encrypted, so users still need to protect their computers and database files.&lt;/p&gt;

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

&lt;p&gt;I used AI-assisted development to help build the application structure, document-processing pipeline, validation logic, and supporting documentation.&lt;/p&gt;

&lt;p&gt;I'll add a DevRelay session link here if I capture and publish one.&lt;/p&gt;

&lt;h2&gt;
  
  
  Limitations and Next Steps
&lt;/h2&gt;

&lt;p&gt;InvoiceMate Local is an early MVP, not a replacement for accounting software or professional tax advice.&lt;/p&gt;

&lt;p&gt;The current implementation needs further testing with different invoice layouts, OCR quality, ambiguous dates, unusual tax structures, and malformed model outputs.&lt;/p&gt;

&lt;p&gt;My next steps are to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Test extraction quality using a documented set of fictional invoices.&lt;/li&gt;
&lt;li&gt;Measure field-level accuracy instead of assuming the model is correct.&lt;/li&gt;
&lt;li&gt;Improve handling of scanned PDFs and difficult receipt images.&lt;/li&gt;
&lt;li&gt;Test offline operation after installation and model download.&lt;/li&gt;
&lt;li&gt;Get feedback from a freelancer or small business owner.&lt;/li&gt;
&lt;li&gt;Explore which features users would actually pay for.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I'd love to hear from people who deal with invoices regularly:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Would you use a local AI invoice assistant to organize your expenses? What would it need to do before you trusted it with your business documents?&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title># StudyBuddy AI: I Built an AI Study Buddy for My Friend Linuka 📚</title>
      <dc:creator>Anton Luckshman</dc:creator>
      <pubDate>Thu, 15 Oct 2026 04:05:19 +0000</pubDate>
      <link>https://dev.to/anton_luckshman/-studybuddy-ai-i-built-an-ai-study-buddy-for-my-friend-linuka-1cfg</link>
      <guid>https://dev.to/anton_luckshman/-studybuddy-ai-i-built-an-ai-study-buddy-for-my-friend-linuka-1cfg</guid>
      <description>&lt;p&gt;This is my 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;/p&gt;

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

&lt;p&gt;I built &lt;strong&gt;StudyBuddy AI&lt;/strong&gt; for my friend Linuka, who could use a simpler way to turn lecture notes into practice questions.&lt;/p&gt;

&lt;p&gt;The idea is pretty straightforward: instead of reading through notes again and again, Linuka can upload a PDF, TXT, or Markdown file or simply paste notes into the app and generate a quiz from the content.&lt;/p&gt;

&lt;p&gt;Users can choose the number of questions, difficulty level, and an optional topic. StudyBuddy AI then creates multiple-choice questions, provides feedback and explanations, and calculates a score at the end.&lt;/p&gt;

&lt;p&gt;I wanted to make studying a little more interactive and help turn passive reading into active practice. 📚&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;GitHub Repository:&lt;/strong&gt; [&lt;a href="https://github.com/antonluckshman/StudyBuddy-AI" rel="noopener noreferrer"&gt;https://github.com/antonluckshman/StudyBuddy-AI&lt;/a&gt;]&lt;/p&gt;

&lt;p&gt;The project uses React for the frontend, FastAPI for the backend, and Ollama to run a local AI model.&lt;/p&gt;

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

&lt;p&gt;I used React and Vite to build the user interface, Python with FastAPI for the backend, and Ollama to generate quizzes using the Qwen2.5 3B model by default.&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%2Fwpcf6fro866vhdp042b9.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%2Fwpcf6fro866vhdp042b9.png" alt=" " width="800" height="405"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The workflow is simple:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Upload study materials or paste notes.&lt;/li&gt;
&lt;li&gt;Choose the quiz difficulty and number of questions.&lt;/li&gt;
&lt;li&gt;Let the AI generate multiple-choice questions from the material.&lt;/li&gt;
&lt;li&gt;Answer the questions and get feedback, explanations, and a final score.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I also added basic input validation and error handling to make the experience easier to use.&lt;/p&gt;

&lt;p&gt;One current limitation is that scanned PDFs aren't supported because OCR hasn't been implemented yet.&lt;/p&gt;

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

&lt;p&gt;I wanted to experiment with AI without depending on a paid, hosted AI API.&lt;/p&gt;

&lt;p&gt;Using open-source tools gives me the flexibility to experiment with different models and run inference locally through Ollama. When configured for local inference, the study material can stay on the user's computer instead of being sent to a hosted AI service.&lt;/p&gt;

&lt;p&gt;It also gives me more control over how the application works and makes it easier to learn by building something practical.&lt;/p&gt;

&lt;p&gt;Of course, the project is still a work in progress, and there's plenty of room to improve the quiz quality and user experience.&lt;/p&gt;

&lt;p&gt;Built with open-source tools, for my friend Linuka and for more focused, interactive studying. 🌱&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>TrailMate AI — Make Room for Outside</title>
      <dc:creator>Anton Luckshman</dc:creator>
      <pubDate>Sun, 11 Oct 2026 03:57:42 +0000</pubDate>
      <link>https://dev.to/anton_luckshman/trailmate-ai-make-room-for-outside-3kb1</link>
      <guid>https://dev.to/anton_luckshman/trailmate-ai-make-room-for-outside-3kb1</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;TrailMate AI — Your AI-powered outdoor activity planner&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;TrailMate AI helps people spend less time staring at screens and more time exploring the outdoors. Instead of endlessly scrolling for things to do, users can generate personalized outdoor activity plans based on their starting location, available time, preferred activity pace, and favorite scenery.&lt;/p&gt;

&lt;p&gt;Whether you have just 20 minutes for a short walk or 90 minutes for a nature adventure, TrailMate AI suggests activities, provides a simple itinerary, recommends what to bring, and includes basic outdoor safety reminders.&lt;/p&gt;

&lt;p&gt;The project is designed for students, busy professionals, travelers, and anyone who wants to make getting outside easier.&lt;/p&gt;

&lt;p&gt;The main idea is simple: &lt;strong&gt;use AI to help people leave their screens, not spend more time on them.&lt;/strong&gt;&lt;/p&gt;

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

&lt;p&gt;🌐 &lt;strong&gt;Live Demo:&lt;/strong&gt; [Not Ready Yet]&lt;/p&gt;

&lt;p&gt;📸 &lt;strong&gt;Screenshots:&lt;/strong&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%2Fj12eejcdf969sn7qikbx.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%2Fj12eejcdf969sn7qikbx.png" alt="Add a screenshot of the TrailMate AI home page" width="800" height="633"&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%2Fj3ti0i3g241a32614z8c.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%2Fj3ti0i3g241a32614z8c.png" alt="Add a screenshot showing the activity preferences" width="800" height="594"&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%2Fkd12ydy5v79i1znemt2h.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%2Fkd12ydy5v79i1znemt2h.png" alt="Add a screenshot of a generated outdoor plan" width="515" height="644"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The demo currently includes a sample-planning mode, so users can explore the experience without configuring an AI model.&lt;/p&gt;

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

&lt;p&gt;💻 &lt;strong&gt;GitHub Repository:&lt;/strong&gt; [&lt;a href="https://github.com/antonluckshman/TrailMate-AI" rel="noopener noreferrer"&gt;https://github.com/antonluckshman/TrailMate-AI&lt;/a&gt;]&lt;/p&gt;

&lt;p&gt;TrailMate AI is built with React and Vite. The source code includes the user interface, activity-planning logic, sample plans, and optional local AI integration.&lt;/p&gt;

&lt;p&gt;Feel free to explore the code, suggest improvements, report issues, or contribute new outdoor activities and planning features!&lt;/p&gt;

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

&lt;p&gt;I built TrailMate AI using &lt;strong&gt;React, Vite, and open-source AI models that can run locally&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The application has two planning modes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Demo mode:&lt;/strong&gt; Generates sample outdoor plans immediately, allowing users to try the application without setting up an AI model.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Local AI mode:&lt;/strong&gt; Can connect to &lt;a href="https://ollama.com/" rel="noopener noreferrer"&gt;Ollama&lt;/a&gt; to run a supported open-weight language model locally, such as Llama 3.2 or Qwen2.5.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Users choose their starting location, available time, preferred pace, and scenery. The application uses those preferences to generate an outdoor activity plan with suggested activities, a checklist, and safety reminders.&lt;/p&gt;

&lt;p&gt;I wanted to make the project accessible to people who don't have access to paid AI APIs. By supporting local inference, TrailMate AI provides a path toward experimenting with AI without requiring a paid model API key.&lt;/p&gt;

&lt;p&gt;The current version is an MVP. Its plans are suggestions, not verified hiking routes or live recommendations based on weather, trail conditions, or real-time maps.&lt;/p&gt;

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

&lt;p&gt;Open innovation makes it possible for developers to experiment, learn, and build useful applications without depending entirely on proprietary platforms.&lt;/p&gt;

&lt;p&gt;For TrailMate AI, open-weight models and local inference offer several advantages:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Accessibility:&lt;/strong&gt; Developers and users can experiment without necessarily paying for a commercial AI API.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Privacy and control:&lt;/strong&gt; With a properly configured local setup, prompts can be processed on the user's machine rather than sent to a hosted AI provider.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Flexibility:&lt;/strong&gt; Different supported models can be tested and compared for activity planning.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Community collaboration:&lt;/strong&gt; Other developers can contribute new activity types, improve prompts, add local outdoor knowledge, and extend the application.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Learning by building:&lt;/strong&gt; Open tools make it easier to explore how AI fits into a complete application, from the user interface to model inference.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A closed API could also generate outdoor plans, but open-weight models give developers more flexibility over where inference happens and which model they choose. They also make experimentation more accessible.&lt;/p&gt;

&lt;p&gt;I believe open innovation is especially valuable when building small projects: it lowers barriers to experimentation and gives the community a starting point that others can adapt to their own needs and locations.&lt;/p&gt;

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