Jake HorvitzSanta Barbara / Los AngelesAI × live musicUC Santa Barbara

I build the tools you need and run the operations behind them.

Ten projects, all built solo. Three agents I video-call and hand tasks mid-call, a build pipeline that will not let me skip a step, a voice assistant that spawns its own coding agents, and the operations software behind live music, real estate, and campus politics.

Three agents. They draft, I send.

Bartok finds work, JARVIS runs errands, and the Philosopher asks questions. I video-call all three through Agent FaceTime, a mobile portal I built where each one shows up as a photoreal avatar. I say a trigger word mid-call, a runner on my Mac or a cloud droplet picks up the task, and the agent reads the result back on the call.

Bartok's operator dashboard on staging, a long page: net and earned this month, lanes, ledger, queue metrics, and the approval queue labeled Jake decides with a column of drafted pitches waiting for a decision.
The Agent FaceTime roster on a phone: Bartok, JARVIS, and The Philosopher as tappable tiles, with the month's meter at the bottom.

Bartok's dashboard on the laptop scrolls as you do. Agent FaceTime on the phone. Staging and fixture data in both.

Bartok
A revenue agent. It scans for work, drafts pitches, deliverables, and queues each one for a signed SMS approval from me before anything sends. Sandboxed mission agents write manifests. Only the orchestrator touches the database, secrets, and messaging. Runs autonomously whether my computer is open or closed.
FaceTime
The call surface. Live on Netlify, with per-agent memory across calls, a token-gated bridge API, and automatic rejoins that carry the timer and running cost past the provider's session cap.
The rule
Nothing outbound leaves without me. No agent has a code path that spends or sends on its own.
PythonSQLiteTwilioAnam avatarsNetlify FunctionsDigitalOceanClaude Code
Bartok's avatar: a woman with long blonde hair and round glasses in a sage sweater, lit by window light.

Bartok

revenue agent · all business

Bartok runs on a DigitalOcean droplet and looks for work around the clock: website mockups for local businesses, gigs, inbound leads. It is direct and thinks in unit economics. It says "that is queued for your approval" instead of pretending something already went out, and it does not inflate numbers. When I say "commit" on a call, that is a logged decision.

spends moneysends without approvaldrafts, pitches, deliverablesruns on the droplet
JARVIS's avatar: a photoreal clone of Jake's own face, smiling, in a light blue polo.

JARVIS

butler wit · wears my face

The generalist. During our FaceTime sessions, JARVIS wears a photoreal clone of my face. Dry, one or two sentences at a time. I hand it an errand, it responds "Task accepted," and a runner on my Mac picks it up. When I ask for something bigger, JARVIS responds "Build accepted," and a Claude Code session starts on my machine while we keep talking. If JARVIS is unsure about any task, it follows up by asking me questions, all while logging the change in my Claude Code memory.

task accepted: Mac runnerbuild accepted: Claude Codeinvents facts
The Philosopher's avatar: a man with silver hair and a beard in a grey jacket, seated in a bright loft.

The Philosopher

counsel · one-year horizon

Counsel only. It has no task runner and no build lane, so it cannot send, spend, or ship anything. The Philosopher thinks with me on a one-year horizon: what to sunset, what I am avoiding, what a new idea would replace. It takes a position, defends it, and changes its mind out loud if I argue it out of one. When something needs to become real work, it says "that is a handoff" and describes the brief.

executes anythinghands me a menu of optionsasks what it replaces

Every one of these runs in production for a real user.

Screenshots are from staging with fixture data wherever a live view would show someone else's information.

Songsheet workspace showing a generated bass arrangement of What's Going On as tablature with chord names and a playback bar.
What's Going On, bass. Every note in the arrangement cites its source.
Songsheet playback controls and practice panels: source, arrangement, and compare modes, with per-measure source facts beside generated decisions.
Practice panels. Where the arrangement departs from the record, the record's version sits beside it.
Guitar chord-melody arrangement in drop-2 voicings rendered as tab, bars 17 through 32.
Guitar chord-melody in drop-2 voicings. The bridge, bars 17 through 32.
Peg, bass arrangement with intro and verse sections, loop controls, and a stems mixer for backing, bass, drums, guitar, horns, and keys.
Peg, bass. Loop a section, mute a stem, play along.
Guitar chord-melody draft with four difficulty tiers and a verdict button on every bar.
Four difficulty tiers of one melody. Rate each bar and the hand model adjusts.

