Intelligence

Artifacts

Browse the repository, read documents, and manage the governance folders. Source, runtime, and infrastructure are read-only.

Repository
README.md
CONSTITUTION_COMPLIANCE_AUDIT_V1.mdREADME.md
repositories/aaf-holdings/hq01/app/assets/page.tsx
2.1 KB
import { Box } from "lucide-react";
import { PageHeader } from "@/components/layout/page-header";
import { Card } from "@/components/ui/card";
import { EmptyState } from "@/components/shared/empty-state";
import { AssetList } from "@/components/assets/asset-list";
import { AssetFilters } from "@/components/assets/asset-filters";
import { searchAssets, assetFacets } from "@/lib/assets/ledger";

/**
 * Asset Ledger (PASS M5) — the organization's durable assets, each with exactly
 * one originating mission. Assets reference files and outlive their mission.
 */

export const dynamic = "force-dynamic";
export const metadata = { title: "Asset Ledger" };

export default function AssetLedgerPage({
  searchParams,
}: {
  searchParams: Record<string, string | undefined>;
}) {
  const filters = {
    mission: searchParams.mission,
    type: searchParams.type,
    repository: searchParams.repository,
    executive: searchParams.executive,
    tag: searchParams.tag,
    status: searchParams.status,
  };
  const assets = searchAssets(filters);
  const facets = assetFacets();
  const filtered = Object.values(filters).some(Boolean);

  return (
    <div>
      <PageHeader
        eyebrow="Intelligence"
        title="Asset Ledger"
        description="Every durable asset the organization owns, with one originating mission and a permanent, navigable lineage."
      />

      <Card className="mb-5 p-4">
        <AssetFilters facets={facets} current={filters} />
      </Card>

      {assets.length === 0 ? (
        <EmptyState
          icon={Box}
          title={filtered ? "No assets match" : "No assets yet"}
          description={
            filtered
              ? "Adjust the filters above."
              : "Register a report's produced artifacts to add them to the ledger."
          }
          hint="/srv/aaf/assets/ASSET-000001/"
        />
      ) : (
        <Card className="p-5">
          <div className="mb-2 text-[12px] text-muted-foreground">
            {assets.length} asset{assets.length === 1 ? "" : "s"}
          </div>
          <AssetList assets={assets} />
        </Card>
      )}
    </div>
  );
}

root · /srv/aaf