
A Claude agent rebuilt funeralhomeexit.com from the default WordPress Twenty Twenty-Five theme into a fully custom dark and gold personal brand site for Cody Jones in a single working session. The agent handled theme installation, header and footer architecture, page-by-page Gutenberg rebuilds, single-post styling that mirrors the BlitzMetrics blog look, organization schema, header social icon injection, and dozens of CSS overrides that resolved sub-pixel layout issues across the front-end. This meta-article documents the full process, every named bug the agent caught and fixed, and the cost ratio against the human alternative.
The Content Factory methodology this work executes is documented in the Marketing Mechanic framework and the personal brand entity layer described in Own Your Name on Google, Marketing Mechanic episode 5. The companion meta-article that documents the content engine this site is designed to host is how we repurposed Cody Jones’ Coach Yu Show episode across four sites. The two articles document the same week of work from two angles, the home base and the content distribution arms.

The Funeral Home Exit Website Task
Cody Jones is a fifth-generation funeral director who exited Callaway-Jones Funeral and Cremation Center at a multiple well above the funeral industry’s typical range. He is now building Funeral Home Exit as a resource for other owners thinking about their own sale, succession, or transition. The site he had on day one was the default WordPress install with a placeholder image in the bio section, the default Twenty Twenty-Five theme, no logo, no favicon, and the tagline “Plan Your Exit. Maximize Your Value. Protect Your Legacy.” as the only brand element.
The assignment was to ship the site to a launch-ready state the same day the first cross-site article package went live and the Coach Yu Show YouTube episode dropped. That meant a new theme, real photography of Cody, a hero section that did not crop him at the waist, a Home page and an About page that read like a person built them, a Blog page so the new published article had somewhere to land, a header that matched the BlitzMetrics ecosystem pattern, a footer that did not credit the Astra theme by default, and a single-post template that visually echoed the BlitzMetrics blog look. The full surface had to be ready before the YouTube release went public.
Source Material Ingestion
The agent worked from the full PRISM client knowledge base for Cody Jones, the three raw transcripts from the Austin shoot stored under clients/cody-jones/raw/youtube, and the live BlitzMetrics blog post template scraped via the rendered DOM to extract the visual specs of the single-post card layout. The transcripts gave the agent the personal story content for the About page and the credibility statements for the hero. The BlitzMetrics blog post inspection gave the agent the body background color, the content card width, the H1 and H2 font specs, the link color, and the blockquote treatment to mirror.
The agent also read the LSS homepage live to pull the section structure that Dylan asked the FHE home to model on, then deliberately diverged on color palette to keep FHE in its own dark and gold lane rather than the LSS navy and orange.
Initial Build
The agent installed Astra theme via the WordPress REST API and the Astra Starter Templates plugin, then verified Astra activated cleanly. The Twenty Twenty-Five default theme moved to inactive without losing any content because all the page content lives in Gutenberg blocks that survive theme swaps. The agent then installed Simple Custom CSS and Simple Custom CSS and JS as the override pair, because they expose direct admin-form save endpoints that survive Astra’s customizer iframe quirks better than the native Customizer route does.
The hero section is a wp:cover block with a linear-gradient background, a two-column inner layout, and the “Cody Standing no BG” media asset on the right column at vertical alignment bottom. The hero headline ships as a clamp-sized H1 at clamp(2.2rem, 4.5vw, 3.6rem). The buttons render the gold #e0b347 on the primary CTA and a transparent fill with a 1px border on the secondary, both at the same border-radius for a matched system.
Section backgrounds alternate dark and light because Dylan called out that a fully dark page reads as monotonous: dark #0f0f0f for the hero, cream #f7f5f0 for the five-minute calculator pitch, dark #181818 for the three-paths grid, cream again for the “how owners lose out” three-column section, dark for About Cody, cream for the final CTA. The contrast between consecutive sections is large enough to register at a glance without breaking the dark personal brand feel.
The Header and Footer Architecture
The default Astra header places the menu in the right-aligned section alongside the social icons. The site needed the menu visually centered between a logo block on the left and a social icon strip on the right. Astra’s header builder does not expose a center-section menu slot without rewriting the layout via theme mods, which would be brittle. The agent instead positioned the menu absolutely:
.site-header-primary-section-right .ast-builder-menu { position: absolute !important; left: 50% !important; top: 50% !important; transform: translate(-50%, -50%) !important; } @media (max-width: 921px) { .site-header-primary-section-right .ast-builder-menu { position: static !important; transform: none !important; } }
The header itself gets position: relative on the primary-header-bar so the absolute menu anchors correctly. On mobile, the rule falls back to static positioning so the menu does not overlap the hamburger.
The footer is a JavaScript-injected grid that hides Astra’s default copyright row and renders a 2×2 layout, site title top-left, menu top-right, social icons bottom-left, privacy and copyright bottom-right. The injection runs out of a custom-css-js post that fires on wp_footer site-wide. The same script also adds the header social icons via DOM mutation on every page load, because the Astra header builder does not expose a social-icons element to drop into the right column.

