← back to Stayclaim
src/components/StarsCtaRow.tsx
102 lines
/**
* StarsCtaRow — homepage CTA strip that surfaces the four address-adjacent
* destinations launched 2026-04-30:
* - /stars — Map of historical celebrity residences
* - /restaurants — Where they ate (sourced sightings)
* - /stars/walk — Hollywood Walk of Fame
* - /stars/nearby — Mobile GPS "stars near me"
*
* Per-surface labels and accent colors per SurfaceKey:
* flagship → "Open archive" voice, #1f4d40 accent (moss)
* claim → "Filmed here" voice, #c9292e accent (red)
* community → "From the block" voice, #7a6a3f accent (gold)
*/
import Link from 'next/link';
import type { SurfaceKey } from '@/lib/site';
type Card = {
kicker: string;
title: string;
blurb: string;
href: string;
};
const CARDS: Record<SurfaceKey, Card[]> = {
flagship: [
{ kicker: 'Map of the stars', title: 'Where they really lived', blurb: 'Historical residences, sourced and dated', href: '/stars' },
{ kicker: 'Where they ate', title: 'Celebrity restaurants', blurb: 'Musso & Frank to The Ivy — sightings sourced', href: '/restaurants' },
{ kicker: 'Walk of Fame', title: 'Every star’s address', blurb: 'Hollywood Blvd, Vine St — pin by pin', href: '/stars/walk' },
{ kicker: 'Mobile · GPS', title: 'Stars near me', blurb: 'Walking-distance lookup from your phone', href: '/stars/nearby' },
],
claim: [
{ kicker: 'Filmed here', title: 'Map of the stars', blurb: 'Was a name you know once at this address?', href: '/stars' },
{ kicker: 'Where they ate', title: 'Celebrity restaurants', blurb: 'Sourced patron lists, by neighborhood', href: '/restaurants' },
{ kicker: 'Walk of Fame', title: 'Hollywood, mapped', blurb: 'Every honoree, every sidewalk star', href: '/stars/walk' },
{ kicker: 'On the move', title: 'Stars near me', blurb: 'Pull up the closest star from your phone', href: '/stars/nearby' },
],
community: [
{ kicker: 'From the block', title: 'Map of the stars', blurb: 'The famous neighbors, then', href: '/stars' },
{ kicker: 'Where the block ate', title: 'Celebrity restaurants', blurb: 'The rooms our neighbors went to', href: '/restaurants' },
{ kicker: 'Pages of fame', title: 'Walk of Fame', blurb: 'Hollywood Blvd, the long version', href: '/stars/walk' },
{ kicker: 'On a walk', title: 'Stars near me', blurb: 'What’s star-shaped within a block', href: '/stars/nearby' },
],
};
const ACCENT: Record<SurfaceKey, string> = {
flagship: '#1f4d40',
claim: '#c9292e',
community: '#7a6a3f',
};
const SECTION_KICKER: Record<SurfaceKey, string> = {
flagship: 'Around the archive',
claim: 'Beyond your address',
community: 'Off the block',
};
export function StarsCtaRow({ surface }: { surface: SurfaceKey }) {
const cards = CARDS[surface];
const accent = ACCENT[surface];
const kicker = SECTION_KICKER[surface];
return (
<section className="border-b border-ink/10 bg-[#fbf6e8]">
<div className="max-w-6xl mx-auto px-6 py-10 md:py-14">
<p
className="font-mono text-[10px] uppercase tracking-[0.22em] mb-6"
style={{ color: accent }}
>
{kicker}
</p>
<ul className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4">
{cards.map(c => (
<li key={c.href}>
<Link
href={c.href}
className="group block bg-white border border-ink/15 hover:border-ink/40 transition px-5 py-5 h-full"
>
<p
className="font-mono text-[9px] uppercase tracking-[0.18em] mb-2"
style={{ color: accent }}
>
{c.kicker}
</p>
<h3 className="font-display text-2xl text-ink leading-[1.05] tracking-[-0.01em] group-hover:text-coral transition">
{c.title}
</h3>
<p className="mt-2 text-sm text-ink/65 leading-snug">{c.blurb}</p>
<p
className="mt-3 font-mono text-[10px] uppercase tracking-[0.18em] inline-flex items-center gap-1"
style={{ color: accent }}
>
Open <span aria-hidden>→</span>
</p>
</Link>
</li>
))}
</ul>
</div>
</section>
);
}