DEV Community

NIDHAN JAIN
NIDHAN JAIN

Posted on AI-assisted

RepairDesk Local: A Private Repair Desk with Optional Gemma AI

Hacktoberfest Open-Source AI Challenge Week 2: Side Hustle Submission 💸

This is my submission for the Hacktoberfest Open-Source AI Challenge Week 2: Side Hustle. I started this new project during the Week 2 challenge window.

What I built

RepairDesk Local is an offline-first repair desk for independent phone and laptop repair shops. It tracks jobs from intake through completion, calculates itemized estimates, and prepares customer-update drafts. The core workflow is ordinary Python backed by SQLite; AI is optional.

The intended user is a small repair shop or independent technician who wants a lightweight way to organize repairs without sending records to a hosted repair SaaS. I have not yet validated willingness to pay with a shop or claimed paying users. The goal is a focused tool that a shop could install and operate locally, with no per-request AI API charge.

Demo

Demo Video:

Code

How I built it

The stack is Python, Streamlit, SQLite, Pydantic, and Ollama. The default optional model is Gemma 3 4B (gemma3:4b). The regular job workflow and estimate arithmetic do not depend on a model. When requested, Gemma produces an intake checklist and possible explanations; Pydantic validates the structured response, and suggestions remain explicitly unconfirmed. The model cannot set prices, approve work, or send customer updates.

flowchart LR
    Staff[Shop staff] --> UI[Streamlit on local computer]
    UI --> DB[(SQLite repair database)]
    UI -->|Optional device and complaint context; no customer name/reference| AI[Python AI service]
    AI -->|Default: localhost HTTP| Ollama[Ollama + Gemma 3 4B]
    Ollama --> AI
    AI -->|Validated, unconfirmed suggestions| UI
    UI -->|Human reviews and copies manually| Customer[Customer]

With the default OLLAMA_BASE_URL=http://localhost:11434, the model request goes to Ollama on the same computer. This application has no cloud AI integration. If an operator deliberately configures a remote Ollama endpoint, the selected device and complaint context will be sent to that endpoint instead. Customer names and references are omitted from model prompts. The app warns against saving passwords, PINs, or device unlock codes.

Try it locally

Python 3.11 or newer is required. From PowerShell:

git clone https://github.com/Dev-Nidhan/repairdesk-local.git
cd repairdesk-local
python -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install -r requirements.txt
Copy-Item .env.example .env
ollama pull gemma3:4b
streamlit run app.py
Enter fullscreen mode Exit fullscreen mode

Ollama is considered to be installed through Ollama download before pulling gemma3:4b model, though Ollama and Gemma are optional; the job desk, estimates, and template-based updates still work without them. The test suite currently has 30 passing tests and does not call a live model.

Why open innovation matters

Repair complaints can contain sensitive details. Keeping SQLite and, by default, Ollama on the shop's own computer gives the operator control over that data and allows the essential workflow to work without a hosted AI dependency. An open-weight model also avoids a per-prompt API bill.

That does not make local inference free or equally fast on every device: operators provide the hardware and electricity, and CPU performance and model quality vary. I am treating Gemma as a reviewable helper, not a substitute for a technician or a claim that every shop will save money. For more on the trade-offs, see a builder's measured cost comparison of an offline invoice sorter and this Ollama setup and hardware guide.

First user and validation

I have not yet tested this with an external repair shop or collected revenue. The walkthrough uses only fictional sample records. The next validation step is to ask independent technicians whether local job tracking, estimate preparation, and optional intake suggestions save enough time to be useful.

Prize categories

  • Overall Hacktoberfest Open-Source AI Challenge Week 2: Side Hustle.
  • Best Use of Gemma: Gemma 3 4B is an implemented, optional model for structured repair-intake suggestions through Ollama; this is a local workflow, not a model name added only for the submission.
  • Best Use of GitHub Copilot: I used Copilot in VS Code to help build and iterate on the application and its documentation. The shipped app does not call Copilot at runtime.

Top comments (0)