Work
Products, open-source tools, and experiments I have designed and built.
Products
Open-source & experiments
Accessibility audit workspace for consultants that scans client sites, prioritizes WCAG findings, and turns them into shareable reports with clear remediation guidance. Includes real-browser scanning, live-page inspection, public reports, and scheduled monitoring to track accessibility progress over time.
Next.jsTypeScriptPlaywrightaxe-core
JoolingShift scheduling for hourly teams. Plan shifts, handle changes, and keep everyone in sync across cafés, restaurants, retail, healthcare, and hospitality.
ReactTypeScriptViteFramer Motion
PlayfleetOpen-source multi-tenant Playwright execution control plane: job queues with tenant concurrency, classified retries (so hard assertion failures don’t thrash the fleet), API keys, per-attempt artifacts, HMAC webhooks, and long-lived agent browser sessions via chromium.connect. Built as a readable TypeScript slice of production browser-automation platforms, not a CI wrapper.
TypeScriptNode.jsHonoPlaywright
CellCronA durable, self-rescheduling HTTP job runner for celld. Supports cron expressions with IANA timezones, SQLite-backed schedules and run history, exponential retries, bearer-token API protection, and a dashboard for creating, running, and inspecting jobs without relying on in-memory timers.
TypeScriptcelldDurable ObjectsSQLite
Browser PoolA headless browser pool service for taking screenshots with cookie consent handling.
Node.jsTypeScriptPlaywrightPostgreSQL
Site BlockerA Chrome extension to block distracting websites and improve productivity.
ReactTypeScriptChrome Extension
CI ScannerA fast tree-sitter-based static analysis scanner for CI/CD pipelines with multi-language support, YAML-defined custom rules, and SARIF/JSON outputs for native GitHub and GitLab integrations. Includes CI-friendly exit codes and an optional multi-tenant dashboard server for policy management, cross-repo findings visibility, and GitHub commit status enforcement.
RustTree-sitterCLIYAML Rules