Projects · Sawyer Wright

Things I've built, and what state each one is in.

I'm Sawyer Wright. Most of what follows is software I built for myself on one Windows machine — a local AI stack, the tools that run on top of it, and two boards whose only job is to keep me honest about the rest.

Every entry says where it actually stands. Some of these run every night. Some are half-finished, and one is finished but can't be turned on until a stranger says yes. Labelling the difference seemed more useful than a wall of screenshots.

This work is produced with AI assistance and reviewed by a person before it reaches you.

  • Running in use most days
  • Built works, not in daily use
  • Building actively in progress
  • Blocked done, waiting on something outside the code

Part 1

The local AI stack

One machine with a mid-range GPU, and everything else pointed at it. This part exists because I got tired of paying four companies to do one job.

Sawpoint Gateway

Running

One local endpoint that every other project talks to. Apps ask for a role — fast, smart, code, vision — instead of a model name, so swapping models is a config edit and nothing downstream notices. Every tool call gets validated, and anything the local model fumbles escalates to a cloud model rather than failing quietly.

Its tool-call reliability is measured over fifty trials and reported as a confidence bound, not as the observed rate. The honest limit right now is latency: about twelve seconds a call, which is fine for batch work and nowhere near fast enough for speech.

Python · FastAPI · Ollama · local service discovery via a runfile

Sawpoint Voice

Running

A text-to-speech server with a voice that belongs to nobody. It isn't a clone of a real person — it's a weighted blend of style vectors, which is what makes it original and impossible to revoke. Runs faster than real time on the CPU alone.

The thing that removed the robotic quality wasn't the model. It was a prosody layer: loudness that falls across a line, the final clause slowing down, uneven pauses, and a tiny per-clause nudge so no two breaths are bit-identical. It replaced a hosted service that would have cost four figures a month at 24/7 use.

Python · FastAPI · Kokoro-82M via ONNX

Pocket

Building

A private thinking partner I can open on my phone. It runs against my own hardware over a tunnel instead of a cloud API — that costs some answer quality and buys the thing I actually wanted. Full history on disk, with a bounded slice of it assembled per request so it fits a small model's context.

Crisis handling runs in Python, not in the prompt, and deliberately over-triggers. A small local model is least reliable exactly when it matters most, so that path never goes through the model at all.

FastAPI · installable web app · SQLite full-text search · faster-whisper for speech in

Jarvis

Built

An always-listening voice assistant for Windows, built before any of the above existed. Speech in, a pluggable model behind it, and real control of the machine: volume, brightness, launching apps, playing music, searching.

Two weaknesses I wrote down rather than hid — the wake word is a substring test, so it hears more than it should, and destructive actions run without asking. It gets folded into the gateway once the latency above comes down.

Python · Ollama or a cloud model · offline speech recognition available

Gil, the desktop pet

Running

A pixel critter that lives on the taskbar, remarks on what's on screen, and speaks in the same voice as the stream commentator. Sprites are generated by a script, so retuning him doesn't need a paint program.

Everything is local: the screenshot is captioned by a local vision model and never written to disk, and a blocklist checks the window title before the capture and the caption before anything is said. It was the first program to use the gateway's service discovery — opening the pet brings the AI up behind it.

Python · PyQt6 · click-through window with a separate bubble layer

Part 2

Video and streaming

Three passes at the same question: can the boring parts of making video be handed off without the result getting worse.

CamCast

Blocked

A 24/7 stream with an AI commentator over live nature cams — reacting to what's on camera, roasting chat, running chat votes on which camera goes live. Five swappable personas; the house one is best described as Attenborough, three drinks in.

The hard part turned out to be cadence, not capability. An AI that talks nonstop is unwatchable and expensive, so most of the design is about deciding when to shut up. It runs end to end on real feeds in private testing and is not broadcasting: rebroadcasting somebody else's camera needs their permission, and asking for it properly is step zero.

Python · ffmpeg · local vision captions · local text-to-speech

Retention Engine

Building

A short-form video editor that grades its own work. Word-level transcription and silence cuts first, then a planner emits an edit decision list as JSON, critic passes score and revise it, and ffmpeg renders the result. After publishing, the retention curve comes back and gets written into a learnings file the next plan reads.

Built for a specific failure: my videos were getting views and losing people halfway. The first real clips were cut too fast to follow, which is the sort of thing only watching them tells you.

Python · whisper word timestamps · ffmpeg · phone-first dashboard in Next.js

Clip Pilot

Built

The pipeline underneath the video work: fetch a source, cut clips, caption them, upload. Unglamorous, and the reason two other builds took weeks instead of months.

Now mostly idle — the editor above is the honest successor, and pretending otherwise on a projects page would be the exact thing this page is trying not to do.

Python · ffmpeg · the YouTube API

Part 3

Markets

I like these because they punish self-deception faster than anything else I build. Both are paper-first on purpose.

StrikeDeck

Built

An options day-trading cockpit that looks like a spaceship. Live option chains from my own brokerage account behind a sci-fi heads-up display, plus a demo mode on synthetic chains so it can be opened and poked at with no account connected.

Node and Express with zero dependencies and the built-in SQLite — partly discipline, partly because a trading tool that breaks when a package updates is worse than no trading tool.

Node · Express · WebSocket · node:sqlite

Claudestreet

Building

A pixel trading floor where agent desks work the market in a browser tab, good enough to leave up as a screensaver. There's a hard wall between the game layer and the money layer: no bonuses, streaks or XP anywhere near a result, because in real life nobody pays you for booking twenty-four trades.

Paper trades against the real market first; real money only if it proves out. A 126-session backtest of the first rule set measured no edge — the forward paper record runs anyway, because a measured no is worth keeping a record against.

One HTML file, no server · hand-rolled pixel rendering · live crypto data

Part 4

Keeping track

Two tools whose entire job is to tell me the truth about the other twenty-odd. Both of them found things I'd forgotten I built.

Brain

Running

A private markdown wiki that feeds itself. It files by entity rather than by document, so one source updates several pages; every claim carries a reference, and contradictions are kept and dated instead of overwritten. Three ingestion paths — an email tag, a nightly topic pull, and a watcher over four folders — and it renders itself as a rotating 3D map with no 3D library involved.

Forty-odd pages and a few hundred sourced claims so far. The rule the whole thing turns on: a check must distinguish "looked and found nothing" from "could not look". I've had to fix that same bug in it five separate times, in five disguises.

Python standard library only · a canvas projection for the map · nightly scheduled runs

The Graveyard

Running

A board that scans my drive for unfinished projects and presents each one as a headstone that rots the longer I ignore it. Decay is measured from the newest of file modification time and last commit; stones tilt, crack and grow moss. Resurrection unlocks only when every task on a project is ticked, and then there's lightning.

The first real scan turned up forty-six projects, eighteen of them folders I'd stopped thinking about entirely, and three actually finished. That ratio is the point of the board. It also refuses to report a project missing unless the scan could really see the folder — same rule as above, learned the same way.

Python scanner · one dependency-free HTML app · a phone version that syncs overrides

The rest of it

Close to something you need built?

These twelve are the ones worth showing. The board in the last entry tracks closer to fifty, most of them unfinished, several of them abandoned for good reasons — and a few of the ones above will end up there too. That's the trade for working alone and fast.

If any of this is close to something you need built, email me. It reaches me directly; there is no one else here.

sawyer@sawpoint.net
Sawpoint · Sawyer Wright · Suffolk County, New York