commit 9d3ab18c93127b1740529654e0c7e3c797eae227
parent c7d44b39d313eabcc021b53f9d469a2fbae4e3ba
Author: I Mean I'm Just Saying <imeanimjustsaying@kiwifarms.st>
Date: Fri, 25 Sep 2026 19:12:23 -0400
export: C1 review fixes — hub-summary.json ignored, the H1 true with no official instances, the add-archive sentence said once and scoped to this browser, official cards fall back to the homepage's series colour
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Diffstat:
3 files changed, 34 insertions(+), 21 deletions(-)
diff --git a/.gitignore b/.gitignore
@@ -68,6 +68,7 @@ yarn-error.log*
/export/public/_headers
/export/public/sw.js
/export/public/hub-sites.json
+/export/public/hub-summary.json
/export/public/corpus.json
/export/public/llms.txt
/export/public/robots.txt
diff --git a/editor/CHANGELOG.md b/editor/CHANGELOG.md
@@ -1,7 +1,7 @@
# Changelog
## [Unreleased]
-- **The hub looks and reads like the homepage, and its list of archives is "Official instances" with the homepage's numbers.** The hub now opens in the project's own dark look (the *Archilyzer* theme), as the homepage does; published sites keep theirs. Its front page opens on one sentence, "60,840 hours of speech from every official archive, searchable at once.", and one paragraph. **Official instances** has a card for each built-in archive: its name linking out, its description, and its channels, recordings, transcripts and hours, the same figures the homepage shows. Archives a visitor adds are listed under **Archives you added**, with their channel count and a Remove button, above the add form. The line under the cards reads "Searching 5 archives · … channels · … transcripts right now." and counts what the browser actually loaded, added archives included. The figures come from a new file the hub build writes, `hub-summary.json`, made by the same code that writes the homepage's summary. A hub built without it (an older build, or a machine with no index) shows the cards without figures. "The shelf", "Your archives" and the Member/Added badges are gone. Needs a rebuild and deploy of the hub.
+- **The hub looks and reads like the homepage, and its list of archives is "Official instances" with the homepage's numbers.** The hub now opens in the project's own dark look (the *Archilyzer* theme), as the homepage does; published sites keep theirs. Its front page opens on one sentence, "<hours> hours of speech from every official archive, searchable at once." (the official instances' hours, as on the homepage), and one paragraph. **Official instances** has a card for each built-in archive: its name linking out, its description, and its channels, recordings, transcripts and hours, the same figures the homepage shows. A card whose site sets no accent colour takes the homepage card's colour for that site. Archives a visitor adds are listed under **Archives you added**, with their channel count and a Remove button, above the add form; they are kept only in that visitor's browser. The line under the cards reads "Searching 5 archives · … channels · … transcripts right now." and counts what the browser actually loaded, added archives included. The figures come from a new file the hub build writes, `hub-summary.json`, made by the same code that writes the homepage's summary. A hub built without it (an older build, or a machine with no index) shows the cards without figures. "The shelf", "Your archives" and the Member/Added badges are gone. Needs a rebuild and deploy of the hub.
- **The Archilyzer theme's third chart colour is no longer the "gone" red.** It is now a green (`#5a9e3a` light, `#86c86a` dark). The homepage chart and cards draw the third official instance in it, and a red layer read as "recordings gone". Needs a rebuild and deploy of the homepage.
- **The yt-dlp clip command is back on sites with transcript downloads turned off.** Turning off `transcriptDownloads` (site.json, or the hub's homepage.json) hid three buttons in the transcript viewer. One of them, the yt-dlp button, only copies a `yt-dlp --download-sections` command for a marked clip to the clipboard and serves no file, so it is not a download. It now shows on every site. The switch still hides the Download menu (txt / srt / json) and Copy MD. The site and hub form labels in the editor say so. No setting changed; a site picks this up at its next build and deploy.
- **Export sites: a search restored from the last visit waits for you.** Opening a site (or `/ask`, or the hub) still loads the last query, the filters and the profile from the browser, but no longer runs the search on the first page of a visit; moving between pages after a search keeps it running, so the hub's chat still grounds in the search just done on its front page. The results show the video listing under those filters, and the bar says "Press Enter or click Search to apply", as for any unapplied edit. Search or Enter runs it; so does loading a profile. A link with a query in it (`?qt=`) still runs on arrival. Going straight to the hub's `/ask` in a new visit leaves the restored search held, and that page has no search bar: search on the hub's front page first. The restored search used to re-fetch transcript shards (up to 8 MB each) on every visit to a device that had not cached them. Needs a rebuild and deploy of every export site.
diff --git a/export/app/components/hub/ArchiveShelf.tsx b/export/app/components/hub/ArchiveShelf.tsx
@@ -13,10 +13,13 @@
// file behind it, so its card shows only the live channel count its
// descriptor gave. The live federation total is HubStats, under the shelf.
//
-// Each card wears its archive's OWN accent (tokens.css, the archilyzer family:
-// the tool has no colour, the archives do). The homepage stripes its cards by
-// chart series instead, because there each card is also a chart legend; the
-// hub has no chart, so it keeps the archive's identity.
+// Each card wears its archive's OWN accent when the site sets one (tokens.css,
+// the archilyzer family: the tool has no colour, the archives do). An official
+// instance that sets none falls back to seriesColor() at its index in the
+// summary's `sites` — the order the homepage's ArchiveCards and growth chart
+// use — so a hub card and its homepage card wear the same colour. With no
+// summary it is the card's own index. An added archive with no accent wears
+// the family's signal colour.
import { X } from "lucide-react";
import { Badge } from "yt-dlp-transcript-common/components/ui/badge";
@@ -28,6 +31,7 @@ import {
hubSummarySiteFor,
type HubSummarySite,
} from "yt-dlp-transcript-common/lib/hubSummary";
+import { seriesColor } from "yt-dlp-transcript-common/lib/homepageChart";
import AddArchive from "./AddArchive";
import { useHubSummary } from "./useHubSummary";
@@ -50,16 +54,18 @@ function ArchiveCard({
site,
figures,
index,
+ fallbackAccent = FALLBACK_ACCENT,
onRemove,
}: {
site: RegisteredSite;
+ fallbackAccent?: string;
// Official: the build-time figures (null until/unless the summary loads).
// Added: undefined — the card shows the descriptor's channel count only.
figures?: HubSummarySite | null;
index: number;
onRemove?: (origin: string) => void;
}) {
- const accent = site.accent || figures?.accent || FALLBACK_ACCENT;
+ const accent = site.accent || figures?.accent || fallbackAccent;
const href = site.siteUrl || site.origin;
const description = figures?.siteDescription;
const channels =
@@ -155,12 +161,17 @@ export default function ArchiveShelf() {
hours of speech from every official archive, searchable at once.
</>
) : (
- <>Every official archive, searchable at once.</>
+ <>
+ {official.length > 0
+ ? "Every official archive, searchable at once."
+ : "Every archive you add, searchable at once."}
+ </>
)}
</h1>
<p className="max-w-2xl text-[1.0625rem] leading-relaxed text-muted-foreground">
- One search runs across all of them, in your browser. Any Archilyzer
- archive can join it: add its address below.
+ One search runs across all of them, in your browser. You can add
+ any other Archilyzer archive to your own search, below. It stays in
+ this browser until you remove it.
</p>
</div>
@@ -173,14 +184,19 @@ export default function ArchiveShelf() {
The archives I run. Anyone can run their own.
</p>
<ul className={GRID}>
- {official.map((site, i) => (
- <ArchiveCard
- key={site.origin || site.siteId}
- site={site}
- figures={hubSummarySiteFor(summary, site)}
- index={i}
- />
- ))}
+ {official.map((site, i) => {
+ const figures = hubSummarySiteFor(summary, site);
+ const at = figures ? (summary?.sites.indexOf(figures) ?? -1) : -1;
+ return (
+ <ArchiveCard
+ key={site.origin || site.siteId}
+ site={site}
+ figures={figures}
+ index={i}
+ fallbackAccent={seriesColor(at >= 0 ? at : i)}
+ />
+ );
+ })}
</ul>
</div>
) : (
@@ -207,10 +223,6 @@ export default function ArchiveShelf() {
</ul>
</>
)}
- <p className="mb-3 max-w-xl leading-relaxed text-muted-foreground">
- Add an archive by its address. It stays in this browser until you
- remove it.
- </p>
<AddArchive />
</div>
</section>