forum: user profile pages + clickable bylines + neon pulse favicon

USER PROFILES (/forum/user/[username]):
- New API at /api/forum/user-by-username/[username] resolves by
  username OR display_name (URL-encoded), since forum threads/replies
  store author_name = display_name. Returns the persona's profile,
  thread history (up to 50), and recent replies (up to 20).
- New page renders the persona card with archetype badge
  (Audio Engineer / Colorist / etc.) + expertise level badge
  (beginner/intermediate/senior) + role title, company, location,
  years_experience, join date, and an expertise-tags chip row.
- Two columns underneath: "Threads started" and "Recent replies"
  with proper deep-links into each thread.
- Author names in /forum, /forum/[slug], and /forum/thread/[id] are
  now <Link> elements pointing to /forum/user/<displayname>, with
  onClick=stopPropagation so the card-level click handler doesn't
  also fire.

FAVICON:
- Hand-built neon pulse waveform — emerald→cyan→purple gradient on
  dark navy background, designed to read at 16×16 to 256×256.
- Multi-resolution favicon.ico (16/32/48/64) + SVG + PNGs at
  16/32/48/64/96/192/256 under /static/favicons/.
- layout.tsx icons block now references all sizes including the
  apple-touch sizes (192, 256).

No env / DB changes here — pure deploy.
This commit is contained in:
Ryan Salazar
2026-05-20 12:56:56 +00:00
parent dc166dfb10
commit f6b52f7c2d
15 changed files with 407 additions and 8 deletions

View File

@@ -17,8 +17,15 @@ export const metadata: Metadata = {
description: 'The digital platform for broadcast engineering professionals. Breaking news, deep-dive features, and industry spotlights from NAB to IBC and beyond.',
icons: {
icon: [
{ url: '/favicon.ico', type: 'image/x-icon' }]
{ url: '/favicon.ico', type: 'image/x-icon', sizes: 'any' },
{ url: '/static/favicons/favicon.svg', type: 'image/svg+xml' },
{ url: '/static/favicons/favicon-32.png', type: 'image/png', sizes: '32x32' },
{ url: '/static/favicons/favicon-16.png', type: 'image/png', sizes: '16x16' },
],
apple: [
{ url: '/static/favicons/favicon-192.png', sizes: '180x180' },
{ url: '/static/favicons/favicon-256.png', sizes: '256x256' },
],
},
alternates: {
canonical: '/',