SideGuy Text PJ
⚡ Receipts · Live URLs · No Slides

What I've actually shipped lately.

No "case studies." No conceptual decks. Real URLs you can open right now.

Most AI consultants pitch what they could build. SideGuy ships every week. Here's a 7-day snapshot — every link below is live, in production, on the open web. Copy, share, screenshot, whatever.

12,399Broken canonicals fixed today
1,612+Defi'd pages today (full conversion stack)
547Tracked prospects (456 outbound URLs · 200)
70Custom shareables (6 today)
7Sniper-shots fired today
6Silent-killer monitors (daily 7AM)
6,262Total network
liveRecovery clock
Today's sprint · 2026-05-05

Recovery + compound day. The bug we missed for 4 weeks finally died.

Audit script (built that morning) surfaced 12,399 broken canonicals across 452,076 files. Same bug class that killed April 9-14 impressions, just at 80x scale. Fixed in 2 hours start to finish. Then kept compounding.

12,399 broken canonicals → 0 across 452,076 files SHIPPED TODAY tools/guards/check_canonicals.py + fix_canonicals.py + ship_changed_html.py

The find: built a 5-min canonical validator + pre-commit hook in the morning. First sitewide run flagged 12,399 broken canonicals — pages canonical-pointing to ghost dirs (/matrix/, /factory/, /scale-pages/, /ai-mode/) that never existed. The fix: self-canonical sweep (every page becomes its own truth) + 7 source generators patched at root cause + 12,378 files shipped to S3 + CloudFront wildcard invalidated + re-audit confirms 0 broken. The result: recovery clock — frozen for 4 weeks while broken canonicals lived — finally starts now. 24-72h for Google to re-trust, 1-2 weeks for impressions in GSC.

Updated yesterday's "Pan Went Viking" page with a top-of-fold May 5 update section (cyan/green recovery accent vs Viking forge red/gold). 4-cell stat grid (12,399 fixed · 7 generators patched · 12,378 shipped · 0 remaining), source-of-discovery story, and links to both git commits + the April 9 origin shareable. Becomes the LinkedIn post landing target.

A meta-receipt page for the universal phrase that underestimates engineering work. 8-entry Hall of Fame (button / typo / Stripe / SEO / AI / data / CRM / perf) each with the ask vs the actual reality. Today's canonical recovery is the live "Today's example." Includes the AI plot twist section (AI hears 'can you just' as green light + ships at industrial scale → human-in-the-loop is the moat) and closes with the 4 cases where SideGuy actually CAN just.

The Canonical Bug That Killed My Impressions — 12,399-page recovery receipt SHIPPED TODAY /shareables/canonical-bug-killed-my-impressions.html

Full operator-pain story: assumed algorithm update / content rot / seasonality — all three wrong. Real cause: ~150 pages canonicaled to a 404 (April), then 12,399 more (today). 4-step audit recipe + recovery timeline + the actual code. Pre-commit guard + source-generator patches mean the same bug class can't kill twice.

20 Indie Products. 5 Bugs. Same Recipe. — Field Report SHIPPED TODAY /shareables/20-indie-products-5-bugs.html

Trend Radar #3 mirror (r/EntrepreneurRideAlong score 12). The 5 bugs every indie launch ships silently broken: canonicals that point to nothing · no og:image (grey link previews) · no human escape hatch · no internal link mesh · mobile says "it works" but doesn't. With real receipts from this morning's own fixes. Closes with: nobody owns the infra layer + 5-item launch checklist + Text PJ for an audit.

812 GSC pages defi-brilliantated (conversion arm + self-canonical) SHIPPED TODAY tools/replace_text_pj_orb.py

412 (yesterday) + 200 (morning) + 200 (mid-morning) = 812 pages. Each page now has full conversion stack: orb v2.1 (Text PJ in 1 tap) + bag-of-laughs banner + free-hook CTA. Combined with the morning's self-canonical fix, every defi'd page is now: indexed + recovery-clock-running + has a conversion path when warm traffic returns. Defi-brilliantator metaphor: like CLEAR ⚡ on a flat-line page. Beats writing new content 10x.

540 tracked prospects (+34 surfaced from network) + dashboard cleanup SHIPPED TODAY tools/triage_leads.py + tools/add_new_prospects.py + dashboard/network.html

tools/triage_leads.py: cold-archive 14d-silent, dead-archive 30d-silent. 5 zombies archived (Bryan Keller, Alexa Warren, Nick Masry, Abby Stewart, Emma Salaya). Dashboard's main queue + follow-ups + check-back hide them; new "💀 Stale Archive" accordion at bottom holds them collapsed. tools/add_new_prospects.py: surfaced 34 untouched candidates from li-network.json — 4 local tier-1 (Justin Coté, Kevin Leap, Lesa Heebner, David Zito) + 30 national tier-2 across 6 clusters (SaaS / Marketing / Sales / Recruiting / RE / Finance). Each gets row in leads.csv + side-CRM .md with cluster context + first-touch wedge.

Doctrines saved + memory updates SHIPPED TODAY ~/.claude/projects/.../memory/

3 new memory entries: (1) project_canonical_bug_v2_at_scale.md — the 12,399 story + 7-generator patch + recovery doctrine. (2) feedback_og_image_required_on_shareables.md — every new shareable MUST include og:image + twitter:card before ship (caught by PJ as grey letterbox on can-you-just preview). (3) feedback_linkedin_post_rules.md updated — actual LinkedIn surface limit ~1,300 chars not 3,000 (validated 2026-05-05); default target 900-1,100 chars; always wc -c before delivery.

Vertical playbooks

Tuned by buyer, not by topic.

Same template, very different content. Each one took ~15 min start to ship.

AI for San Diego Operators SEO PAGE /ai-for-san-diego-operators.html

