Isaac DanielIsaac Daniel
Back to Blog
Isaac June 2026 10 min read

Barcode Lists: A Shared Workflow for Calgary Coop

A Monday-morning scanning problem at Calgary Coop turned into a shared Chrome extension with AI-powered OCR, realtime sync, and 24 commits of iteration over three months.

Chrome Extension
AI/OCR
Internal Tool
B2B
Realtime

What is Barcode Lists?

Barcode Lists is a Chrome extension I built for Calgary Coop store personnel. It centralizes barcode storage, enables shared access across the team, and uses AI to extract barcodes from images and spreadsheets.

It started as a Monday-morning fix. It ended as a 24-commit project on the Chrome Web Store, used across multiple store locations.

This post is the builder's log — why I built it, how my colleagues used it, the feature deep-dives, the bugs I had to fix, and the full changelog from v1.0 to v6.0.

Fig 1 — Barcode Lists popup. Lists on the left, barcodes on the right, AI extraction button at the bottom.

Why I Built It

Calgary Coop store personnel scan barcodes every Monday as part of inventory operations. Before Barcode Lists, those barcodes lived in personal notes apps, screenshots, or just memory.

The problem: barcodes were siloed per individual. A barcode scanned on one shift would get re-scanned on the next because no one else knew it already existed. Manual cleanup was eating into Monday mornings.

The store team needed three things:

  • A shared barcode database, accessible by every authorized staff member.
  • A way to extract barcodes from images and spreadsheets without typing them in by hand.
  • Real-time sync, so a barcode saved on one device shows up on every other device immediately.

A Chrome extension was the obvious form factor. All store operations already happen in the browser. No app install friction, no native build, no MDM push. Manifest V3 gave us security and performance out of the box.

"If the barcodes are lost between shifts, the work was lost between shifts. A shared store wasn't a nice-to-have — it was the whole point."

How It Helped My Colleagues

The most useful feedback I got wasn't about a feature I designed. It was about the absence of a problem.

Monday scanning got faster

Store staff stopped re-scanning barcodes that were already in a colleague's list. The first week of rollout, the team estimated it cut their Monday scanning session by roughly a third.

No more lost barcodes between shifts

The shared database meant a barcode scanned on Saturday afternoon was still there on Monday morning. Before Barcode Lists, this wasn't guaranteed.

Image-to-list in seconds

A photo of a printed barcode sheet used to mean typing each code by hand. With the AI extractor, staff pasted the image and got a clean list in a few seconds.

Cross-device without thinking about it

Realtime sync meant the same list showed up on every device logged into the store account. Staff didn't need to remember which phone or laptop they used last.

Adoption note: the extension stayed at 4 active users across Calgary Coop locations — small in absolute terms, but every Monday scan went through it. Internal tools don't need to scale. They need to fit the workflow.

Feature Deep-Dives

The feature set grew organically. Each of the four below started as a real complaint I heard from store staff.

Shared Barcode Database with Login Auth

Clerk handles auth, Supabase holds the data, Manifest V3 keeps the extension secure. A barcode saved by one user is visible to every other authorized user in real time. The shared store is the foundation — everything else assumes it's there.

AI-Powered Image & Spreadsheet OCR

This was the most-requested feature after the shared store. Staff could paste a photo of a printed barcode sheet, a screenshot of a spreadsheet, or even a noisy image that mixed barcodes with invoice numbers. The AI extracted the barcodes, then a post-filter dropped anything that didn't match barcode length and charset rules.

Intelligent Barcode Cleaning

The OCR pass had a tendency to include invoice numbers and stray whitespace. A second pass scanned the extracted values, kept the ones that looked like valid barcodes, and silently discarded the rest. Staff stopped having to clean up after the AI.

Realtime Sync + Status States

Polling, not websockets — the volume didn't justify the complexity. Polling gave us a 'new list arrived' glow, font-color change on copy, red glow for important lists, and an 'opened' status that stuck. The little touches added up.

Per-List Comments

A small feature, but it removed a Slack thread per scan. Each barcode can carry a short comment, stored locally and remotely, so the next person on shift knows why it was added.

Fig 2 — A list with the "important" glow, opened status, and copy action visible.

Bugs I Fixed

The changelog hides the actual work. Most of the late commits are fix-on-fix, not new features. Here are the four bugs that cost me the most time.

01

Phone list sync collision

Phone lists were clobbering the empty list state in the extension. Fixed by switching to a per-list key and treating empty as a first-class state rather than a missing entry.

02

New list ordering

Newly added lists were being inserted at the wrong position. Reordered the insertion path so new entries land where the user expects them in the sidebar.

03

Notification noise

Toasts and badge counts were firing too often. Added deduplication + a state guard so a user only sees a toast for genuinely new content.

04

AI extraction accuracy

Initial OCR pass returned noisy barcodes mixed with invoice numbers. Tightened the model prompt and added a post-extraction filter to drop anything that didn't match barcode length/charset rules.

"The fix commits tell you where the real work was. The feature commits are the easy part."

Changelog

Twenty-four commits over three months. Grouped by release phase rather than individual commit, but every change is here.

v1.0Mar 31 2026

First commit. Supabase backend live.

  • Supabase backend wired to save lists and numbers
  • Manifest + project structure scaffold
  • Documentation pass before any feature work
v1.xApr 3 – Apr 5 2026

AI extraction pipeline + UI cleanup

  • OCR feature using AI for image-to-barcode
  • Lazy loader added to keep popup snappy
  • TCO UPC parser using AI for noisy scans
  • UI pass — removed the floating add button
v1.xApr 7 – Apr 23 2026

Polish + comments

  • Improved AI detection (still needs testing)
  • Updated AI model for better accuracy
  • Added comment button on barcodes (local + remote)
  • Manifest + README updates
v2.xMay 13 – May 16 2026

Realtime + status states

  • Realtime polling to live-update newly added lists
  • Icon-only buttons across the popup
  • Toast notifications + notification badge
  • Glow effect for new remote lists
  • Font color changes when a barcode is copied
  • Red glow for 'important' lists
  • Opened status for opened lists
  • Fixed: new list being added to the top
v3.xMay 17 2026

Manifest hardening

  • Manifest updated for new + opened status fixes
v3.xMay 25 2026

Phone-list sync fix

  • Fixed phone lists overriding the empty list in the extension
v6.0Jun 17 2026

Cloud-first sync + per-op increments

  • Cloud-first sync model
  • Incremental per-operation updates
  • Category order persisted across devices
  • * prefix reserved for important lists

What's Next

Barcode Lists is live and stable. Here's what I'd build next if the team needed it.

Multi-store rollout

Same shared-store model, but scoped per location. One extension, many isolated stores.

Batch export

Export a list as CSV or directly into the inventory system the store already uses.

Offline mode

Cache the active list locally so scanning keeps working in dead zones.

Better mobile handoff

Tighten the phone-scanner companion app so it never collides with the empty list state again.

Try Barcode Lists

It's live on the Chrome Web Store and open source on GitHub. If you run a team that scans the same barcodes repeatedly, it might save you a Monday morning.