AV launch: swap header/footer/schema.org logo to AV Beat SVG + install devDeps so Coolify NODE_ENV=production does not strip autoprefixer

This commit is contained in:
2026-06-02 21:20:36 +00:00
parent d43f78b161
commit 4fd6a88158
6 changed files with 135 additions and 38 deletions

View File

@@ -14,7 +14,7 @@ ENV NEXT_PUBLIC_SITE_URL=$NEXT_PUBLIC_SITE_URL
ENV NEXT_PUBLIC_GA_MEASUREMENT_ID=$NEXT_PUBLIC_GA_MEASUREMENT_ID ENV NEXT_PUBLIC_GA_MEASUREMENT_ID=$NEXT_PUBLIC_GA_MEASUREMENT_ID
COPY package*.json ./ COPY package*.json ./
RUN npm install RUN npm install --include=dev
COPY . . COPY . .
RUN npm run build RUN npm run build
ENV NODE_ENV=production ENV NODE_ENV=production

View File

@@ -0,0 +1,100 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 320" width="1200" height="320" role="img" aria-label="AV Beat — Pro AV, Live Production, and Display Tech">
<defs>
<!-- Background gradient: deep navy → near-black -->
<linearGradient id="bg" x1="0" y1="0" x2="0" y2="1">
<stop offset="0%" stop-color="#0a0510"/>
<stop offset="100%" stop-color="#02010a"/>
</linearGradient>
<!-- Wide soft halo (outer bloom) -->
<filter id="haloGold" x="-50%" y="-50%" width="200%" height="200%">
<feGaussianBlur stdDeviation="18"/>
</filter>
<filter id="haloRed" x="-50%" y="-50%" width="200%" height="200%">
<feGaussianBlur stdDeviation="18"/>
</filter>
<!-- Tighter glow (inner neon) -->
<filter id="glowGold" x="-30%" y="-30%" width="160%" height="160%">
<feGaussianBlur stdDeviation="3.5"/>
</filter>
<filter id="glowRed" x="-30%" y="-30%" width="160%" height="160%">
<feGaussianBlur stdDeviation="3.5"/>
</filter>
<!-- Tagline subtle glow -->
<filter id="glowSoft" x="-20%" y="-50%" width="140%" height="200%">
<feGaussianBlur stdDeviation="1.6"/>
</filter>
<style>
@import url('https://fonts.googleapis.com/css2?family=Barlow+Condensed:wght@800;900&amp;family=Inter:wght@500;600&amp;display=swap');
.word {
font-family: 'Barlow Condensed', 'Oswald', 'Nimbus Sans Narrow', 'Inter', 'Helvetica Neue', Arial, sans-serif;
font-weight: 900;
font-size: 156px;
letter-spacing: -0.012em;
}
.tm {
font-family: 'Inter', 'Nimbus Sans Narrow', 'Helvetica Neue', Arial, sans-serif;
font-weight: 600;
font-size: 22px;
}
.tag {
font-family: 'Inter', 'Nimbus Sans Narrow', 'Helvetica Neue', Arial, sans-serif;
font-weight: 500;
font-size: 20px;
letter-spacing: 0.34em;
}
</style>
</defs>
<!-- Dark background -->
<rect width="1200" height="320" fill="url(#bg)"/>
<!-- Faint scanline accents -->
<rect width="1200" height="1" y="0" fill="#ffb800" opacity="0.10"/>
<rect width="1200" height="1" y="319" fill="#d60701" opacity="0.10"/>
<!-- ─── AV (gold neon) ────────────────────────────────────────── -->
<g text-anchor="end">
<text class="word" x="500" y="195" fill="#ffb800" opacity="0.85" filter="url(#haloGold)">AV</text>
<text class="word" x="500" y="195" fill="#ffd25a" opacity="0.95" filter="url(#glowGold)">AV</text>
<text class="word" x="500" y="195" fill="#ffffff">AV</text>
</g>
<!-- ─── BEAT (red neon) ──────────────────────────────────────── -->
<g text-anchor="start">
<text class="word" x="530" y="195" fill="#d60701" opacity="0.85" filter="url(#haloRed)">BEAT</text>
<text class="word" x="530" y="195" fill="#ff4035" opacity="0.95" filter="url(#glowRed)">BEAT</text>
<text class="word" x="530" y="195" fill="#ffffff">BEAT</text>
</g>
<!-- ™ mark near end of BEAT, upper right -->
<g>
<text class="tm" x="935" y="92" fill="#ffd45e" filter="url(#glowGold)"></text>
<text class="tm" x="935" y="92" fill="#ffffff"></text>
</g>
<!-- ─── Waveform / signal pulse ──────────────────────────────── -->
<g>
<!-- Halo pass -->
<path d="M 70 230 L 440 230 L 460 230 L 480 210 L 500 252 L 520 164 L 540 286 L 560 210 L 580 238 L 600 230 L 1130 230"
fill="none" stroke="#ffb800" stroke-width="6" stroke-linejoin="round" stroke-linecap="round"
filter="url(#haloGold)" opacity="0.75"/>
<!-- Mid stroke -->
<path d="M 70 230 L 440 230 L 460 230 L 480 210 L 500 252 L 520 164 L 540 286 L 560 210 L 580 238 L 600 230 L 1130 230"
fill="none" stroke="#ffb800" stroke-width="3" stroke-linejoin="round" stroke-linecap="round"
filter="url(#glowGold)"/>
<!-- Crisp white core -->
<path d="M 70 230 L 440 230 L 460 230 L 480 210 L 500 252 L 520 164 L 540 286 L 560 210 L 580 238 L 600 230 L 1130 230"
fill="none" stroke="#ffffff" stroke-width="1.2" stroke-linejoin="round" stroke-linecap="round"/>
</g>
<!-- ─── Tagline ───────────────────────────────────────────────── -->
<g text-anchor="middle">
<text class="tag" x="600" y="294" fill="#ffffff" opacity="0.85" filter="url(#glowSoft)">PRO AV · LIVE PRODUCTION · DISPLAY TECH</text>
<text class="tag" x="600" y="294" fill="#ffffff">PRO AV · LIVE PRODUCTION · DISPLAY TECH</text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.7 KiB