Songsheet

Give it a song and an instrument, get playable sheet music and tab. It finds existing transcriptions, checks the melody against the recording with chroma key-shift and tempo autocorrelation, and renders through my own ABC parser to LilyPond. Three engines vote on pitch, octave, and rhythm so a bass part never lands in the wrong octave.

Music AIAudio analysisLilyPond
JARVIS interface: a white particle orb on black with a message input bar at the bottom.
The audio-reactive orb, built in Three.js. It breathes when JARVIS talks.
On a video call, JARVIS wears a photorealistic clone of my face and bills only for the minutes we talk.

JARVIS

A local, voice-first assistant that runs my calendar, mail, and notes, keeps a searchable memory, and spawns its own coding agents to build what I ask for. FastAPI, the Claude API, WebSockets, and a Three.js orb. It all runs on my own machine.

Voice AIFastAPIThree.jsWebSockets
View on GitHub

Amber gates need my verbatim words or a Touch ID token. The green gate opens only on the acceptance script's exit code.

Horvitz Pipeline

An open-source ship pipeline for AI coding agents. Every gate is enforced by code, so an agent cannot skip the spec, the review, or the staging check. Ten stages, from kill-or-commit through a Touch ID promote step to an operate-or-learn call after seven days. I used it to build version 2.0 of itself.

Open sourceBashClaude Code
View on GitHub
Pi-kadelic's 3D stage builder in perspective view: a wireframe model of the house lot with a stage, a truss carrying lights, a DJ booth, a dance floor, and a Design AI chat panel offering example instructions.
The 3D stage builder with the house plan loaded: stage, truss, PAR cans, DJ booth, dance floor. Design AI rearranges it from plain English.
Top-down plan view of the same 3D build on a grid, with the object palette on the left.
Top view of the same build, the way the setup crew reads it on party day.
Perspective view of the 3D build with labels switched on so every object is named.
Labels on, so the crew knows what goes where. Undo, redo, reset, and delete sit above the scene.
The schedule and build board for a fixture party: party info, push, send, templates, budget, crew, auto-assign, and groups controls, a task list under Build and setup, and a Claude planning panel.
The schedule and build board: crew, auto-assign, templates, and a Claude panel that plans the day. Fixture data.
Jarvis Brain view: an overall risk meter reading moderate, 44 of 100, with schedule, budget, crew effort, inventory, and weather tiles and a list of next critical actions.
Jarvis Brain: one risk score from schedule, budget, inventory, and crew effort, then the next critical actions.
Materials inventory table listing paints, primers, brushes, lumber, and stage backdrops with quantities, units, and notes.
Materials inventory with quantities and notes. Low-stock items feed straight into the Brain's restock list.
The AI planner tab with prompt chips: what could go wrong, two-hour pre-party checklist, rate my setup plan, decor priorities.
The AI planner: what could go wrong, the two-hour pre-party checklist, and a rating of the setup plan.
The critique notes drawer open on the right side of the schedule, ready for a note tagged General.
Critique notes: the crew logs what went wrong so the next party fixes it.

Pi-kadelic Brain

Event-operations platform for a 200-person fraternity. A 3D stage builder places the stage, truss, lighting, DJ booth, and dance floor on a model of the house, and a Design AI rearranges it from plain English. Live multi-user sync keeps the crew on one schedule. Budget, headcount, and inventory tracking sit next to an AI planner that writes the day's schedule and the materials list. Used to plan events of up to 350 people.

