Archilyzer · Source

archilyzer

Archilyzer
git clone https://archilyzer.pages.dev/source/archilyzer.git
Log | Files | Refs | README | LICENSE

commit 294ee65999993477479fb1106b42358747d95b81
parent 913c2a4696514cd2049aa12215fc52d204dedfa2
Author: I Mean I'm Just Saying <imeanimjustsaying@kiwifarms.st>
Date:   Mon,  5 Oct 2026 03:11:56 -0400

export: a cited home never loads the transcripts module; lint fixes; an [Unreleased] bullet for report and moment pages

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

Diffstat:
Mexport/CHANGELOG.md | 3+++
Mexport/app/(workspace)/page.tsx | 4++--
Mexport/app/components/reports/MomentArticle.tsx | 3+++
Mexport/app/components/reports/ReportArticle.tsx | 1+
Mexport/app/components/reports/parts.tsx | 5+++--
5 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/export/CHANGELOG.md b/export/CHANGELOG.md @@ -1,5 +1,8 @@ # Changelog +## [Unreleased] +- **A site can show cited reports, and every citation opens on a page of its own.** A site built with reports has a **Reports** link in its header and a page at `/reports/` listing them. A report's page has its title, subtitle, dates and the document under review with its archive links; a fact-check's tally of verdicts; the summary; the sections and their claims, each with its verdict, the document's own sentence as an image, the findings and the evidence cards; a numbered reference list; and links to download its citations as JSON and CSV. A citation in the text shows as its words plus a number: hovering it, focusing the number or tapping it once shows a card of the citation (the quote, who said it and when, a picture or the post's screenshot, and how closely the quote matched the transcript when it was checked); the words open what it cites and the number jumps to its reference. A cited span of a video or audio record opens at `/m/<channel>/<id>/<start>-<end>/`: a short clip of the span with a little context either side, the quote, the transcript lines around it, the record's title, channel and date, a link to the original at that time, and every report on the site that cites it. A cited post opens at `/m/<channel>/<id>/` with its screenshot and text. A site that publishes only its reports (`site.json` `publish: "cited"`) opens on the report index and has no search, Ask AI, downloads or duplicates. A site with no reports is unchanged. Needs a rebuild and deploy of each site. + ## [0.11.1] - 2026-10-01 - **Use with AI goes to the Archilyzer site's AI and MCP doc; the page on each site is gone.** The header's, the slide-out menu's, the footer's and Ask AI's **Use with AI** keep their label and open https://archilyzer.pages.dev/docs/ai-and-mcp/ in the same tab, on every site and the hub, where one block says how to run Claude Code against any archive (the source, `pnpm install`, `claude mcp add archilyzer`, `/ask`). `/use-with-ai/` is no longer built. `corpus.json`'s `useWithAi` names the doc; `llms.txt`'s Ask AI section lists the site's `/ask/` chat and the doc; the sitemap drops `/use-with-ai`. Needs a rebuild and deploy of each site and the hub. - **A search with a layer that has nothing to read finishes.** A "Posts" layer under a tag chip, or a "Live chat" layer where no video in the selection has live chat, read "searched N/M…" for ever and never said "No matching videos."; it now finishes at once, having matched nothing. Needs a rebuild and deploy of each site and the hub. diff --git a/export/app/(workspace)/page.tsx b/export/app/(workspace)/page.tsx @@ -1,4 +1,3 @@ -import { countTranscripts } from "yt-dlp-transcript-common/lib/transcripts"; import { isCitedSite } from "yt-dlp-transcript-common/lib/siteSchema"; import { currentSite } from "../lib/site"; import { instanceMode } from "../lib/mode"; @@ -20,10 +19,11 @@ export default async function Home() { // A cited site publishes only its reports and their moments: its home is the // report index (a static export has no redirect to send it there), and it // has no summaries manifest, so countTranscripts() — which throws without - // one — is never reached. + // one — is never reached: its module is not even loaded on this path. if (isCitedSite(settings)) { return <ReportIndex index={readReportIndex()} heading={settings.siteTitle} tagline={settings.homeTagline} />; } + const { countTranscripts } = await import("yt-dlp-transcript-common/lib/transcripts"); const count = await countTranscripts(); // The corpus data source, SearchSession, the persistent search bar, AND the diff --git a/export/app/components/reports/MomentArticle.tsx b/export/app/components/reports/MomentArticle.tsx @@ -45,6 +45,7 @@ export default function MomentArticle({ view }: { view: MomentPageView }) { {clip && view.kind === "audio" && ( <div className="flex flex-col gap-3"> {clip.poster && ( + // eslint-disable-next-line @next/next/no-img-element -- a published file of unknown size; the export serves images unoptimized <img src={clip.poster} alt="" className="aspect-video w-full rounded-lg border border-border object-cover" /> )} <audio data-evidence-clip="" controls preload="metadata" src={clip.src} className="w-full" /> @@ -56,6 +57,7 @@ export default function MomentArticle({ view }: { view: MomentPageView }) { </p> )} {view.post?.shot && ( + // eslint-disable-next-line @next/next/no-img-element -- a published file of unknown size; the export serves images unoptimized <img src={view.post.shot} alt={`Screenshot of the post${view.post.author ? ` by ${view.post.author}` : ""}`} @@ -82,6 +84,7 @@ export default function MomentArticle({ view }: { view: MomentPageView }) { {view.post.media.map((m) => m.kind === "image" ? ( <li key={m.src}> + {/* eslint-disable-next-line @next/next/no-img-element -- a published file of unknown size; the export serves images unoptimized */} <img src={m.src} alt="" className="max-w-full rounded-md border border-border" /> </li> ) : ( diff --git a/export/app/components/reports/ReportArticle.tsx b/export/app/components/reports/ReportArticle.tsx @@ -26,6 +26,7 @@ function SourceSentence({ c }: { c: SourceCitationView }) { return ( <figure data-source-sentence={c.id} className="flex flex-col gap-1.5"> {c.image ? ( + // eslint-disable-next-line @next/next/no-img-element -- a published file of unknown size; the export serves images unoptimized <img src={c.image} alt={c.quote} diff --git a/export/app/components/reports/parts.tsx b/export/app/components/reports/parts.tsx @@ -1,3 +1,4 @@ +import Link from "next/link"; import { Archive, ExternalLink } from "lucide-react"; import type { SourceView } from "yt-dlp-transcript-common/lib/report/views"; @@ -71,9 +72,9 @@ export function NotOnCitedSite({ title }: { title: string }) { return ( <EmptyState title={title}> This site publishes its reports only.{" "} - <a href="/reports/" className={textLink}> + <Link href="/reports/" className={textLink}> Read the reports - </a> + </Link> . </EmptyState> );