docs: reflect Phase 12 About Page landing
Move Phase 12 entry from PLAN.md to COMPLETED.md; note /about page and open follow-ups (images, Khabran bio, shared primitives). Add terse /about mention to CLAUDE.md public client bullet.
This commit is contained in:
@@ -9,7 +9,7 @@ DeepDrftHome is a **net10.0** solution consisting of ten projects implementing a
|
|||||||
### Core Projects
|
### Core Projects
|
||||||
|
|
||||||
- **DeepDrftPublic**: ASP.NET Core host. Blazor Web App with Server + WASM render modes. Owns browser-facing proxy controller for `api/track/*` (metadata listing and audio streaming), MudBlazor theme prerender, and TypeScript→JS audio interop. Public-facing site for listeners.
|
- **DeepDrftPublic**: ASP.NET Core host. Blazor Web App with Server + WASM render modes. Owns browser-facing proxy controller for `api/track/*` (metadata listing and audio streaming), MudBlazor theme prerender, and TypeScript→JS audio interop. Public-facing site for listeners.
|
||||||
- **DeepDrftPublic.Client**: Blazor WebAssembly assembly. All interactive UI (pages, player stack, dark-mode plumbing, HTTP clients for both backends). Consumed by the public site.
|
- **DeepDrftPublic.Client**: Blazor WebAssembly assembly. All interactive UI (pages, player stack, dark-mode plumbing, HTTP clients for both backends). Pages include the public `/about` editorial page (`Pages/About.razor` — three-movement People / Process / Product, built from Home section primitives, registered in `Layout/Pages.cs`). Consumed by the public site.
|
||||||
- **DeepDrftManager**: ASP.NET Core host. Blazor Web App with server-rendered `InteractiveServer` render mode. Hosts all CMS Razor components and pages under `Components/Pages/Cms/`, `Components/Pages/Tracks/`, `Components/Layout/CmsLayout.razor`, and `Components/Shared/` (all inlined from the former `DeepDrftCms` RCL). Public entry point: `Components/Pages/Home.razor` (`@page "/"`, no `[Authorize]`, uses lean `CmsHomeLayout`) — unauthenticated visitors see a DeepDrft-branded splash with a Login CTA; authenticated admins are redirected to `/catalogue` via `RedirectToCatalogue`. The catalogue dashboard (`Components/Pages/Index.razor`) lives at `@page "/catalogue"` and remains `[Authorize]`-gated with `CmsLayout`; its cards are **CUTS / SESSIONS / MIXES**, each deep-linking to `/releases?medium=<medium>` with the matching tab pre-selected. The consolidated browse surface is `Components/Pages/Tracks/Releases.razor` (`@page "/releases"`): bulk-action buttons (Generate All Profiles / Backfill High-res) → medium tab strip (ALL / CUTS / SESSIONS / MIXES) → the active tab's grid; waveform columns (Profile / High-res) — each showing a status icon when a datum is present and an always-visible generate/regenerate button — and per-track info tooltip live in `CmsAlbumBrowser`'s expanded child-row track table. Old list routes `/tracks`, `/tracks/albums`, `/tracks/archive` are kept as aliases on `Releases.razor` so bookmarks don't 404; operational sub-routes (`/tracks/upload`, edit routes, etc.) remain at `/tracks/*`. Gated by AuthBlocks login and hierarchical `Admin` role authorization. All track operations (upload, metadata read/write, delete) are HTTP proxies via `ICmsTrackService` / `CmsTrackService` injected directly into Blazor components; no in-process data layer. Two named HttpClients: `DeepDrft.Content.Cms` (bounded 100 s default, for all non-upload calls) and `DeepDrft.Content.Cms.Upload` (`InfiniteTimeSpan`, for large WAV uploads). Upload progress and idle/heartbeat timeout are driven by a single `ProgressStreamContent` wrapper (`Services/ProgressStreamContent.cs`); `CmsTrackService.UploadTrackAsync` adds a two-phase cancellation (idle window resets per progress tick; separate response-wait budget arms when the body completes).
|
- **DeepDrftManager**: ASP.NET Core host. Blazor Web App with server-rendered `InteractiveServer` render mode. Hosts all CMS Razor components and pages under `Components/Pages/Cms/`, `Components/Pages/Tracks/`, `Components/Layout/CmsLayout.razor`, and `Components/Shared/` (all inlined from the former `DeepDrftCms` RCL). Public entry point: `Components/Pages/Home.razor` (`@page "/"`, no `[Authorize]`, uses lean `CmsHomeLayout`) — unauthenticated visitors see a DeepDrft-branded splash with a Login CTA; authenticated admins are redirected to `/catalogue` via `RedirectToCatalogue`. The catalogue dashboard (`Components/Pages/Index.razor`) lives at `@page "/catalogue"` and remains `[Authorize]`-gated with `CmsLayout`; its cards are **CUTS / SESSIONS / MIXES**, each deep-linking to `/releases?medium=<medium>` with the matching tab pre-selected. The consolidated browse surface is `Components/Pages/Tracks/Releases.razor` (`@page "/releases"`): bulk-action buttons (Generate All Profiles / Backfill High-res) → medium tab strip (ALL / CUTS / SESSIONS / MIXES) → the active tab's grid; waveform columns (Profile / High-res) — each showing a status icon when a datum is present and an always-visible generate/regenerate button — and per-track info tooltip live in `CmsAlbumBrowser`'s expanded child-row track table. Old list routes `/tracks`, `/tracks/albums`, `/tracks/archive` are kept as aliases on `Releases.razor` so bookmarks don't 404; operational sub-routes (`/tracks/upload`, edit routes, etc.) remain at `/tracks/*`. Gated by AuthBlocks login and hierarchical `Admin` role authorization. All track operations (upload, metadata read/write, delete) are HTTP proxies via `ICmsTrackService` / `CmsTrackService` injected directly into Blazor components; no in-process data layer. Two named HttpClients: `DeepDrft.Content.Cms` (bounded 100 s default, for all non-upload calls) and `DeepDrft.Content.Cms.Upload` (`InfiniteTimeSpan`, for large WAV uploads). Upload progress and idle/heartbeat timeout are driven by a single `ProgressStreamContent` wrapper (`Services/ProgressStreamContent.cs`); `CmsTrackService.UploadTrackAsync` adds a two-phase cancellation (idle window resets per progress tick; separate response-wait budget arms when the body completes).
|
||||||
- **DeepDrftShared.Client**: Razor Class Library. Shared Blazor components consumed by both `DeepDrftPublic` and `DeepDrftManager` for consistency across public and admin surfaces.
|
- **DeepDrftShared.Client**: Razor Class Library. Shared Blazor components consumed by both `DeepDrftPublic` and `DeepDrftManager` for consistency across public and admin surfaces.
|
||||||
- **DeepDrftData**: Class library. EF Core domain logic: `DeepDrftContext`, `TrackConfiguration`, `Migrations`, `TrackRepository`, `TrackService`, `TrackManager`. Consumed by `DeepDrftAPI` and tests.
|
- **DeepDrftData**: Class library. EF Core domain logic: `DeepDrftContext`, `TrackConfiguration`, `Migrations`, `TrackRepository`, `TrackService`, `TrackManager`. Consumed by `DeepDrftAPI` and tests.
|
||||||
|
|||||||
@@ -6,6 +6,22 @@ Newest entries at the top. Group by phase/wave header (mirroring `PLAN.md` / `CM
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## Phase 12 — About Page (public site editorial) (landed 2026-06-17)
|
||||||
|
|
||||||
|
**Landed:** 2026-06-17 on dev.
|
||||||
|
|
||||||
|
- **What:** A real About page for the public site (`/about`), built entirely in the **Home page's existing visual language** — no new look. Three movements — **the People**, **the Process**, **the Product** — with ethos / pathos / logos woven through the prose as registers, not labelled blocks. The strategic frame (Daniel): the site is *presentation and proof of effort* — evidence that real people are pushing the classic club sound forward; the About page is where that claim is made explicit. Built as `DeepDrftPublic.Client/Pages/About.razor` + scoped `About.razor.css`; registered in the nav index (`DeepDrftPublic.Client/Layout/Pages.cs`). Images served statically from `DeepDrftPublic/wwwroot/img/`; image slots and Khabran's bio degrade gracefully until final assets/copy land.
|
||||||
|
|
||||||
|
- **Why:** This is its own phase, not a graft onto Phase 11: Phase 11 was structural (release-cardinal browse, queue, GUID handles), whereas this is a net-new **editorial** surface. The page reuses Home's section primitives wholesale (`.hero`, `.section-divider`, two-column `.section`, dark `.section-dark` feature band, `.section-split`, `.cta-banner`, `ParallaxImage` full-bleed bands) — no new visual language introduced; the only candidate new styling is two member-bio cards, assembled from existing type tokens. Full spec: `product-notes/about-page.md`.
|
||||||
|
|
||||||
|
- **Shape:** `DeepDrftPublic.Client/Pages/About.razor` (new; `@page "/about"`; three-movement editorial page using Home section primitives); `DeepDrftPublic.Client/Pages/About.razor.css` (new; scoped styles — Home section primitives currently re-declared here rather than shared globally, a known follow-up); `DeepDrftPublic.Client/Layout/Pages.cs` (nav index registration added). Static images from `DeepDrftPublic/wwwroot/img/`.
|
||||||
|
|
||||||
|
**Voice constraint (hard):** smart, serious, no AI-isms — underground Detroit/Midwest deep-club-house heritage carried to Charleston. All body prose remains DRAFT pending Daniel's approval — section headers and UI labels are set; any sentence/paragraph of site copy is a placeholder until Daniel passes it.
|
||||||
|
|
||||||
|
**Open follow-ups:** (1) Final photo files for the five image slots (duo hero portrait, full-bleed atmosphere band, Khabran + Daniel bio portraits, hands-on-gear band, closing band). (2) Khabran's bio text (drop-in slot — Daniel's bio drafted from transcript, Khabran's pending). (3) Optional promotion of the duplicated Home section primitives from `About.razor.css` to a shared global stylesheet. (4) Whether CUTS/SESSIONS/MIXES are explained on the page (spec recommends yes, a one-line-per-medium reuse of Home's `.medium-card` grid).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## Phase 15 — Visualizer Controls Enhancements (landed 2026-06-17)
|
## Phase 15 — Visualizer Controls Enhancements (landed 2026-06-17)
|
||||||
|
|
||||||
**Landed:** 2026-06-17 on dev.
|
**Landed:** 2026-06-17 on dev.
|
||||||
|
|||||||
@@ -239,45 +239,6 @@ Sequenced as **eight waves**; the critical path is `11.A → 11.B → 11.C → 1
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Phase 12 — About Page (public site editorial)
|
|
||||||
|
|
||||||
A real About page for the public site (`/about`), built entirely in the **Home page's existing
|
|
||||||
visual language** — no new look. Three movements — **the People**, **the Process**, **the Product** —
|
|
||||||
with ethos / pathos / logos woven through the prose as registers, not labelled blocks. The strategic
|
|
||||||
frame (Daniel): the site is *presentation and proof of effort* — evidence that real people are
|
|
||||||
pushing the classic club sound forward; the About page is where that claim is made explicit.
|
|
||||||
|
|
||||||
This is its own phase, not a graft onto Phase 11: Phase 11 was structural (release-cardinal browse,
|
|
||||||
queue, GUID handles), whereas this is a net-new **editorial** surface. It reuses Home's section
|
|
||||||
primitives wholesale (`.hero`, `.section-divider`, two-column `.section`, dark `.section-dark`
|
|
||||||
feature band, `.section-split`, `.cta-banner`, `ParallaxImage` full-bleed bands) — the only candidate
|
|
||||||
new styling is two member-bio cards, and even those should be assembled from existing type tokens
|
|
||||||
first. Full spec — section order, the Home-primitive mapping, per-section content intent, image-slot
|
|
||||||
table, and all draft copy fenced for approval: `product-notes/about-page.md`.
|
|
||||||
|
|
||||||
**Voice constraint (hard):** smart, serious, no AI-isms — underground Detroit/Midwest deep-club-house
|
|
||||||
heritage carried to Charleston. **All body prose is DRAFT pending Daniel's approval** — section
|
|
||||||
headers and UI labels may be set; any sentence/paragraph of site copy is a placeholder until Daniel
|
|
||||||
(who curates the band's public voice) passes it. The spec's `[COPY …]` blocks are drafts, not final.
|
|
||||||
|
|
||||||
**Image slots (5; 4–5 photos, files still being sorted — every slot is a TODO, do not block):** duo
|
|
||||||
hero portrait (likely hero), full-bleed atmosphere band, two member bio portraits (Khabran, Daniel),
|
|
||||||
a hands-on-gear "proof of effort" band, and a closing band. Each must degrade gracefully (fallback /
|
|
||||||
absent) until a file lands — the page composes correctly with zero images.
|
|
||||||
|
|
||||||
**Open questions (carried in the spec §9):** Khabran's bio text (drop-in slot, TODO — Daniel's bio is
|
|
||||||
drafted from the transcript, Khabran's pending); final photo files; **image hosting path** —
|
|
||||||
`wwwroot/img/` (recommended, Home-analogous, marketing chrome) vs. the image vault (content
|
|
||||||
machinery, over-built here), flagged for staff-engineer; **whether CUTS/SESSIONS/MIXES are explained
|
|
||||||
here** (recommend yes, a one-line-per-medium reuse of Home's `.medium-card` grid); where the
|
|
||||||
"designed, not extracted" thesis lands (recommend the Process movement); hero title wording.
|
|
||||||
|
|
||||||
**Dependency shape:** none — fully free-floating; depends only on the Home primitives that already
|
|
||||||
exist. The only true gate is Daniel's copy pass + final image files. `[design / spec — awaiting
|
|
||||||
Daniel approval of structure and copy]`
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Working with this file
|
## Working with this file
|
||||||
|
|
||||||
- **Add items by extending an existing phase first**; only create a new phase when the addition genuinely doesn't fit any of 1–5. Phase numbers are organisational, not sequencing.
|
- **Add items by extending an existing phase first**; only create a new phase when the addition genuinely doesn't fit any of 1–5. Phase numbers are organisational, not sequencing.
|
||||||
|
|||||||
Reference in New Issue
Block a user