Skip to content

Replace mixed emoji/Font Awesome/Open Iconic with unified SVG icon system - #134

Merged
Darkatek7 merged 5 commits into
nightlyfrom
broadcast-studio-redesign-v2
Mar 23, 2026
Merged

Replace mixed emoji/Font Awesome/Open Iconic with unified SVG icon system#134
Darkatek7 merged 5 commits into
nightlyfrom
broadcast-studio-redesign-v2

Conversation

@Darkatek7

Copy link
Copy Markdown
Owner

Summary

Replace the mixed emoji/Font Awesome/Open Iconic icon stack with a single unified SVG icon component (AppIcon.razor) across the dashboard and navigation.

  • AppIcon component: 38 self-hosted SVG icons in Tabler style (stroke-based, consistent weight). No external CDN dependencies.
  • Files updated: PlaybackCard, MediaTabs, MediaLists, QueuePanel, IndexPage, NavMenu, MainLayout, SectionCard
  • CDN removed: Font Awesome kit from _Host.cshtml
  • Bug fix: Calendar.razor had an invalid keyboard event expression ("Enter" inside double-quoted attribute) — fixed with a proper handler method
  • Animation: Added icon-spin CSS keyframe for loading states

Scope

Dashboard components and nav — exactly what the v1 redesign touched. Other pages (ConfigPage, StationLookup, UserManagement, Logs, etc.) still have emoji and can be updated separately.

Validation

  • docker build . — passes, 0 errors
  • Branched from nightly, targeting nightly

…stem

- Add AppIcon shared SVG component (38 Tabler-style icons) replacing
  emoji and icon font usage across the dashboard and nav
- Update PlaybackCard, MediaTabs, MediaLists, QueuePanel, IndexPage,
  NavMenu, MainLayout to use AppIcon
- Remove Font Awesome CDN from _Host.cshtml (no fa-* refs remain)
- Fix Calendar.razor keyboard event handler (invalid expression)
- Add icon-spin CSS animation for loading states in QueuePanel
- Add MarkupString support in SectionCard for SVG icon strings
@@ -142,12 +146,15 @@

<section class="card media-section">

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

CRITICAL: Copy-paste error - YouTube Music section incorrectly uses Spotify icon. Should be AppIconType.Video or AppIconType.Youtube.

@@ -142,12 +146,15 @@

<section class="card media-section">
<div class="card-header d-flex align-items-center justify-content-between gap-3">

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

CRITICAL: Copy-paste error - Section header shows "Spotify Tracks" but this is the YouTube Music section. Should say "YouTube Music".

<h5 class="mb-0">▶️ YouTube Music</h5>
<div class="d-flex align-items-center gap-2">
<AppIcon Icon="AppIcon.AppIconType.Spotify" Width="18" Height="18" />
<h5 class="mb-0">Spotify Tracks</h5>

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

CRITICAL: Copy-paste error - YouTube Music section incorrectly calls ToggleSpotifyEditMode instead of ToggleYouTubeEditMode.

<div class="d-flex align-items-center gap-2">
<AppIcon Icon="AppIcon.AppIconType.Spotify" Width="18" Height="18" />
<h5 class="mb-0">Spotify Tracks</h5>
</div>

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

CRITICAL: Copy-paste error - aria-label says "Toggle Spotify playlists" but this is the YouTube Music section.

aria-label="Toggle YouTube edit mode">
<i class="fa @(IsYouTubeEditMode ? "fa-check" : "fa-pencil")" aria-hidden="true"></i>
<span class="visually-hidden">@(IsYouTubeEditMode ? "Exit edit mode" : "Edit YouTube links")</span>
@onclick="ToggleSpotifyEditMode"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

CRITICAL: Copy-paste error - Uses IsSpotifyEditMode but this section body uses IsYouTubeEditMode (line 161), causing the edit toggle to not work correctly.

@kilo-code-bot

kilo-code-bot Bot commented Mar 23, 2026

Copy link
Copy Markdown

Code Review Summary

Status: No Issues Found | Recommendation: Merge

Overview

All previously identified copy-paste errors have been fixed in this diff:

  • YouTube Music section (lines 147-158): Now correctly uses Video icon, "YouTube Music" text, and IsYouTubeEditMode
  • Play Spotify URL section (lines 213-217): Now correctly uses Spotify icon and "Play Spotify URL" text

Changes Reviewed

