Files
professional-website/src/globals/Navigation.ts
Jason Woltje 486bbc8cf8
Some checks failed
ci/woodpecker/push/web Pipeline failed
ci/woodpecker/pr/web Pipeline failed
feat(site): port stitch design system + seed-ready content model
Ports the "Technical Editorial" design sample into real TSX wired to
Payload globals/collections. Home/About/Projects (list+detail)/Contact
pages render against Payload data. Expands schemas (Home principles,
About timeline/skills/gear, Contact channels) to cover the full design
surface. Adds seed script that populates realistic AI-drafted content
for first boot. Defers writing/resume routes per scope cut.

- Design tokens: Material-3 palette + Space Grotesk/Inter typography
  scale + dot-grid + glassmorphism utilities
- Shared layout: Nav, Footer, StatusTerminal, GridOverlay, Button,
  TechChip in src/components/site
- Schemas: expand 5 globals + 6 collections; add auto-slug hook
- Seed: scripts/seed.ts — idempotent upsert for media, categories,
  6 projects, 8 gear, 3 posts, 5 globals; generates placeholder admin
- Contact: form + /api/contact route with optional Turnstile verify
- Rename TURNSTILE_SITE_KEY -> NEXT_PUBLIC_TURNSTILE_SITE_KEY (client)
- Remove dead src/components/SiteHeader|SiteFooter|StatusTerminal
2026-04-14 18:57:53 -05:00

44 lines
1.1 KiB
TypeScript

import type { GlobalConfig } from "payload";
export const Navigation: GlobalConfig = {
slug: "navigation",
access: { read: () => true },
admin: { group: "Site" },
fields: [
{
name: "primary",
type: "array",
fields: [
{ name: "label", type: "text", required: true },
{ name: "href", type: "text", required: true },
{ name: "external", type: "checkbox", defaultValue: false },
],
},
{
name: "socials",
type: "array",
fields: [
{
name: "platform",
type: "select",
required: true,
options: [
{ label: "GitHub", value: "github" },
{ label: "LinkedIn", value: "linkedin" },
{ label: "Twitter", value: "twitter" },
{ label: "Mastodon", value: "mastodon" },
{ label: "RSS", value: "rss" },
],
},
{ name: "label", type: "text" },
{ name: "href", type: "text", required: true },
],
},
{
name: "footerStatusText",
type: "text",
defaultValue: "LATENCY: 42ms | CORE STATUS: NOMINAL",
},
],
};