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 4x8
  • Stainless 304, 0.060 in, 48 x 96

Our solution processes an incoming RFQ and:

  1. Extracts line items from email bodies and attachments.
  2. Normalizes each line into a standard schema.
  3. Retriveres industry compliance requirements and uses ninoo.ai to classify unstructured email and attachements into the right category
  4. Matches normalized lines against supplier catalog and Skumaster data.
  5. Prices each matched item against market benchmarks via an internal supplier and compliance lookup call
  6. Identifies pre-industry compliance requirements, including:

Food

  • (EIN)
  • State food license
  • Certificate of Authority
  • Warehouse / Commercial Distribution License
  1. Generates a ready-to-send payload event and builds out end to end datamodels
  2. 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:

  • pending
  • parsed
  • matched
  • priced
  • ambiguous
  • unmatched
  • rejected

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:

  • skumaster
  • catalog
  • item_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.

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.

Built With

Share this project:

Updates

Submission history