```html

Implementing Automated Technical Blog Generation Across Four Sailing Charter Websites

This session established a comprehensive system for automatically generating granular technical blog posts across four sailing charter and event websites. The goal was to create transparency for stakeholders (particularly Sergio) about infrastructure changes, feature deployments, and engineering work—all captured in real-time as development sessions conclude.

The Problem Statement

Previously, technical work on the queenofsandiego.com, sailjada.com, dangerouscentaur.com, and burialsatseasandiego.com domains existed in development sessions without any discoverable record. There was no way for non-technical stakeholders to understand what engineering improvements were being made, why infrastructure decisions were taken, or what technical challenges were being solved. The solution needed to be:

  • Fully automated—triggered at the end of development sessions
  • Granular—capturing specific file paths, function names, and architectural decisions
  • Secure—scrubbing all credentials, API keys, and sensitive data
  • Integrated—accessible via each site's navigation menu
  • Distributed—deployed to four separate tech blog subdomains

Architecture Overview

The system consists of four primary components:

  • Tech Blog Stop Hook (/Users/cb/.claude/hooks/tech_blog_stop.sh)—Executes when a development session ends, triggering blog post generation
  • Blog Generator (/Users/cb/Documents/repos/tools/tech_blog_generator.py)—Parses session transcripts, extracts granular details, and generates HTML blog posts
  • Infrastructure Init Script (/Users/cb/Documents/repos/tools/tech_blog_init.py)—Provisions S3 buckets, CloudFront distributions, Route53 hosted zones, and ACM certificates for each tech blog
  • Site Navigation Integration—Updates each domain's Ship's Papers menu to link to its tech blog

Infrastructure Provisioning

Each of the four domains now has a dedicated tech blog infrastructure stack:

queenofsandiego.com:

  • S3 bucket: tech-qos-blog
  • CloudFront distribution (wildcard cert: *.queenofsandiego.com)
  • Route53 hosted zone: queenofsandiego.com (existing)
  • DNS CNAME: tech.queenofsandiego.com → CloudFront distribution domain
  • HTTPS enabled via existing wildcard ACM certificate

sailjada.com:

  • S3 bucket: tech-jada-blog
  • CloudFront distribution (wildcard cert: *.sailjada.com)
  • Route53 hosted zone: sailjada.com
  • DNS CNAME: tech.sailjada.com → CloudFront distribution domain
  • HTTPS enabled via existing wildcard ACM certificate

dangerouscentaur.com:

  • S3 bucket: dc-sites (reuses existing wildcard CloudFront distribution E2Q4UU71SRNTMB)
  • New S3 origin path: /tech-blog/ for tech blog content
  • Namecheap DNS: CNAME tech.dangerouscentaur.com (no Route53 zone exists for this domain)
  • HTTPS enabled via existing wildcard cert on the distribution

burialsatseasandiego.com:

  • S3 bucket: bats-tech-blog
  • CloudFront distribution (new ACM cert provisioned for tech.burialsatseasandiego.com)
  • GoDaddy DNS: CNAME record added (since domain is registered at GoDaddy, not Route53)
  • ACM certificate DNS validation CNAME added to GoDaddy DNS

The Blog Generator Pipeline

The tech blog generator parses Claude Code session transcripts (stored as JSONL files in ~/.claude/sessions/) to extract:

  • Modified/created files—Exact paths from session file operations
  • Commands executed—What was inspected, tested, or deployed
  • Architecture decisions—Why certain choices were made
  • Infrastructure changes—S3 buckets, CloudFront distributions, DNS records, ACM certs
  • Technical patterns—Database queries, API integrations, script logic

The generator then:

  1. Identifies which domain(s) were modified based on file paths
  2. Scrubs all credentials, secrets, API keys, and sensitive personal data
  3. Generates an HTML blog post with semantic markup and technical depth
  4. Uploads the post to the appropriate S3 bucket via CloudFront origin
  5. Invalidates CloudFront cache to ensure immediate visibility

File operations are tracked in the session's "Files modified/created" section; commands are extracted from the "Commands run" section. This granular approach ensures every technical decision is documented.

Navigation Integration

The Ship's Papers dropdown menu on each domain now includes a "Technical Blog" link that routes to the appropriate tech.[domain].com subdomain. For example:

  • queenofsandiego.com → Ship's Papers → Technical Blog → tech.queenofsandiego.com
  • sailjada.com → Ship's Papers → Technical Blog → tech.sailjada.com
  • dangerouscentaur.com → Ship's Papers → Technical Blog → tech.dangerouscentaur.com
  • burialsatseasandiego.com (when served via sailjada.com) → Ship's Papers → Technical Blog → tech.burialsatseasadiego.com

Security Considerations

The system was designed with security as a first-class concern. The blog generator:

  • Strips all credential references (API keys, passwords, tokens, AWS credentials)
  • Masks sensitive environment variables and secrets from memory files
  • Includes only sanitized command examples (no actual secret values)
  • Redacts personal email addresses and phone numbers
  • Preserves technical value while removing any exploitable information

The generated posts are readable by anyone with access to the tech blog domains, but contain no actionable secrets that could compromise infrastructure.

What's Next

The system is now operational. Future development sessions will automatically generate granular blog posts as they conclude. The hook script is configured in Claude Code settings and will execute when sessions end, making technical work discoverable in near real-