Archilyzer · Source

archilyzer

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

commit 22c311f84e61c2b394a921cf9b62ff0f8239707f
parent 6fa22dfd068b6e3d1d650a54ea4a043c756246b7
Author: I Mean I'm Just Saying <imeanimjustsaying@kiwifarms.st>
Date:   Wed, 15 Apr 2026 23:40:39 -0400

Use fs-extra more, increase MAX_HITS, sort list

Diffstat:
Mapp/TranscriptSearch.tsx | 2+-
Mapp/page.tsx | 14+++++---------
Mapp/transcripts/[slug]/route.ts | 4++--
Mcreate-archives.sh | 4+++-
Mlib/transcripts.ts | 18+++++++-----------
5 files changed, 18 insertions(+), 24 deletions(-)

diff --git a/app/TranscriptSearch.tsx b/app/TranscriptSearch.tsx @@ -28,7 +28,7 @@ type HitGroup = { hits: Hit[]; }; -const MAX_HITS = 200; +const MAX_HITS = 500; const urlListeners = new Set<() => void>(); function subscribeUrl(cb: () => void) { diff --git a/app/page.tsx b/app/page.tsx @@ -1,8 +1,4 @@ -import { - listTranscripts, - formatDate, - formatDuration, -} from "@/lib/transcripts"; +import { listTranscripts, formatDate, formatDuration } from "@/lib/transcripts"; import { getSettings } from "@/lib/settings"; import { PlayerProvider } from "./PlayerProvider"; import TranscriptModal from "./TranscriptModal"; @@ -35,12 +31,12 @@ export default async function Home() { <TranscriptSearch transcripts={summaries} /> <section className="border-t border-zinc-200 dark:border-zinc-800 pt-4 text-sm text-zinc-500 flex gap-4"> <span>Downloads:</span> - <a href="/code.tar.gz" className="underline hover:text-zinc-900 dark:hover:text-zinc-100"> + <a + href="/code.tar.gz" + className="underline hover:text-zinc-900 dark:hover:text-zinc-100" + > code.tar.gz </a> - <a href="/transcripts.tar.xz" className="underline hover:text-zinc-900 dark:hover:text-zinc-100"> - transcripts.tar.xz - </a> </section> </div> <TranscriptModal /> diff --git a/app/transcripts/[slug]/route.ts b/app/transcripts/[slug]/route.ts @@ -2,8 +2,8 @@ import { listSlugs, loadTranscript } from "@/lib/transcripts"; export const dynamic = "force-static"; -export function generateStaticParams() { - return listSlugs().map((slug) => ({ slug })); +export async function generateStaticParams() { + return (await listSlugs()).map((slug) => ({ slug })); } export async function GET( diff --git a/create-archives.sh b/create-archives.sh @@ -2,7 +2,9 @@ git archive -9 --format tar.gz -o "./public/code.tar.gz" main cd transcripts +# Transcript archives are too big for CF pages (25mb) +# Commands commented and kept just in case # use xz over gz to get the file below 25MB -git archive --format tar main | xz -9 > ../public/transcripts.tar.xz +# git archive --format tar main | xz -9 > ../public/transcripts.tar.xz # Uncomment this line to use .tar.gz for compatability and compression speed, but at a significantly higher file size # git archive -9 --format tar.gz -o "../public/transcripts.tar.gz" main diff --git a/lib/transcripts.ts b/lib/transcripts.ts @@ -1,7 +1,6 @@ -import fs from "node:fs"; import path from "node:path"; import { parseVtt, type Cue } from "./vtt"; -import { readFile } from "fs-extra"; +import { readFile, readdir } from "fs-extra"; const ROOT = path.join(process.cwd(), "transcripts", "data"); @@ -59,17 +58,18 @@ function summarize(slug: string, meta: RawMetadata): TranscriptSummary { }; } -export function listSlugs(): string[] { - return fs - .readdirSync(ROOT, { withFileTypes: true }) +export async function listSlugs(): Promise<string[]> { + return (await readdir(ROOT, { withFileTypes: true })) .filter((d) => d.isDirectory()) .map((d) => d.name) - .sort(); + .sort((a, b) => b.localeCompare(a)); } export async function listTranscripts(): Promise<TranscriptSummary[]> { return await Promise.all( - listSlugs().map(async (slug) => summarize(slug, await readMetadata(slug))), + (await listSlugs()).map(async (slug) => + summarize(slug, await readMetadata(slug)), + ), ); } @@ -79,8 +79,4 @@ export async function loadTranscript(slug: string): Promise<TranscriptDetail> { return { ...summarize(slug, meta), cues }; } -export async function loadAllTranscripts(): Promise<TranscriptDetail[]> { - return Promise.all(listSlugs().map((slug) => loadTranscript(slug))); -} - export { formatDate, formatDuration } from "./format";