feat: Next 16 + Payload 3 scaffold with Kaniko CI and Swarm deploy (#1)
Some checks failed
ci/woodpecker/push/web Pipeline failed

Co-authored-by: Jason Woltje <jason@diversecanvas.com>
Co-committed-by: Jason Woltje <jason@diversecanvas.com>
This commit was merged in pull request #1.
This commit is contained in:
2026-04-14 03:21:17 +00:00
committed by jason.woltje
parent c800bef739
commit 8c5a25e976
51 changed files with 9353 additions and 0 deletions

27
src/globals/About.ts Normal file
View File

@@ -0,0 +1,27 @@
import type { GlobalConfig } from "payload";
export const About: GlobalConfig = {
slug: "about",
access: { read: () => true },
fields: [
{ name: "intro", type: "richText" },
{ name: "makerMindset", type: "richText" },
{ name: "soundtrack", type: "richText" },
{
name: "gearRefs",
type: "relationship",
relationTo: "gear",
hasMany: true,
},
{
name: "timeline",
type: "array",
fields: [
{ name: "year", type: "text", required: true },
{ name: "title", type: "text", required: true },
{ name: "note", type: "textarea" },
],
},
{ name: "portrait", type: "upload", relationTo: "media" },
],
};

33
src/globals/Contact.ts Normal file
View File

@@ -0,0 +1,33 @@
import type { GlobalConfig } from "payload";
export const Contact: GlobalConfig = {
slug: "contact",
access: { read: () => true },
fields: [
{
name: "availabilityBadge",
type: "text",
defaultValue: "Accepting new inquiries",
},
{ name: "timezoneLabel", type: "text", defaultValue: "America/Chicago" },
{ name: "directEmail", type: "email" },
{
name: "socialLinks",
type: "array",
fields: [
{ name: "label", type: "text", required: true },
{ name: "href", type: "text", required: true },
{ name: "icon", type: "text" },
],
},
{
name: "newsletterEnabled",
type: "checkbox",
defaultValue: false,
admin: {
description:
"Enable the newsletter subscribe UI. Keep false until Mautic is deployed.",
},
},
],
};

35
src/globals/Home.ts Normal file
View File

@@ -0,0 +1,35 @@
import type { GlobalConfig } from "payload";
export const Home: GlobalConfig = {
slug: "home",
access: { read: () => true },
fields: [
{ name: "heroPrefix", type: "text", defaultValue: "01 // THE MANIFESTO" },
{ name: "heroHeadline", type: "richText" },
{ name: "heroSub", type: "textarea" },
{
name: "ctas",
type: "array",
fields: [
{ name: "label", type: "text", required: true },
{ name: "href", type: "text", required: true },
{
name: "style",
type: "select",
defaultValue: "primary",
options: [
{ label: "Primary (neon)", value: "primary" },
{ label: "Secondary", value: "secondary" },
{ label: "Ghost", value: "ghost" },
],
},
],
},
{
name: "featuredProjects",
type: "relationship",
relationTo: "projects",
hasMany: true,
},
],
};

21
src/globals/Navigation.ts Normal file
View File

@@ -0,0 +1,21 @@
import type { GlobalConfig } from "payload";
export const Navigation: GlobalConfig = {
slug: "navigation",
access: { read: () => true },
fields: [
{
name: "primaryLinks",
type: "array",
fields: [
{ name: "label", type: "text", required: true },
{ name: "href", type: "text", required: true },
],
},
{
name: "footerStatusText",
type: "text",
defaultValue: "LATENCY: 42ms | CORE STATUS: NOMINAL",
},
],
};

46
src/globals/Resume.ts Normal file
View File

@@ -0,0 +1,46 @@
import type { GlobalConfig } from "payload";
export const Resume: GlobalConfig = {
slug: "resume",
access: { read: () => true },
fields: [
{ name: "summary", type: "textarea" },
{
name: "experience",
type: "array",
fields: [
{ name: "company", type: "text", required: true },
{ name: "role", type: "text", required: true },
{ name: "startDate", type: "date" },
{ name: "endDate", type: "date" },
{ name: "current", type: "checkbox", defaultValue: false },
{
name: "bullets",
type: "array",
fields: [{ name: "text", type: "textarea" }],
},
],
},
{
name: "skills",
type: "array",
fields: [
{ name: "category", type: "text", required: true },
{
name: "items",
type: "array",
fields: [{ name: "name", type: "text" }],
},
],
},
{
name: "education",
type: "array",
fields: [
{ name: "institution", type: "text", required: true },
{ name: "credential", type: "text" },
{ name: "year", type: "text" },
],
},
],
};

25
src/globals/SEO.ts Normal file
View File

@@ -0,0 +1,25 @@
import type { GlobalConfig } from "payload";
export const SEO: GlobalConfig = {
slug: "seo",
access: { read: () => true },
fields: [
{ name: "siteTitle", type: "text", defaultValue: "Jason Woltje" },
{
name: "defaultDescription",
type: "textarea",
defaultValue:
"A multidisciplinary architect of digital ecosystems. Engineering growth through technological mastery and strategic leadership.",
},
{ name: "defaultOgImage", type: "upload", relationTo: "media" },
{ name: "twitterHandle", type: "text" },
{
name: "jsonLdPerson",
type: "json",
admin: {
description:
"Schema.org Person JSON-LD. Injected verbatim into the home page <head>.",
},
},
],
};