Inspiration
Every year, people lose money on return windows they forgot were closing, and they're often the last to find out when something they own gets recalled for safety reasons. These aren't hard problems to solve technically — they're problems of attention. We wanted to build an agent that actually earns the word "agent": one that works silently in the background and only interrupts you when there's a decision that genuinely needs a human.
What it does
Aegis tracks your purchases from the moment you log a receipt. For each item, it silently calculates the return window and warranty period, and periodically checks it against the CPSC's public safety recall database. Most of the time, it does nothing — that's the point. When a return window is closing soon, or a tracked item turns up in a recall, Aegis surfaces a pre-drafted action (a return request or recall claim) that you can approve in one click.
How we built it
Aegis is built on the Strands Agents SDK, with four cooperating agents: an IngestionAgent that parses receipt data, a TriageAgent that runs a set of pluggable rules (Strategy pattern) to decide whether something needs to escalate, a RecallCheckAgent that polls the CPSC Recall API (with an LRU cache to avoid redundant lookups), and a DraftAgent that generates the pre-filled return/claim text via Amazon Bedrock.
On the backend, a FastAPI service exposes the agent layer to a React + TypeScript frontend styled with Tailwind and shadcn/ui, using Zustand for state and TanStack Query for data fetching and polling. Tracked items are kept in a min-heap keyed by nearest deadline, so surfacing "what needs attention soonest" is O(log n) instead of a full table scan. All database access goes through a single ItemRepository (Repository pattern), and escalations are pushed out through an EscalationPublisher (Observer pattern) so new notification channels can be added without touching the triage logic.
Challenges we ran into
Getting the "silent vs. escalate" balance right was harder than it sounds — too aggressive and it's just another notification-spamming app; too passive and it misses things that matter. We spent real time tuning the triage rules so the demo could show a clean, honest contrast between routine items and one that actually needed a human.
Accomplishments that we're proud of
A working end-to-end loop: receipt in → silent tracking → real recall match → pre-drafted claim → one-click approval, with an architecture that's actually structured around the patterns we claim to use, not just described that way in a README.
What we learned
How much of "agentic" behavior comes down to restraint — building the parts that decide not to act is at least as important as building the parts that do.
What's next for Aegis
Warranty auto-registration, OCR-based receipt scanning from photos, and multi-channel notifications (Telegram, email) beyond the in-app feed.
Built With
- amazon-bedrock
- amazon-web-services
- claude
- cpsc-api
- fastapi
- heapq
- lucide-react
- python
- react
- shadcn/ui
- sqlalchemy
- sqlite
- strands-agents-sdk
- tailwind-css
- tanstack-query
- typescript
- vite
- zustand

Log in or sign up for Devpost to join the conversation.