Foodly
One-line description:
Foodly is an AI-powered RFQ pipeline messy industrial buyer emails, PDFs, and spreadsheets into accurate, compliant, ready-to-send quotes. A mixture of agents and human in the loop workflows help process and qualify incoming leads through either api calls or onboarded gmail inboxes. Inbound email attachments and messages are normalized into a line-items table and a compliance mapping table for human expert review.
Our data model can be onboarded into other agent harnesses, chat systems, and enterprise apps for end to end RFQ workflow management, saving toil in line-item review, replies, and matching skus. Our platform can be used for small wholesalers and retailers with heavy manual workflows to manage compliance, speed to delivery, customer satisfaction.
Competition Track
Track 2 — RudCo: RFQ to Quote
What We Built
Industrial buyers submit requests for quotes (RFQs) in inconsistent formats. The same item may appear as:
304 SS sheet 16ga 4x8Stainless 304, 0.060 in, 48 x 96
Our solution processes an incoming RFQ and:
- Extracts line items from email bodies and attachments.
- Normalizes each line into a standard schema.
- Retriveres industry compliance requirements and uses ninoo.ai to classify unstructured email and attachements into the right category
- Matches normalized lines against supplier catalog and Skumaster data.
- Prices each matched item against market benchmarks via an internal supplier and compliance lookup call
- Identifies pre-industry compliance requirements, including:
Food
- (EIN)
- State food license
- Certificate of Authority
- Warehouse / Commercial Distribution License
- Generates a ready-to-send payload event and builds out end to end datamodels
- Routes incomplete or uncertain requests to a human or sends the buyer a clarifying question instead of guessing.
Why We Built It
RFQ processing is still highly manual. A person must interpret inconsistent terminology, locate matching catalog items, calculate competitive prices, and verify supporting documentation for every line. This eats into internal review capacity and offsource capacity, with humands often creating errors. This takes alot of time.
Our agent reduces that repetitive work while preserving human oversight for ambiguous or noncompliant requests. The result is a faster quote cycle, more consistent pricing, and fewer costly specification errors.
Accuracy and Uncertainty
Structured Extraction
Every RFQ is normalized into a consistent line-item schema. We retain source metadata—including the attachment, page, table, and original row—so each extracted value can be traced back to the source document.
Classification and Confidence
We use Qwen3.5 OCR through a local NicrronNinoo gateway and evaluation harness to classify and score each document and extracted line item.
Each line receives a match score and one of the following statuses:
pendingparsedmatchedpricedambiguousunmatchedrejected
Compliance Validation
Rule-based checks and regular expressions identify compliance language in the RFQ. The system then queries the compliance service for required supporting documents.
Example response:
| Customer | Document | Description |
|---|---|---|
| NYC Columbia Food Bank | Food Safety Plan (HACCP) | Identifies biological, chemical, and physical production hazards and explains how the facility controls them. |
Task Backpressure and Event Uncertainty
We tested the email ingestion pipeline with a synthetic generator targeting an average throughput of 100 PDFs per second that maintained runs in the entire hackathon
Steady-State Lab Test
| Metric | Result |
|---|---|
| Throughput | 24 RFQs/minute |
| Average file size | 5.2 KB |
| Average page length | 1.7 pages |
| Average output payload | ~33 KB |
The queue decouples email intake from extraction, classification, catalog matching, compliance checks, and quote generation. This allows the system to absorb short traffic spikes without dropping work. Each processing stage records status so interrupted or delayed tasks can be retried safely.
Email Content Uncertainty
Documents are normalized into a single line-item schema before matching and pricing. [LLM/model name] and the NicrronNinoo gateway score each document so low-confidence extractions can be routed for clarification or human review.
Email Content Overfitting
We evaluated and trained the extraction workflow using:
- [X] real RFQ documents
- [Y] synthetically generated documents
- [Open dataset names or URLs]
The test set includes varied layouts, terminology, dimensions, units, material descriptions, and attachment formats to reduce sensitivity to any one supplier or RFQ template.
Pricing and Catalog Matching
Normalized lines are matched against:
skumastercatalogitem_items
The matching pipeline stores the selected SKU, catalog item, confidence score, benchmark price, quoted price, and pricing rationale. Unmatched or low-confidence items are not automatically quoted.
Data Model
The core line_items table records extracted values, source provenance, catalog matches, pricing, uncertainty, and workflow status.
CREATE TABLE line_items (
id BIGSERIAL PRIMARY KEY,
quote_id BIGINT NOT NULL REFERENCES rfq_quotes(id) ON DELETE CASCADE,
line_seq INT NOT NULL,
line_no INT,
rfq_format TEXT NOT NULL
CHECK (rfq_format IN ('numbered', 'spec_ref', 'description_part')),
buyer_part_no TEXT,
description TEXT NOT NULL,
quantity NUMERIC,
unit_of_measure TEXT,
unit_price NUMERIC,
delivery TEXT,
is_option BOOLEAN NOT NULL DEFAULT false,
required_qty_raw TEXT,
source_attachment TEXT,
source_page INT,
source_table TEXT,
raw_row JSONB NOT NULL DEFAULT '{}'::jsonb,
skumaster_id BIGINT REFERENCES skumaster(id) ON DELETE SET NULL,
catalog_id BIGINT REFERENCES catalog(id) ON DELETE SET NULL,
item_item_id BIGINT REFERENCES item_items(id) ON DELETE SET NULL,
match_score NUMERIC,
quoted_unit_price NUMERIC,
extended_price NUMERIC,
market_benchmark_price NUMERIC,
price_rationale TEXT,
line_status TEXT NOT NULL DEFAULT 'parsed'
CHECK (line_status IN (
'pending', 'parsed', 'matched', 'priced',
'ambiguous', 'unmatched', 'rejected'
)),
clarifying_question TEXT,
availability_note TEXT,
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
UNIQUE (quote_id, line_seq)
);
Tools and Technologies
NicrronNinoo
NicrronNinoo provides the AI gateway, evaluation harness, and document classification layer used to normalize and score RFQs.
- Gateway and harness: ninoo.ai
- Classification: nicrron.ai
- Documentation: Nicrron quickstart
Block Convey
Block Convey provides [describe the specific integration and its role in the workflow].
PostgreSQL
PostgreSQL stores RFQs, extracted line items, supplier catalog records, SKU matches, pricing decisions, compliance data, and workflow state.
Connection credentials are intentionally omitted. Store the database URL in a secret manager or environment variable such as
DATABASE_URL.
Additional Technologies
- [Email ingestion technology]
- [PDF/document extraction technology]
- [LLM/model]
- [Queue technology]
- [Backend framework]
- [Frontend framework]
- [Deployment platform]
Service Endpoints
GET /pulls/{email}/state?token=${EMAIL_SERVICE_TOKEN}
GET /pulls/{email}/messages?token=${EMAIL_SERVICE_TOKEN}
GET /?token=${EMAIL_SERVICE_TOKEN}
Team
| Team Member | Role |
|---|---|
| [Name] | [Role and contribution] |
| [Name] | [Role and contribution] |
Demo
- Video demo: [Add video URL]
- GitHub repository: [Add repository URL]
Demo Script
Business Overview — 30 Seconds
Industrial suppliers receive RFQs as inconsistent emails, PDFs, and spreadsheets. Employees currently decode every line, search catalogs, verify compliance documents, and determine pricing by hand. Our agent turns those requests into accurate, explainable, ready-to-send quotes while escalating uncertainty instead of guessing. That shortens response times, improves pricing consistency, and lets sales teams focus on customers.
Technical Overview — 30 Seconds
The system ingests an email and its attachments, extracts each requested item, and normalizes it into a structured PostgreSQL schema. NicrronNinoo classifies and scores the content, then the agent matches each line to SKU and catalog records, calculates a benchmarked price, and checks compliance requirements. High-confidence lines become a quote; ambiguous or incomplete lines generate a clarification request or enter human review.
Submission Checklist
- [ ] Add the final project name.
- [ ] Confirm the one-line description.
- [x] Identify the competition track.
- [x] Explain what was built and why.
- [x] Explain accuracy and uncertainty handling.
- [ ] Add all three synthetic experiment results.
- [ ] Add the maximum tested load.
- [ ] Add the model name and training/evaluation dataset counts.
- [ ] Describe the Block Convey integration.
- [ ] Add all team members and roles.
- [ ] Add the video demo link.
- [ ] Add the GitHub repository link.
- [ ] Rotate the exposed service token and database password.
Log in or sign up for Devpost to join the conversation.