DEV Community

HacktoberFest Week 2 Challenge LocalLedger AI: A Private Invoice and Receipt Organizer for Freelancers

Hacktoberfest Open-Source AI Challenge Week 2: Side Hustle Submission πŸ’Έ

LocalLedger AI: A Private Invoice and Receipt Organizer for Freelancers

This is a submission for the Hacktoberfest Open-Source AI Challenge Week 2: Side Hustle.

What I Built

LocalLedger AI is a privacy-first invoice and receipt organizer built for freelancers, consultants, and independent workers.

Managing invoices and receipts manually can become frustrating. Financial documents end up scattered across folders, searching for a particular expense takes time, and preparing monthly summaries involves repetitive work. Uploading these documents to cloud-based AI services can also raise privacy concerns.

I built LocalLedger AI to make this workflow simpler while keeping documents on the user's computer.

Here’s what it does:

  • Smart data extraction: Extracts vendor names, invoice numbers, dates, currency, subtotal, tax, total, and payment status from invoices and receipts.
  • Human-reviewed results: Flags missing, ambiguous, or inconsistent fields so users can verify and correct the extracted information.
  • Duplicate detection: Identifies exact duplicates using file hashes and flags possible duplicates using document details.
  • Local document organization: Organizes original documents into folders while avoiding filename collisions.
  • Expense insights: Generates monthly and vendor-wise summaries with CSV export.

The potential customers are freelancers and small independent businesses that want less manual bookkeeping without depending on cloud AI services. A paid desktop edition could be a future direction, although I haven't validated pricing or paying customers yet.

Demo

There isn't a hosted demo or video walkthrough available yet. LocalLedger AI is designed to run on the user's own computer rather than requiring a hosted service.

To run it locally:

  1. Install Ollama and Tesseract OCR.
  2. Download the Qwen2.5 model:
   ollama pull qwen2.5:3b-instruct
Enter fullscreen mode Exit fullscreen mode
  1. Install the Python dependencies:
   pip install -r requirements.txt
Enter fullscreen mode Exit fullscreen mode
  1. Start the application:
   streamlit run app.py
Enter fullscreen mode Exit fullscreen mode

After the required software and model are installed, document processing can run offline. The application also indicates whether Ollama and the selected model are available.

Code

Check out the source code and implementation here:

LocalLedger AI β€” GitHub Repository

Contributions and suggestions for improving local document processing, extraction accuracy, and privacy are welcome!

How I Built It

I wanted to build around open-source tools and a locally running model instead of depending on a proprietary, cloud-hosted AI API.

Here's the technology stack:

  • Python: Core application logic and document-processing pipeline.
  • Streamlit: User interface for importing documents, reviewing extracted fields, and exploring expense summaries.
  • Qwen2.5 Instruct (3B): Open-weight language model used for structured invoice and receipt data extraction.
  • Ollama: Runs the model locally and provides the interface for local inference.
  • PyMuPDF: Extracts text from text-based PDF documents.
  • Tesseract OCR: Extracts text from scanned PDFs and image-based receipts.
  • SQLite: Stores document metadata and extracted information locally.
  • Pandas and Plotly: Support data analysis, monthly summaries, and vendor-wise visualizations.
  • Python hashlib: Generates SHA-256 hashes for exact duplicate detection.

The workflow is straightforward: a user imports a document, the application extracts its text, and the local model identifies relevant financial fields. The returned JSON is validated before the results are saved to SQLite.

An important design decision was to treat AI-generated results as suggestions rather than unquestionable facts. Missing or uncertain values are flagged for human review. Original files are retained, filenames are made collision-safe, and documents remain available for review even if a model request fails.

Why Does Open Innovation Matter?

Financial documents can contain sensitive information, including client names, addresses, invoice details, and transaction amounts. Sending this information to an external AI service isn't always desirable, especially for freelancers handling client data.

Open-source tooling and local inference make a different approach possible.

With LocalLedger AI, users can run the model on their own machines, inspect the processing pipeline, and keep document content within their local workflow. After the initial setup, they can process documents offline without depending on a hosted inference API or paying per-request API charges.

Open innovation also gives developers the freedom to experiment with different models, improve extraction and validation, and adapt the application to their own workflows without being locked into a single proprietary AI provider.

Of course, local AI has trade-offs. Performance depends on available hardware, OCR quality varies between documents, and model outputs still need verification. That's why human review is an important part of this project rather than an afterthought.

For me, this project was an opportunity to explore how open-weight AI can solve a practical problem while keeping privacy at the center of the design.

My Agent Session

Optional section β€” add this if you have a saved DevRelay agent session.

I used this project to explore an open-source AI workflow for a practical, privacy-focused application. If a shareable DevRelay session becomes available, I'll link it here.

Prize Categories

Open-Source AI Challenge β€” Week 2: Side Hustle

No partner-specific prize category claimed. The project uses the open-source and locally runnable tools described above.


Built with Python, local AI, and a focus on keeping financial documents private.
Hacktoberfest #Hacktoberfest2026 #BuildForAFriend #OpenSource #DSA #DevTools #JavaScript #NodeJS #WebDevelopment

Top comments (0)