02 / 09, 2026
AutoRFP
Menu to procurement automation with live market pricing, supplier outreach, and streamed AI negotiation.
Role
Solo engineer, multi tenant SaaS, agent pipeline, market data grounding
Stack
Next.js 16 · TypeScript · LangGraph · Groq LLaMA 3.3 70B · Prisma · PostgreSQL · Inngest · ChromaDB
Links
The Problem
Restaurant procurement is still dominated by phone calls, emails, supplier guesswork, and spreadsheet comparison. The README positions AutoRFP around the weekly pain of figuring out ingredients, quantities, suppliers, fair prices, and negotiated orders.
Food is often the largest controllable restaurant cost, typically 28-35% of revenue, but small restaurants rarely have price visibility, negotiation leverage, procurement memory, or enough time to shop quotes properly.
The Architecture
01Menu parsing and deterministic portions
Groq extracts dishes and ingredients from menu text or URLs, including hidden cooking ingredients. Quantity calculation is deliberately deterministic, using 40+ ingredient category defaults instead of letting an LLM guess portion sizes.
02Live market pricing and forecasting
Ingredients map to CME, CBOT, ICE, Yahoo Finance, and BLS data where possible. OLS regression over six months of price history produces three month forecasts, confidence intervals, z score anomaly alerts, and buy, wait, or neutral signals.
03LangGraph negotiation system
A typed five node graph runs loadData, orchestrate, analyze, negotiate, and finalize. State slices, deterministic fallbacks, tenant scoped data access, and SSE streaming make the agent pipeline inspectable while it works.
Decisions that mattered
Separate what AI decides from what code should decide
The README is explicit that LLMs are poor quantity estimators. The app lets AI identify ingredients, then uses kitchen portion standards for quantities so procurement math stays stable.
Parallelize supplier quote simulation
Vendor response simulation moved from sequential calls to Promise.all, reducing five supplier wall clock time from roughly 35 seconds to roughly 12 seconds while capping each vendor exchange at one LLM round trip.
Build for tenant isolation and memory
Prisma $extends plus AsyncLocalStorage scopes Menu, RFP, and ProcurementRun records by tenant, while ChromaDB stores completed negotiation outcomes so later recommendations can reuse past procurement context.
The Numbers
5
LangGraph nodes
~12s
5 vendor quote run
40+
portion categories
3
Inngest jobs
What it taught me
The most reliable agentic systems have typed stages, bounded responsibility, and deterministic fallbacks.
A procurement agent becomes more credible when every recommendation is grounded in market data, prior runs, and tenant scoped records.