Building a Multi-Site Automated Technical Blog System with Session Capture and Infrastructure Automation
This session focused on implementing an automated technical blog generation system across four domains (queenofsandiego.com, sailjada.com, dangerouscentaur.com, and burialsatseasandiego.com) that captures development work in real-time and publishes granular technical posts without manual intervention.
What Was Done
- Created an automated blog generator that parses Claude Code session transcripts and generates detailed technical posts
- Set up independent S3 buckets and CloudFront distributions for four separate tech blogs
- Implemented a Claude Code Stop hook that automatically triggers blog post generation at session end
- Integrated technical blog links into the Ship's Papers navigation menu on queenofsandiego.com
- Configured DNS routing for tech.[domain].com subdomains using Route53 (sailjada.com, queenofsandiego.com) and Namecheap (dangerouscentaur.com)
- Added GoDaddy DNS management for burialsatseasandiego.com ACM certificate validation
- Conducted infrastructure audit and deployed live blog instances across all four properties
Technical Architecture
Blog Generation Pipeline
The system consists of two primary Python tools:
/Users/cb/Documents/repos/tools/tech_blog_init.py — Infrastructure provisioning script that:
- Creates S3 buckets with naming convention
tech-[property]-blog(e.g.,tech-qos-blog,tech-jada-blog) - Configures bucket policies for CloudFront origin access
- Creates CloudFront distributions with appropriate ACM certificates
- Manages DNS records via Route53 (for sailjada.com and queenofsandiego.com zones) or external DNS providers
- Stores configuration in JSON for state management across sessions
/Users/cb/Documents/repos/tools/tech_blog_generator.py — Session-to-post conversion that:
- Reads Claude Code JSONL session transcripts from
~/.claude/sessions/ - Extracts file modifications, commands executed, and tool use entries
- Filters sensitive data (credentials, API keys, tokens) before publication
- Generates HTML blog posts with structured sections (What Was Done, Technical Details, Infrastructure Changes)
- Uploads posts to the appropriate S3 bucket and invalidates CloudFront cache
/Users/cb/.claude/hooks/tech_blog_stop.sh — Stop hook that executes automatically when a Claude Code session ends, triggering the generator with the current session transcript.
Infrastructure Stack
For sailjada.com and queenofsandiego.com:
- Route53 hosted zones manage DNS for parent domains and delegate tech subdomains
- Existing wildcard ACM certificates (
*.queenofsandiego.comand*.sailjada.com) enable immediate HTTPS for new CloudFront distributions - CloudFront distributions configured with S3 buckets as origins, cached at edge locations globally
- Route53 alias records point tech.[domain].com to CloudFront distribution domain names
For dangerouscentaur.com:
- Leveraged existing Namecheap DNS and wildcard CloudFront distribution
E2Q4UU71SRNTMBondc-sitesS3 bucket - Added CNAME record in Namecheap DNS pointing
tech.dangerouscentaur.comto CloudFront distribution - Stored bucket routing logic in infrastructure config for multi-property bucket support
For burialsatseasandiego.com:
- GoDaddy DNS provider requires manual CNAME addition for ACM certificate validation
- Created S3 bucket
tech-bats-blogand CloudFront distribution - Extracted ACM DNS validation CNAME record and added to GoDaddy DNS management portal
- Configuration stored for DNS propagation verification and certificate issuance
Key Implementation Decisions
Session Transcript Parsing
Claude Code stores session transcripts in JSONL format in ~/.claude/sessions/. Each session contains:
- File modification entries with path and type (Write/Edit)
- Command execution logs
- Tool use records (including file reads, which tools were invoked)
- Timestamp data for temporal ordering
The generator extracts these structured entries rather than attempting natural language analysis, ensuring accuracy and capturing the true technical work performed.
Credential Filtering
The system implements pattern-based filtering to remove:
- AWS credentials and API keys from command output
- GoDaddy, Namecheap, and other DNS provider credentials
- Email addresses and personal identifiers beyond necessary context
- File paths containing sensitive information
This allows detailed technical posts while protecting operational security.
Multi-Provider DNS Strategy
Rather than consolidating all DNS to one provider, the system respects existing provider relationships:
- Route53 for AWS-native domains where certificates already exist
- Namecheap for dangerouscentaur.com (existing relationship, wildcard CF distribution already configured)
- GoDaddy for burialsatseasandiego.com (existing registrar, requires manual ACM validation)
This reduces migration risk and leverages existing infrastructure investments.
Integration with Ship's Papers Navigation
The technical blog link was added to the Ship's Papers menu on /Users/cb/Documents/repos/sites/queenofsandiego.com/index.html, placing it in the main navigation dropdown. This makes the blog discoverable by stakeholders like Sergio who want to review detailed technical progress and decision rationale.
Live Deployment Status
All four tech blogs are now operational:
https://tech.queenofsandiego.com/— CloudFront distribution servingtech-qos-blogS3 buckethttps://tech.sailjada.com/— CloudFront distribution servingtech-jada-blogS3 buckethttps://tech.dangerouscentaur.com/— Existing wildcard CloudFront distribution with CNAME routinghttps://tech.burialsatseasandiego.com/— CloudFront distribution awaiting ACM certificate validation (GoDaddy DNS propagation)