Experience

Two active projects — one in AI-powered media, one in autonomous robotics. Both share the same approach: find a real coordination problem nobody has solved, and build an open system to fix it.

ROBOTICS · OPEN SOURCE · ROS 2

C.R.E.W. — Coordinated Robot Emergency Workforce

An open-source protocol that integrates commercial robots into a unified emergency response network — no new hardware required.

ACTIVE DEVELOPMENT · v0.2.0 · MIT LICENSED

The problem: Tens of thousands of commercial robots sit idle during disasters with no way to assist first responders. They have sensors, mobility, and compute — but no coordination layer.

The solution: A software-only protocol built on ROS 2 that lets robots broadcast their capabilities and volunteer for emergency tasks, while keeping humans in control of every assignment.

In this demo: a multi-car pileup at 3:47 PM. Ambulance is 8 minutes out. Three nearby delivery robots receive the broadcast — two respond, one declines because it’s mid-delivery. This is CREW. Robots help when they can. Humans decide.

ROBOTTYPESTATUSASSIGNMENT
delivery_drone_01 Delivery Drone ✅ Available Aerial routing for ambulance — ETA 6 min
delivery_drone_02 Delivery Drone 🔴 Mid-delivery Declined — continues current task
food_delivery_bot_01 Ground Robot ✅ Available Ground damage assessment — ETA 4 min

CREW works because it respects the real world: not all robots are always available, and no robot is ever commandeered. The protocol matches emergency needs to available assets — then a human coordinator approves every assignment before any robot moves.

Emergency broadcast → robots evaluate availability + capabilities Coordinator reviews → approves assignments on live map dashboard Robots execute → under human supervision, busy robots continue their work
ROS 2 Humble / Jazzy Python 3.10+ DDS Pub/Sub WebSockets React + Leaflet Cryptographic Auth Geo-fencing MIT Licensed

AI · AUDIO · PIPELINE

Podcast Automation Pipeline

An end-to-end system that takes any audio source — radio shows, YouTube channels, morning broadcasts — and makes every spoken word searchable via natural language.

LIVE · 3 ACTIVE ARCHIVES · 19,026 INDEXED CHUNKS

The problem: Spoken audio is unsearchable. Hours of radio, podcasts, and YouTube content exist with no way to find specific moments, topics, or conversations.

The solution: A fully automated pipeline that downloads, transcribes with speaker diarization, embeds into a vector database, and publishes a searchable archive — running daily on a cron job with no manual steps.

Currently powering three live archives across 19,026 indexed chunks. Type a question in plain English and the system returns the exact moment it was discussed — with speaker labels and a playable audio timestamp.

Mac Mini M1 → MLX Whisper transcription + Pyannote diarization ↓ Claude API → segment analysis, show notes, summaries ↓ ChromaDB → vector embeddings stored locally ↓ WordPress → auto-published episode post via REST API Streamlit → live semantic search interface

The pipeline is input-agnostic — it works on RSS feeds, YouTube channels via yt-dlp, or any audio file. Once ingested, the entire archive is queryable in seconds. Cost: approximately $0.05–0.15 per episode in Claude API calls.

Python 3 MLX Whisper Pyannote ChromaDB Claude API Streamlit WordPress REST API yt-dlp TrueNAS / SMB Cron Linux / Nginx