View File

@@ -1,25 +1,25 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 320" width="1200" height="320" role="img" aria-label="Broadcast Beat — The Pulse of Production Intelligence"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 320" width="1200" height="320" role="img" aria-label="AV Beat — Pro AV, Live Production, and Display Tech">
<defs> <defs>
<!-- Background gradient: deep navy → near-black --> <!-- Background gradient: deep navy → near-black -->
<linearGradient id="bg" x1="0" y1="0" x2="0" y2="1"> <linearGradient id="bg" x1="0" y1="0" x2="0" y2="1">
<stop offset="0%" stop-color="#050B1E"/> <stop offset="0%" stop-color="#0a0510"/>
<stop offset="100%" stop-color="#020613"/> <stop offset="100%" stop-color="#02010a"/>
</linearGradient> </linearGradient>
<!-- Wide soft halo (outer bloom) --> <!-- Wide soft halo (outer bloom) -->
<filter id="haloPink" x="-50%" y="-50%" width="200%" height="200%"> <filter id="haloGold" x="-50%" y="-50%" width="200%" height="200%">
<feGaussianBlur stdDeviation="18"/> <feGaussianBlur stdDeviation="18"/>
</filter> </filter>
<filter id="haloCyan" x="-50%" y="-50%" width="200%" height="200%"> <filter id="haloRed" x="-50%" y="-50%" width="200%" height="200%">
<feGaussianBlur stdDeviation="18"/> <feGaussianBlur stdDeviation="18"/>
</filter> </filter>
<!-- Tighter glow (inner neon) --> <!-- Tighter glow (inner neon) -->
<filter id="glowPink" x="-30%" y="-30%" width="160%" height="160%"> <filter id="glowGold" x="-30%" y="-30%" width="160%" height="160%">
<feGaussianBlur stdDeviation="3.5"/> <feGaussianBlur stdDeviation="3.5"/>
</filter> </filter>
<filter id="glowCyan" x="-30%" y="-30%" width="160%" height="160%"> <filter id="glowRed" x="-30%" y="-30%" width="160%" height="160%">
<feGaussianBlur stdDeviation="3.5"/> <feGaussianBlur stdDeviation="3.5"/>
</filter> </filter>
@@ -33,7 +33,7 @@
.word { .word {
font-family: 'Barlow Condensed', 'Oswald', 'Nimbus Sans Narrow', 'Inter', 'Helvetica Neue', Arial, sans-serif; font-family: 'Barlow Condensed', 'Oswald', 'Nimbus Sans Narrow', 'Inter', 'Helvetica Neue', Arial, sans-serif;
font-weight: 900; font-weight: 900;
font-size: 118px; font-size: 156px;
letter-spacing: -0.012em; letter-spacing: -0.012em;
} }
.tm { .tm {
@@ -53,51 +53,48 @@
<!-- Dark background --> <!-- Dark background -->
<rect width="1200" height="320" fill="url(#bg)"/> <rect width="1200" height="320" fill="url(#bg)"/>
<!-- Faint vignette + scanline accents (optional broadcast vibe) --> <!-- Faint scanline accents -->
<rect width="1200" height="1" y="0" fill="#00d4ff" opacity="0.10"/> <rect width="1200" height="1" y="0" fill="#ffb800" opacity="0.10"/>
<rect width="1200" height="1" y="319" fill="#ff2188" opacity="0.10"/> <rect width="1200" height="1" y="319" fill="#d60701" opacity="0.10"/>
<!-- ─── BROADCAST (pink/magenta neon) ─────────────────────────── --> <!-- ─── AV (gold neon) ────────────────────────────────────────── -->
<g text-anchor="end"> <g text-anchor="end">
<!-- outer halo --> <text class="word" x="500" y="195" fill="#ffb800" opacity="0.85" filter="url(#haloGold)">AV</text>
<text class="word" x="595" y="180" fill="#ff2188" opacity="0.85" filter="url(#haloPink)">BROADCAST</text> <text class="word" x="500" y="195" fill="#ffd25a" opacity="0.95" filter="url(#glowGold)">AV</text>
<!-- mid glow --> <text class="word" x="500" y="195" fill="#ffffff">AV</text>
<text class="word" x="595" y="180" fill="#ff58a8" opacity="0.95" filter="url(#glowPink)">BROADCAST</text>
<!-- white core -->
<text class="word" x="595" y="180" fill="#ffffff">BROADCAST</text>
</g> </g>
<!-- ─── BEAT (cyan neon) ──────────────────────────────────────── --> <!-- ─── BEAT (red neon) ──────────────────────────────────────── -->
<g text-anchor="start"> <g text-anchor="start">
<text class="word" x="615" y="180" fill="#00d4ff" opacity="0.85" filter="url(#haloCyan)">BEAT</text> <text class="word" x="530" y="195" fill="#d60701" opacity="0.85" filter="url(#haloRed)">BEAT</text>
<text class="word" x="615" y="180" fill="#5ee5ff" opacity="0.95" filter="url(#glowCyan)">BEAT</text> <text class="word" x="530" y="195" fill="#ff4035" opacity="0.95" filter="url(#glowRed)">BEAT</text>
<text class="word" x="615" y="180" fill="#ffffff">BEAT</text> <text class="word" x="530" y="195" fill="#ffffff">BEAT</text>
</g> </g>
<!-- ™ mark near end of BEAT, upper right --> <!-- ™ mark near end of BEAT, upper right -->
<g> <g>
<text class="tm" x="918" y="90" fill="#7feaff" filter="url(#glowCyan)"></text> <text class="tm" x="935" y="92" fill="#ffd45e" filter="url(#glowGold)"></text>
<text class="tm" x="918" y="90" fill="#ffffff"></text> <text class="tm" x="935" y="92" fill="#ffffff"></text>
</g> </g>
<!-- ─── Waveform / heartbeat pulse ────────────────────────────── --> <!-- ─── Waveform / signal pulse ──────────────────────────────── -->
<g> <g>
<!-- Halo pass --> <!-- Halo pass -->
<path d="M 70 218 L 460 218 L 480 218 L 500 198 L 520 240 L 540 152 L 560 274 L 580 198 L 600 226 L 620 218 L 1130 218" <path d="M 70 230 L 440 230 L 460 230 L 480 210 L 500 252 L 520 164 L 540 286 L 560 210 L 580 238 L 600 230 L 1130 230"
fill="none" stroke="#00d4ff" stroke-width="6" stroke-linejoin="round" stroke-linecap="round" fill="none" stroke="#ffb800" stroke-width="6" stroke-linejoin="round" stroke-linecap="round"
filter="url(#haloCyan)" opacity="0.75"/> filter="url(#haloGold)" opacity="0.75"/>
<!-- Mid stroke --> <!-- Mid stroke -->
<path d="M 70 218 L 460 218 L 480 218 L 500 198 L 520 240 L 540 152 L 560 274 L 580 198 L 600 226 L 620 218 L 1130 218" <path d="M 70 230 L 440 230 L 460 230 L 480 210 L 500 252 L 520 164 L 540 286 L 560 210 L 580 238 L 600 230 L 1130 230"
fill="none" stroke="#00d4ff" stroke-width="3" stroke-linejoin="round" stroke-linecap="round" fill="none" stroke="#ffb800" stroke-width="3" stroke-linejoin="round" stroke-linecap="round"
filter="url(#glowCyan)"/> filter="url(#glowGold)"/>
<!-- Crisp white core --> <!-- Crisp white core -->
<path d="M 70 218 L 460 218 L 480 218 L 500 198 L 520 240 L 540 152 L 560 274 L 580 198 L 600 226 L 620 218 L 1130 218" <path d="M 70 230 L 440 230 L 460 230 L 480 210 L 500 252 L 520 164 L 540 286 L 560 210 L 580 238 L 600 230 L 1130 230"
fill="none" stroke="#ffffff" stroke-width="1.2" stroke-linejoin="round" stroke-linecap="round"/> fill="none" stroke="#ffffff" stroke-width="1.2" stroke-linejoin="round" stroke-linecap="round"/>
</g> </g>
<!-- ─── Tagline ───────────────────────────────────────────────── --> <!-- ─── Tagline ───────────────────────────────────────────────── -->
<g text-anchor="middle"> <g text-anchor="middle">
<text class="tag" x="600" y="282" fill="#ffffff" opacity="0.85" filter="url(#glowSoft)">THE PULSE OF PRODUCTION INTELLIGENCE</text> <text class="tag" x="600" y="294" fill="#ffffff" opacity="0.85" filter="url(#glowSoft)">PRO AV · LIVE PRODUCTION · DISPLAY TECH</text>
<text class="tag" x="600" y="282" fill="#ffffff">THE PULSE OF PRODUCTION INTELLIGENCE</text> <text class="tag" x="600" y="294" fill="#ffffff">PRO AV · LIVE PRODUCTION · DISPLAY TECH</text>
</g> </g>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 4.8 KiB

After

Width:  |  Height:  |  Size: 4.7 KiB

View File

@@ -124,7 +124,7 @@ export default function RootLayout({
'@type': 'Organization', '@type': 'Organization',
name: 'AV Beat', name: 'AV Beat',
url: 'https://avbeat.com', url: 'https://avbeat.com',
logo: "https://avbeat.com/assets/images/logo.png", logo: "https://avbeat.com/assets/images/logo.svg",
description: 'The digital platform for broadcast engineering professionals. Breaking news, deep-dive features, and industry spotlights from NAB to IBC and beyond.', description: 'The digital platform for broadcast engineering professionals. Breaking news, deep-dive features, and industry spotlights from NAB to IBC and beyond.',
sameAs: [ sameAs: [
'https://linkedin.com', 'https://linkedin.com',

View File

@@ -112,7 +112,7 @@ export default function Footer() {
aria-label="AV Beat — home" aria-label="AV Beat — home"
className="flex-shrink-0 opacity-70 hover:opacity-100 transition-opacity"> className="flex-shrink-0 opacity-70 hover:opacity-100 transition-opacity">
<AppImage <AppImage
src="/assets/images/logo.png" src="/assets/images/logo.svg"
alt="AV Beat" alt="AV Beat"
width={180} width={180}
height={24} height={24}

View File

@@ -263,7 +263,7 @@ export default function Header() {
{/* Logo */} {/* Logo */}
<Link href="/home-page" className="flex-shrink-0 focus:outline-none focus-visible:ring-2 focus-visible:ring-[#3b82f6] focus-visible:ring-offset-1 focus-visible:ring-offset-[#111]"> <Link href="/home-page" className="flex-shrink-0 focus:outline-none focus-visible:ring-2 focus-visible:ring-[#3b82f6] focus-visible:ring-offset-1 focus-visible:ring-offset-[#111]">
<AppImage <AppImage
src="/assets/images/logo.png" src="/assets/images/logo.svg"
alt="AV Beat logo" alt="AV Beat logo"
width={200} width={200}
height={26} height={26}