- Remove duplicate 728x90 LeaderboardAd below news ticker (per Ryan)
- Footer: remove NAB Official Media Partner badge
- Header: replace AdSlot stub with real AdImage rotation (3 verified 728x90s)
- Header: fix logo path from dead WP URL to local /assets/images/logo.png
- ads.ts: only include ads with verified real images (3x728x90, 2x300x250)
- ads.ts: remove 22 unrecovered ads — see PENDING_ads.md for upload list
- SidebarAdStack: handle null FIXED_300X600 gracefully (Blackmagic not recovered)
- public/legacy/ads/: 5 real ad images committed (Tower, Sony, LiveU 728x90; LiveU PAYG, Telycam 300x250)
- public/assets/images/logo.png: recovered from Wayback Machine
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Top-bar nav changes:
- Authenticated user previously saw two separate links 'My Account' (-> /account)
and 'My Profile' (-> /profile/{userId}). Replaced with a single 'My Profile'
link -> /account.
- Admin block previously rendered 14 inline links (WP Import, Articles, Editorial,
Users, Analytics, Audit Log, Notifications, Newsletter, Forum Seed, Company
Tracker, Show Calendar, AI Console, Banned Terms, Dashboard) which sprawled
horizontally past the available width. 9 of those are now grouped under a
single TOOLS hover dropdown matching the existing NEWS/GEAR/SHOW
COVERAGE/TECHNOLOGY pattern (Tailwind group-hover + group-focus-within for
keyboard accessibility, role=menu / menuitem, aria-haspopup=true).
- Inline admin links retained per spec: WP Import, Articles, Editorial,
Newsletter.
- TOOLS submenu: Users, Analytics, Audit Log, Notifications, Forum Seed,
Company Tracker, Show Calendar, AI Console, Banned Terms.
The whole admin tier (inline + dropdown) remains gated by the existing isAdmin
check, so anonymous and non-admin users see nothing.
Reorganize the navigation:
- navLinks now carries an optional dropdown[] per section. NEWS / GEAR &
REVIEWS / SHOW COVERAGE / TECHNOLOGY get sub-items pulled from the old
flat categoryLinks list.
- Desktop main nav renders each top-level item as a hover-triggered
dropdown (CSS-only via Tailwind group-hover + group-focus-within for
keyboard accessibility). aria-haspopup advertises the popup; the panel
is role=menu with menuitem children.
- Mobile drawer's category list now groups by parent section instead of
showing a flat list.
- Removed the secondary category sub-nav row that previously sat below
the main nav (its content is in the dropdowns now).
- Added a site-wide 728x90 ad slot between the top utility bar and the
main nav (md+ only). Uses <AdSlot zone='homepage-top'> so the existing
ad-rotation pool serves it.
Net: 566 → ~600 lines (markup heavier than what was removed because the
dropdown panels are inline).
Desktop nav (and mobile drawer) now show different account-related
links depending on auth state:
- Anonymous: Sign In (-> /client-login) + Register
- Authenticated: My Account + My Profile
- Admin-tier (administrator/admin/super_admin/editor/support): plus the
full admin block (already gated by isAdmin from earlier commit)
Previously a single 'Sign In / My Account' link pointed at /account
regardless of auth state, which forced anonymous users through a
server-side bounce to the login page. Now Sign In links straight to the
canonical /client-login.
- src/app/home-page/components/LeaderboardAd.tsx: drop the hardcoded
img.rocket.new image (rocket_gen_img_1bebfd3c7) at the top of the
homepage. Replaced with <AdSlot zone='homepage-top' size='728x90' />
to keep the slot for the eventual ad-server wiring while removing the
rocket.new dependency entirely.
- src/components/Header.tsx: re-add the isAdmin gate that was reverted
in 0d51dad. Reads bb.user_profiles.role and only renders the desktop
admin nav block (WP Import, Articles, Editorial, Users, Analytics,
Audit Log, Notifications, Newsletter, Forum Seed, Company Tracker,
Show Calendar, AI Console, Banned Terms, Dashboard) and the mobile WP
Import link when role is in (administrator, admin, super_admin,
editor, support). 'support' is admin-tier per the new RBAC matrix.
Page-level auth checks on each /admin/* route remain authoritative;
this only suppresses menu visibility for non-admin/anonymous.
Header was rendering all admin links unconditionally to every visitor
(including unauthenticated). Add an isAdmin state derived from
user_profiles.role (administrator|admin|super_admin) and wrap both the
desktop admin block and the mobile WP Import link in the guard.
Note: page-level auth checks on each /admin/* route remain authoritative;
this only suppresses menu visibility.