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-blogandjada-tech-blogwith 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.comandtech.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.comas an alternative domain name to the existing CloudFront distribution - Created a CNAME record at Namecheap DNS pointing
tech.dangerouscentaur.comto 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.comwith DNS validation method - Retrieved the DNS validation CNAME record from ACM and added it to GoDaddy's DNS management interface
- Created
bats-tech-blogS3 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