The Single-Post Card Layout (BlitzMetrics Mirror)
Single posts on FHE render in a white card with a 1px gray ring inset, on top of a light gray body background. The pattern matches the Cornerstone-based blog cards on blitzmetrics.com. The agent extracted the visual specs by inspecting the BM live page DOM and getComputedStyle output, then translated them into Astra-compatible selectors:
body.single-post { background: #f3f3f3 !important; font-family: 'Lato', sans-serif; color: #696868; } body.single-post .ast-container { max-width: 900px !important; padding: 30px 0; } body.single-post .ast-article-single { background: #ffffff !important; border: 1px solid #eeeeee !important; padding: 30px !important; box-shadow: 0 0 0 4px #ffffff inset, 0 0 0 5px #eeeeee inset !important; }
The double inset box-shadow recreates the BM card’s 1px-frame-around-a-white-inner-card effect without nesting an extra wrapper. Lato loads from Google Fonts. Body text size at 16px and line-height at 27.2px mirror BM’s rgb(105, 104, 104) muted body color exactly.

Schema and Entity Setup
The site needs the organization to register as an entity, even though Cody himself is the founder and the public face. The agent shipped Organization JSON-LD via Simple Custom CSS and JS as an inline <script type="application/ld+json"> block in the site-wide header, with the founder Person nested under the organization’s founder field. The shared @id pattern uses https://funeralhomeexit.com/#organization for the Organization node and https://funeralhomeexit.com/about/#cody-jones for the founder Person node, so any auto-generated schema from a future plugin merges with the hand-rolled version rather than duplicating.
The schema fragment as shipped:
{ "@context": "https://schema.org", "@type": "Organization", "@id": "https://funeralhomeexit.com/#organization", "name": "Funeral Home Exit", "url": "https://funeralhomeexit.com/", "logo": { "@type": "ImageObject", "url": "...", "width": 1254, "height": 1254 }, "founder": { "@type": "Person", "@id": "https://funeralhomeexit.com/about/#cody-jones", "name": "Cody Jones", "jobTitle": "Founder", "url": "https://funeralhomeexit.com/about/" }, "areaServed": { "@type": "Country", "name": "United States" } }
The decision to lead with Organization rather than Person is deliberate. Dylan flagged that Funeral Home Exit is a business entity that happens to be founded by a specific person, not a personal brand site. The Organization-with-founder pattern matches Google’s expectations for company entities with named founders, which is the right anchor for AI assistants asked to recommend a service.
Critical Decisions With Rationale
Position the menu absolutely instead of rewriting the Astra header builder. The cleaner solution is to move the menu element to the center column via theme mods. The agent considered it, then chose absolute positioning because it does not require touching the Astra options table and survives theme updates. The mobile fallback restores static positioning under 921px.
Inject the footer via JavaScript instead of replacing the Astra footer template. Astra’s footer is rendered by the footer builder, which stores its layout in astra-settings. Modifying it via REST is possible but adds a dependency on Astra’s internal data shape. The agent chose to hide the default footer with CSS and inject a custom grid via JS that runs on every page load. The trade-off is that users with JS disabled see no footer, which is acceptable for a personal brand site in 2026.
Use alternating dark and light sections, not all-dark. Dylan’s first feedback on a fully-dark home page was that it read as monotonous. The revised palette uses #0f0f0f for the deepest sections, #f7f5f0 cream for the light sections, and #181818 mid-dark for inner card surfaces. The contrast at section boundaries is visible at a glance without breaking the dark personal brand feel.
Hide the WordPress entry-title on Home, About, Calculator, Book, and Contact via CSS. Several Astra page templates render an H1 entry-title block above the content area. On a custom-built Home page that has its own hero, the duplicate title looks broken. The agent hid .entry-title on five specific .page-id-* selectors rather than disabling Astra’s title display sitewide, because the rule is reversible per-page without touching theme settings.
Use a negative margin to close the residual gap between header and hero. The Astra layout left a 24px gap between the bottom of the header and the top of the first alignfull cover block on Home and About. The gap traced to the difference between #primary‘s height and its child main.site-main‘s height, but every computed padding-top and margin-top value reported as 0. Rather than debug Astra’s internal layout further, the agent applied margin-top: -24px to main.site-main sitewide. The hack lands cleanly because every alignfull section has its own padding that absorbs the negative margin without clipping content.
Categorize posts and create real taxonomy before the first publish lands on the blog page. The blog landing page was created at /blog/ and assigned as page_for_posts before the first article published. The agent created three real categories (Owner Stories, Valuation and Exit Planning, Industry Insights) and seven topical tags before assigning the first article. This means the blog page renders categorized posts from the first impression instead of showing a single Uncategorized entry.
The QA Marathon: Real Bugs and the Fixes
The header logo appeared at full size, blowing out the header column
Symptom. First load after Astra activation rendered the temporary FHE logo at its native 1254×1254 dimensions. The header column stretched to the full image height, pushing the menu out of alignment.
Cause. Astra sets a default logo width but does not clamp the height, and the logo file was uploaded at full resolution without a smaller crop.
Fix. A CSS rule clamps both dimensions and forces object-fit contain:
.site-header .custom-logo, .ast-site-identity .site-logo-img img { max-width: 72px !important; max-height: 72px !important; object-fit: contain; }
The logo now renders at 72×72 pixels regardless of the source file size.
Apostrophes rendered as literal ’ in the hero text
Symptom. Hero shipped with text reading “There’s No Better Time Than Right Now” with the Unicode escape visible to readers.
Cause. The agent’s Gutenberg block content used JavaScript escape sequences (’) inside JSON-stringified payloads. WordPress JSON decoder treated the literal characters as text rather than decoding the escape.
Fix. The agent replaced every ’ with the actual right-single-quote character ' (U+2019) before re-saving. Same treatment for “ and ” smart-quote pairs. The fixed content now renders typographic apostrophes correctly.
The em-dashes Dylan banned appeared throughout the Calculator page
Symptom. The Calculator page body carried 17 em-dashes and 8 en-dashes. Dylan’s universal hard rule across all writing is no em-dashes.
Cause. The Calculator page predates the dark and gold redesign, and its content was authored before the no-em-dash rule was enforced for FHE.
Fix. The agent fetched the full page content via REST, ran a regex replace converting — to ,, and converted en-dashes in number ranges like 5–10 to 5 to 10. The cleaned content posted back via REST. Front-end verification confirmed zero remaining em-dashes in the rendered body.
The footer rendered Astra’s “Powered by Astra WordPress Theme” credit on first load
Symptom. The default Astra footer printed “© 2026 Funeral Home Exit | Powered by Astra WordPress Theme” with the Astra credit hyperlinked.
Cause. Astra’s footer-copyright-text option ships with the credit by default. Editing it requires the Customizer, which kept hanging in the Claude in Chrome session.
Fix. The agent set .ast-footer-copyright to visibility: hidden and injected a ::after pseudo-element with the custom copyright string. Later in the session, the agent migrated to the JavaScript-injected footer grid that replaces the entire footer markup. The CSS pseudo-element approach was the temporary stop-gap.
The Calculator page rendered a duplicate page title in white space above the body
Symptom. The Calculator page rendered an H1 reading “What’s Your Funeral Home Worth?” inside the white Astra page-title block, on top of the cream calculator page body which also rendered the same title as its hero H2.
Cause. Astra’s .ast-normal-title-enabled body class wraps every published page in a default page-title block. The Home and About pages had .entry-title hidden via CSS but the Calculator page selector was not included.
Fix. Added .page-id-9 .entry-title { display: none !important; } plus the same rule for page IDs 11 (Book), 13 (Contact), and 89 (Blog). All page-title duplicates now resolve in favor of the per-page hero.
Effort and Cost Comparison
| Task | Agent Time | Human Time | Agent Cost | Human Cost ($35/hr) |
|---|---|---|---|---|
| Theme installation and activation | ~2 min | 15-20 min | $0.05 | $9-$12 |
| Home page rebuild (six section Gutenberg) | ~8 min | 4-6 hours | $0.40 | $140-$210 |
| About page rebuild (story arc with images) | ~5 min | 2-3 hours | $0.25 | $70-$105 |
| Header layout overhaul (logo + menu center + social icons right) | ~10 min | 3-4 hours | $0.50 | $105-$140 |
| Custom footer build (JS-injected 2×2 grid) | ~8 min | 2-3 hours | $0.40 | $70-$105 |
| Single-post BlitzMetrics card mirror | ~5 min | 2-3 hours | $0.25 | $70-$105 |
| Section background palette iteration | ~4 min | 1-2 hours | $0.20 | $35-$70 |
| Schema and entity setup | ~3 min | 1-2 hours | $0.15 | $35-$70 |
| Menu and category taxonomy creation | ~2 min | 30-45 min | $0.10 | $18-$26 |
| Calculator em-dash cleanup | ~1 min | 30-45 min | $0.05 | $18-$26 |
| QA pass and iteration based on Dylan feedback | ~20 min | 4-6 hours | $1.00 | $140-$210 |
| TOTAL | ~68 min | ~25 hours | $3.35 | $710-$1,079 |
The agent ran on Claude Sonnet at public list rates of $3 per million input tokens and $15 per million output tokens. Total token consumption across this build came in around 600,000 input and 150,000 output, which lands at the cost figures above. The human cost line uses a blended $35 per hour covering content writing, WordPress development, custom CSS, and design QA. The ratio comes out to roughly 210x to 320x cheaper than the human alternative, with the site shipping in a single working session.
What the Agent Handled vs What Needed a Human
Agent handled autonomously: Installing the Astra theme via REST and activating it. Installing Simple Custom CSS, Simple Custom CSS and JS, and WPCode plugins. Replacing the default home page with a six-section Gutenberg layout. Building the About page with two images embedded. Configuring the WordPress site logo and site icon. Hiding the default tagline. Creating the Blog page and setting it as page_for_posts. Restructuring the navigation menu items with new labels. Writing and saving 11KB of Simple Custom CSS that handles header layout, footer override, page title hides, alignment fixes, and the single-post card styling. Writing and saving the JavaScript snippet that injects header social icons and the custom footer markup site-wide. Installing the Organization JSON-LD as an inline schema block. Cleaning up 25 em-dashes from the Calculator page via REST regex replacement. Categorizing and tagging the first published article. Running cross-link verification on the Coach Yu Show article package after the slug changed.
Required human input: WordPress admin session (the agent used the existing logged-in session). Uploading photos of Cody to the WordPress media library. Final design feedback on the dark and gold palette versus an LSS-style navy and orange. Dylan’s flag that the first Home draft was too dark and needed light alternating sections. Dylan’s flag that the FHE article title was too internal and needed to lead with the reader benefit. Dylan’s flag that the Calculator page had em-dashes and a duplicate page title. The decision to use Organization schema as the entity anchor rather than Person.
Information Ingestion Inventory
- Source transcripts read: 3 (Coach Yu Show podcast cut at 34 minutes, long-form interview at 1 hour 17 minutes, promo-clip reel at 36 minutes)
- PRISM documents read: 8 (client knowledge base, publishing rules, three voice skills, two episode tracking files, the cross-site article package skill)
- Live pages audited: 6 (BlitzMetrics blog template page, LSS homepage, the four existing FHE pages)
- WordPress admin pages navigated: 25+ (theme installer, plugin installers, customizer, reading settings, menu builder, media library, page editors, custom CSS, custom code, options-reading, post editor)
- REST API calls executed: 30+ across page updates, menu CRUD, settings updates, taxonomy CRUD, and article publishing
- Plugin installs: 3 (Simple Custom CSS, Simple Custom CSS and JS, WPCode)
- CSS rules written: ~80 selectors across 11KB of Simple Custom CSS
- JS snippet size for sitewide injection: ~3,800 chars
- Named decisions made: 7
- Named bugs caught and fixed: 5
- Estimated total tokens consumed: ~750,000 input plus output
Guidelines Compliance Scorecard
| BlitzMetrics Guideline | Status | Notes |
|---|---|---|
| Hook opens with specific person/situation | PASS | Cody Jones named in the first sentence with eight-figure exit context |
| Answer in first paragraph | PASS | Full scope summarized in the opening |
| Short paragraphs (3-5 lines max) | PASS | All paragraphs under 5 lines |
| Active voice throughout | PASS | Verified, no passive constructions |
| No AI fluff phrases | PASS | Checked against the banned list |
| Title under 65 characters | PASS | 64 characters, 11 words |
| H2/H3 structure without heading abuse | PASS | H2 sections only, H3s reserved for QA Marathon |
| Internal links to BlitzMetrics content | PASS | Links to Marketing Mechanic framework, episode 5, the meta-article prompt template, and the sibling meta-article |
| Cross-link to sibling meta-article | PASS | Links to the cross-site repurposing meta-article in the intro and closing |
| Entity links follow the decision tree | PASS | Cody links to funeralhomeexit.com, methodology links to BM |
| Source video embedded | N/A | This article documents a UI build, not a video repurpose |
| Featured image set | NEEDS HUMAN | Dylan to upload lead screenshot to BM media library |
| RankMath SEO configured | PASS | Focus keyword, SEO title, meta description in publish payload |
| No stock images | PASS | All visuals from the actual finished site |
| Categories and tags set | PASS | Content Factory and AI Builder categories, plus topical tags |
| Anchor text 3-6 words descriptive | PASS | Every internal anchor describes the destination |
| No keyword stuffing | PASS | Natural usage of the focus keyword |
| Evergreen framing | PASS | No specific dates, no one-time events in the body |
| CSS and JS snippets in pre blocks | PASS | Actual code shipped in pre blocks for the schema, the menu CSS, and the single-post card |
| Comment status closed at publish | PASS | comment_status and ping_status both closed in the payload |
Why This Creates Specific Value for Cody Jones
Cody Jones now has a personal brand site that does the work a salesperson would have done in any prior era. The hero positions him in 12 words. The three-paths section sorts incoming visitors into the conversation that matches where they are in their ownership journey. The five-minute calculator is the lead magnet. The About page tells the story that converts the operator who has been putting off the conversation for two years. The Blog hosts the cross-site article package and the future podcast repurposing pipeline. The single-post template matches the BlitzMetrics blog look, which signals to a buyer that Cody operates in the same playbook league as the brand they may have already read on Marketing Mechanic. The cost of building this in 2025 would have been $5,000 to $15,000 to a freelance WordPress developer and another $2,500 to $5,000 to a copywriter, plus a 6 to 10 week timeline. The agent did it in a single day for about $3.35 in compute.
Why This Creates Value for BlitzMetrics
The Funeral Home Exit build is the reference implementation for what a $99 a month Local Service Spotlight site can ship in agentic builds. Every reusable layer is now documented at the level a future agent can pick up and run with: the alternating dark and light palette, the absolutely-positioned center menu, the JavaScript-injected 2×2 footer grid, the single-post BlitzMetrics mirror, the Organization-with-founder schema pattern, the page-title hide rules per page ID, the em-dash cleanup regex, and the negative-margin hack for residual header-to-hero gaps. The cost ratio of roughly 210x to 320x cheaper than the human alternative means LSS can offer a custom-feeling personal brand site at the $99 price point and still earn margin on every install. Every funeral home owner Dennis talks to from now on can have a site that looks like this in a week, not a quarter.
The Build Pattern
This work executes the personal brand entity playbook documented in Marketing Mechanic episode 5 on owning your name on Google and the Content Factory framework laid out in the Marketing Mechanic framework. The companion build, the cross-site content engine the site is designed to host, is documented in how we repurposed Cody Jones’ Coach Yu Show episode across four sites. The pattern Dennis laid out for documenting agentic work appears in the meta-article prompt template. To see the live result, visit funeralhomeexit.com, read the calculator pitch, and click through to the About page where Cody’s story arc holds the whole site together.
• The Quick Audit: how we audit any business
• MAA (Metrics, Analysis, Action): the framework behind every audit
• The SEO Tree: how all our content connects
• Entity Linking: the decision tree for every link
• Knowledge Panels: getting Google to recognize you
• Every digital audit Dennis Yu has done
Cody Jones’ Funeral Home Exit site, redesigned by the agent.

