Orfeo
macOSThe party picks the music. The app mixes it.
Participative auto-DJ — guests propose and vote from their phones, an autonomous brain decides what to play and when.
About
The party decides, the app executes
Orfeo — after Monteverdi's L'Orfeo — is a participative auto-DJ. Guests at a party propose and vote on tracks from their phones, without installing any app, and an autonomous brain decides what to play and when, mixing on its own when the stream of suggestions dries up.
The constraint that defines the project: the app is the DJ. It schedules and drives playback in real time, while the curation logic stays entirely platform-agnostic.
Three layers, one golden rule
On the guest side, a web app (Next.js) serves catalog search, voting and dedications. On the host side, a native macOS app (SwiftUI + MusicKit) subscribes to live state and drives ApplicationMusicPlayer. Between them, Supabase is the source of truth — every track is keyed by its ISRC, never a native URI.
The golden rule: the brain (CurationEngine) never knows the playback platform. It receives a snapshot of live state and emits an ordered plan of tracks. Only the adapters touch Apple Music. All business logic lives in pure, testable units — never in a SwiftUI View or a React component.
The brain
The CurationEngine scores each candidate — log-normalized votes, energy/mood fit, party-phase fit, dedication bonus, anti-repetition penalties on artist and genre — and produces an ordered queue, deterministic aside from injected jitter. When proposals run dry, auto-continue asks a local LLM for tracks, resolves names to ISRCs, and keeps the floor alive with a per-phase fallback.
Why
Orfeo started from a concrete need: run the music for a real party — a birthday, then a wedding — without anyone glued to the speakers all night. v1 targets those two events; what follows explores a self-serve service so anyone can do the same.
Roadmap
v1 — End-to-end live party
In progressGuest web app (propose/vote/mood/dedication), a macOS host driving Apple Music, a platform-agnostic curation brain, and auto-continue when the pool runs dry. Target: a birthday in beta on August 14, a wedding in production.
v2 — Self-serve service
PlannediOS host, hosted LLM inference (dropping the local Ollama dependency), Stripe billing + self-serve accounts, and the legal compliance of a paid service.
vNext — Sharpening & openness
PlannedSpotify adapter (the brain stays agnostic), a post-event souvenir playlist, and scoring refinements (velocity, era, transitions).
Pure, testable curation brain
Shipped2026-06Deterministic scoring (log-normalized votes, energy/mood/phase fit, anti-repetition penalties) fully isolated from any playback platform.
Real-time playback via Apple Music
Shipped2026-06The macOS host resolves ISRCs and reconciles the ApplicationMusicPlayer queue, synced in real time through Supabase.
No-install guest web app
Shipped2026-06Catalog search, proposing, upvoting, mood and dedications from the browser — nothing to install.
More from patolabs
Souffle
Guided breathing, 13 soundscapes and synchronized haptics. Find your calm in minutes.
Luchamon Bot
Battle automation bot for luchamon.com on Base — picks each opponent by simulation and plays the best available move, energy after energy.
Claude project template
A project skeleton wired for developing with Claude Code — from ticket to merge, with project tracking in a local Obsidian vault.