Personal Brand Website Engineering Spec: Claude Skill MD File

Most personal brand websites are glorified business cards. They have a headshot, a bio, maybe a contact form, and they do absolutely nothing for discoverability. Meanwhile, the actual proof of authority, the videos, podcasts, stories, and speaking events, lives scattered across YouTube, Apple Podcasts, LinkedIn, and Google Business Profile with no structured connection between any of it.

This is a Claude skill file that contains a complete engineering specification for building a personal brand website on WordPress that actually works for Google.

Dennis Yu‘s personal brand website

Performance as per Google’s own tool

It is built around our platform and takes an entity-first approach: everything ties back to a Person or Organization, every piece of content maps to topics and offers, and every page ships with validated JSON-LD schema.

Drop it into a Claude Project and it becomes your technical co-pilot for the entire stack. The spec covers system architecture, the WordPress data model with custom post types and taxonomies, ingestion connectors for six platforms, transcription and enrichment pipelines, video-to-article repurposing, JSON-LD schema generation, internal linking logic, performance targets, analytics instrumentation, editorial workflows, API design, security, and a prioritized backlog. It is not a theme. It is the engineering blueprint underneath one.

To use it, create a new Claude Project at claude.ai, add the Markdown below as a skill file under Project Knowledge, and start asking Claude to help you build, audit, or extend your personal brand site.

The skill file

Copy everything below and add it to your Claude project as a skill file.

skill: Personal Brand Website: Engineering Spec

Goal

Turn raw proof (videos, podcasts, reviews, talks) into structured, machine-readable authority that ranks in Google, earns a Knowledge Panel, and drives leads. WordPress is the rendering and editorial layer; the custom plugin suite handles ingestion, structuring, schema, and distribution.

Design principles

Entity-first: everything ties to a Person and/or Organization. Opinionated structure over visual templates. Source of truth lives in WordPress (posts + taxonomies + postmeta) with immutable IDs. Automate the boring: ingestion, transcripts, schema, sitemaps, internal links, social posts. Measure or it didn’t happen: GA4, GSC, GBP, YouTube Analytics feed into a unified KPI layer. SEO-safe by default: canonical rules enforced, noindex traps guarded, schema linted.

1. System architecture

Core stack

Managed WordPress (PHP 8.2+, MariaDB/Aurora MySQL), NGINX/HTTP3, PHP-FPM. Custom plugin monorepo: blitz-pb-engine with modules:

ingest/ handles connectors for YouTube, Apple/Spotify, Instagram, LinkedIn, GBP, and Google Sheets. transcribe/ provides a Whisper or Amazon Transcribe adapter. repurpose/ runs the video-to-article pipeline and snippet generator. schema/ builds and validates JSON-LD. linker/ manages the internal linking graph. sitemaps/ generates video, news, and standard sitemaps. kpis/ pulls data from GA4, GSC, GBP, and YouTube into dashboards. api/ exposes a REST API and WP-CLI interface. jobs/ handles queues and retries.

Infrastructure

Storage uses AWS S3 for media and transcripts, CloudFront CDN for delivery, and imgproxy for image transforms. Queue and cron runs on WP-Cron plus server cron, with optional SQS for bursty ingestion. Cache layers include FastCGI plus Redis object cache and page CDN cache via CloudFront or Cloudflare. Logs and observability run through CloudWatch plus WP debug logs, with optional OpenTelemetry. An optional headless setup uses WPGraphQL feeding a Next.js or Remix front-end, though the default is a server-rendered theme.

2. WordPress data model

Custom post types (CPTs)

CPTDescription
personThe human brand entity (1 primary required)
organizationCompany/brand entity
asset_videoYouTube/native video
asset_podcastApple/Spotify episode
asset_articleLong-form post auto-generated from video/podcast
testimonialReview/UGC (text or video)
offerProductized service, package, price anchor
topic_hubTopic Wheel nodes (5 to 7 recommended)
event_speakingTalks, panels, media appearances

Taxonomies

