import Link from "next/link"; import { getRepos, BackendOffline, type RepoInfo } from "@/lib/api"; import { timeAgo } from "@/lib/format"; import Offline from "@/components/Offline"; // Always render against the live backend — never bake an offline state in at build time. export const dynamic = "force-dynamic"; export default async function Home() { let repos: RepoInfo[]; try { repos = (await getRepos()) ?? []; } catch (e) { if (e instanceof BackendOffline) return ; throw e; } return ( <>

Code that outlives the platforms.

Every repository here lives on hardware its owner controls. Browse anything, clone everything — writing is reserved for one person.

{repos.length === 0 ? (

The archive is empty — the first git push will fill it.

) : (
{repos.map((r) => (

{r.name}

{r.empty ? "empty" : timeAgo(r.lastCommit)}

{r.description || "no description"}

{r.default}

))}
)} ); }