The shelves that didn't fit
I needed those shelves. Not wanted, needed. I found a set online, checked the photos, read the description, ordered them, and waited. When the box arrived and I carried them to the spot I'd bought them for, they didn't fit.
So I did what millions of people do every day: I repackaged them, arranged the return, and started the search all over again. The shelves I needed were still not in my home, and I had lost time I'd never get back.
The frustrating part is that the answer was never hidden. The dimensions were somewhere on the page. The information that would have stopped me was out there, in the fine print and in what other buyers had already written. I just had no easy way to put it next to my space before I paid.
Why this matters
Online shopping is one of the biggest industries on earth, and it runs on one promise: convenience. Nobody shops online to spend a weekend measuring, cross-checking and re-boxing.
Alexa is built on the same promise. It's the place where you simply ask. And the question I wished I'd asked that day is the one most shoppers wish they'd asked: "Will this fit?"
ReturnKiller is that question, answered before you order.
Who it helps
- Shoppers get a straight answer in their own words, at the moment they decide, and keep the hours that a return would have cost them.
- Sellers get the other half of the story. Behind every "doesn't fit" is a listing that left something unclear, so ReturnKiller surfaces what buyers get wrong and suggests the exact changes that would prevent it: dimensions up front, scale photos, a clearer size chart.
- Amazon gets fewer returns, which means less reverse logistics, fewer disappointed customers and fewer negative reviews. It keeps the trust that makes convenience worth having.
The best return is the one that never has to happen.
What it does
You say or type something like: "Will the air fryer fit under my 40 cm cabinet?"
- A real fit verdict. "Likely fits / tight / unlikely" is arithmetic on the listed height versus the clearance you gave, in cm or inches. It is not a model's guess. If the dimensions aren't known, it says so instead of inventing them.
- Ask about any product. If it isn't in the catalog, ReturnKiller searches the web live with Amazon Nova 2 Lite's web grounding, finds the dimensions and the problems buyers commonly report, and shows its sources.
- Scan your space. Take or upload a photo of the shelf or cabinet and Nova's vision estimates the clearance, which then feeds the fit check.
- Return-risk analysis. The main complaint themes, the size and description issues, and the listing fixes that would prevent them. Where real review text exists, every quote shown is verified against an actual review.
- Honest scoring. Amazon doesn't publish why items are returned, so I didn't pretend to know. On review-based products the risk score is labelled an estimate built from low-star reviews that mention size or description mismatches, and web-researched products are labelled as such.
It is exposed as a self-hosted MCP server (search_products, research_product, check_fit, analyze_listing, list_products), the integration point for Alexa+.
How I built it
I built it solo, without an Alexa device, so I made the simulator honest. The Alexa chat in the demo is a real MCP client: every answer comes from an actual tool call to the server's /mcp endpoint, the same call Alexa+ would make. The only stand-in is the simple intent router that decides which tool to call.
- AI: Amazon Nova 2 Lite on Bedrock for analysis, vision and grounded web research. The design rule: the model writes the words, code decides the facts. The model proposes complaint themes and copy. Code computes the risk score, does the fit maths and verifies every quote against the source reviews.
- Backend: FastAPI on AWS Lambda (arm64 container with the Lambda Web Adapter), API Gateway HTTP API, CloudFront with WAF rate limiting and an origin-verify secret, a DynamoDB cache with a 7-day TTL, and S3.
- Infrastructure: all in Terraform, with a one-command deploy script that stamps each build with its git commit so I can always see which version is live.
- Data: [Keep only if you ran the ingestion: a review catalog built from the Amazon Reviews 2023 dataset (Hou et al., 2024, arXiv:2403.03952) with a streaming ingestion script.] Everything else goes through live web research.
The problems I hit
- There is no public return data. The obvious thing was to invent a "return rate". I refused: the score is a transparent proxy built from review text, and the UI says exactly that.
- I couldn't trust the model's facts. Early outputs mixed good ideas with made-up numbers and quotes. So I moved the score, the fit arithmetic and quote verification into code and validate every field the model returns, and anything it can't back up with a real review gets dropped.
- Real-world text is hostile. Review text and web content went straight into my demo page, which opened a stored-XSS hole. I found it in my own code, escaped everything that comes from reviews or the model, and tested it with a malicious review.
- Platform rough edges. Nova 2 Lite can't be called by its plain model ID, only through a cross-region inference profile. Web grounding works only in US regions and needs its own IAM permission. API Gateway cuts requests off at 30 seconds. Building an arm64 container under emulation took about 17 minutes. A CloudFront policy ID I had hard-coded didn't exist, so I switched to looking policies up by name. My error handling also hid the real AWS error behind the last one, which cost me time until I fixed it to report every attempt.
- Quotas. A new AWS account's daily Bedrock token limit throttled live search during testing. Now a throttled search fails immediately with a clear message instead of hanging.
- Scope. One person, no device, a few weeks: every feature had to be real or clearly labelled as an estimate.
What I learned
Letting the model write the words and letting code decide the facts made the product both more trustworthy and far easier to test. I also learned how much of shipping an AI product is quotas, permissions and failure messages rather than prompts.
What's next
A larger pre-researched catalog, spotting conflicts between a listing's stated dimensions and what buyers report, a credit-card-for-scale option on photo scans, and asynchronous research jobs to get past the 30-second limit.
Built With
- alexa-plus
- amazon-api-gateway
- amazon-bedrock
- amazon-cloudfront
- amazon-dynamodb
- amazon-nova
- amazon-web-services
- aws-lambda
- aws-waf
- boto3
- docker
- fastapi
- html
- javascript
- model-context-protocol
- pytest
- python
- terraform
- web-speech-api
Log in or sign up for Devpost to join the conversation.