You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Source: docs/seo-strategy/phase-4/analysis-report.md, Gate 1 — Unblock the entity graph (the Tier C identity bundle).
Author entity migration: change site author identity from pseudonym "detached-node" to dual identity "Julian (detached-node)". Brand "detached-node" stays as the site name and pseudonym; bylines and schema use real name. Unlocks recruiter-AI surfacing and AI citation entity-graph resolution.
⚠️ Blocked on user decisions
This issue cannot start until the user confirms:
D1 — Tier C identity migration (visible byline "Julian (detached-node)", real name in schema)
D3 — Surname "Kennon" (inferred from email julian.kennon.d@gmail.com; correct if wrong)
Status label will be flipped from status:blocked → status:todo after confirmation.
Acceptance criteria
src/lib/schema/config.ts — replace AUTHOR_CONFIG with Tier C shape (full JSON in analysis report Gate 1.3): name: "Julian Kennon", expanded description, jobTitle, knowsAbout array (deliberately broad: include "Distributed systems", "TypeScript", "Full-stack software engineering" alongside agentic terms — R12 mitigation against niche-pigeonholing)
sameAs array becomes ["https://github.com/julianken", "https://www.linkedin.com/in/julian-kennon"] (LinkedIn URL is a placeholder; updated in a follow-up PR after profile is created — flag this in PR body)
src/lib/schema/types.ts — extend PersonSchema interface with optional jobTitle?: string and knowsAbout?: string[]
src/lib/schema/person.ts — spread new fields into generated Person object
New filesrc/lib/schema/profile-page.ts — generateProfilePageSchema() per analysis report Gate 1.4 (full code provided there); embeds Person as mainEntity
src/components/agentic-patterns/PatternHeader.tsx — add small byline footer (smaller, less prominent than posts)
Unit test: tests/unit/lib/schema/profile-page.test.ts covers the new generator
Schema.org validator clean on /, /about, one post, one pattern (paste rendered JSON-LD into validator.schema.org; expect zero errors). Include validator screenshot or paste in PR body
PR body includes Closes #<this-issue> + screenshots of view-source: showing new JSON-LD + note that Julian must manually update the About page Payload DB record post-merge (the DB record currently blocks the hardcoded fallback)
julianken-bot review posted with APPROVE verdict
Out of scope
Updating the About page body via Payload DB — that is Julian's manual step (the subagent does NOT touch Payload data)
Creating the LinkedIn profile — Julian's manual step (separate flow)
All other categories (B, D, E, F, J have separate issues)
Reference files
Plan: ~/.claude/plans/make-a-plan-to-peppy-swan.md — Category C
Context
Source:
docs/seo-strategy/phase-4/analysis-report.md, Gate 1 — Unblock the entity graph (the Tier C identity bundle).Author entity migration: change site author identity from pseudonym "detached-node" to dual identity "Julian (detached-node)". Brand "detached-node" stays as the site name and pseudonym; bylines and schema use real name. Unlocks recruiter-AI surfacing and AI citation entity-graph resolution.
This issue cannot start until the user confirms:
julian.kennon.d@gmail.com; correct if wrong)Status label will be flipped from
status:blocked→status:todoafter confirmation.Acceptance criteria
src/lib/schema/config.ts— replaceAUTHOR_CONFIGwith Tier C shape (full JSON in analysis report Gate 1.3):name: "Julian Kennon", expandeddescription,jobTitle,knowsAboutarray (deliberately broad: include "Distributed systems", "TypeScript", "Full-stack software engineering" alongside agentic terms — R12 mitigation against niche-pigeonholing)sameAsarray becomes["https://github.com/julianken", "https://www.linkedin.com/in/julian-kennon"](LinkedIn URL is a placeholder; updated in a follow-up PR after profile is created — flag this in PR body)src/lib/schema/types.ts— extendPersonSchemainterface with optionaljobTitle?: stringandknowsAbout?: string[]src/lib/schema/person.ts— spread new fields into generated Person objectsrc/lib/schema/profile-page.ts—generateProfilePageSchema()per analysis report Gate 1.4 (full code provided there); embeds Person asmainEntitysrc/lib/schema/index.ts— exportgenerateProfilePageSchema,ProfilePageSchemasrc/app/(frontend)/about/page.tsx:41,70— replacegeneratePersonSchema()withgenerateProfilePageSchema()inSchemaScript schema={[...]}(both branches); update importsrc/app/(frontend)/layout.tsx:44— replaceauthors: [{ name: siteName }]withauthors: [{ name: "Julian Kennon" }]src/app/(frontend)/posts/[slug]/page.tsx:125-131— add visible byline below the post title:src/components/agentic-patterns/PatternHeader.tsx— add small byline footer (smaller, less prominent than posts)tests/unit/lib/schema/profile-page.test.tscovers the new generator/,/about, one post, one pattern (paste rendered JSON-LD into validator.schema.org; expect zero errors). Include validator screenshot or paste in PR bodypnpm lint && pnpm test:unit && pnpm typecheckpassCloses #<this-issue>+ screenshots ofview-source:showing new JSON-LD + note that Julian must manually update the About page Payload DB record post-merge (the DB record currently blocks the hardcoded fallback)Out of scope
Reference files
~/.claude/plans/make-a-plan-to-peppy-swan.md— Category Cdocs/seo-strategy/phase-4/analysis-report.md— Gate 1.3 (AUTHOR_CONFIG), Gate 1.4 (ProfilePage schema), Gate 1.5 (layout.tsx), Gate 1.6 (bylines)docs/seo-strategy/phase-1/area-3-identity-eeat.mddocs/seo-strategy/phase-2/iterator-5-identity-content-crosscut.mdWorkflow
feat/seo-tier-c-identity../wt-{this-issue}-seo-tier-c-identityfeat(seo): Tier C identity migration + ProfilePage schemageneral-purpose