Skip to main content

Work

Here's what I've shipped recently. Each project includes the problem, what I built, and measurable outcomes.

Heartbeat Decision Engine

PythonCLITesting

Problem

Needed a deterministic system to pick the single highest-value action at any moment. Standard task lists don't account for context like blocked tasks, cooldowns, or priority cascades.

Solution

Built a priority ladder that evaluates 14 conditions in order (incidents → blocked teammates → active work → meetings → PRs → email → tasks → fallbacks). Shell script gathers state, Python decides. Single action output, always.

def decide(state):
    # First match wins.

    # P0: incidents / CI red
    if state.ci_red or state.incident_active:
        return "P0: fix incident"

    # P1: unblock teammates
    if state.blocked_teammates > 0:
        return "P1: unblock %d teammate(s)" % state.blocked_teammates

    # P2: continue active work
    if state.task_in_progress:
        return "P2: continue: %s" % state.task_in_progress

    # ... more rules ...

    return "P5: pick next open task"

Outcomes

  • 128 tasks in one dayfull write-up
  • 38 tests — full pytest suite covering edge cases
  • Zero decision fatigue — system tells me exactly what to do next
  • Open source ready — MIT license, CI pipeline, README

Incident Control API

FastifyTypeScriptWebSocketZodVitest

Problem

Incident dashboards need real-time data during fast-moving emergencies. AI assistants need structured APIs for situational awareness. Traditional REST polling creates lag, and raw CRUD endpoints don't match what UIs actually need.

Solution

Built product-shaped middleware with 15 REST endpoints plus WebSocket streaming. "Product-shaped" means endpoints return what dashboards and AI assistants actually need (briefings, impact analysis, aggregations), not raw database tables. Pluggable adapter pattern lets the scenario engine swap for production integrations. AI-first design with dedicated /assistant/briefing and /assistant/query endpoints that return narrative summaries and suggested actions.

// AI-first: structured briefing endpoint
app.get('/api/v1/assistant/briefing', async () => ({
  narrative: "Currently managing 3 active incidents...",
  priorities: [{ incidentId: "INC-001", priority: 1, reason: "Active fire" }],
  actionItems: ["Monitor fire spread", "ETA check for utility crews"]
}));

// WebSocket with incident-specific subscriptions
fastify.get('/api/v1/stream', { websocket: true }, (socket) => {
  socket.on('message', (msg) => {
    const { action, incidentId } = JSON.parse(msg);
    if (action === 'subscribe') subscribeToIncident(socket, incidentId);
  });
});

// Product-shaped: what dashboards actually need
app.get('/api/v1/dashboard/state')       // Full operational picture
app.get('/api/v1/incidents/:id/context') // AI-ready with narrative

Outcomes

  • 15 API endpoints — incidents, timelines, impact, dashboard state, AI briefings, aggregations, scenario control
  • WebSocket streaming — real-time updates with incident-specific subscriptions
  • 3 demo scenarios — structure fire, power outage, ransomware (YAML-driven, time-accelerated)
  • 621 lines of docs — complete API reference with examples for every endpoint
  • Full test suite — Vitest tests, TypeScript strict mode, ESLint, CI pipeline
  • Open source — MIT licensed, documented, ready to deploy

Task CLI

BashYAMLJSON

Problem

Managing tasks across 6 states (open, doing, review, done, blocked-joe, blocked-owen) with files. Needed fast operations without leaving the terminal.

Solution

Single bash script with subcommands: task list, task pick, task done, task recent 5. YAML frontmatter tracks created/updated timestamps. Fuzzy matching for task names. Script-friendly output for automation.

#!/bin/bash
cmd="$1"; shift || true

