daniel-c-harvey
2591710f09
refactor: replace eval dark-mode body-class with TS theme interop helper
...
Extracts setBodyThemeClass into DeepDrftShared.Client/Interop/theme/theme.ts;
MainLayout lazy-imports the compiled module and calls it, matching the
established knob/parallax IJSObjectReference pattern. DisposeAsync added.
2026-06-20 00:26:52 -04:00
daniel-c-harvey
30999b038c
fix: gate OnAfterRenderAsync body-class JS call; hoist dark popover token
...
Only stamps body class on firstRender or _isDarkMode change; adds base call.
Hoists duplicate dark popover mix value to --deepdrft-popover-surface-dark in :root;
both .deepdrft-theme-dark and body.deepdrft-theme-dark reference it via var().
2026-06-20 00:21:53 -04:00
daniel-c-harvey
b5106d090f
fix: popover surface — body-class bridge for portal scope, retune light/dark
...
MudBlazor popovers portal to <body>, outside the theme wrapper, so the dark token
was unreachable. MainLayout now stamps deepdrft-theme-dark on <body>. Light: 8%->4%
navy (near page background); dark: navy-mid + 20% green-accent (bluer).
2026-06-20 00:15:42 -04:00
daniel-c-harvey
77d0562b08
feature: Dark Theme Home & About Styles
2026-06-19 23:15:26 -04:00
daniel-c-harvey
833b5a921e
Merge p18-w3-hero-dark-legibility into dev (Phase 18 Wave 3 — hero text + button dark-mode legibility)
2026-06-19 22:05:58 -04:00
daniel-c-harvey
eb7e977f3c
feature: AppBar clearance & Theming
2026-06-19 22:04:57 -04:00
daniel-c-harvey
51ac1a76de
fix(dark): hero text + button legibility on navy ground (Phase 18 W3)
...
Bind page-text/page-text-muted tokens directly in hero base rules (drop
:global overrides); dark-mode overrides for btn-primary (green-accent fill)
and btn-ghost (white text, light border).
2026-06-19 22:00:26 -04:00
daniel-c-harvey
6029e226d5
Merge p18-w2-theme-followups into dev (Phase 18 Wave 2 — appbar navy, dark hero legibility, true page ground, green-on-green play chip)
2026-06-19 21:01:24 -04:00
daniel-c-harvey
fcc95b9195
style: Phase 18 Wave 2 — appbar navy, dark hero legibility, true page ground, green-on-green play chip
2026-06-19 20:32:21 -04:00
daniel-c-harvey
0358df82ac
feat: Player & Menu Styles
2026-06-19 19:18:40 -04:00
daniel-c-harvey
0f7088fe86
Merge p18-w1-theme-dark-remediation into dev (Phase 18 dark-mode token pass)
2026-06-19 19:12:26 -04:00
daniel-c-harvey
5408d0779c
fix: scope play-glyph override to dark mode, fix connect-option hover, tokenize bio placeholder, correct popover comment
2026-06-19 19:04:05 -04:00
daniel-c-harvey
03fdcda054
style: theme-aware token pass for dark-mode surfaces (Phase 18)
...
Re-point neutral page surfaces, play-chip, and default popover from constant brand tokens to theme-aware aliases defined twice in deepdrft-tokens.css. Decorative navy/green sections and bespoke dark-glass panels untouched. Appbar-navy symptom deferred (palette C#, out of CSS scope).
2026-06-19 18:12:35 -04:00
daniel-c-harvey
5298cab9b1
feature: Re-enable Dark Mode Toggle & App Bar Styles & Mobile App Bar Fixes
Deploy DeepDrftAPI / Build, Publish & Bundle (push) Successful in 2m9s
Deploy DeepDrftPublic / Build & Publish (push) Successful in 4m7s
Deploy DeepDrftAPI / Deploy (push) Successful in 1m34s
Deploy DeepDrftPublic / Deploy (push) Successful in 1m31s
2026-06-19 17:48:26 -04:00
daniel-c-harvey
37bbfb947f
docs: note footer PRIVACY button + centered MudOverlay privacy modal
2026-06-19 17:09:37 -04:00
daniel-c-harvey
261b11436e
Merge privacy-footer-overlay into dev (PRIVACY footer button + centered overlay note)
Deploy DeepDrftAPI / Build, Publish & Bundle (push) Successful in 2m11s
Deploy DeepDrftManager / Build & Publish (push) Successful in 1m29s
Deploy DeepDrftPublic / Build & Publish (push) Successful in 3m56s
Deploy DeepDrftAPI / Deploy (push) Successful in 1m33s
Deploy DeepDrftManager / Deploy (push) Successful in 1m29s
Deploy DeepDrftPublic / Deploy (push) Successful in 1m29s
2026-06-19 17:02:17 -04:00
daniel-c-harvey
280dbbcbc9
style: DRY footer btn CSS, add trailing newline, drop wrong section ordinal
2026-06-19 16:59:01 -04:00
daniel-c-harvey
ce17a685e0
docs: reflect Phase 17 Wave 17.3 landing; Phase 17 complete
2026-06-19 16:48:48 -04:00
daniel-c-harvey
64379c8901
feat: move footer privacy note behind PRIVACY overlay button
2026-06-19 16:48:46 -04:00
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
2026-06-19 15:42: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
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
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
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
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
3c1998de4f
feat(embed): show skip-prev/next buttons in embed when queue exists
2026-06-19 13:10:50 -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
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
13b07beb0b
fix: Styles & Links & Content
2026-06-19 11:15:09 -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
df7acd9e80
docs: reflect live home-hero stats (duration column, stats endpoint, backfill, NowPlayingStats wiring)
2026-06-18 13:14:52 -04:00
daniel-c-harvey
5f0422a263
Wire NowPlayingStats to live aggregates: add SQL track duration column, stats endpoint, and duration backfill
2026-06-18 11:53:49 -04:00
daniel-c-harvey
8ddecb4acc
about styles
Deploy DeepDrftPublic / Build & Publish (push) Successful in 3m57s
Deploy DeepDrftPublic / Deploy (push) Successful in 1m28s
2026-06-17 22:35:41 -04:00
daniel-c-harvey
9cfc31f725
content(about): wire Khabran's bio + multi-paragraph render
...
Bio embedded as \n\n-delimited string; render splits on that boundary
into per-para <p class="bio-body">. Adjacent-sibling margin keeps
stacked paragraphs readable. Daniel's single-para bio is unaffected.
2026-06-17 22:16:18 -04:00