daniel-c-harvey
58cdb4d9dc
fix: isolate multi-embed resize handshake with per-snippet token
...
ForRelease mints a per-call token used as the iframe id and threaded into the src as EmbedId; the host script matches on it so multiple embeds resize independently. ForTrack unchanged.
2026-06-19 16:32:59 -04:00
daniel-c-harvey
466084b5a3
feat: Phase 17.3 — Fixed embed queue panel with collapse/expand iframe resize (OQ1 Option A)
...
Read-only inline queue panel below the release embed's player bar; row-jump reuses PlayRelease. ForRelease mints a taller iframe plus a postMessage resize listener for the collapse toggle; ForTrack unchanged.
2026-06-19 16:21:45 -04:00
daniel-c-harvey
fbd298b9c3
docs: reflect Phase 17 Wave 2 (docked overlay + Add-to-Queue) and Phase 16.5 capstone landing
Deploy DeepDrftAPI / Build, Publish & Bundle (push) Successful in 3m2s
Deploy DeepDrftManager / Build & Publish (push) Successful in 1m24s
Deploy DeepDrftPublic / Build & Publish (push) Successful in 4m2s
Package install tarball / package (push) Successful in 6s
Deploy DeepDrftAPI / Deploy (push) Successful in 1m34s
Deploy DeepDrftManager / Deploy (push) Successful in 1m31s
Deploy DeepDrftPublic / Deploy (push) Successful in 2m0s
beta-20260619-fbd298b
2026-06-19 15:42:17 -04:00
daniel-c-harvey
3da6591194
docs(phase-16): reflect live Plays card in stats CLAUDE.md
...
HomeStatsDto gains TotalPlays + UniqueListeners; StatsController now composes ITrackService + IEventService (best-effort play/listener reads).
2026-06-19 15:41:17 -04:00
daniel-c-harvey
da60296cf8
Merge p17-w2-t2-add-to-queue into dev (Phase 17 Wave 17.4: Add-to-Queue affordance)
2026-06-19 15:35:19 -04:00
daniel-c-harvey
4320ea8029
Merge p17-w2-t1-docked-overlay into dev (Phase 17 Wave 17.2: docked queue overlay + ClearUpcoming)
2026-06-19 15:34:59 -04:00
daniel-c-harvey
678d3f66ad
Merge p16-w5-t2-privacy-footer into dev (anonId privacy disclosure footer line)
2026-06-19 15:33:28 -04:00
daniel-c-harvey
be04e53a97
Merge p16-w5-t1-plays-card into dev (Phase 16 Wave 16.5: home Plays-card live)
2026-06-19 15:31:37 -04:00
daniel-c-harvey
58b30d3c13
feat(footer): add anonId privacy disclosure line
...
Wraps existing footer row in .deepdrft-footer-main and adds a
.deepdrft-footer-privacy paragraph below it with the approved
Variant 1 copy. Mono fine-print at 0.55 rem / 70% opacity.
2026-06-19 15:26:07 -04:00
daniel-c-harvey
be1a55fd37
feat(stats): flip home Plays card live (Phase 16.5)
...
Add TotalPlays + UniqueListeners to HomeStatsDto, composed at
StatsController from IEventService (no migration). Card reads via
existing persistent-state-bridged round-trip.
2026-06-19 15:26:07 -04:00
daniel-c-harvey
9d0ce99a5d
fix: PlayRelease always materialises a defensive copy so Items alias can't wipe the queue on jump; add aliasing regression test
2026-06-19 15:23:20 -04:00
daniel-c-harvey
1d387c2a34
feat(player): add append-only "Add to Queue" buttons beside detail-page play affordances
...
Cut header (release → EnqueueRange), Cut track rows + Session/Mix hero (track → Enqueue). Reuses existing engine path; add is not play.
2026-06-19 15:18:38 -04:00
daniel-c-harvey
fe3819f378
feat(player): docked queue overlay with reorder, remove, jump, and clear-upcoming
...
Add a Queue toggle to the docked player bar opening a centered editable queue
overlay. New additive QueueService.ClearUpcoming keeps the playing track while
dropping the rest. Current track is non-removable.
2026-06-19 15:18:25 -04:00
daniel-c-harvey
cfcc2693f2
docs: reflect raised upload cap (~1.86 GB) and 1200s response timeout
2026-06-19 15:14:07 -04:00
daniel-c-harvey
621c4f9cb3
docs(phase-16): draft anonId privacy-note copy; note deferred Postgres integration harness
2026-06-19 15:10:15 -04:00
daniel-c-harvey
67eeb38529
Merge fix-large-upload-cap into dev (raise CMS upload cap to ~1.86 GB + nginx timeouts)
2026-06-19 15:08:48 -04:00
daniel-c-harvey
9aa66e8a62
docs: resolve remaining seven Phase 17 open questions (all 11 now closed)
2026-06-19 15:08:39 -04:00
daniel-c-harvey
3b9ca700c9
raise upload size cap to ~1.86 GB and nginx timeouts to 1200s
...
Raise RequestSizeLimit/MultipartBodyLengthLimit on upload+replace-audio,
MaxUploadBytes in BatchUpload/BatchEdit, and DefaultResponseTimeoutSeconds to
1200s. Add client_max_body_size 2000m and proxy_read/send_timeout 1200s to the
nginx manager/public confs.
2026-06-19 15:02:49 -04:00
daniel-c-harvey
4317a2f9e7
docs(phase-16): record 16.2 absorption + 16.3 anonId landing
...
PLAN/COMPLETED mark 16.2 absorbed into 16.1 and 16.3 landed (no migration). Folder CLAUDE.md files reflect anonId now accepted/persisted + the distinct-listener queries.
2026-06-19 14:57:23 -04:00
daniel-c-harvey
297805b5a8
Merge p16-w3-anonid into dev (Phase 16 Wave 16.3: unique-listener anonId layer)
2026-06-19 14:43:46 -04:00
daniel-c-harvey
944f23a88c
docs: reflect Phase 17 Wave 17.1 landing (queue Move/RemoveAt + QueueList)
2026-06-19 14:43:36 -04:00
daniel-c-harvey
75e5d99aea
Merge p17-w1-queue-engine-list into dev (Phase 17 Wave 17.1: queue Move/RemoveAt + shared QueueList)
2026-06-19 14:38:25 -04:00
daniel-c-harvey
c084efa78e
feat(phase-16.3): light up anonId unique-listener layer
...
Mint a first-party localStorage anonId, thread it onto play/share beacons,
persist it via EventController, and add all-time distinct-listener counts
(site/track/release). Storage columns + indexes already existed from 16.1.
2026-06-19 14:37:55 -04:00
daniel-c-harvey
f296bbdf00
Add queue Move/RemoveAt + dormant-Enqueue coherence and shared QueueList (Phase 17.1)
2026-06-19 14:32:08 -04:00
daniel-c-harvey
ebbaa3f84f
docs: resolve four Phase 17 open questions (OQ1/OQ4/OQ8/OQ10), defer ReleaseGallery card affordance
2026-06-19 13:42:19 -04:00
daniel-c-harvey
a715f4b28d
Merge p16-w1-foundation into dev (Phase 16 Wave 16.1: anonymous play & share telemetry substrate)
2026-06-19 13:34:01 -04:00
daniel-c-harvey
90555dc4e0
docs: spec Phase 17 player-bar queue view (queue button, overlay/embed modes, add-to-queue)
2026-06-19 13:29:57 -04:00
daniel-c-harvey
0fbf81b23e
Merge branch 'dev' into p16-w1-foundation
...
# Conflicts:
# DeepDrftPublic.Client/Controls/SharePopover.razor.cs
2026-06-19 13:28:50 -04:00
daniel-c-harvey
4114aa0be4
docs: reflect embed new-tab title link and embed queue skip buttons
2026-06-19 13:22:29 -04:00
daniel-c-harvey
884ccab826
Merge p16-embed-newwindow into dev (embed: new-tab title link + queue skip buttons)
2026-06-19 13:17:36 -04:00
daniel-c-harvey
3c1998de4f
feat(embed): show skip-prev/next buttons in embed when queue exists
2026-06-19 13:10:50 -04:00
daniel-c-harvey
622ee940f4
fix(phase-16): forward X-Forwarded-For from EventProxyController so the API rate limiter partitions per client IP
...
Proxy chains any inbound XFF with the connection IP before relaying upstream; UseForwardedHeaders resolves it to the limiter's partition key. Documents the EventRepository first-play counter race (unique index is the backstop).
2026-06-19 13:09:21 -04:00
daniel-c-harvey
18e171213c
feat: open player title link in new tab when embedded (Fixed mode)
2026-06-19 13:08:04 -04:00
daniel-c-harvey
e9c61bac1a
docs: reflect whole-release embeds, queue armed-idle state, and per-track share
2026-06-19 13:00:13 -04:00
daniel-c-harvey
dbd90ee52a
feat(phase-16): anonymous play & share telemetry substrate (wave 16.1)
...
Player-service play-session tracker (floor + 3-bucket classify), SharePopover share tracker with debounce, sendBeacon interop, proxied rate-limited POST api/event/{play,share}, append-only event logs + incremental play_counter with server-side release resolution. Migration authored, not applied. No anonId, no read surface.
2026-06-19 12:59:00 -04:00
daniel-c-harvey
1b7861e168
Merge p16-release-embed into dev (whole-release embeds + per-track share)
2026-06-19 12:55:11 -04:00
daniel-c-harvey
098020db32
feat: add per-track SharePopover to Cut detail track rows
2026-06-19 12:08:27 -04:00
daniel-c-harvey
912256d99a
Add whole-release embeds to FramePlayer and un-gate the release embed share affordance
...
The queue gains an armed-but-idle state (Arm/Start) so a release embed stages track 0 prerender-safe, then queues the full release on first play and auto-advances.
2026-06-19 12:05:35 -04:00
daniel-c-harvey
1931574ad4
Merge gitattributes-knob-eol into dev (pin knob.js to LF, stop CRLF churn on Windows checkout)
2026-06-19 11:39:40 -04:00
daniel-c-harvey
25aba1cbb7
docs(phase-16): resolve decisions D1-D7; re-sequence waves bottom-up, card last
2026-06-19 11:32:24 -04:00
daniel-c-harvey
81d0028f2b
fix: pin knob.js to LF in .gitattributes to stop CRLF churn on Windows checkout
2026-06-19 11:32:18 -04:00
daniel-c-harvey
62007a6517
fix: Icons
Deploy DeepDrftManager / Build & Publish (push) Successful in 2m9s
Deploy DeepDrftPublic / Build & Publish (push) Successful in 4m18s
Deploy DeepDrftManager / Deploy (push) Successful in 1m31s
Deploy DeepDrftPublic / Deploy (push) Successful in 1m28s
2026-06-19 11:15:19 -04:00
daniel-c-harvey
13b07beb0b
fix: Styles & Links & Content
2026-06-19 11:15:09 -04:00
daniel-c-harvey
7711c5067c
docs: reflect DurationSeconds write on replace-audio
...
Deploy DeepDrftAPI / Build, Publish & Bundle (push) Successful in 4m3s
Deploy DeepDrftAPI / Deploy (push) Successful in 1m35s
Replace path now updates SQL DurationSeconds via unconditional SetDuration; document SetDuration vs null-guarded UpdateDuration and correct the stale 'SQL is not written' note.
2026-06-19 10:15:59 -04:00
daniel-c-harvey
eaa71ebea3
Merge replace-audio-duration-sync into dev (sync DurationSeconds on audio replace via unconditional SetDuration)
2026-06-19 10:13:19 -04:00
daniel-c-harvey
e8359d5473
fix: replace-audio duration write now unconditional via SetDuration
...
UpdateDuration's null guard matched zero rows for tracks that already had a duration (all normally-uploaded tracks). Add SetDurationAsync/SetDuration/ITrackService.SetDuration with no null guard; fail on zero rows. ReplaceAudioAsync now calls SetDuration.
2026-06-19 04:19:39 -04:00
daniel-c-harvey
7265754c27
fix: write DurationSeconds to SQL after replace-audio vault swap
2026-06-18 15:03:38 -04:00
daniel-c-harvey
abc832467d
docs(plan): add Phase 16 spec — anonymous play & share tracking
...
Design spec for the telemetry layer behind the home-hero Plays card:
completion-bucketed plays, shares, optional anonymous unique listeners
under a no-PII constraint. Seven open decisions flagged for Daniel.
2026-06-18 14:28:02 -04:00
daniel-c-harvey
47919a226e
feature: Home page graphics
Deploy DeepDrftAPI / Build, Publish & Bundle (push) Successful in 2m22s
Deploy DeepDrftManager / Build & Publish (push) Successful in 1m23s
Deploy DeepDrftPublic / Build & Publish (push) Successful in 4m16s
Deploy DeepDrftAPI / Deploy (push) Successful in 1m35s
Deploy DeepDrftManager / Deploy (push) Successful in 1m29s
Deploy DeepDrftPublic / Deploy (push) Successful in 1m28s
2026-06-18 14:25:08 -04:00
daniel-c-harvey
933b7145e5
Merge knob-js-deploy-fix into dev (commit compiled RCL knob JS so it ships in publish output)
2026-06-18 13:18:43 -04:00