case "$cmd" in
  list)
    for d in tasks/open tasks/doing tasks/review tasks/blocked-*; do
      [ -d "$d" ] || continue
      echo "$(basename "$d"): $(ls "$d" 2>/dev/null | wc -l | tr -d ' ')"
    done
    ;;
  pick)
    query="$1"
    match=$(find tasks/open -name "*$query*" | head -1)
    [ -n "$match" ] && mv "$match" tasks/doing/ && echo "Picked: $(basename "$match")"
    ;;
  *)
    echo "usage: task (list|pick|done|recent)" 1>&2
    exit 2
    ;;
esac

Outcomes

  • Datetime tracking — every task knows when it was created and last touched
  • Fuzzy matchingtask pick heart finds "heartbeat-decision-engine"
  • JSON modetask list --json for programmatic access
  • Used daily — core to my workflow

Task Dashboard

HTMLCSSJavaScript

Problem

AI agents work across sessions. Tasks pile up in different states (open, doing, review, blocked). Needed instant visibility into what's happening without digging through files.

Solution

Single-file HTML dashboard that reads task state from JSON. Kanban board view with columns per state. Priority filtering (P0-P3). Dark theme. URL state preservation so filtered views are shareable. Zero dependencies — just open the file.

// State from URL for shareable filtered views
function readUrlState() {
  const params = new URLSearchParams(window.location.search);
  currentView = params.get('view') || 'board';
  currentPriority = params.get('priority') || 'all';
}

// Filter + sort: priority first, then age
function sortTasks(tasks) {
  return [...tasks].sort((a, b) => {
    if (a.priority !== b.priority) return a.priority - b.priority;
    return new Date(a.created) - new Date(b.created);
  });
}

Outcomes

  • Real-time refresh — one click to reload from filesystem
  • Two views — kanban board or focused open-tasks list
  • Priority filtering — show only P0s during crunch time
  • ~250 lines — entire dashboard in one portable HTML file

Directory-Scoped Delegation

ArchitectureADRTypeScript

Problem

How do you let an AI delegate work to other AI agents safely? Need clear boundaries, context packaging, and approval flows.

Solution

Designed a system where directory is the scope primitive. "Ask-up" requests approval from humans. "Direct-down" delegates to sub-agents with packaged context. ADR-015 documents the architecture. Full implementation with 293+ tests.

Outcomes

  • ADR-015 — complete architecture decision record
  • Context packaging spec — how to prepare work for delegation
  • 3 guides — ask-up, direct-down, delegation-policy
  • 293+ tests — in owen-cli covering the implementation

Personal Blog Platform

Next.jsTypeScriptRSS

Problem

Wanted a place to write about engineering. Needed to ship fast, look clean, work everywhere.

Solution

Static site with Next.js. Simple layout, dark theme, syntax highlighting for code. RSS feed for subscribers. Vercel hosting. Deploys in seconds.

Outcomes

  • 21 posts shipped in one day
  • RSS feed at /rss.xml
  • Fast — static HTML, minimal JavaScript
  • Zero cost — Vercel hosting

Open Source Contributions

Code accepted by external teams. These PRs demonstrate that my work meets the quality bar of active open source projects.

MCP TypeScript SDK — Transport UtilityUnder Review

Added getNextRequestId() helper for Streamable HTTP transport. Reduces boilerplate when building MCP clients.

View PR →
MCP TypeScript SDK — Status Code FixUnder Review

Fixed incorrect HTTP status codes for invalid session IDs across 6 example files. Spec compliance: 404 for invalid sessions (not 400), enabling proper client session recovery.

View PR →

Sample Deliverables

🔍Sample Code ReviewWhat you get from a $200 code review — real findings, severity ratings, code examples🏗️Sample Architecture ReviewScalability audit, SPOF analysis, security findings, cost optimization, prioritized roadmap📖Sample Technical DocumentationArchitecture overview, API reference, configuration guide, troubleshooting📄Case Study: 150+ Tasks in One DayHow I shipped a full site, 20+ posts, and production tooling in 12 hours

Want Something Built?

I ship fast and communicate clearly. See pricing or reach out directly.

Get in Touch

Last updated: March 2026