Directors, founders, team leads at SD orgs. 5 wins worth building, what to skip, ROI math, $100 Get Unstuck card, anti-walled-garden Shareable section. Article + LocalBusiness + FAQ + Breadcrumb schema.

AI for SD Marketing Agencies SEO PAGE /ai-for-san-diego-marketing-agencies.html

Agency owners + partners + managing directors. 5 agency-specific wins (proposal pages, AI reporting, RAG, sub-60s response, onboarding). Real ROI math for 15-person $4M shop.

AI for SD Real Estate Brokers SEO PAGE /ai-for-san-diego-real-estate-brokers.html

Independent brokers, team leads, brokerage marketing. 5 broker wins, $100/24hr per-listing reads, what to skip in compliance/regulatory. Real listing-read examples linked.

AI for SD Luxury Real Estate SHIPPED TODAY /ai-for-san-diego-luxury-real-estate.html

$5M+ inventory tier — La Jolla, Rancho Santa Fe, Del Mar, Coronado, Solana Beach. 5 luxury wins (cinematic per-property micro-sites, private HNW buyer briefs, off-market deal-flow intel, international concierge automation, long-arc seller CRM). Cinematic typography (Playfair Display + gold/bronze/black). Article + LocalBusiness + FAQPage + Breadcrumb schema.

AI for SD Healthcare Practices SHIPPED TODAY /ai-for-san-diego-healthcare-practices.html

Clinics, med spas, longevity centers, dental, specialty groups. HIPAA-aware from day one. 5 healthcare wins (pre-visit intake → brief, no-show + dormant reactivation, post-visit care plan automation, patient education content engine, internal ops dashboards). Clinical teal palette. Article + LocalBusiness + FAQPage + Breadcrumb schema. Closes "coming next" promise on verticals.html.

SideGuy Vertical Playbooks Hub SEO PAGE /verticals.html

Pick-your-lane index for the 4 vertical playbooks + "coming next" queue (healthcare, restaurants, construction, legal, fitness, education).

Today's sprint · 2026-04-28

Money-pages SEO Tier 1 — 100% coverage in one morning.

7 commits, all live on www. Every money-page now has full meta description + Open Graph stack + Twitter Card + JSON-LD schema. Before/after below.

