Why I built it
What staff see
Architecture on a ministry budget
Living with Aurora DSQL's rules
The 120-second CloudFront cap
The hard problems were about evidence
A cross-stitch map priced against a duck print
A stand mixer follow-up that seemed to go nowhere
The eBay API detour
A 141-commit pull request
Relists counted twice
An iPod nano with its model number in plain sight
Integration tests that wrote to the live stage
Measured trade-offs instead of invented thresholds
Deleting most of the pricing pipeline in October
A backtest against real staff decisions
- Median absolute error on staff-changed items was 30.0%, against 33.4% for production. The gate was 33% or less.
- Median bias on staff-changed items was 0%, against +30% for production. The gate was within 10%.
- The model cited at least one sale on 73.4% of all items. The gate was 70% or more.
- Total pricing p95 was 38.3 seconds. The gate was 45 seconds or less.
One grounded call
Experiments that didn't ship
What the simple version kept
Tech stack
- Next.js 15, React 19, TypeScript, Tailwind CSS 4, and shadcn components on Radix
- SST 4 and OpenNext on AWS Lambda with response streaming, CloudFront, and Cloudflare DNS
- Aurora DSQL with Drizzle ORM and a custom migration runner, plus S3 presigned uploads
- Better Auth 1.6 with employee, manager, and admin roles
- OpenAI Responses API with strict structured output, validated with Zod 4
- SoldComps completed-sale data, searched in parallel
- Vitest with 398 unit tests, a real-DSQL integration suite, Playwright tests against a mock model server, and GitHub Actions CI that verifies the ARM64 build artifact
- A read-only pricing backtest over real staff decisions