The goal
Staff were counting inventory by hand and re-typing orders into Henry Schein — error-prone and slow. The goal was a tablet-friendly counting UI, a backend that knows par levels, and an automation that pushes SKUs into the supplier cart — end-to-end and handover-documented.
The solution
A three-part system in one repo: a Flask + MongoDB Atlas backend (items CRUD, counting endpoint, audit, user management), a Vue 3 + Vite tablet counting UI (one item at a time with image + pack size + quantity input), and a Python automation (Playwright + reverse-engineered Henry Schein API) that enriches items and pushes shortfalls into the supplier cart.
Highlights
- End-to-end workflow from physical count to supplier cart push
- Tablet-first UI eliminates spreadsheet friction
- Reverse-engineered Henry Schein cart automation
- Documented handover with Phase 1 / Phase 2 boundary
The challenge
Tablet staff can't deal with long lists or complex forms.
Vue 3 flow shows one item at a time — image, name, pack size, numeric input — and auto-advances on commit.
Henry Schein's supplier portal has no public ordering API.
Captured real browser calls (fetch_items_data.js, add_to_cart.js, mfr_search.js) and replayed them via api_client.py with a Playwright-bootstrapped session for cookies.
data/items.json edits + repeat imports created duplicates.
import_items.py upserts by SKU (idempotent); deleted items flip to active:false instead of being removed (history preserved).
Phase 1 automation was already in production — couldn't be touched while Phase 2 UI landed.
src/ automation stayed untouched; backend/ and frontend/ landed alongside with README_PHASE2.md documenting the boundary and queuing Phase 2b work.
What was delivered
- backend/ Flask API + Mongo connector + user management + audit
- frontend/ Vue 3 + Vite tablet counting UI
- src/ Playwright + API automation for Henry Schein
- data/items.json + import_items.py upsert loader
- PROJECT.md vision + README_PHASE2.md handover guide
- .env.example, requirements.txt, frontend package.json
- Run logs under logs/
Results
End-to-end
Workflow
Documented
Handover
12
Item schema fields
What it taught me
- 'One item at a time' UX beats spreadsheets on tablet
- Keeping Phase 1 untouched while Phase 2 lands next to it makes handover zero-risk
- Upsert-by-SKU + soft-delete is a cheap way to keep a data pipeline re-runnable without history loss
