Portfolio Project

Helping online grocery shoppers spot recalled food before checkout.

BiteWise is a full-stack product that turns fragmented government recall data into real-time shopping alerts. It scrapes FDA and USDA FSIS recall records, normalizes them into a searchable database, scores product similarity through a matching API, and displays warnings directly on Instacart product pages.

  • Data pipeline FDA scraping + FSIS API ingestion
  • Matching system Fuzzy scoring with guardrails and freshness filtering
  • User experience Chrome extension warnings on live Instacart product pages

Project Snapshot

What this showcases

  • Problem framing around consumer safety and point-of-purchase UX
  • End-to-end implementation across scraping, storage, API design, and frontend delivery
  • Practical matching tradeoffs between recall coverage and false-positive reduction

Technologies Used

Core tools used to ingest recall data, score matches, serve the API, and deliver the browser experience.

Python Flask SQLite RapidFuzz Chrome Extension

The Problem

Recall information exists, but shoppers rarely see it where they make decisions.

Fragmented public data

Recall notices are published by multiple agencies in different formats, making them hard to unify and hard for consumers to monitor consistently.

No in-context warning

Online grocery platforms usually do not surface recall information directly on product pages, even though that is where the buying decision happens.

Messy product matching

Retail product names do not perfectly match recall wording, so a useful solution needs more than exact string comparison.

The Solution

BiteWise turns recall records into a real-time product safety signal.

I built BiteWise as a local full-stack prototype that connects public recall data to the online shopping experience. The system collects current recall records, stores them in a normalized SQLite database, exposes a matching API, and lets a browser extension flag relevant products directly on Instacart pages.

The matching logic combines fuzzy similarity with practical guardrails such as company-name downweighting, distinctive token overlap, size checks, and a 180-day freshness window to reduce false positives.

Product Demo

Three shopper-facing outcomes inside the browser.

How It Works

A straightforward pipeline from public recalls to in-browser alerts.

BiteWise system architecture diagram
01

Collect recall data

FDA recall records are scraped from the web, while FSIS records are pulled through a public API.

02

Normalize and store

Recall data is cleaned and loaded into SQLite with separate recall and product tables.

03

Match products

The Flask API compares Instacart products against recent recall records using fuzzy scoring and rule-based safeguards.

04

Alert in context

The Chrome extension injects a clear status banner directly into the shopping page.

Technologies

Built as a compact full-stack system.

Data ingestion

Python, Requests, BeautifulSoup

Storage

SQLite with a normalized recall and product schema

API

Flask and Flask-CORS

Matching

RapidFuzz plus custom heuristics and guardrails

Frontend delivery

Chrome Extension (Manifest V3) and vanilla JavaScript

Quality

Unit tests for matcher behavior and API responses

How It Can Scale

The prototype is local today, but the architecture can grow.

Broader retailer support

Extend the browser layer to other grocery and e-commerce platforms with platform-specific selectors.

Automated refresh jobs

Move scraping and ingestion to scheduled background jobs so recall data stays continuously updated.

Production deployment

Swap SQLite for a managed database, host the API, and precompute/cache recall candidates for faster lookups.