```html

Building an Auto-Generated Technical Blog System Across Four Domains

This session focused on creating a granular, session-aware technical documentation system that automatically generates blog posts at tech.queenofsandiego.com, tech.dangerouscentaur.com, tech.sailjada.com, and tech.burialsatseasandiego.com. The goal: provide complete visibility into all technical work performed across these properties, with enough detail to satisfy rigorous technical review.

Architecture Overview

The system captures session transcripts from Claude Code's project directories, extracts work performed, redacts sensitive data, and generates detailed HTML blog posts. Each post is published to its respective domain via S3 + CloudFront infrastructure.

  • Session Capture: Claude Code stores JSONL-formatted session transcripts in ~/.claude/projects with automatic file write/edit tracking
  • Post Generation: Python scripts parse transcripts, extract tool usage and file modifications, generate HTML
  • Publishing: Posts uploaded to domain-specific S3 buckets, CloudFront invalidations trigger cache refresh
  • Integration: Ship's Papers navigation menus updated to link to tech blogs

Infrastructure Setup

Four parallel deployments were created using existing wildcard SSL certificates and domain infrastructure:

  • queenofsandiego.com: Wildcard cert already present; created tech-qos S3 bucket and CloudFront distribution
  • sailjada.com: Wildcard cert already present; created tech-jada S3 bucket and CloudFront distribution with Route53 alias records
  • dangerouscentaur.com: Wildcard CloudFront distribution E2Q4UU71SRNTMB already serving dc-sites bucket; added tech.* origin path routing
  • burialsatseasandiego.com: GoDaddy-managed DNS; created tech-bats S3 bucket, CloudFront distribution, and added CNAME record to GoDaddy DNS via API

All distributions configured with:

  • HTTPS default, HTTP redirects to HTTPS
  • Index document: index.html
  • Error document: index.html (for client-side routing)
  • Gzip compression enabled for text/HTML assets

Session Transcript Processing

Claude Code stores session data in ~/.claude/projects/-Users-cb-Documents-repos/sessions as JSONL files. Each session contains:

{
  "type": "tool_use",
  "name": "write",
  "input": {"path": "/path/to/file"},
  "output": "File written successfully"
}

The blog generator script (tech_blog_generator.py) extracts:

  • All write and edit operations with full file paths
  • Shell commands executed with their arguments (secrets redacted via regex patterns)
  • File reads that provide context
  • Tool outputs indicating success/failure

A sensitive data redaction layer removes:

  • AWS Access Key patterns
  • API tokens and bearer credentials
  • Email addresses and personal identifiers
  • Database passwords and connection strings
  • ACM certificate ARNs (replaced with [REDACTED_CERT_ARN])

Blog Post Generation Logic

Generated posts follow a consistent structure:

  • Title: Extracted from session objective or file operations pattern
  • Files Modified: Detailed list with relative paths, operation type (create/edit), and brief context
  • Commands Executed: AWS CLI, Python script invocations, shell operations with arguments visible (credentials removed)
  • Infrastructure Changes: S3 buckets created, CloudFront distributions, Route53 records, ACM certificates validated
  • Technical Decisions: Why certain tools/patterns were chosen
  • Validation: Test commands run, expected outputs

Each post is timestamped and indexed in an index.json file at the blog root for easy navigation and programmatic access.

Stop Hook Integration

A critical component: the Claude Code stop hook (/Users/cb/.claude/hooks/tech_blog_stop.sh) triggers at session end. This script:

  • Reads the most recent session transcript from ~/.claude/projects/-Users-cb-Documents-repos/sessions
  • Invokes the Python blog generator with the transcript path
  • Determines target domain based on session context (repo paths, memory files referenced)
  • Uploads generated HTML to the appropriate S3 bucket
  • Invalidates CloudFront distribution cache
  • Logs all operations to ~/.claude/logs/tech_blog.log

The hook is registered in ~/.claude/settings.json under the project configuration, ensuring it runs for all sessions in the repos project.

Navigation Integration

The Ship's Papers menu structure was updated in queenofsandiego.com/index.html to include a "Technical Documentation" submenu item linking to https://tech.queenofsandiego.com. Similar updates made to dangerouscentaur, sailjada, and burialsatseasandiego navigation menus.

Testing & Validation

Initial post generated from this session's transcript. Key validations:

  • File paths in post match actual modifications (verified against write operations)
  • Sensitive data properly redacted (credentials, API keys, certificate ARNs removed)
  • S3 uploads successful; CloudFront distributions reporting healthy status
  • DNS propagation complete (verified via nslookup for tech.queenofsandiego.com, etc.)
  • HTTP/HTTPS access working with proper redirects

Known Issues & Follow-up Work

  • Image Assets: burialsatseasandiego.sailjada.com displaying incorrect images for "imagine" and "small catamaran" — task created on progress board for fleet image replacement
  • Guest Count Messaging: Minimum 10 guests text across booking pages needs consistency review and update
  • GA4 Audit: Identified multiple GA tracking IDs across properties; comprehensive audit and booking optimization recommendations pending separate analysis

What's Next

The system is now live and automated. Each development session will automatically generate a granular technical blog post capturing:

  • Exact files touched and operations performed
  • Infrastructure resources created/modified with full resource identifiers
  • Commands executed with visible arguments (no secrets)
  • Architecture