3D stage builderThree.jsReal-time syncLLM planner
shavitrootman.com home page: a white farmhouse under a large tree with the headline Live with us. Learn about us. and a See available units button.
Home. One promise up top, then the inventory across Michigan, Ohio, and Indiana in two buckets: available now and coming soon.
Deal case studies section with three cards: Mead Street in Michigan, Clarendon Road in Ohio, Kendall Street in Indiana, each with purchase and appraisal figures.
Deal case studies: three rebuilds documented from purchase price to appraisal.
One stop shop section with three panels: rent with us for tenants, invest with us for investors, sell us your home for home sellers.
One page for tenants, investors, and home sellers, each with a single next step.
Meet our founder section with a circular portrait of Shavit Rootman and LinkedIn and Instagram buttons.
Meet the founder. The copy is his words. I built the structure and shipped it.
The shavitrootman.com home page on a phone.
Most visitors arrive from a text or Instagram, so the phone view is the one that matters.

Shavit Rootman

The website for a Midwest rental-housing operator I run marketing for. Two inventory buckets across Michigan, Ohio, and Indiana, deal case studies from purchase price to appraisal, an investor page, and a text message as the only conversion path. Statically generated React on Netlify, with a shell acceptance gate that has to pass before any deploy.

ViteReact SSGNetlifyReal estate
shavitrootman.com
Dashboard render reading Good morning, Michael, with drafts ready, contacts qualified, meetings this week, and tiles for Agent Chat, LinkedIn Engine, Recap to Tracker, Calendar Advisor, and Contact Extractor.
The morning view: drafts ready, contacts qualified, and the five tools. Design render with sample data.
Welcome to Jarvis setup screen with connections for an AI key and Google Calendar, plus three numbered setup steps.
First run: bring your own key, connect a calendar, done.
Contact extractor render: pull, enrich, qualify against the ideal customer profile, with a table of sample contacts, fit scores, and verdicts.
Contact extractor: pull, enrich, qualify against his ideal customer profile. Design render with sample names.
Login render over a mountain photograph with a single Unlock command center button.
One login, his own API key, his own data.

Michael's Jarvis

A hosted AI chief of staff for a media business-development executive: a LinkedIn drafting engine, a calendar advisor, meeting recaps that flow into his tracker, and persistent memory, behind one login. He brings his own API key, so it costs me nothing to run.

Client AI productLive on Fly.io

No screenshots, by design. The server only ever sees ciphertext, and the key reaches the client by push notification.

Zero-Knowledge Client Intake

An encrypted intake system for an estate financial-planning program at Cheviot Value Management. Clients upload financial documents that stay unreadable without a password delivered by push notification. An AI guide walks them through managing finances after a death. No plaintext credentials anywhere in the system.

Privacy by designEncryptionAI guide
Jake Horvitz playing a red bass guitar on stage under magenta and amber lights, a drum kit behind him.
The music communities were a canvassing target. I was already playing in them.
Visits by day. The peaks told me which appearances worked and where to show up next.
Campaign headshot of Jake Horvitz in a light blue shirt against a grey backdrop.
The campaign headshot, spring 2026. One of twelve seats from a field of fifty.

Campaign Analytics

The web app I built to run my Associated Students Senate campaign at UC Santa Barbara. It tracked website visitors to decide where to canvass and which clubs, sororities, and faith and music communities to visit. I won 1 of 12 seats from a field of 50 candidates.

AnalyticsCampaign operations
I taught myself to code to solve my own problems. Everything above shipped because the process remains strict when the team is a single person.Jake Horvitz. Also on bass.

One person, Claude Code, and a pipeline that does not let me skip steps.

A spec I sign, a council of models that critiques it, a build loop that closes only when the acceptance script passes, and me at every outbound trigger.

  1. 01

    Spec first, then a council

    Every build starts with a written spec I sign, then a multi-model review before any code is written.

  2. 02

    Acceptance-verified loops

    The build loop closes only when a pinned acceptance script passes, so an agent cannot declare itself done.

  3. 03

    Agents draft, I send

    Nothing outbound leaves without me. Bartok, JARVIS, and every client tool follow the same rule.

  4. 04

    Reusable skills

    The Claude Code skills that run all of this are public on GitHub.

Building something in music, entertainment, or AI? Email me.

I am at UC Santa Barbara through 2029 and take on AI and operations work alongside school.