Silas

I build small, self-contained software — local-first AI tools, web services, and games. Most of it runs offline on one machine with no paid APIs. A selection is below.

Projects

Screenshots are from the live apps running locally. Code links go to GitHub where public.

$ curl -s :5000/chat -d '{"message":"what are the recycling hours"}'

{
  "action":     "answer",
  "intent":     "RECYCLING_HOURS",
  "confidence":  1.0,
  "text":       "The Knox County Recycling Center is open
                 Monday through Friday, 8 AM to 5 PM...",
  "reason":      null,
  "latency_ms":  812.4
}

$ curl -s :5000/chat -d '{"message":"appeal my property tax"}'

{ "action":"escalate", "reason":"hard_rule: tax appeals",
  "text":"Let me connect you with a representative." }

Knox County AI Answering Line

Design & implementation

An on-prem phone-answering AI for a county government, built to decline rather than guess. The language model does exactly one job — classify a caller's words into a closed set of intent IDs. Any ID it invents is rejected; the spoken answer is returned verbatim from the knowledge base, so a 3.8B model can't invent a permit fee.

Three independent gates decide whether to answer at all: hard keyword escalation rules that run before the model, closed-set validation, and a confidence floor that blends the model's self-reported score with lexical overlap. Below 0.55 the call goes to a human. Ships with a 26-case regression battery.

PythonOllama / Phi-3.5Local LLMNo external APIsHTTP JSON API
Offline Document Search API Swagger docs

Offline Document Search

Design & implementation · v1 → v2

Ask questions about your own documents, fully offline against a local Ollama model — nothing leaves the machine. Hybrid semantic + keyword retrieval, per-document profiling (names, headings, length) so whole-document questions are answerable, and a router that decides whether a question is about a passage or the whole document.

v2 wraps the engine in a FastAPI service: HTTP upload, SQLite with full CRUD and metadata, persisted query history, API-key auth, optional TLS, and 158 automated tests.

PythonFastAPISQLiteOllamaVector + keyword search158 tests
Toolhub launcher

Toolhub

Design & implementation

A place to build many small tools and reach them from any device — phone, laptop, a machine you remote into — over a private network with nothing exposed to the internet. Three layers, each doing one job: Tailscale is the network and identity, Caddy is the router, systemd is the lifecycle. Individual tools stay ordinary local web apps that know nothing about any of it, so moving the whole thing to a real server later is a copy of one directory, not a rewrite.

PythonCaddysystemdTailscaleSelf-hosting
Knox County RAG chatbot

Knox County RAG Chatbot

Design & implementation

A retrieval-augmented chatbot over the county knowledge base — permits, property assessment, county commission, services. Page ingestion extracts main content as markdown, chunks it with heading context preserved, embeds each chunk locally with all-MiniLM-L6-v2, and stores vectors in PostgreSQL / SQLite. Retrieval-only by default; generation is opt-in.

PythonPostgreSQLsqlite-vecLocal embeddingsRAG
Drop file transfer tool

Drop

Implementation

A shared file inbox between phone and computer — drop a file on one device, grab it on another, over the private Tailscale mesh. Built as a Toolhub tool: a single app.py, no database, dropped into the hub and picked up automatically.

PythonToolhub tool

Games

A dozen single-file HTML5 math games for kids — big cartoon characters, particle bursts, combo systems, speed bonuses. All playable in the browser.

Ziggy's Multiplication Run Ronnie's Barbell Math