import type { Metadata } from 'next'; import Link from 'next/link'; import { EventTypeBadge } from '@/components/ui/badges'; import { Container, PageHeader, Unavailable } from '@/components/ui/section'; import { api, safe } from '@/lib/api'; import { cn } from '@/lib/cn'; import { fmtInt, fmtPctSigned, fmtScore, num } from '@/lib/format'; import { routes } from '@/lib/site'; export const metadata: Metadata = { title: 'Industry atlas', description: 'A living index per industry: monitored companies, events, hiring momentum, activity and AI adoption.' }; export const revalidate = 300; export default async function IndustriesPage() { const data = await safe(api.industries()); return ( {!data ? ( ) : ( <>
{data.items.map((i) => { const h = num(i.hiring_momentum_30d); return ( ); })}
Industry Companies Events 7 d Events 30 d Activity Hiring 30 d AI adoption Top event types
{i.name} {i.parent_slug && in {i.parent_slug.replace(/-/g, ' ')}} {fmtInt(i.companies)} {fmtInt(i.events_7d)} {fmtInt(i.events_30d)} {fmtScore(i.activity_score)} 0 ? 'text-positive' : h < 0 ? 'text-danger' : ''))}>{h === null ? '—' : fmtPctSigned(h)} {fmtScore(i.ai_adoption)} {i.top_event_types.slice(0, 3).map((t) => ( ))}
    {data.items.map((i) => (
  • {i.name}

    {fmtInt(i.companies)} companies · {fmtInt(i.events_30d)} events 30 d · activity {fmtScore(i.activity_score)} · hiring {fmtPctSigned(i.hiring_momentum_30d, 0)}

    {i.top_event_types.slice(0, 3).map((t) => ( ))}

  • ))}
)}
); }