Projects

Production AI tools and agentic workflows built inside a publishing operation, plus personal projects whose code is public and readable.

Built for a content operation

Tools shipped into a working publishing team.

Shipped

FrameShop

The creative production suite behind Ranker's publishing team — more content, faster, and more consistently on-brand.

A template-driven creative system built into Ranker's internal tools. Editors open a template, fill its panels with copy that auto-fits, swap or generate imagery, and fan the result into a full set of scheduled variations — work that used to mean one Photoshop file per asset. A multi-agent pipeline rebuilds editable templates from finished PNGs, turning the back catalog into a template library: anything that shipped once becomes the starting point for everything after it.

TypeScriptSvelteKitClaude APICanvasPSDMulti-agent orchestration
Shipped

Damon (AI Social Copy Generator)

Produces interesting, non-formulaic, on-brand social copy at 5–10× the volume.

An agentic LLM workflow that generates engaging, clickable copy in Ranker's voice across genres — with editors acting as finishing-touch curators rather than formula designers. Under the hood, a custom-built database decomposes high-performing social copy into a structural taxonomy (winners, mid-tier, losers) and trains genre-specific prompts against the labeled corpus, with human-in-the-loop feedback closing the loop.

PythonClaude APISQLiteHuman-in-the-loop
Shipped

Ranker Chrome Extension

Cuts content-building time 60–80% by piping the web directly into Ranker's pipelines.

A Chrome extension that scrapes structured content from common source pages and runs AI workflows directly into Ranker's list-builder and social-post pipelines.

TypeScriptChrome Extension APIClaude APIWeb scraping

Built independently

Personal projects, public code.

Shipping

Convos

Surfaces the stories podcasts are talking about and drops you into the segments that cover them.

Convos breaks podcast episodes into short, shareable segments — each one transcribed and titled. The app surfaces the top stories being discussed across shows and lets listeners jump straight to the segments where each story is covered, so you can hear what your favorite podcasters are saying about the topics that matter to you. The backend that does the matching is open source: transcription with word timings, LLM topic segmentation, headline clustering, and a verifier that scores which segments cover which story — published with an unedited sample run over 39 episodes from 20 shows, and a section on where it breaks.

SwiftTypeScriptClaude APIAssemblyAIVoyage embeddings
Shipping

Beat Journal

An iOS journal that pairs your writing with your health data.

A journaling app that connects daily entries to HealthKit signals — sleep, workouts, heart rate — and surfaces AI-driven patterns over time. Submitted to the App Store; in review.

SwiftSwiftUIHealthKitClaude APICloudflare Workers
Shipped

Agent Life Skills

A published slice of the agent platform I run against my own life.

Three isolated agents run 44 scheduled jobs and 60+ skills — a news digest, a knowledge base, a meeting coach, a workout coach, a restaurant booking loop, and more. agent-life-skills is the public slice: five packages, each useful on its own; the work-side skills stay private. What it demonstrates is the shape — one skill format across every capability, deterministic code doing the fetching and parsing, models used only for judgement, and a human gate on anything irreversible.

PythonClaude APISQLitelaunchdcronSlackDiscord
Prototype

Trove

A place to keep all of your own data on your own machine — and ask a language model questions about your own life.

The goal is one place where all of your data lives and where you interrogate it: collect, store, see, ask. A Rust core, a collector daemon and a Mac app pull your messages, calls, calendar, health and browsing into plain JSONL, CSV and markdown on your disk, under a published spec. Your own life is the one dataset you can't query. Collection and storage work; the analysis layer is the stated destination, not a shipped feature. Prototype, paused — the README says which importers are validated against real data and which are planned.

RustTauriReactTypeScriptSQLitelaunchd