{"id":50810059,"url":"https://github.com/daniel0707/blog-pipeline","last_synced_at":"2026-06-13T04:04:11.210Z","repository":{"id":345973316,"uuid":"1127914140","full_name":"daniel0707/blog-pipeline","owner":"daniel0707","description":"Deployment and AI enhancement pipeline for my personal blog","archived":false,"fork":false,"pushed_at":"2026-03-21T15:52:11.000Z","size":74,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-03-22T06:10:26.114Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/daniel0707.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-01-04T20:51:02.000Z","updated_at":"2026-03-21T15:52:15.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/daniel0707/blog-pipeline","commit_stats":null,"previous_names":["daniel0707/blog-pipeline"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/daniel0707/blog-pipeline","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/daniel0707%2Fblog-pipeline","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/daniel0707%2Fblog-pipeline/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/daniel0707%2Fblog-pipeline/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/daniel0707%2Fblog-pipeline/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/daniel0707","download_url":"https://codeload.github.com/daniel0707/blog-pipeline/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/daniel0707%2Fblog-pipeline/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34271501,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-13T02:00:06.617Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-06-13T04:04:10.289Z","updated_at":"2026-06-13T04:04:11.192Z","avatar_url":"https://github.com/daniel0707.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Blog Publishing Pipeline\n\nAI-powered blog publishing pipeline that integrates Webiny CMS with Cloudflare Pages via AWS Step Functions.\n\n**Transform your blog posts automatically**: AI-generated summaries, stunning hero images, and instant deployment — all in ~2-3 minutes.\n\n## 🚀 Quick Start\n\n**Get running in 15 minutes**: [docs/QUICKSTART.md](docs/QUICKSTART.md)\n\n```bash\nnpm install\ncp config/env.example.json config/env.dev.json\n# Edit config with your values\nnpm run deploy:dev\n./scripts/update-secrets.sh dev \"WEBINY_TOKEN\" \"GITHUB_PAT\"\n```\n\nThat's it! Your pipeline is live.\n\n## Architecture\n\nThis project implements an automated content enhancement pipeline:\n\n1. **Webiny CMS** - Content is published\n2. **AWS Step Functions** - Orchestrates AI processing workflow\n3. **AWS Bedrock** - Generate summaries (Claude) and hero images (Titan)\n4. **GitHub Actions** - Build and deploy static site\n5. **Cloudflare Pages** - Host the final blog\n\n**Cost**: ~$0.01 per blog post • ~$1-2/month total\n\n## Project Structure\n\n```\n├── bin/                    # CDK app entry point\n├── lib/                    # CDK stack definitions\n│   ├── stacks/            # Individual CDK stacks\n│   └── constructs/        # Reusable CDK constructs\n├── lambda/                 # Lambda function code\n│   ├── summarize/         # AI summarization (Bedrock)\n│   ├── generate-image-prompt/  # Image prompt creation\n│   ├── generate-image/    # Image generation (Bedrock Titan)\n│   ├── upload-to-webiny/  # File upload to Webiny\n│   ├── update-cms/        # CMS entry update\n│   └── trigger-github/    # GitHub Actions trigger\n├── docs/                  # Documentation\n└── config/                # Configuration files\n```\n\n## Prerequisites\n\n- AWS CLI configured with appropriate credentials\n- Node.js 20.x or later\n- AWS CDK CLI installed (`npm install -g aws-cdk`)\n- Webiny CMS deployed on AWS\n- GitHub repository set up (`daniel0707/blog-front`)\n- AWS Bedrock access enabled (Claude/Llama and Titan models)\n\n## Installation\n\n```bash\nnpm install\n```\n\n## Configuration\n\nCreate environment-specific configuration files:\n\n```bash\ncp config/env.example.json config/env.dev.json\ncp config/env.example.json config/env.prod.json\n```\n\nEdit the files with your environment-specific values (API endpoints, tokens, etc.).\n\n## Deployment\n\n### Bootstrap CDK (first time only)\n```bash\ncdk bootstrap aws://ACCOUNT-ID/REGION\n```\n\n### Development Environment\n```bash\nnpm run deploy:dev\n```\n\n### Production Environment\n```bash\nnpm run deploy:prod\n```\n\n## Stacks\n\n- **BlogPipelineSecretsStack** - AWS Secrets Manager for API tokens\n- **BlogPipelineLambdaStack** - Lambda functions for each pipeline step\n- **BlogPipelineStateMachineStack** - Step Functions orchestration\n- **BlogPipelineMonitoringStack** - CloudWatch alarms and dashboards\n\n## Cost Estimation\n\n- **LLM Summarization**: ~$0.00 (AWS credits)\n- **Image Generation**: ~$0.01 per post (Bedrock Titan @ 1024×1024)\n- **Lambda/Step Functions**: Minimal (within free tier for low volume)\n\n**Estimated**: $0.30-1.00/month for 30-100 posts\n\n## Pipeline Flow\n\n1. Author publishes content in Webiny CMS\n2. Webiny hook invokes Step Function\n3. Step Function orchestrates:\n   - LLM summarization (Bedrock)\n   - Image prompt generation\n   - Image creation (Bedrock Titan)\n   - Upload to Webiny File Manager\n   - Update CMS entry with summary + image\n   - Trigger GitHub Actions\n4. GitHub Actions builds and deploys to Cloudflare Pages\n\n## 📚 Documentation\n\n| Document | Description |\n|----------|-------------|\n| **[QUICKSTART.md](docs/QUICKSTART.md)** | 15-minute setup guide - start here! |\n| **[PROJECT_OVERVIEW.md](PROJECT_OVERVIEW.md)** | Complete project structure and components |\n| **[CDK_DEPLOYMENT.md](docs/CDK_DEPLOYMENT.md)** | Detailed deployment guide with troubleshooting |\n| **[DEPLOYMENT.md](docs/DEPLOYMENT.md)** | Architecture, flow, and environment config |\n| **[SETUP_CHECKLIST.md](docs/SETUP_CHECKLIST.md)** | Complete setup checklist for all services |\n| **[WEBINY_HOOK.md](docs/WEBINY_HOOK.md)** | Webiny CMS integration code | code\n\n## Development\n\n```bash\n# Watch for changes\nnpm run watch\n\n# Show diff before deploying\nnpm run diff:dev\nnpm run diff:prod\n\n# Synthesize CloudFormation templates\nnpm run synth\n\n# Test deployment\n./scripts/test-pipeline.sh dev\n```\n\n## What Happens When You Publish?\n\n```\nCMS Publish → Webiny Hook → Step Functions → AI Pipeline\n                                              ├─ Summarize (8s)\n                                              ├─ Generate Prompt (2s)\n                                              ├─ Create Image (15s)\n                                              ├─ Upload (5s)\n                                              ├─ Update CMS (3s)\n                                              └─ Trigger GitHub (2s)\n                                                    ↓\nGitHub Actions → Build → Deploy → Cloudflare Pages\n(1-2 minutes)                            ↓\n                                    ✅ Live Blog!\n```\n\n**Total**: 2-3 minutes from publish to live\n\n## Features\n\n✅ **AI-Powered Summaries** - Bedrock Claude generates engaging 2-3 sentence summaries  \n✅ **Stunning Hero Images** - Bedrock Titan creates custom 1024×1024 images  \n✅ **Automated Deployment** - GitHub Actions builds and deploys automatically  \n✅ **Error Handling** - Retries, rollback, and email alerts  \n✅ **Cost Effective** - ~$0.01 per post, ~$1-2/month total  \n✅ **Monitoring** - CloudWatch dashboards and alarms  \n✅ **Type Safe** - Full TypeScript implementation  \n✅ **Infrastructure as Code** - AWS CDK for reproducible deployments  \n\n## Support\n\n- 📖 [Full Documentation](docs/)\n- 🔧 [Troubleshooting Guide](docs/CDK_DEPLOYMENT.md#troubleshooting)\n- 📊 [Architecture Overview](PROJECT_OVERVIEW.md)\n- ✅ [Setup Checklist](docs/SETUP_CHECKLIST.md)\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdaniel0707%2Fblog-pipeline","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdaniel0707%2Fblog-pipeline","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdaniel0707%2Fblog-pipeline/lists"}