Stack transparency
Built with
Every tool, API, and decision that went into ListingLens — with a one-line explanation of why each was chosen over its closest alternative. Tools aren't chosen by default. They're chosen because they're the right choice for a specific constraint.
48h
Build time
4
AI agents
7
APIs integrated
AI models
Tool
Vs.
Why
Claude Sonnet 4.6
GPT-4V
Dramatically better structured output on rubric-constrained vision tasks. GPT-4V over-justifies; Sonnet gives clean numerical scores when you constrain the prompt. This matters when you're scoring 7 images and need consistent JSON, not essays.
Gemini 2.5 Flash
Perplexity API
AI search visibility needs multi-model coverage — a product can rank on Claude and be invisible on Gemini. Perplexity is web-search-augmented, which would confound the pure LLM visibility test. Flash is cheap, fast, and gives clean conversational responses.
Data sources
Tool
Vs.
Why
SerpAPI
Rainforest API
SerpAPI covers both Amazon reviews and Google Shopping results in one subscription — the benchmarker needs Shopping data, and the review agent needs Amazon review data. Rainforest is Amazon-only. One API key, one billing relationship, two data sources.
Firecrawl
Playwright scrape
Firecrawl handles JavaScript rendering, anti-bot headers, and extraction schemas out of the box. A custom Playwright scraper would require maintaining browser infrastructure. For a 2-day sprint, Firecrawl is the obvious choice.
Image proxy
Direct CDN URLs
Amazon CDN URLs require session cookies to resolve consistently from a server context. The proxy layer fetches, caches in Upstash, and serves with correct content-type headers. Without this, 30–40% of image fetches fail silently.
Infrastructure
Tool
Vs.
Why
Vercel Edge
Railway
SSE streaming works natively via ReadableStream on Vercel Edge with zero configuration. Railway requires a persistent process, which adds cold-start latency and operational overhead. Edge functions also distribute globally.
Upstash KV
PlanetScale / Postgres
Report storage is read-heavy, single-key lookups, with no relational queries. Upstash is serverless Redis — no connection pool management, no idle cost, HTTP-native. PlanetScale would be correct for complex queries; this isn't that.
Vercel AI SDK 6
LangChain
Native SSE streaming, generateObject with Zod validation, and a clean parallel execution model. LangChain adds abstraction overhead and version instability that a 2-day sprint can't afford. AI SDK does exactly what's needed.
Design
Tool
Vs.
Why
DM Sans
Inter / Geist
Inter is table stakes — every SaaS product uses it. DM Sans has slightly more character at large display sizes (the score number at 80px matters) while staying clean at body size. DM Sans is a deliberate choice, not a default.
JetBrains Mono
Fira Code / SF Mono
The agent log lines read as typewriter output — the monospace choice directly shapes how "live" the analysis feels. JetBrains Mono has better readability at 12px than Fira Code, and is more legible than system monospace in the report context.
Tailwind v4
CSS Modules
CSS variable-first theming in Tailwind v4 maps perfectly to the design token system. CSS Modules would require duplicating every token. Tailwind v4's @theme inline block eliminates the gap between design system and utility classes.
On SSE vs WebSockets:The analysis pipeline is strictly unidirectional — after submitting, the client only receives. SSE is the correct primitive. WebSockets would add handshake overhead, complicate the Vercel Edge deployment, and buy exactly nothing in return. The fact that SSE handles reconnect automatically via EventSource's built-in retry is a bonus.
What I'd do next (with 2 more weeks)
- 01Wire the agents to live APIs. The architecture is specced; the image proxy, SerpAPI integration, and vision prompts are all ready to connect. Estimated: 2 days to working MVP.
- 02Add real A/B testing for the synthesis prompt. The brief quality is the core value prop — that prompt needs iteration against real listings, not one-shot instinct.
- 03Anti-bot hardening on the image proxy. Amazon's CDN actively rate-limits headless requests. At scale it needs rotating user agents, request throttling, and a fallback to Rainforest's product image endpoint.
- 04Seller Central OAuth flow. If ListingLens can pull listing data directly rather than scraping public Amazon pages, the data quality and reliability improve by an order of magnitude.