From caedc9c22480b8997a80a013b253917e2a55b1ff Mon Sep 17 00:00:00 2001 From: jlightner Date: Fri, 3 Apr 2026 05:14:17 +0000 Subject: [PATCH] fix: remove moments from recent cards, pin footer to bottom of card --- .planning/M016-ux-brand-reading-experience.md | 9 +++--- ...es.md => backend-perf-creator-features.md} | 30 ++++++++----------- frontend/src/App.css | 1 + frontend/src/pages/Home.tsx | 5 ---- 4 files changed, 19 insertions(+), 26 deletions(-) rename .planning/{M017-backend-perf-creator-features.md => backend-perf-creator-features.md} (80%) diff --git a/.planning/M016-ux-brand-reading-experience.md b/.planning/M016-ux-brand-reading-experience.md index 5402224..887b2ae 100644 --- a/.planning/M016-ux-brand-reading-experience.md +++ b/.planning/M016-ux-brand-reading-experience.md @@ -42,8 +42,9 @@ Four issues identified with root causes already diagnosed: | 2 | Mobile job cards show vertical text ("C h e e") | `.pipeline-video__creator` missing overflow rules (App.css:4477) | Add `overflow: hidden; text-overflow: ellipsis; white-space: nowrap` (matches `.pipeline-video__filename` pattern) | | 3 | No stage direction chevrons | Pipeline stages listed without visual flow indicator | Add CSS chevron/arrow between stage indicators using `::after` pseudo-elements or inline SVG | | 4 | Filter text box should be replaced with button group | Current text input for status filter; should be "ALL \| Not Started \| In Progress \| Complete" buttons, end-aligned | Replace `` with `
` flexbox, `justify-content: flex-end`, verify vertical alignment against adjacent elements | +| 5 | Creators dropdown never populates (422 error) | Frontend requests `fetchCreators({ limit: 200 })` but backend validates `le=100` (line 1126) | Change to `limit: 100` | -**Verification:** Test collapse toggle on most-recent run, resize to 375px and check creator name truncation, confirm chevrons render between stages, confirm filter buttons align right and sit level with row. +**Verification:** Test collapse toggle on most-recent run, resize to 375px and check creator name truncation, confirm chevrons render between stages, confirm filter buttons align right and sit level with row, confirm creator filter dropdown populates. --- @@ -135,8 +136,8 @@ Recommended execution order: **S01 → S02 → S03 → S04 → S05 → S06** ## Out of Scope (for this milestone) -- Creator landing page redesign (depends on backend social links API — see M017) -- Auto-avatar images (backend-gated — see M017) -- Embed tab (needs backend investigation first — see M017) +- Creator landing page redesign (depends on backend social links API — see backend session workplan) +- Auto-avatar images (backend-gated — see backend session workplan) +- Embed tab (needs backend investigation first — see backend session workplan) - Any backend Python changes - M015 S04/S05 leftovers (trending searches block, admin dropdown hover) — should be completed by M015's own GSD session first diff --git a/.planning/M017-backend-perf-creator-features.md b/.planning/backend-perf-creator-features.md similarity index 80% rename from .planning/M017-backend-perf-creator-features.md rename to .planning/backend-perf-creator-features.md index 3089d44..feb71bf 100644 --- a/.planning/M017-backend-perf-creator-features.md +++ b/.planning/backend-perf-creator-features.md @@ -1,14 +1,14 @@ -# M017: Backend Performance & Creator Features +# Backend Performance & Creator Features — Session Workplan -> **Stream:** Backend — intended for a separate Claude Code session (not GSD) -> **Conflict zone:** `backend/` only + one frontend API client fix +> **Stream:** Backend — run in a separate Claude Code session while GSD executes M016 +> **Conflict zone:** `backend/` only — zero frontend changes > **Deploy cadence:** commit-build-redeploy after each task group --- ## Goal -Fix critical performance bottlenecks in the admin pipeline API, implement auto-avatar fetching for creators, and lay the backend groundwork for creator landing page improvements. Almost entirely backend Python — minimal frontend changes. +Fix critical performance bottlenecks in the admin pipeline API, implement auto-avatar fetching for creators, and lay the backend groundwork for creator landing page improvements. Purely backend Python — no frontend changes (the creators 422 fix moved to M016 S02). --- @@ -31,11 +31,8 @@ stats = await asyncio.to_thread(inspector.stats) or {} Also consider: reduce inspect timeout to 0.5s, add Redis cache with 10-15s TTL to avoid repeated slow calls. **Impact:** Page load drops from ~3s to ~50ms. -#### 1b. Fix creators endpoint 422 error -**File (frontend):** `frontend/src/pages/AdminPipeline.tsx` line 1126 -**File (backend):** `backend/routers/creators.py` line 28 -**Problem:** Frontend requests `fetchCreators({ limit: 200 })` but backend validates `le=100`. Returns 422 on every pipeline page load — creator filter dropdown never populates. -**Fix:** Change frontend call to `limit: 100`. (This is the ONE frontend file touch in this stream.) +#### ~~1b. Fix creators endpoint 422 error~~ → Moved to M016 S02 +The frontend `fetchCreators({ limit: 200 })` fix (AdminPipeline.tsx line 1126) is now part of M016's pipeline UI fixes slice, since that slice already owns AdminPipeline.tsx. --- @@ -141,24 +138,23 @@ As each endpoint is touched, also consider: | File | What changes | |------|-------------| -| `backend/routers/pipeline.py` | worker-status async fix, stale-pages rewrite, videos pagination, avatar endpoints | -| `backend/routers/creators.py` | Creator detail expansion, social links | +| `backend/routers/pipeline.py` | worker-status async fix, stale-pages rewrite, videos pagination, avatar admin endpoints | +| `backend/routers/creators.py` | Creator detail expansion, social links, admin editing | | `backend/routers/techniques.py` | Related techniques optimization | | `backend/models.py` | Creator model additions (avatar, social_links, bio) | | `backend/schemas.py` | New response schemas | | `backend/services/avatar.py` | New — TheAudioDB integration | | `backend/tasks.py` | New avatar fetch task | | `alembic/versions/014_*.py` | Migration for creator columns | -| `frontend/src/pages/AdminPipeline.tsx` | Line 1126 only — fix limit: 200 → 100 | --- ## Merge Coordination with M016 -These two streams are designed to have minimal file overlap: -- **M016 touches:** `App.css`, `Home.tsx`, `TechniquePage.tsx`, `TableOfContents.tsx`, `AdminPipeline.tsx` (CSS/JSX only), new frontend components, static assets -- **M017 touches:** `backend/` (routers, models, schemas, services, tasks), `alembic/`, one line in `AdminPipeline.tsx` +These two streams have **zero file overlap:** +- **M016 touches:** `frontend/src/` only — `App.css`, `Home.tsx`, `TechniquePage.tsx`, `TableOfContents.tsx`, `AdminPipeline.tsx`, new frontend components, static assets +- **This session touches:** `backend/` only — routers, models, schemas, services, tasks, `alembic/` -The single conflict point is `AdminPipeline.tsx` — M017's creators limit fix (line 1126) vs M016's pipeline UI fixes (collapse bug at line 729, filter buttons, chevrons). Resolve by merging M017's one-liner first, then M016's broader changes on top. +No merge conflicts expected. The creators 422 fix (the former single overlap point) now lives in M016 S02. -For the avatar/social-links frontend wiring: M017 ships the API, M016 (or a follow-up) consumes it. No conflict — just sequencing. +For avatar/social-links frontend wiring: this session ships the API, M016 (or a follow-up) consumes it. No conflict — just sequencing. diff --git a/frontend/src/App.css b/frontend/src/App.css index c69ad74..1fae60c 100644 --- a/frontend/src/App.css +++ b/frontend/src/App.css @@ -1619,6 +1619,7 @@ a.app-footer__repo:hover { align-items: center; gap: 0.5rem; flex-wrap: wrap; + flex: 1; } .recent-card__summary { diff --git a/frontend/src/pages/Home.tsx b/frontend/src/pages/Home.tsx index cdf247a..0ef31c7 100644 --- a/frontend/src/pages/Home.tsx +++ b/frontend/src/pages/Home.tsx @@ -330,11 +330,6 @@ export default function Home() { {t.creator_name || ''} - {t.key_moment_count > 0 && ( - - {t.key_moment_count} moment{t.key_moment_count !== 1 ? 's' : ''} - - )} {t.created_at && ( {new Date(t.created_at).toLocaleDateString('en-US', { month: 'short', day: 'numeric' })}