```html

Building a Real-Time Technical Blog System Across Four Domain Properties

This session implemented a comprehensive auto-generated technical documentation system that captures granular development activity across four independent domain properties: queenofsandiego.com, sailjada.com, dangerouscentaur.com, and burialsatseasandiego.com. Each property now has its own tech blog subdomain that publishes detailed posts automatically whenever development work completes.

System Architecture Overview

The implementation consists of three core components working in concert:

  • Session Capture Hook — A shell script that executes when Claude Code sessions end, extracting structured session data
  • Blog Generator — Python tool that transforms session transcripts into granular technical posts with exact file paths, function names, and infrastructure details
  • Infrastructure Provisioning — Automated setup of S3 buckets, CloudFront distributions, ACM certificates, and DNS records for each tech blog

Infrastructure Setup Details

Each tech blog required identical infrastructure patterns across different DNS providers:

For queenofsandiego.com and sailjada.com (Route53)

Both domains use existing wildcard ACM certificates (*.queenofsandiego.com and *.sailjada.com) already provisioned. The setup process:

  • Created dedicated S3 buckets named qos-tech-blog and jada-tech-blog with static website hosting enabled
  • Configured bucket policies to allow CloudFront origin access identity (OAI) read-only access
  • Provisioned CloudFront distributions using the wildcard certificates, pointing to respective S3 origins
  • Added CNAME DNS records in Route53 (tech.queenofsandiego.com and tech.sailjada.com) targeting CloudFront distribution domains

For dangerouscentaur.com (Namecheap DNS)

Dangerouscentaur uses an existing wildcard CloudFront distribution (E2Q4UU71SRNTMB) backed by the dc-sites S3 bucket. Instead of creating new infrastructure, the tech blog leverages this existing distribution by adding a new alternative domain name to the distribution configuration:

  • Added tech.dangerouscentaur.com as an alternative domain name to the existing CloudFront distribution
  • Created a CNAME record at Namecheap DNS pointing tech.dangerouscentaur.com to the CloudFront distribution domain
  • No new ACM certificate needed since dangerouscentaur uses a wildcard cert covering *.dangerouscentaur.com

For burialsatseasandiego.com (GoDaddy DNS)

Burialsatseasandiego required full infrastructure creation with DNS validation through GoDaddy:

  • Requested new ACM certificate for tech.burialsatseasandiego.com with DNS validation method
  • Retrieved the DNS validation CNAME record from ACM and added it to GoDaddy's DNS management interface
  • Created bats-tech-blog S3 bucket with static website hosting
  • Provisioned CloudFront distribution with the validated ACM certificate
  • Added CNAME record at GoDaddy DNS (tech.burialsatseasandiego.com) pointing to CloudFront distribution domain

Session Capture and Blog Generation Pipeline

The core automation happens through two tools:

Stop Hook: /Users/cb/.claude/hooks/tech_blog_stop.sh

This bash script executes automatically when Claude Code sessions end. It:

  • Detects the current project context by reading Claude Code settings from ~/.claude/settings.json
  • Locates the session transcript in ~/.claude/projects/[project-id]/sessions/ directory
  • Invokes the blog generator with the transcript path and detected domain property
  • Logs execution results to ~/.claude/logs/tech_blog_hook.log

The hook was registered in Claude Code settings under the hooks.stop configuration with execute permissions (chmod +x).

Blog Generator: /Users/cb/Documents/repos/tools/tech_blog_generator.py

This Python tool transforms Claude Code session transcripts (stored as JSONL format) into technical blog posts. Key features:

  • Transcript Parsing — Reads JSONL session files, extracting tool_use events and user messages to reconstruct development activity
  • File Tracking — Identifies all files modified or created during the session with exact paths from the file_write and file_edit tool calls
  • Command Documentation — Captures CLI commands executed (command tool), excluding any that contain credential patterns
  • HTML Generation — Produces structured blog posts with sections for What Was Done, Technical Details, and Key Decisions
  • AWS Upload — Posts are automatically uploaded to the appropriate S3 bucket and the CloudFront distribution is invalidated to ensure immediate publication

The generator uses environment variables to determine which S3 bucket and CloudFront distribution to target based on domain property, enabling the same codebase to serve all four properties.

Granularity and Detail Level

Posts are intentionally granular rather than summarized. Each post includes:

  • Exact file paths: /Users/cb/Documents/repos/sites/queenofsandiego.com/notes/email_birthday_sail_2026.html
  • Specific function names and code changes
  • AWS resource identifiers: bucket names, distribution IDs, hosted zone IDs
  • Infrastructure decisions and alternatives considered
  • Command examples showing how tasks were accomplished

This level of detail allows stakeholders like Sergio to understand exactly what changed, why, and how it was implemented — useful for audits, training, and accountability.

Security and Credential Handling

The system automatically scrubs sensitive data:

  • Credential patterns (passwords, API keys, tokens) are detected and removed from tool output before publishing
  • Commands are documented with example syntax but not actual secret values
  • Environment variable references are preserved but their values are never exposed
  • GoDaddy and AWS credentials used during DNS and infrastructure setup are never included in post content

Integration with Ship's Papers Menu

The Ship's Papers navigation menu across all four sites now includes links to their respective tech blogs. This provides easy access for stakeholders to review technical work without requiring separate bookmarks or URLs.

Tested Infrastructure

All four tech blogs were verified functional:

  • HTTP requests to each subdomain resolve correctly through their respective DNS providers
  • CloudFront distributions serve content with proper HTTPS certificates
  • Initial test post generated from this session's activity successfully published to all four locations