Inspiration

As an AWS Community Builder I kept accumulating real perks (a cloud credit, a swag kit) and consistently forgot to use them before they expired. That's not a personal failing so much as how these programs work: the value shows up as an email, and using it requires remembering it exists, tracking an expiry date, and turning a credit into a plan. Three separate chores, and nobody does all three reliably.

What it does

Perk Pilot reads the perk emails you already have, including noisy weekly digests where the real perk is buried in unrelated chatter about spotlight winners and renewal policy, and pulls out only the concrete facts: what it is, its expiry date (computed correctly even for relative dates like "90 days from this email," against the email's own send date), any redemption code, any obligation. It tracks every open perk by urgency, and on request proposes exactly one scoped, time-boxed build for whichever perk is most worth acting on, sized to actually ship before it expires.

How I built it

A Strands Agent (Claude Haiku 4.5 on Amazon Bedrock) with five tools: log_perk, list_open_perks, propose_plan, list_plans, update_plan, backed by a local JSON store standing in for DynamoDB. The demo page streams the agent's tool-calling loop live via Server-Sent Events, so you watch it decide to call log_perk with the arguments it extracted, then chain list_open_perks into propose_plan, instead of only seeing a final result.

Challenges I ran into

A brand-new AWS account's Bedrock model quota starts at 0 for every model despite published defaults. Fixing it required a Service Quotas increase request through AWS Support (about 3 days to approval), not something that resolved by waiting. I also hit a Windows console encoding bug: cp1252 can't render characters Strands' callback handler streams, and it silently 500'd every real agent call until I traced it to the root cause. And a UI bug of my own: when the model interleaved reasoning text with a second tool call, the text got appended into a stale div instead of a fresh one, scrambling the visual order. Fixed by resetting the text block on every new tool call.

What's next

A live inbox connection instead of pasted email text, and AgentCore Runtime deployment.

Built With

Share this project:

Updates

Submission history