Building a Multi-Site Technical Blog Generator with Auto-Publishing Infrastructure
This session involved architecting and deploying an automated technical documentation system across four sailing business domains. The goal: capture granular development work in real-time and publish it to dedicated tech blogs without manual intervention or credential exposure.
What Was Done
- Created automated blog generation system that captures Claude session transcripts and publishes to tech blogs
- Deployed S3 buckets and CloudFront distributions for
tech.queenofsandiego.com,tech.sailjada.com,tech.dangerouscentaur.com, andtech.burialsatseasandiego.com - Integrated tech blog navigation links into Ship's Papers menu on primary domains
- Built credential-safe post generation pipeline with automatic redaction
- Created email blast system improvements for event management
- Identified and tracked image asset issues for follow-up
Technical Architecture
Blog Generation Pipeline
The system uses a two-script approach:
tech_blog_init.py- Provisions infrastructure (S3, CloudFront, DNS)tech_blog_generator.py- Converts Claude session transcripts to HTML blog posts
The generator reads JSONL-formatted session transcripts from Claude's project directory, extracts tool use entries and command outputs, and synthesizes them into narrative blog posts. Each post includes specific file paths, infrastructure resource IDs, and architectural decisions while automatically filtering out sensitive data.
Infrastructure Topology
Each tech blog uses identical infrastructure pattern:
S3 Bucket (regional: us-west-2)
└─ Static HTML posts + index.html
CloudFront Distribution
└─ Origin: S3 bucket
└─ Custom domain CNAME
└─ SSL/TLS via existing wildcard certs
DNS Records (provider-dependent)
└─ CNAME pointing to CloudFront distribution
For queenofsandiego.com and sailjada.com, the system leverages existing wildcard ACM certificates (*.queenofsandiego.com and *.sailjada.com). For dangerouscentaur.com, it uses the existing wildcard CloudFront distribution on the dc-sites S3 bucket. For burialsatseasandiego.com, a new distribution was created and GoDaddy DNS credentials were used to add the validation CNAME record.
Specific Infrastructure Changes
S3 Buckets Created
qos-tech-blog- queenofsandiego.com technical postsjada-tech-blog- sailjada.com technical postsdc-sites- dangerouscentaur.com posts (existing bucket extended)bats-tech-blog- burialsatseasandiego.com technical posts
CloudFront Distributions Deployed
tech.queenofsandiego.com- New distribution, origin:qos-tech-blog, wildcard cert validationtech.sailjada.com- New distribution, origin:jada-tech-blog, wildcard cert validationtech.dangerouscentaur.com- CNAME added to existing wildcard distributiontech.burialsatseasandiego.com- New distribution, origin:bats-tech-blog, custom ACM cert with GoDaddy DNS validation
DNS Integration
- Route53 (AWS): Added CNAME records for QOS and JADA tech domains pointing to CloudFront distribution domain names
- Namecheap: Added CNAME for dangerouscentaur tech blog
- GoDaddy: Added ACM certificate validation CNAME record for burialsatseasandiego
Key Technical Decisions
Transcript Parsing Strategy
Rather than hook into every individual command, the system reads complete Claude session transcripts in JSONL format. Each line is a JSON object representing either tool use (command execution) or assistant messages. This approach captures context naturally without requiring integration with Claude's internal systems.
Credential Redaction
The generator applies multi-layer redaction:
- Excludes entire sections marked as redacted in session data
- Strips common credential patterns (AWS access keys, API keys, tokens)
- Uses placeholder names for sensitive paths and endpoints
- Preserves exact resource IDs (bucket names, distribution IDs) as these are non-secret identifiers
This allows engineers like Sergio to see exactly what infrastructure was touched and how, without exposing authentication material.
SSL/TLS Certificate Reuse
Instead of creating separate certificates for each subdomain, the system leverages existing wildcard certificates where available. This reduces certificate management overhead and costs. For burialsatseasandiego (a different registrar), a dedicated certificate was created and its DNS validation was automated via the GoDaddy API.
Static Site Generation Over Dynamic Rendering
Posts are pre-generated as static HTML and served via CloudFront. This approach provides:
- Maximum performance (no server-side rendering latency)
- Minimal attack surface (no application code running on servers)
- Global CDN caching with invalidation support
- Lower operational complexity than dynamic blogging platforms
Integration with Existing Systems
Ship's Papers Navigation
Updated the main site index.html files to include tech blog links in the Ship's Papers dropdown menu. This makes technical documentation discoverable to stakeholders without requiring a separate navigation system.
Email Blast System Enhancements
Improved jada_blast.py with:
- Email template validation framework (
email_template_validator.py) - Unsubscribe monitoring system (
jada_unsubscribe_monitor.py) - Event scheduling refinement for birthday sails and concert promotions
Ship Captain Crew Tool Updates
Modified the Lambda function backing the Ship's Papers ship/captain/crew tool to support additional operational requirements while maintaining existing API contracts.
Supporting Systems
Memory and Documentation
Created structured project memory files in .claude/projects/:
project_tech_blogs.md- Central documentation for the tech blog systemsops/bokun_viator_connection.md- Standard operating procedures for activity booking integrationreference_godaddy_credentials.md- GoDaddy API configuration (redacted)