All projects

ARCS Dental — Inventory & Purchasing System

Tablet counting UI + Flask API + Playwright/Henry Schein cart automation — end-to-end with documented handover.

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