Four real surfaces wired to tenant-registry (settings, settings/api-keys CRUD, audit pagination, products live entitlements), five forward-looking empty states with CTAs. 56 vitest tests + 10 Playwright canaries. lib/format.ts consolidates date helpers. Refs: M10.1
18 lines
713 B
TypeScript
18 lines
713 B
TypeScript
import { auth } from "@/auth";
|
|
import { NotAuthorized, ShellEmpty } from "@/components/ShellEmpty";
|
|
import type { SessionWithExtras } from "@/lib/session";
|
|
import { canSee } from "@/lib/session";
|
|
|
|
export default async function Page() {
|
|
const session = (await auth()) as SessionWithExtras | null;
|
|
if (!canSee(session, "projects")) return <NotAuthorized />;
|
|
return (
|
|
<ShellEmpty
|
|
title="Projects"
|
|
description="Sub-tenancy: scope products by team/environment (GCP-Project-style)."
|
|
milestone="M10.1 follow-up"
|
|
details="Most tenants operate as a single implicit 'default' project. Multi-project mode activates once a product opts in via manifest.supports_projects=true."
|
|
/>
|
|
);
|
|
}
|