Unify
The screens every app has, built the same way: sign-in, first-run setup, /system and health.
One button and one notice that names the SSO — never its address. Accounts are created by the SSO, never by a form in the app. Known error codes get a friendly message.
Your private contact book.
// app/login/page.tsx
<SignInPanel
icon={<AppIcon {...ICON} size={56} />}
appName="Folio"
loginHref={`/api/auth/login?redirect=${encodeURIComponent(returnTo)}`}
error={searchParams.error}
/>After the first SSO sign-in the app asks only what it needs — with the SSO profile pre-filled — then never again. Until it is done, every private page redirects here.
Version (commit date, YYYY-MM-DD) and commit first, then runtime, packages, database and the app's own services. Never secrets or internal hosts.
// app/(app)/system/page.tsx
import { SystemInfo } from "@nashyvan/unify";
import { buildInfo } from "@/lib/build-info";
export default async function SystemPage() {
await requireViewer("/system");
return (
<>
<PageHeader title="System" description="The running build and its environment." />
<SystemInfo build={buildInfo()} sections={[runtime(), packages(), await database()]} />
</>
);
}Public and fast: the deploy script, Docker and the uptime monitor all read it. 503 when the app cannot serve.
GET /api/health → 200
{
"status": "ok",
"version": "2026-10-12",
"commit": "a1b2c3d",
"checks": { "database": "ok", "worker": "ok" }
}