SIDE PROJECTS

Side projects, experiments, and retained records.

Working systems and side projects I build for fun, alongside retained build records from past engineering work.

SIDE PROJECTS

Built for fun

Working side projects and systems I build for fun, exploring new ideas, tooling, and architectures in the open.

Penny

An AI agent that connects Telegram, calendar, mail, phone, markets, and publishing through one command per capability.

channels agent one command per tool approval the world
Read write-up →
LetMeCheckThatBot

A group-chat agent that reads the thread, its media, and its links, then answers in context when called.

the group chat translators agent + memory reply in thread WHEN SOMEONE SAYS ROBOT
Read write-up →
CertArena

An AI certification exam simulator and benchmark with Pearson VUE timing, Kokoro speech synthesis, and cited documentation across nine tracks.

9 tracks (228 items) VUE test engine scaled ≥ 720? review + citations 1,132 KOKORO AUDIO CLIPS · ZERO DEPENDENCIES
Read write-up →
BlockReport

Philadelphia's open property data resolved into one layer and served three ways: crawlable reports, a browser map, and a research agent that cites its records.

assessments permits violations deeds & transfers tax delinquency one property layer mined for insight reports browser map research agent
Read write-up →
KTrader

Trading algorithms proven on a paper account, run live where they hold up. The research never sees a price, the code owns position sizes, and every record is immutable.

blind research paper account holds up? live capital IMMUTABLE RECORDS
Read write-up →
ScooScoo.homes

An address list goes in, house portraits on mugs and cards come out. Each address is a paid job that parks when the imagery is uncertain.

address list house portrait confident? mugs & cards UNCERTAIN WORK PARKS
Read write-up →

CAPABILITIES, WORKFLOWS, SYSTEMS

The architecture behind the work

The systems use the same approach: stable operations below the model, durable workflows around long-running work, and a traceable record when a system does something consequential.

304

commands on Penny's stable capability surface

56

capability domains exposed through that one command line

37

versioned n8n workflows around the agent surface

6

active systems with different interfaces and risk boundaries

01 · capabilities

Give models stable operations

One CLI makes every operation a testable command, from sending mail to generating images to restarting services.

Memory, web search, full browser control, local speech in and out, and image pipelines are each one command with the same contract.

Every caller gets the same surface: the agent inside its loop, the workflows outside it, Claude Code, OpenClaude, and me at a terminal.

02 · workflows

Carry state past one chat turn

Versioned workflows schedule the work and expose explicit stop points.

The morning briefing, video production, publishing, and site changes each run as inspectable stages, with an approval gate on every external write.

A site change, for example, arrives as an allowlisted proposal with a stage preview and an exact diff, and promotes only on approval.

03 · control plane

Make the boundary testable

A model can propose whatever it likes. Code, policy, and named reviewers define the decisions it is allowed to carry out.

Blind judges challenge drafts, and adversarial fixtures catch output that looks finished but is wrong, before a reader sees it.

Every run stays attributable from input to outcome. Each known failure class has its own recovery routine, and nothing retries silently.

04 · product bindings

Use the right shape for the job

The same stack ships as six different products, and each one keeps only what its job needs.

Penny is the full surface behind approval gates. LetMeCheckThatBot is a separate, cheaper loop that keeps the group chat as the interface. BlockReport feeds a normalized city record to in-browser analytics and one agent with 33 bounded tools.

Every KTrader decision has to clear deterministic risk gates, and every action leaves an immutable record. CertArena runs zero-dependency exam simulations with synchronized speech and Pearson VUE timing. ScooScoo runs as an isolated worker joining generation, payment, and delivery.

BUILD RECORDS

Earlier products, kept for the evidence

These products are retired. The records remain because the technical and operating problems are still current.

ClosetBank

A virtual closet and outfit-planning product launched in 2009.

sunset   consumer   fashion
FrameIQ

It read every video on an account as data and graded the whole account's strategy for its platform.

sunset   video   computer vision
Read the build record →
Doorbell Intelligence

A private vision and voice system that indexed camera recordings, retrieved specific moments, and broadcast two-way audio through local hardware.

sunset   computer vision   retrieval   local speech
Read the build record →
vLLM Video Intelligence

Contact-sheet reading that cut the cost of analyzing a video from eight cents to under a penny.

sunset   video   vision models
Read the build record →
Everything-Bot

The hackathon build where the group-chat agent started. Nothing ran between messages.

sunset   telegram   serverless
Read the build record →
AgentsThatEmail

An agent on an email address. Forward a thread, and everyone on it gets the decisions back.

sunset   email   agents
Read the build record →
aiPDF Engine

A queued pipeline that took apart, OCR'd, and rebuilt large PDF sets, one retryable job per step.

sunset   documents   ocr
Read the build record →
PagePurger

Medical-legal record review: duplicate and irrelevant pages pulled before a person bills three dollars each to read them, every removal logged with its reason.

sunset   content   automation
Read the build record →
WatchPost

The earlier doorbell experiment that turned a camera feed into a searchable visit log.

sunset   computer vision   doorbell
Read the build record →

WORK WITH ME

If one of these problems is yours, let’s talk.

Send the constraint that is blocking the work. A system boundary, a bad handoff, or a costly manual process is enough to start.

Email me →