Inspiration

One of us needed an ergonomic chair for the dorm — under $150, good reviews, delivered by Friday. Forty-five minutes later, we'd been through Amazon, Walmart, three Reddit threads, and a TikTok spiral full of suspiciously enthusiastic five-star reviews. We all recognized that feeling. The modern internet gives you infinite options and makes choosing harder than ever. That frustration became CartIQ.


What it does

Acto is an agentic shopping assistant. You type (or say) what you need in plain language - "ergonomic chair under $150, 4+ stars, delivered by Friday" - and the agent handles the rest:

  • Chat intake: Nova asks smart follow-ups to clarify your budget, deadline, and must-haves
  • Live search: crawls Amazon, Walmart, eBay, and Reddit in real time and validates every URL
  • Scored shortlist: ranks products with a transparent match score (0–100) backed by Bayesian averaging and Wilson lower bound confidence intervals — not LLM guesswork
  • Review intelligence: deduplicates cross-source reviews, flags paid promotions, and surfaces verified pros/cons
  • Side-panel chat: after results load, the chatbot moves to a persistent side panel so you can ask follow-ups without losing your results

How we built it

Stack: Next.js frontend · FastAPI backend on ECS Fargate · Aurora PostgreSQL + Redis · Amazon Nova (Act, 2 Omni, Sonic) · LangGraph · Playwright · AWS Bedrock + Chroma DB

The core is a LangGraph state machine — 8 specialized agents passing a shared state object through the pipeline:

Concierge → Planner → CoverageAuditor → EvidenceCollection → ReviewIntelligence → VisualVerification → PriceLogistics → Decision

The scoring engine is purely mathematical. To solve the asymmetric ranking problem (5 stars / 2 reviews vs. 4.6 stars / 500 reviews), we implemented a Bayesian average combined with the Wilson lower bound confidence interval:

Nova handles conversation, summarization, and HTML-parsing fallback — it never scores, never ranks, and never invents URLs. All ranking logic lives in Python.


Challenges we ran into

  • Anti-bot walls on live sites forced us to build a fail-open (demo) / fail-closed (prod) crawl strategy so the pipeline never silently returns garbage
  • Review spam required Jaccard similarity deduplication across sources, hard isolation of TikTok into visual-only signals, and affiliate penalty scoring
  • Category noise — searching "standing desk" returns desk mats and cable organizers — solved with rule-based pre-extraction filtering
  • Keeping the LLM honest: deciding where not to use Nova was harder than deciding where to use it. Handing scoring to an LLM produced inconsistent, hallucinated rankings; switching to Wilson + Bayesian fixed it immediately

Accomplishments that we're proud of

  • A scoring engine grounded in peer-reviewed recommender systems research (Wilson 1927, Jindal & Liu 2008, SemEval 2014) — not vibes
  • An 8-agent pipeline that is fully auditable: every factor contributing to a product's score is shown to the user
  • Nova Act navigating real product pages, reading the screen, and pre-filling checkout forms - stopping just before "Pay" for user approval
  • Nova 2 Omni catching blurry, AI-generated, or color-mismatched product images before they reach the shortlist

What we learned

  • Agent specialization beats monolithic prompts. Eight small agents with clear contracts are far easier to debug than one giant prompt trying to do everything.
  • Math beats vibes for ranking. The moment we replaced LLM-narrated scores with Wilson + Bayesian, output quality became reproducible and trustworthy.
  • Cache everything, fail gracefully. URL-hash caching with 24h TTL made repeat demo runs instant and eliminated rate-limit anxiety.
  • UX detail matters: moving the chatbot into a persistent side panel after results load — late in the build — transformed the product from a search tool into a genuine shopping conversation.

What's next for Agentic Shopping Assistance

  • Price Drop Monitor — add items to a pending cart; the agent watches for 48 hours and notifies you when the price drops or a promo code appears
  • Décor Visualizer — upload a photo of your room, and Nova 2 Omni places the product in your space at real dimensions with purchase links
  • Chrome Extension — auto-fills checkout fields and selects the best shipping option, pausing before "Pay" for your approval
  • Review fraud detection (V2) — network-effects anomaly detection to catch coordinated bot-review campaigns at the graph level

Built With

  • amazon-cognito
  • amazon-nova-(aws-bedrock)
  • aws-bedrock-(amazon-nova)
  • bedrock-knowledge-bases
  • browser-speech-recognition
  • caddy
  • chroma
  • docker
  • docker-compose
  • ec2
  • fastapi
  • langchain
  • langgraph
  • lucide-react
  • next.js
  • next.js-15
  • python
  • react
  • react-19
  • recharts
  • redis
  • scraping
  • sqlite
  • tailwind-css
  • typescript
Share this project:

Updates