Projects

Every plaque says what it is, what my role was and what to measure it by.

Screenshot tournaments.dance
tournaments.danceOwn product · 2026Every ÖTSV tournament result since 2016, 340+ tests, GDPR opt-out for dancers

tournaments.dance

The Austrian dancesport start book, kept in public. Tournaments, couples, adjudicators and promotion points from the ÖTSV's public sources, as one continuous record instead of loose sheets.

  • Ingests the ÖTSV results service and TopTurnier reports automatically, including preliminary rounds and judge marks.
  • Couple pages with career history, a points calculator following ÖTSV rules, adjudicator pages with deviation comparison.
  • Dancers can opt out on request. Youth couples are not indexed.
  • Runs on Cloudflare Workers with Neon Postgres. Every release passes typecheck, lint, 340+ tests and a mandatory changelog entry.
Stack
Next.js, Cloudflare Workers, Neon Postgres, Drizzle

Open site: tournaments.dance

Screenshot Jed and the Dispatcher
Jed and the DispatcherOwn tools · 2026Native macOS app for AI agents, plus a pipeline that turns issues into reviewed pull requests

Jed and the Dispatcher

This is how I work. Jed is my macOS client for the coding agent I build with. The Dispatcher takes issues from Git, lets one agent implement, a second review, and opens a pull request. Merging stays manual.

  • Jed: SwiftUI, speaks the agent's native protocol, editor with LSP, terminal, sessions and a tool catalog.
  • Dispatcher: runs on cron, respects a quota, three agents in parallel at most, every change is a PR with review.
  • AI is method, not result. What the agent builds gets tested, checked in the browser and read for privacy before it goes live.
  • Both run daily on my machine and helped build the other projects on this page.
Stack
Swift, SwiftUI, Python, Forgejo

Open site: git.pfurner.dev

More references follow once clearance is in.

Guestbook

Tell me what it is about. Club, dance school, idea, question. I will get back to you.

daniel@pfurner.dev

Your data is used only to answer you. Privacy