Every blog post follows this exact workflow. No shortcuts. No skeleton content. Every step has an owner, a deliverable, and a quality gate. If it doesn't pass, it doesn't publish.
Check SEMRush, Google Trends, upcoming events (EPA Fix a Leak Week, National Sewer month, KC weather patterns), or a recurring question from customers.
EPA Fix a Leak Week runs March 17-23. Keyword: "fix a leak week" + "leak detection overland park." Seasonal timing, educational angle, ties to our leak repair service page.
Every blog must target at least 1 persona. Use the persona signal words and mindset from bsp_persona_analysis.json.
Primary: Maintenance Mike/Maria (routine homeowner, prevention mindset). Secondary: Emergency Eric (discovers a leak mid-article).
Nexus generates the brief JSON with: title, slug, target persona, keyword, competitive angle, meta description, design brief for Audrey, and social distribution copy (short/medium/long).
blog_draft_{slug}.json in /opt/nexus/nexus/scripts/output/Not a skeleton. Not an outline. Full paragraphs with depth. Every section must be 80+ words. The blog quality gate will reject anything thinner.
Every blog must include verifiable data, not generic filler. Sources:
Pulled: 4 EPA stat cards, WaterOne cost calculator (5 leak types), leak severity table (7 types with repair vs. ignore cost), 4 real customer review cards, KC seasonality data (freeze-thaw cycles, spring rain, home ages).
At least 1 quote from Kalen or a tech. Real field observations, not marketing language. Send to Kalen for approval if fabricated.
"By the time most homeowners notice a leak, the damage has already been building for weeks or months. A $200 repair turns into a $5,000 problem.", Kalen Barker
Every blog must include a FAQ section with itemscope itemtype="https://schema.org/FAQPage" markup. These show as rich results in Google and capture "People Also Ask" traffic.
Every blog must link to at least 3 BSP service pages. Primary: the service hub page. Secondary: related services. Always include /sewer-line-repair/ (our #1 revenue driver).
Run python3 nexus_blog_quality_gate.py --file blog_draft_{slug}.json before proceeding. ALL blockers must pass.
Wrap the content in the BSP site template: navy/yellow branding, header with nav, breadcrumbs, trust bar, footer. This is what it will look like on callbrightside.com. Navy and yellow only. No off-brand colors.
#1c1860, Yellow #fdfe36, White, GraysUpload to /opt/nexus/nexus/scripts/output/playbooks/ on the VM. Preview URL: morpheus.callbrightside.com/documents/{filename}.html
Create a plain-text version broken into labeled sections with "Your call:" prompts under each one. Include the morpheus preview link at the top so he can see the visual version too.
Update the HTML and JSON draft with any changes. Re-run quality gate. Re-deploy to morpheus.
Audrey gets: the morpheus preview link (so she sees the content in context), the design brief from the JSON, and specific requests for graphics.
Hero: water/pipe theme with EPA branding tie-in. Stat cards as shareable graphics. Cost calculator infographic. Two-tier pricing cards (if approved). Social: "5 leak checks you can do right now" carousel for Instagram.
Audrey uploads completed graphics to the shared Google Drive folder. Robert downloads, integrates into the HTML, and re-deploys to morpheus for final visual check.
Bright Side Plumbing > Blog Assets > [blog-slug]Blog Assets/epa-fix-a-leak-week/hero-1200x628.png (OG image / WordPress featured image)hero-1200x1200.png (social square)hero-1080x1920.png (Instagram/Facebook story)infographic-cost-calculator.png (if applicable)social-carousel-01.png through -05.png (if applicable)source-files/ (Figma exports, PSDs, or Canva links)#1c1860, Yellow #fdfe36, White, Grays
1. Log into callbrightside.com/wp-admin
2. Posts > Add New
3. Set title (H1 from the blog)
4. Switch to Oxygen editor or Code view
5. Paste the full HTML content (everything inside the <main> tags from the branded template)
6. Set slug: /epa-fix-a-leak-week/
7. Set category: Learning Center
8. Set featured image (Audrey's hero graphic)
9. Set meta description via RankMath
10. Set OG image in RankMath Social tab
11. Add FAQPage schema in RankMath Schema tab (or verify it's in the HTML)
12. Preview in new tab. Check mobile and desktop.
13. Publish
1. Visit the live URL. Check desktop + mobile.
2. Test all internal links (click each one).
3. Test phone number links (tap on mobile).
4. Run Google Rich Results Test on the URL (check FAQPage schema).
5. Submit URL in Google Search Console for indexing.
6. Check GTM is firing on the new page (GCLID capture, GA4, conversion tags).
7. Verify RankMath SEO score is green.
Every image Audrey delivers MUST follow this naming convention. Google reads file names for image SEO. A file named "IMG_3847.jpg" tells Google nothing. A file named "sewer-line-replacement-overland-park-bright-side-plumbing.jpg" tells Google exactly what it is.
[service]-[description]-[location]-bright-side-plumbing.[ext]| Type | Good Name | Bad Name |
|---|---|---|
| Hero image | sewer-repair-hero-kansas-city-bright-side-plumbing.jpg | hero-1200x628.jpg |
| Before/after | sewer-line-damage-before-repair-overland-park.jpg | IMG_3847.jpg |
| Infographic | epa-fix-a-leak-week-infographic-water-waste-costs.png | infographic-v2-final.png |
| Social graphic | drain-cleaning-tips-instagram-carousel-01.png | social-post.png |
| Team photo | kalen-barker-master-plumber-bright-side-plumbing.jpg | kalen.jpg |
| Camera footage | sewer-camera-inspection-root-intrusion-lenexa.jpg | camera-screenshot.jpg |
2026/Blog Posts/epa-fix-a-leak-week/
epa-fix-a-leak-week/
├── epa-fix-a-leak-week-hero-bright-side-plumbing.jpg (1200x628, OG/blog hero)
├── epa-fix-a-leak-week-hero-square.jpg (1200x1200, social square)
├── epa-fix-a-leak-week-hero-story.jpg (1080x1920, IG/FB story)
├── epa-fix-a-leak-week-infographic-water-waste-costs.png
├── epa-fix-a-leak-week-carousel-01-meter-test.png
├── epa-fix-a-leak-week-carousel-02-toilet-test.png
├── epa-fix-a-leak-week-carousel-03-under-sink.png
└── epa-fix-a-leak-week-cost-table-waterone-rates.png
NEVER post a naked link. Every link to callbrightside.com on social media MUST use UTM parameters. This is how we track which channels produce leads.
python3 nexus_utm_generator.pyoutput/social_distribution_links.json with tracked links for every channel.| Platform | UTM Source | UTM Medium | Example |
|---|---|---|---|
| Facebook Post | social | callbrightside.com/page/?utm_source=facebook&utm_medium=social&utm_campaign=campaign_name | |
| Instagram Post | social | callbrightside.com/page/?utm_source=instagram&utm_medium=social | |
| Instagram Story | social_story | callbrightside.com/page/?utm_source=instagram&utm_medium=social_story | |
| Google Business | gbp | social | callbrightside.com/page/?utm_source=gbp&utm_medium=social |
| social | callbrightside.com/page/?utm_source=linkedin&utm_medium=social | ||
| Nextdoor | nextdoor | social | callbrightside.com/page/?utm_source=nextdoor&utm_medium=social |
| Email Newsletter | newsletter | callbrightside.com/page/?utm_source=email&utm_medium=newsletter | |
| QR Code (leave-behind) | duck / magnet / doorhanger | qr | callbrightside.com/page/?utm_source=duck&utm_medium=qr |
callbrightside.com/go/[page]-[channel]callbrightside.com/go/epa-leak-facebook redirects to the full UTM URL.Add a link to the new blog from the relevant service page(s). Example: /leak-repair/ should link to the EPA Fix a Leak Week post. This passes SEO authority.
For seasonal/timely content, draft an email in HubSpot with the short social copy + link. Only if Kalen/Stephanie approve sending.
JSON brief, 1,500+ word draft, meta description, social copy (3 versions), FAQ schema
Branded HTML preview, hero image, social graphics (story + post + carousel), infographics
WordPress post, Facebook/Instagram/GBP/LinkedIn posts, internal links, email draft (if applicable)