TaxonomyDescription
topic (hierarchical)Matches topic_hub pages (term ≈ entity topic)
personaICP tags (e.g., “Wisconsin homeowner”, “Roofing GM”)
geoCity/region/state (used for GBP + local SEO)
platformSource systems (YouTube, IG, LinkedIn, Apple, Spotify)

Key postmeta fields

entity.person_id and entity.org_id serve as foreign keys. source.url, source.platform_id, and source.published_at track origin. transcript.s3_uri and transcript.word_count reference transcript storage. repurpose.status tracks the pipeline state: queued | draft | needs_review | published. schema.type maps to VideoObject, PodcastEpisode, Review, FAQ, or Event. kpi.impressions, kpi.ctr, and kpi.entity_coverage store performance data.

Relationship rules

Asset connects to Topic via the topic taxonomy with a relevance score from 0 to 1. Asset connects to Offer via postmeta offer_ids (array). Testimonial requires an Offer link; Persona is optional. Person connects to Organization via primary_org_id. The rule: no orphan assets. Every asset_* must map to at least one topic or offer.

3. Ingestion connectors

YouTube

Method: YouTube Data API v3 by Channel ID; webhook via PubSubHubbub if enabled. Fields: videoId, title, description, tags, publishedAt, thumbnails, duration. Creates asset_video; thumbs fetched to S3; thumb.s3_uri stored.

Podcasts (Apple/Spotify)

Method: RSS polling plus Spotify API enrichment. Fields: guid, title, summary, audio URL, pubDate, duration. Creates asset_podcast; audio enclosures optionally proxied to S3.

Instagram / LinkedIn

Method: Graph API (user auth) for media and captions; LinkedIn shares via REST. Creates asset_video (if video) or asset_article (short form). Canonical remains the source network; rel=canonical applied if mirrored.

GBP (Google Business Profile)

Method: GBP API for reviews and posts. Reviews become testimonial (rating, reviewer initials); GBP posts become asset_article with geo tags.

Google Sheets bulk upload

Method: Sheet columns [Title, URL, Type, Topic, Offer, Date, Notes]. Creates CPTs; idempotent by URL hash.

Validation and idempotency

Source URL hash unique index prevents duplicates. Retries use exponential backoff; poison queue handles persistent failures.

4. Transcription and enrichment pipeline

Step 1, Transcribe: Whisper (local) or Amazon Transcribe (batch) produces SRT/VTT plus JSON. Step 2, Chunking: semantic chunking at 500 to 1000 tokens with timestamps. Step 3, Summaries: TL;DR, key quotes, entities (People, Orgs, Places, Products) written to postmeta. Step 4, Highlights extraction: candidate H2s; FAQ pairs (Q/A) scored. Step 5, Compliance: optional profanity filter and PII redaction. Step 6, Storage: transcripts in S3 at transcripts/{postID}.json; short excerpt in postmeta.

5. Repurposing: video to article generator

State machine (repurpose.status)

queued means a new asset is eligible. draft means an AI draft has been created. needs_review means an editor pass is required. published means it has been converted to asset_article and indexed.

Article blueprint

H1 comes from the value proposition; byline is the Person. Intro is benefit-led, body sections are built from highlights. Pull-quotes and callouts are auto-placed every 300 to 400 words. FAQ (2 to 5 Q/A) is included only if confidence meets the threshold. CTAs include the primary offer plus city and persona variants.

First mention of each Topic links to topic_hub. If an Offer is mentioned, it links to the offer page. If a testimonial exists for that Offer, a sidebar card is injected.

6. Schema (JSON-LD) generation

Global (on home/about)

Person, Organization, WebSite plus SearchAction.

Per content type

CPTSchema type
asset_videoVideoObject (+ UploadDate, Duration, ThumbnailUrl, Transcript, about, mentions)
asset_podcastPodcastEpisode with isPartOf PodcastSeries
asset_articleArticle / BlogPosting with Author (Person), about, mentions
testimonialReview with itemReviewed (Offer/Organization), reviewRating
event_speakingEvent (location, startDate, organizer)
offerService / Product (price, areaServed, offers)

