This is a Next.js project bootstrapped with create-next-app.
TV pitch intelligence platform for MYE development. Scrapes trade publications, tracks buyer mandates and greenlits, manages a pitch pipeline with email-to-kanban automation, and generates buyer-facing pitch portals.
npm run devOpen http://localhost:3000.
All pages live under app/ using Next.js 15 App Router. Server components fetch data directly; client components handle interactivity (search, drag-drop, modals).
| Route | File | Description |
|---|---|---|
/ |
app/page.tsx |
Dashboard — bento grid: buyers, greenlits, pipeline, genre pulse |
/intelligence |
app/intelligence/page.tsx |
Scraper status + today's greenlit feed + exec moves |
/buyers |
app/buyers/page.tsx |
Searchable buyer directory table |
/buyers/[id] |
app/buyers/[id]/page.tsx |
Buyer profile with 4-tab panel |
/pipeline |
app/pipeline/page.tsx |
Kanban board with dnd-kit drag-drop + SWR polling |
/build |
app/build/page.tsx |
5-step package builder |
/build/[id] |
app/build/[id]/page.tsx |
Existing package view/edit |
/shows |
app/shows/page.tsx |
Show database with filters |
/shows/[id] |
app/shows/[id]/page.tsx |
Show detail with linked buyer |
/pitch/[slug] |
app/pitch/[slug]/page.tsx |
Buyer-facing pitch portal (light mode) |
All in components/ui/:
Nav.tsx— left sidebar with active route detectionCard.tsx— surface card, optional hoverable liftBadge.tsx— status/genre pill with 8 variantsStatusDot.tsx— colored dot for buyer activity statusSkeleton.tsx+SkeletonCard— shimmer loading statesButton.tsx— primary / ghost / danger, renders as<a>withhrefInput.tsx— styled text inputModal.tsx— overlay with Escape + click-outside close
Colors, fonts, and motion all via CSS variables defined in app/globals.css. Tailwind v4 arbitrary values (bg-[var(--bg-surface)]) used throughout. No hardcoded hex values in components.
- Display: Barlow Condensed 800
- UI: Inter
- Data/IDs: JetBrains Mono
API Routes (/api/*)
Server components fetch directly (no useEffect)
Client islands handle search/filter/dnd
SWR for polling data (pipeline: 5s, intelligence: 60s)
dnd-kit drag-drop with optimistic UI updates. PUT /api/pipeline/[id]/stage on drop. SWR polls every 5s to catch Grok email auto-moves. Toast shows on error with exact message.
/pitch/[slug] is buyer-facing — data-theme="light" switches to the light CSS variable overrides. Six scroll sections with a fixed bottom action bar. Font sizes go up to 96px for the hero title.