126 money-pages → full SEO Tier 1 coverage SHIPPED TODAY /money-pages/*

Description: 126/126 (was missing on 28). Open Graph: 126/126 (og:type/title/description/url/image/site_name/locale). Twitter Card: 126/126 (summary_large_image). JSON-LD: 126/126 (LocalBusiness + Article + BreadcrumbList). 0 missing, 0 broken across all 4 layers. Shipped in 5 batches via background SEO agents.

19,800 Google 404s recovered — apex DNS migration to Cloudflare SHIPPED TODAY DNS migrated GoDaddy → Cloudflare

Diagnosed root cause (apex sideguysolutions.com pointing to broken AWS Global Accelerator infra) → migrated DNS from GoDaddy to Cloudflare → set up Page Rule 301-redirecting every apex path to www path-preserved. Result: 19,800 dead Google index entries now resolving cleanly. GSC validate-fix triggered same day. Bucket should drop 19,800 → ~0 over 2-4 weeks. ~7,500 missed impressions / quarter recoverable on top-25 URLs alone. Total time start-to-validation: ~90 minutes.

Cold prospects landing on www now see "🧾 See Receipts" as a secondary CTA right next to "Listen to PJ" — proof surface available in one click instead of buried in nav.

Side CRM + LinkedIn Engine — internal infrastructure SHIPPED TODAY data/dms/, data/linkedin/, tools/

Persistent prospect tracking (data/leads.csv + data/dms/<slug>.md per prospect with full DM draft + 3Q score + intent). LinkedIn Engine: doctrine + 5 templates (problem / story / breakdown / offer / proof) + new_post + log_post tools. Restart-resilient — survives any context reset.

Agent swarm — 303 internal links + 2,024 Article schemas + 126 AEO TL;DR cards SHIPPED TODAY tools/internal_linker.py, tools/inject_problems_article_schema.py, tools/inject_aeo_tldr.py

Three parallel ship agents ran today: (1) internal_linker.py — 303 cross-cluster links injected across 99 money-pages (beach-towns, vertical pages, comparison-pages all interlinked; max 4 links/page, idempotent). (2) inject_problems_article_schema.py — 2,024 problem pages stamped with Article + Person (author=PJ) + Organization (publisher) schema added to existing @graph blocks (10 outliers without existing JSON-LD skipped; will be addressed in a follow-up). E-E-A-T signal at scale; rich-result eligibility; citation magnet for ChatGPT/Perplexity/Claude. (3) inject_aeo_tldr.py — 100% (126/126) money-page coverage with a clean <strong>TL;DR:</strong> block at top of <main> (problem + solution + outcome, ~50 words, data-aeo-summary marker for AEO crawlers). All scripts idempotent, fully reversible via git, deployed to S3 + CloudFront invalidated in batches.

Side-CRM Send Now view + dashboard timing engine v2 SHIPPED TODAY dashboard/network.html (encrypted)

Dashboard now defaults to a "📤 Send Now" filter chip pinned at top-left — surfaces every queued prospect with drafts ready to fire. Timing engine v2: 🆕 NEW badges (last 36hrs), check-back dates per prospect, 7 urgency states (🔥 RESPOND NOW · ⚡ today · 🔔 this week · ▶ ready · ⚠️ stale · ⏸ wait · 💀 dead). Live merge of manual side-CRM (45 prospects) + 90-blast queue. AES-256-GCM encrypted; live data fetched at runtime. Per-row inline DM preview modal pulls full side-CRM context + paste-ready DM block from encrypted bundle.

Day 2 swarm — 100% problem-page coverage + 4 GSC pages + flex shareables SHIPPED 2026-04-29 tools/inject_problems_aeo_tldr.py, tools/inject_problems_fresh_jsonld.py, tools/generate_og_image.py, tools/log-payment.sh, tools/log-backlink.sh

Day 2 of the swarm: (1) AEO TL;DR cards shipped to 2,032 problem pages — 100% coverage on /problems/ now (matches money-pages 100%). Total AEO citation-ready surface: 2,158 pages. (2) Fresh JSON-LD (Article + BreadcrumbList + Person + Org) injected into the 12 outlier problem pages without existing schema — full problem-page schema coverage now 2,043/2,043 (100%). (3) 4 new GSC-driven money-pages live from real demand data (AI Storage Solutions, Electric Panel Upgrade SD, Emergency HVAC SD, Enterprise Software Consulting). (4) Flex-shareable doctrine: every meaningful LinkedIn post now links to a custom shareable URL with topic-specific OG image. Adobe-Semrush news-take got its own 1200×630 cinematic OG card. (5) Reusable OG image generator (tools/generate_og_image.py) — fixed grey-bar issue on 67 shareables. (6) Smart-techified embed/link-back widget injected into 16 custom shareables (personalization via ?to=Name URL param, click tracking via localStorage, 3 copy-paste assets per widget). (7) 2 new vertical money-pages (anti-bloat software builds + N. County RE tech help). (8) /about/pj-zonis.html E-E-A-T author hub. (9) Payment + backlink CLI loggers (tools/log-payment.sh, tools/log-backlink.sh).

Homepage clarity fix — 4 surgical adds from one real client comment SHIPPED 2026-04-29 PM /index.html (additive, reversible)

Real prospect feedback came in: "messaging too abstract, hard to understand who it's for, conversion depends too much on direct contact, no case studies or proof of results." Response was 4 surgical additions (no rewrite of the existing 10K-line homepage): (1) plain-English subhead under hero ("tech, AI, and decisions you don't know how to handle. Single operator in Encinitas. $100/hr or per-shareable."). (2) "Who SideGuy helps" 4-card audience segmenter (Realtor / SMB / Operator / Stuck on a decision) — each card links to its actual vertical money-page. (3) "How it works" 3-step scaffold (text PJ → free sanity check → ship in 3-7 days vs 6-week SaaS sales cycle). (4) "Real wins · Real names" NAMED proof block — Bob Visotcky reply, Bill Gerber omg-optical custom shareable, Robert Brown UW shareable, Cardiff $2.8M listing read, 19,800 GSC recovery, 153-shareable browse-all card. From client comment to live homepage: ~60 minutes. Fully additive, fully git-reversible.

Adobe-Semrush LinkedIn post live — 65 impressions in first 2 hours SHIPPED 2026-04-29 PM /shareables/adobe-buys-semrush.html + LinkedIn

Flex-shareable doctrine in action: news-take ("Adobe bought Semrush — that's not an SEO story") shipped as a custom 1200×630 cinematic OG card + Article-schema page + LinkedIn post. v2 OG image upgrade: tighter typographic hierarchy, eyebrow rule, divider line between headline + subhead, byline ("PJ Zonis · Operator · San Diego") above brand mark, gradient bottom accent. The whole pipeline (insight captured → branded shareable → OG image → LinkedIn copy → live + trackable) now reusable for every future news-take. Mount Rushmore "five faces" heading polished too — was off-white blending into dark gradient bg, now gold with glow.

Stop-pattern doctrine applied across side-CRM — relationship preservation SHIPPED 2026-04-29 PM data/dms/*.md, dashboard/network.html (plaintext, awaiting re-encrypt)

Lesson learned the hard way: 3+ unreplied touches on the same prospect burns goodwill. Diagnosed and tagged 4 prospects as STOP PATTERN (Bill Gerber: 2 unreplied in 3 days; Gary Robinson: 2 unreplied; Emma Lefkowitz: 3 unreplied since 2024-10; Fred Grier: original pattern). Dashboard upgrade (plaintext source, ready for next encrypt cycle): auto-detects "stop pattern" / "3 unreplied" / "don't re-touch" markers in prospect notes and renders a red gradient pill on the row name. Plus a "⚡ Recent Activity" panel at top of Side CRM showing last 5 most-recently-touched prospects with relative time. Operator-grade situational awareness instead of memory-based re-touching.

🌐 SideGuy Internet Help Desk launched SHIPPED 2026-04-29 PM /help-desk.html

Premium curated index of the actual tools that build the modern internet (Claude Code · Cursor · ChatGPT · GitHub · AWS · Cloudflare · GoDaddy · LinkedIn · GSC) with PJ-vetted "use when / skip when / PJ's take" notes per tool. First walkable path live: "Ship a real website (under $50/mo, no agency)" — 7-step sequence tied to specific tools with real receipts. Folds operator-atlas + routing-engine + tool-marketplace concepts into one coherent product per the premium-internet-help-desk frame. Cinematic OG, full schema, JSON data layer for adding more paths later.

🧱 SideGuy Shareable Wall — natural-backlink engine SHIPPED 2026-04-29 PM /shareables/wall.html

Public curated index of all 153 shareables shipped to date, organized into 7 categories (news-takes, case-studies, real-estate, north-county, tools-reviews, music-events, local-biz, linkedin, operator-plays). CollectionPage + ItemList + BreadcrumbList schema for hub-cluster authority. "Be Featured" editorial-bar CTA (NOT pay-to-play marketplace) is the natural-backlink mechanism: real work earns a permanent URL on www.sideguysolutions.com + an embed widget the client can paste on their own site, creating a transparent, disclosed, editorially-earned link loop both ways. Defensible vs every gray-hat backlink scheme.

Batch 2 — fresh SD prospect pipeline (100 of 222 SD locals from 6,262-contact network) SHIPPED 2026-04-29 PM data/leads/batch-2.json, dashboard/network.html, dashboard/batch-2.html

Built the batch-outreach factory: filter PJ's 6,262-contact network for SD locals (222) → rank by decision-maker × recency × email × score → exclude already-in-CRM (46) → top 100 enriched with cluster→wedge mapping + tracked landing URL templates + paste-ready DMs. v3 DMs: 2-3 deterministic variants per wedge (no two prospects in same cluster get identical opener), honest "sweeping my SD network" framing instead of pretending bespoke research, position+company woven in, "connected_phrase" turns days_ago into natural English ("a few months ago"). Operator switcher on dashboard — sig/phone/?from= URL slug all swap live; per-operator localStorage tracking; ready for second operator to drop into Operator Slot 2. Standalone offline viewer at dashboard/batch-2.html (no encrypt needed) + integrated into encrypted live dashboard.

Anthropic news-take live (first morning workflow run end-to-end) SHIPPED 2026-04-30 AM /shareables/anthropic-biomysterybench-leverage-layer.html

First validation run of the daily news-radar → take → ship → distribute → outreach workflow. News-radar surfaced Anthropic's BioMysteryBench announcement (Claude solving 30% of PhD-level bioinformatics work) as the top SideGuy-relevant story of last 24hr. news_to_shareable.py shipped the take in ~5 min: lede + AEO TL;DR + commentary + Karpathy video embed + PJ avatar byline + "the leverage layer just leveled up" frame + Anthropic $900B-tier intelligence positioning. Full schema (NewsArticle + Article + BreadcrumbList). LinkedIn post posted same hour, plus 4 strategic comment-bombs on Sequoia repost + Stephanie Zhan original + Jimmy Liu breakdown + Gina Mancuso eXp post. Jimmy Liu (post author) replied "agree 👍" within 30 min — first warm-engagement signal on a SideGuy news take. Trent Cady REPLIED to existing direct-pitch DM with "Thanks! Will shoot you a text response" — first warm-to-text conversion of the SideGuy era; pre-staged response ready, awaiting his text. The factory pattern from yesterday's doctrine essay literally compounded today.

Revenue Loop Stub live — /paid-help.html with 4 offer tiers SHIPPED 2026-04-30 AM /paid-help.html, data/offers.json, tools/build_paid_help.py

Sales infrastructure (NOT feature build) so when someone clicks "Be Featured" or texts asking about pricing, there's a clean page to point them at. Four tiers: $100 Quick Clarity Page (24hr) · $200 Custom Shareable Build (24-48hr) · $500 Small Business Tool Path (3-7 days) · $5K-30K Custom Operator Setup (2-6 weeks). Light Ocean, schema-rich (Service entries + WebPage + BreadcrumbList for each offer), JSON-driven via data/offers.json + tools/build_paid_help.py renderer (same pattern as Help Desk + Wall refactors). No retainer language anywhere. Doctrine block: "no demo call, no SaaS subscription, no upsell pressure, no agency mechanics." Direct text-to-PJ CTA per tier with prefilled SMS body.

3 new factories shipped (auto-spawn hook + GSC audit + paid-help renderer) SHIPPED 2026-04-30 AM tools/spawn_from_featured.py · tools/gsc_quick_audit.py · tools/build_paid_help.py

Three internal tools that compound the existing factory graph. tools/spawn_from_featured.py — closes the Featured Pipeline auto-spawn loop (when PJ flips a queue row to status='building', this tool picks it up, prompts for missing fields, dry-runs spawn_personal_page.py, asks confirm, ships, then auto-updates queue with status='shipped' + shareable_url). tools/gsc_quick_audit.py — point at any GSC export folder, surfaces page-2 quick wins (queries at position 11-20), high-impression/low-CTR opportunity pages, and apex-vs-www canonical health (read-only). First-run finding from 2026-04-30 export: page /ai-data-center-construction-companies.html ranking #80 for "data centre construction companies" (UK spelling) — surgical fix shipped (added "centre" as synonym in title + meta + body for global market coverage). tools/build_paid_help.py — JSON-driven renderer for /paid-help.html (4 offer tiers from data/offers.json + Service schema per offer).

Diagrammo for operators — first live test of new positioning thread SHIPPED 2026-04-30 PM /shareables/diagrammo-for-operators.html

First live test of a new SideGuy positioning thread: "the onboarding layer for complex tools that nerds build but operators can't figure out how to use." Demian Neidetcher (VP at MLB) shipped Diagrammo (diagram-as-code, .dgmo files, built with Claude Code). His README is for builders. Operators bounce. So I shipped the operator-translation layer — a 30-second paste-and-render onboarding page on the SideGuy domain with 4 ready-to-use snippets (universal business loop · user flow · comparison chart · service architecture), HowTo schema, full OG card, dedicated Demian credit block, and the "Want this for YOUR tool?" CTA introducing the new "launch services catch-all" offering shape. PJ commented publicly on Demian's launch post + sent a DM linking the page + posted a standalone X positioning post + updated his X profile to reflect the full SideGuy thesis. The whole engagement is the case study being written in real time for the new positioning.

New positioning thread crystallized — "launch services catch-all" + ICP signals SAVED 2026-04-30 PM memory/project_sideguy_onboarding_layer_positioning.md

Two new positioning insights crystallized during the Diagrammo engagement, both saved to persistent memory for future Claude sessions. (1) The thesis: SideGuy = the operator-translation layer for tools the README forgot, with a human in the loop (vs full-AI hype). (2) The timing + tell: "launch services catch-all for smart builders who don't know they're overdoing it" — engage at launch, when the builder is heads-down on features and missing the operator audience. ICP signals to spot in the wild: just-launched tool, README assumes you already get it, comments are "looks cool" not "I shipped X with it," builder is solo or VP-tier IC who built the tool on the side. Productized offering shape (future): "Project Launch Catch-all" tier — fixed price, X-day turnaround, includes operator-onboarding shareable + use-case snippets + X/LinkedIn distribution + sniper DM list to relevant operator audience. Diagrammo is case study #1 mid-write.

Distribution push — Hacker News doctrine essay + X positioning + X profile rebuilt SHIPPED 2026-04-30 PM news.ycombinator.com (account: pjz2000) · x.com/EnciPeege

Three distribution moves to expand SideGuy's surface beyond LinkedIn. Hacker News: submitted "I built an existence proof of agentic engineering at single-operator scale" (the doctrine essay) under new account pjz2000 — cold-account dynamics mean limited /front upside on first post but builds HN presence for future submissions and the post itself becomes a permanent HN-indexed reference. X positioning post: "Onboarding for complex systems built by nerds — with a human in the loop. Most powerful tools ship a README built for builders. Operators bounce at first-use. So I ship the translation layer..." linking the new Diagrammo for-operators page as live proof. X profile rebuilt with full-project bio: "Single operator. Full AI factory. Pages, SEO, custom tools, onboarding for nerd-built things. Encinitas. Clarity before cost. Text PJ — 858-461-8054." Display name + location + website all set. Operator-tier consistency across LinkedIn / X / HN / SideGuy domain.

Help Desk Between Systems doctrine — three-layer SideGuy positioning, public-facing SHIPPED 2026-04-30 PM /shareables/help-desk-between-systems-doctrine.html

The full SideGuy doctrine in three layers, finally given a public URL: (1) Help Desk Between Systems = WHAT SideGuy is (highest-level identity — bridges any two systems where one ships and the other tries to use). (2) Operator-Translation Layer = WHO it serves (builder-tier clients whose READMEs are written for builders, not operators). (3) Progress in Motion = HOW it lands clients (use the thing, build better on top, ship the live URL unprompted; aliases: Smash-Back, Blind Reach Around, Dark Horse). Load-bearing principle: every system has its own rules. SideGuy ships artifacts that follow BOTH rule-sets at once. Includes FAQPage schema (5 Q&As) for AEO citation. Diagrammo / Demian engagement is case study #1 with all 3 sub-shareables linked.

Diagrammo trio — operator-onboarding + friction-test + stuck-asking-for-help (smash-back artifacts) SHIPPED 2026-04-30 PM /shareables/diagrammo-for-operators.html · /shareables/diagrammo-30min-friction-test.html · /shareables/diagrammo-stuck-asking-for-help.html

Three live shareables for the Demian Neidetcher / Diagrammo engagement — first end-to-end demonstration of the Progress in Motion doctrine in production. (1) Operator-onboarding page — 30-second paste-and-render onboarding with 4 ready-to-use snippets, FAQPage + HowTo schema, full Demian credit. (2) Friction-test page — 7 specific UX fixes after PJ tried to build his factory map IN Diagrammo and hit file-creation friction. Operator-tier real-use feedback on Demian's domain + with the .dgmo source for the SideGuy factory included. (3) Stuck-asking-for-help page — friendly version of the same engagement, frames it as "I tried, got stuck, want to help?" Open invitation + no critique. All three cross-linked, all three with FAQ schema, all three become permanent SEO-indexed proof points for the Launch Catch-all tier ($500-2K) regardless of how Demian responds.

SD Tickets Live — primary vs secondary spread aggregator (426 events, hourly cron) SHIPPED 2026-04-30 PM /shareables/sd-tickets-live.html · tools/sd_ticket_aggregator.py · tools/build_sd_tickets_page.py

Live San Diego concert + event inventory aggregator. Cross-matches Ticketmaster (primary) against SeatGeek (secondary marketplace covering StubHub and other resellers via SeatGeek's data partnerships) on the same shows, computes the spread, color-codes (green ≤+25% / yellow +25-75% / red ≥+75%) so visitors see whether the secondary markup is worth the convenience or whether to wait. Currently 426 real Ticketmaster events live for SD venues (Belly Up, Music Box, House of Blues, Observatory, Casbah, SOMA, Brick By Brick, etc.). SeatGeek key pending — when added, the spread column auto-populates. Tool stack: tools/sd_ticket_aggregator.py (TM + SG fetcher with fuzzy event-matching, certifi-aware SSL, mock mode) + tools/build_sd_tickets_page.py (JSON-to-HTML renderer with venue grouping, ItemList schema, AEO TL;DR). Hourly cron-ready. Same model generalizes to: real-estate cross-source (Zillow/Redfin/Realtor), used-car spread (KBB/Carvana/CarGurus), flight deals from SAN, restaurant reservation spread.

Batch 3 prospects — 100 fresh from network + autonomous improve-bot OAuth fix SHIPPED 2026-04-30 PM data/leads/batch-3.json · tools/build_batch_3.py · tools/improve-bot/run.sh · tools/redash.sh

Three operator-infrastructure improvements. (1) Batch 3: 100 fresh prospects pulled from PJ's 6,262-contact network, ranked by composite score (decision-maker × recency × locality × email × cluster), excluding everyone already in CRM + Batch 2. v3 deterministic DMs per cluster→wedge mapping, references the new $100 Spark Plug tier where wedge-fit. Top clusters: SaaS/Tech (30), Marketing/Agency (14), Healthcare (14). All added to leads.csv as queued. Encrypted dashboard now displays unified "Batch 2 + 3" section with per-row batch indicator pill + "Batch 3 only" filter chip. (2) improve-bot OAuth fix: diagnosed 2026-04-30 9am cron silent-failure as macOS Keychain unavailable in cron's stripped env — claude CLI returned "Not logged in" instead of HTML. Fixed via claude setup-token (long-lived OAuth) + sourced from ~/.claude/sideguy-cron-secrets. All 3 background agents (3am swarm-improver, 7am morning-snapshot, 9am improve-bot) now end-to-end functional. (3) `redash` one-command wrapper: consolidates the 4× daily encrypt+ship dashboard cycle into a single shell alias with macOS Keychain password storage. Saved 30+ seconds per cycle, zero typing errors.

SD Tickets Live aggregator — Ticketmaster + SeatGeek cross-matched, 467 events, 40 venues SHIPPED 2026-04-30 PM /shareables/sd-tickets-live.html · tools/sd_ticket_aggregator.py · tools/build_sd_tickets_page.py

Live San Diego concert + event inventory aggregator with primary-vs-secondary spread side-by-side. Architecture: Ticketmaster Discovery API (425 events) + SeatGeek API (100 events) cross-matched via venue alias map (Belly Up = Belly Up Tavern = The Belly Up, etc.) + fuzzy artist-name matching with stop-word filtering. TM-as-source-of-truth doctrine: for unmatched TM events in next 14 days, do targeted SeatGeek lookups to pull secondary inventory precisely. Fallback search-link buttons (StubHub + SeatGeek) on every event so users always have a path even when no direct match. Color-coded spread (green ≤+25% / yellow +25-75% / red ≥+75%) so visitors see if secondary markup is worth the convenience. 40 SD venues grouped, sorted by event count (Belly Up Tavern 94 events leads, then Music Box, House of Blues, Observatory, Brick By Brick, Casbah, SOMA, Rady Shell, etc.). Hourly cron-ready. ItemList + Service schema, AEO TL;DR, full FAQPage. Same compounding aggregator model generalizes to: real-estate cross-source, used-car spread, flight deals from SAN, restaurant reservation spread.

SD Home Pros routing layer — text-PJ-to-route for plumber/electrician/HVAC/roofer/etc. SHIPPED 2026-04-30 PM /shareables/sd-home-pros.html · /shareables/plumber-san-diego.html · /shareables/electrician-san-diego.html

Help Desk Between Systems doctrine applied to local home services. The model: PJ doesn't expose a directory of pro phone numbers; instead, every CTA on the page is "Text PJ" with a pre-filled SMS body containing the trade tag. PJ routes you to a vetted pro from his actual SD network and stays in the thread for quality control on both sides. The page: 12 trade tile cards (plumber, electrician, HVAC, roofer, handyman, landscaper, painter, drain/septic, garage door, pest control, general contractor + a "Not sure?" card), 11 separate Service schema entries (one per trade — each independently rich-result eligible), LocalBusiness schema with full SD service area, FAQPage schema, Yelp/Angi/Thumbtack comparison table that explains the 20-30% marketplace-fee passthrough that inflates quotes. SEO test pages (substantive, not thin): /shareables/plumber-san-diego.html (~1,200 words with 4 SD-specific local depth cards: slab leaks in 1960-85 homes, coastal water heater corrosion, hard water scale, sewer root intrusion + 8 cost line items + 6 FAQs) and /shareables/electrician-san-diego.html (~1,300 words with 5 SD-specific cards: pre-1990 panels, EV surge + SDG&E rebate, salt-air corrosion, solar interconnect gotchas, ADU electrical + 9 cost items + 5 FAQs). 4-6 week ranking test before expanding to HVAC/roofer/handyman per-trade pages.

improve-bot validated end-to-end in cron-stripped env — all 3 autonomous agents working VALIDATED 2026-04-30 PM tools/improve-bot/run.sh · ~/.claude/sideguy-cron-secrets

Manual end-to-end validation of the OAuth fix from earlier today, run inside env -i (cron-stripped environment) to exactly simulate the 9am cron's runtime. Result: 1/2 pages successfully rewritten (the 1 was hub.html which is in the protected list and skipped as expected; the actual rewrite of /pages/matrix/roof-repair-system-not-working-properly-common-mistakes-chicago.html ran clean — Claude OAuth via secrets file ✓, page rewrite ✓ (18,876 → 17,679 chars), related-links injection ✓ (4 related pages), PJ-Explains widget injection ✓, git commit + push ✓). All 3 background agents are now end-to-end validated: 3am swarm-improver (PATH-fixed wrapper, validated via manual run earlier today), 7am morning-snapshot (running daily since 2026-04-30), 9am improve-bot (validated this evening with the OAuth fix). Tomorrow morning's 9am cron will be the first true autonomous run with everything working.

"Co-build option" added to Custom Shareable Build tier (validate-then-add pattern) SHIPPED 2026-04-30 PM data/offers.json · /paid-help.html (Custom Shareable Build tier)

Surfaced live co-build as a feature inside the existing $200 Custom Shareable Build tier instead of adding a 7th tier (avoids decision-fatigue). The line: "Optional live co-build — text/chat me while I build it, watch each ship in real time, request changes mid-flight (no extra charge if you want it sync vs async)." Pattern doctrine: validate demand inside an existing tier before fragmenting the offer ladder. If 3+ prospects start asking specifically for the co-build experience, THEN promote it to its own tier with real demand backing it. Demonstrated live earlier today when the Rick Beato shareable embedded the Yngwie/Beato YouTube video in 90 seconds while PJ was on chat — the co-build IS the offering, the page just names it.

Reddit signal → resolution page bridge — first end-to-end live test SHIPPED 2026-05-01 PM tools/signal_to_page.py · /shareables/upstairs-too-hot-decision.html

Built tools/signal_to_page.py — takes a numbered signal from data/reddit-signals/queue-YYYY-MM-DD.md, fetches the Reddit thread via JSON API, scaffolds a SideGuy-grade shareable (Light Ocean, Article + FAQPage + BreadcrumbList schema, AEO TL;DR auto-pulled from queue angle, sister cross-links, attributed Reddit quotes with link-backs, Text PJ orb). Dry-run by default · --write commits · --deploy ships to S3 + CloudFront. First live page: Upstairs-too-hot 4-path decision tree (signal #2 from today's queue) — covers attic insulation > zoning damper > mini-split > full system replacement in ROI order, mapped to 60s–80s NC SD coastal homes, with honest "what HVAC contractors don't lead with" callout. Total time signal → live: ~10 min.

news_radar.py extended — added 5 StackExchange tag feeds (+65% scored signal) SHIPPED 2026-05-01 PM tools/news_radar.py · 24 feeds total

Added DIY.SE hvac/electrical/plumbing + Webmasters.SE seo/google-search-console feeds — surfaces real technical questions from operators in our beat. Scored items per run jumped 124 → 205 (+65%). Required two upstream fixes: (1) swapped fetch_feed from urllib to requests because Cloudflare's WAF fingerprints urllib's TLS handshake and returns 403 (saved as feedback memory for future feed work), (2) extended parse_feed's xmlns-strip regex to also strip element prefixes (StackExchange Atom uses <re:rank>). Doctrine: Reddit Signal Layer + StackExchange = Layers 3 + 5 of the new 7-Layer Source Stack doctrine.

7-Layer Source Stack doctrine saved SAVED 2026-05-01 PM memory/project_seven_layer_source_stack.md

Parent doctrine for triangulating any high-intent keyword across 7 source layers (Wikipedia / SERP top 5 / Reddit / YouTube / Quora / Reviews / Directories) before shipping the SideGuy 8th-layer upgrade. Operating line: "Start like Wikipedia. Structure like top sites. Listen like Reddit. Explain like YouTube. Answer like Quora. Reality-check with reviews. Price-check with directories. Finish like SideGuy." SERP Mirror doctrine = Layer 2; Reddit Signal Layer = Layer 3 — both are sub-doctrines under this stack. Origin: PJ pasted a GPT bash-script version; doctrine kernel was strong, brittle SERP/Quora/HomeAdvisor scrapers were skipped, only legit signal sources (StackExchange RSS) tooled.

24KB cinematic page positioning SideGuy as the routing + human layer between automation tools (n8n, Make, Zapier, Claude, OpenAI, etc.). Includes 5 SideGuy automation patterns mapped to existing factories, comparison table (n8n vs Zapier vs Make vs SideGuy), Service + FAQPage + BreadcrumbList schema, AEO TL;DR card, "What this actually changes for you" section in PJ's voice ("it doesn't bro-automate everything, it just makes work more interesting"), soft Encinitas local mention. Productized via Spark Plug ($100) + Tool Path ($500) tiers.

LinkedIn post fired — "It just makes work more interesting" anti-guru positioning SHIPPED 2026-05-01 AM distribution · companion to /shareables/n8n-automation-layer.html

~1400 char LinkedIn post leading with the new doctrine line ("The most honest pitch for adding AI tools — to your life AND your business: it doesn't bro-automate everything. It just makes work more interesting"). Both personal life AND business framing (kids' appointments, friend you've been meaning to text + lead intake, invoice chase). Links to the new n8n shareable. Anti-guru positioning meant to stand out in feed of productivity-bro hype. Companion to the n8n shareable shipped same morning.

Doctrine extension saved — "Models are also wiring. SideGuy routes between them too." SAVED 2026-05-01 AM memory/project_sideguy_onboarding_layer_positioning.md

Help Desk Between Systems doctrine extended one more layer up. Yesterday: SideGuy routes between automation tools. Today: SideGuy routes between AI MODELS too (Claude / DeepSeek / GPT) based on what each task needs. Decision rule: thinking → Claude · scaling → DeepSeek · tool-connecting → GPT · trust → PJ. Plus 4th doctrine layer added: "It just makes work more interesting" (the WHY). Full doctrine stack now: (1) Help Desk Between Systems = WHAT, (2) Operator-Translation Layer = WHO, (3) Progress in Motion = HOW, (4) "It just makes work more interesting" = WHY.

News-comment distribution play — Meta WSJ + Apple CNBC SHIPPED 2026-05-01 AM distribution · 2 high-readership news comments same morning

Two high-readership news comments fired same morning to compound SideGuy doctrine reach. (1) Comment on WSJ Meta layoffs/AI-spending article (10M+ follower audience) — frame: "the human layer Big Tech is cutting is the moat for single operators who keep it." (2) Comment on Jennifer Elias / CNBC Apple earnings article (87K readers, 118 reactions on parent post) — frame: "Apple shipped most popular iPhone lineup ever WITHOUT AI restructuring layoffs. Discipline > AI panic." Both planted the same Help Desk Between Systems doctrine on opposite-side-of-the-coin frames. News-comment-bomb cadence: 2/day max to avoid spam-pattern.

3 outreach moves fired — Lauren Flynn (comment) + Andres Moctezuma (DM) + Daniel Lilie (DM) SHIPPED 2026-05-01 AM data/linkedin/2026-05-01-outreach-candidates.md

All three from yesterday's queued candidates. Lauren = sharp public comment on her affordable housing post (planted operator-tier framing without pitching). Andres (Owner ZdMenu) = workflow-Q DM about restaurant onboarding (no pitch, building dialogue). Daniel (Encinitas neighbor, Open to Work) = peer-to-peer coffee-style DM. Pre-staged drafts in data/linkedin/2026-05-01-outreach-candidates.md fired same morning as the n8n shareable + Meta + Apple comments — 5 LinkedIn surfaces in flight simultaneously for max algorithm visibility window.

Local SEO push across 16 SD-local shareables — LocalBusiness schema + geo meta + sister cross-links SHIPPED 2026-05-01 LATE AM tools/_local_seo_retrofit.py · 16 pages

Foundation push. Shipped LocalBusiness schema + geo meta tags (geo.region US-CA, geo.placename Encinitas California, geo.position 33.0370;-117.2920) + sister cross-links across all NC SD shareables. 13 pages got full retrofit (san-diego.html, sd-tickets-live.html, encinitas-guide.html, solana-beach-guide.html, all 4 *-get-unstuck pages, all 5 *-vacation-rental-direct-booking pages). 3 pages already had LocalBusiness — got geo meta + extra cross-links (sd-home-pros, plumber-san-diego, electrician-san-diego). Reusable script saved to tools/_local_seo_retrofit.py for future runs. Local-pack ranking + AEO citation surface boost across the entire NC SD shareable cluster.

Reddit feeds wired into news_radar.py + daily signal queue pattern SHIPPED 2026-05-01 LATE AM tools/news_radar.py · data/reddit-signals/queue-YYYY-MM-DD.md

Signal infrastructure. Added 8 Reddit subreddit RSS feeds to existing news_radar.py — r/sandiego, r/Encinitas, r/smallbusiness, r/Entrepreneur, r/HomeImprovement, r/RealEstate, r/SEO, r/automation. Each feed scored with weight 1.1-1.6 (lower than dedicated news feeds so big national stories still rank above sub posts). Reddit signals now flow through the same pipeline as Hacker News + TechMeme + Anthropic news. Confirmed working: 125+ items scored across 19 feeds in 48hr window. Daily Reddit signal queue now lives at data/reddit-signals/queue-YYYY-MM-DD.md — PJ reviews + picks winners to convert into SideGuy response pages. Doctrine: Reddit exposes demand, SideGuy owns resolution. Smart programmatic pages from real signals — not template clones.

Per-listing analysis

Real estate reads, $100, 24hr turn.

Two SD listings I built reads for as proof. Each has SingleFamilyResidence + Offer + Article schema (eligible for Google real-estate rich results).

Cardiff 2449 Manchester Ave — $2.8M ADU play $100 BUILD /pages/listings/cardiff-2449-manchester-ave.html

Verdict (depends — strong if you build the 2nd ADU, mediocre if not), opportunity (existing income + ADU upside), risks (top-of-comp pricing, permit timeline, STR rules), math (cap rate breakdown).

Solana Beach 212 N Helix Ave — $4.5M lifestyle $100 BUILD /pages/listings/solana-beach-212-n-helix-ave.html

Verdict (overpay if buying for ROI, fair for daily-life), opportunity (west of 101, walk to Cedros, low-maintenance), risks (top of micro-band, no upside lever, narrow resale audience), math.

Custom shareables for prospects

Built for one specific person, in 5–10 min.

Each was built after a real LinkedIn interaction. Live URLs, real names. (Healthcare ones use generic prospect names — others are real people.)

Built for a cardiology group exploring scaling. Read on EHR fragmentation, the unified operational layer approach, what breaks during expansion.

Todd Beyer — SEO-safe site migration playbook /shareables/todd-beyer-migration.html

Built in 10 min after seeing a public ask on LinkedIn. 5 SEO-killers in migration + the order of operations + receipts from this weekend's 200k-page work.

Riley Stricklin (Cadre AI) — overflow partnership read /shareables/riley-stricklin-cadre.html

Lane comparison (Cadre = enterprise / SideGuy = small fast-turn), 5 lead types Cadre wouldn't take, partnership proposal — not a pitch.

Honest read on his startup positioning + market timing + watch-fors. Built 60 sec after his LinkedIn message landed.

Infrastructure shipped

The SEO + sales loop, end to end.

Not just pages — the operating layer behind them.

Lead magnet. Send Specs CTA, $100/$800/$1k pricing tiers, Venmo buttons, FAQ. Service + Offer + LocalBusiness schema (eligible for Google price snippets).

Closer page. 4-step process, payment methods (Venmo/Zelle/Cash App), Service + FAQ schema. Pay → work starts immediately.

SideGuy Shareables for Business CORE PAGE /shareables-for-business.html

Anti-walled-garden positioning. 6 vertical use cases (agencies, RE, healthcare, events, coaches, local), pricing tiers, proof gallery.

SideGuy Decisions Hub CONTENT ENGINE /pages/stories/

Auto-built hub of all story explainers. Each new story rep auto-rebuilds this index + sitemap-recent.

5 cities × 5 intents = 25 city-intent landing pages. Each with 8 internal cross-links, FAQ schema, Breadcrumb schema.

Bitcoin Clarity Hub CLUSTER /pages/bitcoin/

12 plain-English BTC explainer pages + hub. Distribution, lost coins, ETFs, whales, halvings, custody, mining, more. Cross-linked.

SEO mega-upgrade (the boring kind)

Ran across 200k+ pages this weekend.

Not glamorous, but it's compound interest for search.

200k+ FILES JSON-LD + twitter card

176k+ pages got LocalBusiness JSON-LD schema added (didn't have it). 206k+ pages had twitter:card upgraded from "summary" to "summary_large_image" so og:image renders as a big card on social. Site-wide compound SEO win.

CDN S3 + CloudFront pipeline

Built a custom fastship.sh pipeline (parallel S3 cp + smart CloudFront invalidation) that ships individual files in 5–7 sec instead of the old 30+ min full-bucket sync.

og-preview.png /og-preview.png

Generated a proper 1200×630 social card image from scratch (Pillow). The site previously had a portrait JPEG masquerading as a PNG that LinkedIn was letterboxing. Now: clean ocean-themed branded card, content-type image/png.

What this proves: SideGuy is one human (PJ) + AI in the loop, shipping at agency velocity at indie pricing. No team to onboard, no procurement, no agency markup. If you've got something that's been "we should build that" for too long — text me. Same-day.

💬 Text PJ — let's ship something for you 858-461-8054 · Encinitas-based · No retainer
You can go at it without SideGuy — but no custom shareables for your friends & family. You'll be short a bag of laughs. 🌸
Text PJ
Text PJ
858-461-8054
PJ Text PJ 858-461-8054
🎁 Didn't quite find it?

Don't see what you were looking for?

Text PJ a sentence about what you actually need — I'll build you a free custom shareable on the house. No email, no funnel, no SOW.

📲 Text PJ — free shareable
~10 min turnaround. Your friends will love it.