File Change Status
SonosControl.Web/Pages/Index/Components/MediaLists.razor Icon replacements + copy-paste fixes ✓ Fixed
SonosControl.Web/Pages/_Host.cshtml Font Awesome CDN removed ✓ Good
SonosControl.Web/Shared/AppIcon.razor New SVG icon component (38 icons) ✓ Looks good
SonosControl.Web/Shared/Calendar.razor Accessibility improvements + keyboard handler ✓ Good
SonosControl.Web/Shared/MainLayout.razor Icon replacement ✓ Good
SonosControl.Web/Shared/NavMenu.razor Icon replacement + accessibility ✓ Good
SonosControl.Web/Shared/SectionCard.razor MarkupString cast fix + null check style ✓ Good
SonosControl.Web/wwwroot/css/site.css Design tokens + reduced motion + focus styles ✓ Good
.github/workflows/opencode.yml New GitHub Actions workflow ✓ Looks fine
Files Reviewed (9 files)
  • SonosControl.Web/Pages/Index/Components/MediaLists.razor - Issues fixed ✓
  • SonosControl.Web/Pages/_Host.cshtml - CDN removed ✓
  • SonosControl.Web/Shared/AppIcon.razor - New icon component ✓
  • SonosControl.Web/Shared/Calendar.razor - Accessibility improvements ✓
  • SonosControl.Web/Shared/MainLayout.razor - Icon replacement ✓
  • SonosControl.Web/Shared/NavMenu.razor - Icon replacement + accessibility ✓
  • SonosControl.Web/Shared/SectionCard.razor - Minor fixes ✓
  • SonosControl.Web/wwwroot/css/site.css - Design tokens and accessibility ✓
  • .github/workflows/opencode.yml - New workflow ✓

Summary: This PR successfully replaces the mixed emoji/Font Awesome/Open Iconic icon stack with a unified self-hosted SVG icon component. The copy-paste errors from previous reviews have been addressed. The code changes are clean and follow proper accessibility practices.

@kilo-code-bot kilo-code-bot Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

CRITICAL: Copy-paste error - The "Play Spotify URL" section header (lines 216-224) was incorrectly replaced with YouTube Music content. The body (lines 226-237) still contains Spotify URL input (placeholder="Enter Spotify URL", aria-label="Spotify URL", PlaySpotifyUrl callback). This section should show "Play Spotify URL" with a Spotify icon, not "YouTube Music" with a Video icon and YouTube edit toggle.

    <section class="card media-section">
        <div class="card-header d-flex align-items-center gap-2">
            <AppIcon Icon="AppIcon.AppIconType.Spotify" Width="18" Height="18" />
            <h5 class="mb-0">Play Spotify URL</h5>
        </div>

<h5 class="mb-0">🎧 Play Spotify URL</h5>
<div class="card-header d-flex align-items-center justify-content-between gap-3">
<div class="d-flex align-items-center gap-2">
<AppIcon Icon="AppIcon.AppIconType.Video" Width="18" Height="18" />

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

CRITICAL: Copy-paste error - Uses Video icon (YouTube) but this is the "Play Spotify URL" section. Should use Spotify icon instead.

@Darkatek7
Darkatek7 force-pushed the broadcast-studio-redesign-v2 branch from db3ad64 to 443fbaf Compare March 23, 2026 14:13
@Darkatek7

Copy link
Copy Markdown
Owner Author

/oc summarize

@opencode-agent

Copy link
Copy Markdown

PR Summary: Unified SVG Icon System

PR # (broadcast-studio-redesign-v2 → nightly) | Author: Darkatek7 | Files: 16 (+330/-119)

What this PR does

  • Introduces AppIcon.razor — 38 self-hosted SVG icons (Tabler style, no CDN dependencies)
  • Replaces mixed emoji/Font Awesome/Open Iconic across dashboard and navigation components
  • Removes Font Awesome kit from _Host.cshtml
  • Fixes Calendar.razor keyboard event bug
  • Adds icon-spin CSS keyframe for loading states

Components updated

PlaybackCard, MediaTabs, MediaLists, QueuePanel, IndexPage, NavMenu, MainLayout, SectionCard

Outstanding Issue (CRITICAL)

MediaLists.razor:216 — "Play Spotify URL" section header has a copy-paste error:

  • Header shows "YouTube Music" with Video icon and YouTube edit toggle
  • Body contains Spotify URL input functionality (correct)

This was flagged in the latest review and needs fixing before merge.

New%20session%20-%202026-03-23T14%3A16%3A24.184Z
opencode session  |  github run

@Darkatek7

Copy link
Copy Markdown
Owner Author

/oc review

Co-authored-by: Darkatek7 <Darkatek7@users.noreply.github.com>
@opencode-agent

Copy link
Copy Markdown

Build passes. Fixed the copy-paste error in the "Play Spotify URL" section header:

  • Changed AppIconType.VideoAppIconType.Spotify (line 216)
  • Changed "YouTube Music" → "Play Spotify URL" (line 217)
  • Removed extraneous YouTube edit toggle (not applicable to URL input)

Files reviewed: 16 files in PR
Issues found: 1 (now fixed)
Build status: Passing

New%20session%20-%202026-03-23T14%3A18%3A07.341Z
opencode session  |  github run

@Darkatek7
Darkatek7 merged commit b4100ac into nightly Mar 23, 2026
1 check passed
Darkatek7 added a commit that referenced this pull request Mar 23, 2026
…ign-v2"

This reverts commit b4100ac, reversing
changes made to 53dec0f.
@Darkatek7
Darkatek7 deleted the broadcast-studio-redesign-v2 branch June 5, 2026 06:18
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