Initial app scaffold wired end-to-end: Payload 3.82 CMS integrated with Next 16.2 App Router (standalone output), PostgreSQL 17 adapter, Lexical rich text, Tailwind 3 with Material 3 token palette ported from the stitch technical- editorial design, self-hosted Space Grotesk + Inter via next/font, and lucide-react icons. Admin lives at /admin, REST/GraphQL at /api/*, and /api/health returns build SHA/REV for deploy verification. Seven collections (Users, Media, Categories, Projects, Posts, Gear, ContactSubmissions) and six globals (Home, About, Contact, Resume, Navigation, SEO) model the content outlined in docs/PRD.md. Multi-stage Dockerfile builds a non-root standalone runner; Woodpecker pipeline lints, typechecks, builds, audits, builds with Kaniko to git.mosaicstack.dev, scans with Trivy, and links the package. Swarm compose mirrors the mosaic-stack-website Traefik entrypoints=web pattern with www->apex redirect and immutable WEB_IMAGE_TAG. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
24 lines
700 B
TypeScript
24 lines
700 B
TypeScript
const BUILD_SHA = process.env.NEXT_PUBLIC_BUILD_SHA ?? "dev";
|
|
const BUILD_REV = process.env.NEXT_PUBLIC_BUILD_REV ?? "local";
|
|
|
|
type Props = {
|
|
location?: string;
|
|
status?: string;
|
|
className?: string;
|
|
};
|
|
|
|
export function StatusTerminal({
|
|
location = "39.0997° N, 94.5786° W",
|
|
status = "ONLINE",
|
|
className = "",
|
|
}: Props) {
|
|
return (
|
|
<div className={`flex items-center gap-3 ${className}`}>
|
|
<span className="flex h-2 w-2 rounded-full bg-tertiary shadow-[0_0_8px_#8eff71]" />
|
|
<span className="font-label text-[10px] uppercase tracking-[0.2em] text-tertiary">
|
|
LOC: {location} · STATUS: {status} · REV: {BUILD_REV} · SHA: {BUILD_SHA}
|
|
</span>
|
|
</div>
|
|
);
|
|
}
|