import { sql } from "@/db"; import { requireUserPage } from "@/lib/auth/guard"; import { csrfToken } from "@/lib/auth/session"; import { settingsAction } from "@/lib/admin/actions"; import { Check, Csrf, Field, Notice, PageTitle } from "@/components/admin-ui"; export default async function Settings({ searchParams }: { searchParams: Promise> }) { const sp = await searchParams; const u = await requireUserPage(); const rows = await sql`SELECT key, value FROM settings WHERE key NOT LIKE 'private.%'`; const g = (k: string) => (rows.find((r) => r.key === k)?.value ?? {}) as Record; const attr = g("site.attribution"), inst = g("site.institution"), contact = g("site.contact"); return (

Institutional attribution block

Shown in the footer and on the About page. Keep the distinction between the author's affiliation and an official institutional repository.

Contact and home

Ingestion directories

r.key === "ingest.extra_dirs")?.value as string[]) ?? []).join("\n")} rows={3} />
); }