Get started / macOS

Your catalogue.
Your computer.

Install once, try a synthetic order, then bring your shop’s own item list. There is no npm install or build step.

These instructions are for macOS. The app was tested on a MacBook Air M2 with 8 GB RAM. Windows and Linux are untested.

Before you begin

What you need

RequirementLocal setup
ComputermacOS 13+, 8 GB RAM; close other apps when memory is tight.
DiskAbout 6 GB free for Ollama, the 4.3 GB model download and swap headroom.
RuntimeNode.js 24 or newer. Zero npm dependencies.
Local modelOllama 0.40.3 tested; default gemma4:e2b-it-qat (4.3 GB download). Faster alternative: qwen3.5:2b-q4_K_M.
InternetNeeded for installation and model download. Matching works with Wi-Fi off.

Without Ollama, the app still runs in fuzzy matching only mode.

01 / Install

Open Terminal on your Mac

With Homebrew available, install Node and Ollama, start the model service, then download the model.

brew install node ollama
brew services start ollama
ollama pull gemma4:e2b-it-qat

Clone the repository, enter the folder and run its tests. If you copied the project folder instead, start with cd parchimatch.

git clone https://github.com/bipul724/parchimatch.git
cd parchimatch
npm test

02 / Try an order

Start with the synthetic shop

npm run app -- --open

One command checks Node, Ollama and the model, starts the app and opens it. It never downloads anything: if the model is missing, it prints the exact ollama pull command and starts with fuzzy matching only. On a fresh setup it loads the synthetic catalogue. Stop it with Ctrl+C.

  1. Your browser opens http://127.0.0.1:5178.
  2. Choose Sample order 03, then Match order.
  3. Read the amber question. For marie 30 wala 20 jodi, choose the intended unit. Confirm the right product and size, or skip an item the catalogue does not stock.
  4. For an unknown shop nickname, correct the product and tick Remember before confirming. lais peela means Lay’s Classic Salted; lays blue means Magic Masala in this synthetic example.
  5. Choose Export CSV. It downloads a CSV and saves a copy in data/app/exports/ for manual import into your billing software.
A fresh setup has not learned the nicknames. The landing-page demo shows the state after those two corrections. In the documented 13-line sample, remembering them changed automatic lines from 6 to 8 and runtime from 28.8 s to 5.3 s, measured with the previous default model (Qwen3.5 4B). This is a synthetic demonstration, not a real shop result. Read the synthetic data card.

03 / Make it yours

Set up your shop’s catalogue

Export your billing item list as CSV or Excel, then convert it to UTF-8 CSV with one row per sellable variant. Keep only aliases your shop already uses; teach unfamiliar shorthand through Remember.

sku,name,brand,variant,mrp,sell_units,units_per_carton,aliases
PRLG-5,Parle-G Biscuit,Parle,₹5 pack,5,packet|carton,144,parle g

The row above is an illustrative synthetic catalogue entry. Its pack details are not verified product information.

ColumnWhat to put in it
skuRequired, unique item identifier.
nameRequired; share the same product name across its variants.
brandOptional brand text, shown to the model.
variantPack description; write sizes like 1 kg, 500 g or 1 L.
mrpNumber; empty means unknown and skips that item’s price check.
sell_unitsRequired; separate allowed units with |: piece, packet, carton, dozen, bag.
units_per_cartonPositive whole number; empty means carton orders require a question.
aliasesOptional existing shop names separated with |.

Save it as data/real/catalog.csv first, then start with the command below. Or use Catalogue → Replace catalogue in the app: an uploaded catalogue loads again after a restart, as long as you start without --catalog. Invalid rows are reported by row number; the current catalogue stays in place until the new file is valid.

npm run app -- --catalog data/real/catalog.csv

Back up data/real/catalog.csv and data/app/. Both shop data directories are gitignored.

Full catalogue and export formats →

04 / Check locally

Turn Wi-Fi off

  1. Start Ollama and the app. Run an order once to load the model.
  2. Turn Wi-Fi off and match a sample order again.
  3. The status should still say Model ready. Hard lines should show the local model badge.

Optionally check the listening interface:

lsof -nP -iTCP:5178 -sTCP:LISTEN

You should see 127.0.0.1:5178. The server has no authentication and is a single-user desktop tool; keep it local.

If something gets stuck

Setup help

After a Homebrew Ollama upgrade, restart its service and check the version:

brew services restart ollama
curl http://127.0.0.1:11434/api/version

Troubleshooting · Full deployment guide and optional login start · Frequently asked questions