# Phase 16 — Anonymous Play & Share Tracking (Design Spec) Status: **design-draft, open for Daniel review** (decision points in §10 are unresolved). Author: product-designer. Date: 2026-06-18. **No code has been written by this doc.** This is the phase deferred behind the home-hero "Plays" stat card, which today renders a static `XXX / Plays (Coming Soon)` odometer placeholder in `NowPlayingStats.razor`. This spec adds a **privacy-light, anonymous play & share telemetry layer** to the public site: counting plays (bucketed by completion) and shares, tied to individual tracks and releases, with an optional unique-listener "plus" metric. It does **not** add accounts, PII, or any per-user identity model — that is a hard constraint, not a deferral. ## Phase numbering This is **Phase 16**. Phase 15 (Visualizer Controls Enhancements) is the highest-numbered phase in `PLAN.md`. Phases 11 and 10-Reframe are landed; no phase 16 exists yet. If a concurrent worktree has claimed 16 by the time this is scoped, bump to the next free number — the content is number-independent. ## Cross-references (read these before implementing) - `DeepDrftPublic.Client/Services/StreamingAudioPlayerService.cs` — the production player. The instrumentation seam lives here: `LoadTrackStreaming` (track-load = play-start candidate), the progress callback path, and `ResetToIdle` (stop/unload/switch). `_currentTrackId` holds the current `EntryKey`. **No release id is currently held by the player** — see §2.3. - `DeepDrftPublic.Client/Services/AudioPlayerService.cs` — base class. `OnProgressCallback(double currentTime)` is the per-tick position seam; `OnPlaybackEndCallback` is the organic end-of-stream seam (and the only place `TrackEnded` fires). `Duration` is set from the WAV header during load. - `DeepDrftPublic.Client/Services/AudioInteropService.cs` — `SetOnProgressCallbackAsync` / `SetOnEndCallbackAsync` are the JS→.NET callbacks already wired in `InitializeAsync`. Progress is throttled to ~10/sec on the JS side already. - `DeepDrftPublic.Client/Services/QueueService.cs` — auto-advance orchestrator. Album playthroughs flow `PlayRelease → PlayCurrent → SelectTrackStreaming` per track; `OnTrackEnded` advances. Every track in an album play is an independent `SelectTrackStreaming` call, so per-track play events arise naturally without queue-specific instrumentation. - `DeepDrftPublic.Client/Controls/SharePopover.razor[.cs]` — the **real** share surface. Two share actions exist today: **Copy link** (track mode + release mode) and **Copy embed** (track mode only, an `