Inspiration

Music listening is split across player apps, Discord for social presence, Last.fm for long-term history, and separate tools for personal insights. Each integration has different failure modes and privacy tradeoffs. PresenceFM brings that fragmented workflow into one native, private-by-default Mac app with no PresenceFM account, analytics backend, or uploaded listening-history database.

What it does

PresenceFM detects playback from Apple Music, Spotify, YouTube Music through YTMDesktop, and best-effort TIDAL metadata. It can publish configurable Discord Rich Presence, send now-playing updates and qualified scrobbles to Last.fm, and maintain searchable local history and listening insights.

The product includes:

  • Rich now-playing views in the dashboard and menu bar
  • Platform-aware Discord artwork, progress, badges, buttons, and links
  • Correct Last.fm eligibility rules with a bounded, deduplicated offline retry queue
  • Local history, comparisons, top tracks/albums, hourly summaries, and CSV export
  • Private Mode, versioned persistence, transactional backup/restore, and privacy-redacted diagnostics
  • Keyboard navigation and VoiceOver labels
  • A credential-free Demo Mode for judging

One-command judge quickstart

On macOS 15 or later:

swift test
swift run PresenceFM --demo

The --demo launch skips onboarding for that run without changing its saved completion state or enabling an integration. It immediately sends short sample tracks through the real production playback-session, eligibility, and local-history pipeline. No music app, Discord account, or Last.fm account is required.

The dashboard also offers Start Demo Playback and End Demo controls. While active, the safety banner and service rows explicitly show that Discord and Last.fm are paused. PresenceFM clears Discord presence, blocks Last.fm now-playing and scrobble approval, and never queues synthetic tracks externally. Leave the demo running for about one minute, then open Listening History to inspect completed local listens and insights.

Run the complete release gate with:

./scripts/verify-build-week.sh
open PresenceFM.app --args --demo

How we built it

PresenceFM is a Swift 6.2 and SwiftUI macOS app. Playback sources produce normalized snapshots, a coordinator selects the active provider, and an actor tracks listening time without awarding credit for seeks or pauses. SwiftData stores bounded local activity, queue, diagnostic, and health records. Network integrations are optional and recover independently.

Demo Mode produces deterministic snapshots inside that same architecture rather than showing a disconnected mock screen. Its short tracks exercise the real eligibility and finalization behavior quickly, while publication safety gates protect every external path.

How Codex and GPT-5.6 were used

Codex with GPT-5.6 was used to audit the SwiftUI, provider, persistence, testing, packaging, and documentation surfaces against the live OpenAI Build Week requirements. It identified credential-dependent judge testing as the highest-leverage gap, implemented the deterministic demo provider and publication safety boundaries, added one-command launch and verification paths, improved the rendered product experience, expanded Swift Testing coverage, prepared the judge documentation and demo plan, and repeatedly ran the release workflow.

The shipped app does not call an AI model at runtime. GPT-5.6 and Codex accelerated product engineering, architecture reasoning, testing, visual QA, and release preparation without adding a runtime dependency that would weaken PresenceFM's local-first privacy model.

Challenges

The hardest parts were coordinating four playback sources without a failing provider masking a valid one, measuring real listening time without counting seeks or pauses, preventing duplicate scrobbles during retries, and handling local persistence recovery without risking the only copy of a user's history.

For Build Week, the additional challenge was making those real behaviors testable by judges who may not have the same players or accounts. Demo Mode solves that at the provider boundary and keeps the production pipeline intact.

Accomplishments

  • 72 optimized automated tests across 14 suites
  • A single Build Week verifier covering tests, packaging, signing, metadata, resources, website integrity, and repository hygiene
  • A verified signed 1.0.0 macOS app bundle
  • A no-credentials, no-network judge path through the real product pipeline
  • Explicit manual QA records rather than claiming account or hardware checks that were not run

What's next

Complete the remaining cross-hardware, provider-account, VoiceOver, and soak-test matrix; pursue Developer ID notarization when sustainable; and continue improving provider compatibility without compromising the no-backend privacy model.

Built With

  • applescript
  • codex
  • discord-rich-presence
  • gpt-5.6
  • last.fm-api
  • macos
  • swift
  • swift-testing
  • swiftdata
  • swiftui
Share this project:

Updates