← PortfolioBlogRSS

Internal tool at AWS · solo build

Kage Bunshin · AI eDM Generator

Amazon BedrockAWS LambdaAmazon API GatewayAmazon DynamoDBAWS CDKReactClaude Code

Internal web app: paste an event brief, receive a team-styled eDM draft. • Design requests kept landing on me. The team wanted flyers that did not look AI-made, so I built a tool where AI only fills in the content of hand-made templates. Amazon Bedrock (Claude Sonnet 4.6) writes copy only; 16 hand-built modules and 4 themes handle the layout. The output does not look AI-generated. • 8 real briefs from teammates have been drafted with it, and the team saves about three hours a week. • 107 automated checks run on every deploy and the edit rate is measured against the AI's original draft. Tech: React · Vite · AWS Lambda · API Gateway · DynamoDB · S3 · CloudFront · AWS CDK · Amazon Bedrock

Metrics

Highlights

Story

Situation

Our sales team sends many email campaigns, and every campaign requires a flyer. Because I majored in visual design, those requests were directed to me over Slack. Teammates were not satisfied with plain emails; they wanted to send well-designed ones and had no tool. Existing options were off-brand for B2B or could not export email-ready HTML.

Task

Build a self-service web app. A teammate pastes an event brief, receives a team-styled eDM draft, edits text by clicking, and exports. The goal: no design request needs to reach me.

Action

Set one design principle: the AI writes copy only. Layout lives in 16 hand-built modules and 4 themes. Amazon Bedrock (Claude Sonnet 4.6, Haiku 4.5 fallback) fills slots through tool use, with per-slot character limits computed from width ÷ font size. Fixed facts such as schedules and contacts are copied by the server from line numbers the model picks, so nothing is invented. Shipped the first version in one day (2026-09-07) on Lambda, API Gateway, DynamoDB, S3, and CloudFront via CDK, with Claude Code as the coding agent. When the org's security scan blocked the public Lambda URL on day one, moved behind API Gateway and reopened the next day. Ran weekly feedback with the team. Adoption lagged because people kept their paid design tool, so I targeted its two gaps: templates too casual for B2B email and no HTML export. When the stack grew too complex, rebuilt a lite version with only the essentials: 2 screens, 2 routes. Added edit-rate measurement (AI original vs. final, per text slot) so prompt changes are judged by numbers.

Result

Teammates now use it themselves. 8 real event briefs (workshop invites, a security notice, a demo day) were drafted with it. 107 automated checks run on every deploy. Generation takes 8 to 13 seconds. First "the draft is good" from the team on 2026-09-25, after three layout rules. Teammates estimate it saves them about three hours a week (confirmed 2026-10-03). Campaign-level outcomes are still being collected.

Tech stack

ReactViteAWS LambdaAmazon API GatewayAmazon DynamoDBAmazon S3Amazon CloudFrontAWS CDKAmazon BedrockClaude Code

Other projects