Skip to content

feat(shows): rework external show detail into Episode dashboard#165

Merged
anneoneone merged 8 commits into
mainfrom
feat/rework-external-show-detail
Jun 1, 2026
Merged

feat(shows): rework external show detail into Episode dashboard#165
anneoneone merged 8 commits into
mainfrom
feat/rework-external-show-detail

Conversation

@anneoneone
Copy link
Copy Markdown
Collaborator

Reworks the external/brunchtime show detail page (issue #160) into a "SHOW DASHBOARD / Episode overview" layout, and opens it to hosts with ownership-based authorization. UNHEARD detail page is untouched.

Highlights

  • Dashboard layout: deadline countdown banner, cover/title/description hero, and an AIR DATE / ASSIGNED HOST / MEDIA TYPE / SOCIAL CHANNELS grid (dark-theme tokens).
  • Authorization: hosts may view any show and edit only shows they host (title/date/description/cover); no delete, no host/artist reassignment. Admins get full edit + delete + host reassignment. Enforced backend (require_show_editor) and frontend.
  • Media controls reuse the existing host upload/live user stories (hostFlowApi); the mode-selection step is removed (chosen on the dashboard now).
  • Edit mode: outside edit mode only media type + cover are changeable; in edit mode everything is editable and admins get a Delete Show button (deletes the show only, never its template).
  • Inline host reassignment merged into the ASSIGNED HOST tile (admin, edit mode); stray flow progress bar no longer shows on the show-select page.

Backend

  • api_show_detail now authenticates only (admin-only data gated by viewer_is_admin); exposes prerecorded_* fields + presigned URL.
  • api_update_show / api_upload_show_cover use require_show_editor (admin or owning host); non-admins can't change show_type/ai_bio. Delete stays admin-only.

Verification

npm run build, npm run lint, npm test, npx prettier --check all green.

Return prerecorded_key, prerecorded_filename, prerecorded_confirmed_at and a
presigned prerecorded_url from api_show_detail so the admin UI can show whether
an external/brunchtime show is in live or upload mode.
Rework the external/brunchtime show detail page into a clean section layout
(editable title, compact status/type, date, description, cover, social media
with AI bio + Instagram/Telegram, read-only media live/upload status). UNHEARD
shows are unchanged. Add ShowMediaSection component; enable the Instagram
preview modals for all show types.
Open the show detail page to hosts (router + api_show_detail auth) and add a
require_show_editor guard so the assigned host can update title/date/description
and the cover of shows they host; delete and host/artist assignment stay
admin-only. My Shows and All Shows cards in the host flow now open /shows/:id,
with a dedicated streaming button preserved on My Shows cards.
Rework the external/brunchtime show detail page to match the Episode-overview
dashboard: deadline-countdown banner, cover/title/description hero, and an
air-date / assigned-host / media-type / social-channels grid. Media controls
(Live/Upload toggle, upload, mark uploaded) reuse the existing /api/my-show
endpoints and are active only for the assigned host. Adds ShowDeadlineBanner,
ShowMediaCard and ShowSocialChannels; removes the superseded ShowMediaSection.
Remove the inline drag-and-drop uploader from the media card. The Live and
Upload buttons now hand off to the existing host streaming user stories
(/stream/live and /stream/upload) for the assigned host via useHostFlow, instead
of uploading on the detail page. The card keeps a read-only file/status view and
the Mark uploaded action.
On the show dashboard's media card, the Live/Upload tiles now only set the
selected media type; a contextual 'Go live' / 'Upload show' button enters the
chosen user story. Remove the manual 'Mark uploaded' button (status is detected
automatically) and add horizontal padding to the detail page.

Since the media type is decided on the dashboard, drop the standalone
mode-selection step: remove FlowSelectMode and the /stream/mode route/progress
step, and route the flow's back/revert/entry actions (and the My Shows
'Prepare to stream' button) to the show detail page instead.

Note: the format-on-save hook normalized some pre-existing formatting in the
touched flow components.
…nner

- Outside edit mode the external dashboard is read-only except media type and
  cover image, which stay editable.
- In edit mode, host reassignment and the Delete Show action (admin only, at the
  bottom) become available; delete removes only the show, not its template.
- Show the deadline countdown banner for Live shows too (counts down to air),
  not just upload mode.
- Add more horizontal padding to the detail page.
Merge admin host (re)assignment into the dashboard ASSIGNED HOST tile
(edit mode only); remove the redundant bottom assignment card. Hide the
step progress bar on the show-select page — it keyed off currentStep
(derived from show state) and showed even on /stream/select.
@anneoneone anneoneone merged commit 98476a2 into main Jun 1, 2026
1 check passed
@anneoneone anneoneone deleted the feat/rework-external-show-detail branch June 1, 2026 10:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant