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

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

1.

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.

2.

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.

3.

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.