import Link from "next/link"; import { ArchiveGrowthChart } from "./components/ArchiveGrowthChart"; import { FamilyStats } from "./components/FamilyStats"; import { ArchiveCards } from "./components/ArchiveCards"; import { loadSummary } from "./lib/summary"; import { currentHomepage } from "./lib/homepage"; // The project's front page. It says what Archilyzer is, shows what it has // built, and offers the download. // // Every number is computed at build time from the operator's corpus (the // summary's `official` block and `monthly` series) and hidden when absent — see // loadSummary(). A build with no data renders the words and the links only. // // Copy rules, kept deliberately: short declarative sentences, no eyebrow over // every band, no subtitles under the headings or the cards, headings in Title // Case (the hub shelf matches). The page has two headings after // the H1 and both name what is under them. const CONTAINER = "w-full max-w-6xl mx-auto px-5 sm:px-6"; export default function Home() { const summary = loadSummary(); const official = summary?.official ?? null; const hours = official?.hoursArchived ?? summary?.totals.hoursArchived ?? null; const sites = summary?.sites ?? []; const months = summary?.monthly ?? []; // The hero links the hub. It was withheld on 2026-09-25 until the hub was // polished (release 9 slices C1, C1b, C2), re-enabled the same evening, and // withheld AGAIN on 2026-09-26 on the operator's word ("hide the hub again for // now"). The hub stays deployed and reachable by URL; only this link is off. // The URL comes from homepage.json (the hub's own build reads it too). const HUB_LINK_ENABLED = false; const hubUrl = HUB_LINK_ENABLED ? (currentHomepage().siteUrl ?? null) : null; return ( <> {/* ── Hero: the claim, the two ways in, then the evidence ───────────── */}

{hours ? ( <> {hours.toLocaleString()} {" "} hours of speech, searchable to the second. ) : ( <>Every word a channel said, searchable to the second. )}

Download a channel’s back catalogue, transcribe it on your own hardware, publish a static site you host yourself.

Download the source Read the setup guide → {hubUrl && ( Search all archives )}
{months.length > 0 && sites.length > 0 && (
)}
{/* ── The family's numbers ─────────────────────────────────────────── */} {official && official.sites > 0 && (
)} {/* ── Official Instances ───────────────────────────────────────────── */} {/* `#instances` is where every archive's header links (common/lib/ project.ts INSTANCES_URL); `scroll-mt` is the sticky header's height (the bar, and below md the nav's rule under it), so the section's top edge lands just under it. With no sites the section is absent and the link lands on the top of the page. */} {sites.length > 0 && (

Official Instances

)} {/* ── What It Does ─────────────────────────────────────────────────── */} {/* Three short paragraphs, not three titled panels: without titles, three one-sentence items read as prose, not as a feature grid. */}

What It Does

Archilyzer downloads a channel’s videos and keeps up with new uploads. It uses the platform’s captions where they exist and transcribes the audio on your machine where they don’t.

The result is a static site of plain HTML and JSON that any file host can serve. Search covers every transcript and opens the video at the second the words were said.

It is a program you run, not a service. There is no account and nothing phones home.{" "} The docs {" "} cover setup and deployment.

); }