Validation: build and lint server-side; block publish if fatal schema errors.

7. Internal linking and navigation rules

Topic hubs list the top 5 assets by topic_score * recency. Contextual links target the first occurrence per section, with a max of 1 link per 150 words to avoid spam. Breadcrumbs follow the pattern Entity → Topic → Asset. Canonicalization: if the source is external (YouTube/LinkedIn), the article is canonical unless 80% text overlap exists, in which case rel=canonical points to the source. Sitemaps are segmented into /sitemap-assets.xml, /sitemap-topic-hubs.xml, and /video-sitemap.xml.

Asset scoring formula

score = (0.6 * topic_relevance) + (0.3 * freshness_decay) + (0.1 * engagement)

8. Performance and Core Web Vitals (CWV)

SSR theme with minimal JS; defer non-critical scripts. Critical CSS inlined per template; font-display: swap. Lazy-load images and video; responsive srcsets. Redis object cache; full-page cache via CDN. Targets: LCP < 2.0s, INP < 200ms, CLS < 0.05 on 4G mid-tier.

9. Analytics and KPIs

Data sources

GA4 (events), GSC (queries/CTR), GBP (impressions/calls), YouTube (views/watch time), server logs.

Collected KPIs

Branded search impressions (GSC). Branded CTR (GSC). Entity coverage percentage (assets with Topics, Offers, schema OK). Review velocity (GBP, per month). Lead events (GA4: generate_lead, submit_form, tel: clicks).

Storage and surfacing

Pull nightly via cron into WP kpis module tables; cache last 30/90 days. Admin dashboard cards plus sparkline.

10. Editorial workflow

Roles: Creator, Editor, Publisher, Engineer. Ingestion auto-creates asset_* in queued. Editors see the queue with confidence scores and suggested titles.

WP-CLI commands:

wp blitz ingest youtube --channel=UCxxxxx
wp blitz transcribe run --post=123
wp blitz repurpose build --post=123
wp blitz publish --post=123

11. REST API endpoints

Base: /wp-json/blitz/v1

EndpointDescription
POST /ingestBody: {url, type} enqueue a single asset
POST /repurpose/{post_id}Build article draft
POST /publish/{post_id}Publish with validations
GET /kpisRange filters, aggregates
GET /entitiesList Persons/Orgs with linkage

Auth: Application Passwords or JWT; rate-limit per IP/token.

12. Security, privacy, and compliance

Principle of least privilege for API tokens (YT/GBP/Meta/LinkedIn). Secrets managed via environment vars plus AWS Secrets Manager. Reviewer initials only for GBP reviews (no doxxing); allow redaction. Backups: DB (hourly PITR), uploads/S3 (versioned), configs in Git. OAuth permissions may expire so token refresh plus alerts are implemented. Podcast RSS inconsistencies (GUID reuse) use URL hash fallback. If creators delete source videos, preserve canonical and 410 accordingly.

16. Backlog / next up (prioritized)

  1. GBP Post Scheduler from inside WP with UTM tagging
  2. Auto-FAQ generator with confidence thresholds plus human-in-the-loop
  3. Entity Graph UI: visualize Person/Org/Topic/Asset relationships
  4. OpenSearch integration for on-site semantic search
  5. Tuned Whisper with diarization plus speaker labels
  6. Partner Mentions Miner: discover likely podcasts/press to pitch
  7. Programmatic Local Pages: geo x offer grid with canonical rules
  8. Video Chapters to How-To/Clip pages with structured data
  9. GSC anomalies detector (alerts on CTR/impressions drops)
  10. Multi-tenant hardening for agency roll-outs (namespaces, caps)

TL;DR for engineers

WordPress is the CMS and permissioned UI, but the core win is the structured entity/topic model, automated ingestion-to-repurpose pipelines, and first-class schema plus internal linking tuned for Google’s entity understanding. This is not a theme. It is an opinionated content OS for personal brands.

Scroll to Top