002 / Case study Retail · Bozeman · 2025

Bridger Outfitters: One Postgres replaced four legacy systems

We built ShelfSync — a unified retail platform that consolidated POS, inventory, e-commerce, and payroll into a single Postgres-backed system. Real-time inventory across web and in-store. Four vendor contracts cancelled on day one.

4→1 systems consolidated
0 oversells since launch
$1,400 ↓ monthly vendor costs
Product interface
Product dashboard screenshot

The problem

Bridger Outfitters is a 4,000-square-foot outdoor gear shop on Main Street in Bozeman. Marcus runs a tight operation — two full-time staff, a seasonal hire, and himself. The store has been open since 2019, and the tech stack grew by accretion: Square for POS, Shopify for e-commerce, Gusto for payroll, and a custom Airtable base for inventory. None of them talked to each other.

The consequences were predictable. A customer buys the last pair of Darn Tough socks in the store, and an hour later someone orders the same pair online. The Shopify inventory doesn’t know the store shelf is empty until Marcus manually reconciles at closing. He was doing a full inventory count every Sunday — four hours of scanning barcodes and updating two systems. Oversells happened two or three times a month, each one requiring a refund email, a customer apology, and a hit to the store’s reputation.

Payroll was a separate headache. Marcus was exporting time logs from Square, cross-referencing them with Gusto, and manually entering hours. The seasonal hire’s overtime calculation was wrong three pay periods in a row before anyone caught it.

He was spending $1,400 a month across the four systems — Square’s processing fees, Shopify’s plan, Gusto’s per-employee charge, Airtable’s team plan — and getting a fragmented experience in return.

What we did

Week one we audited every data flow. We mapped every SKU, tax rule, employee record, and integration touchpoint across the four systems. The data model landed on a single Postgres database with Drizzle ORM: products, inventory transactions, orders (in-store and online), employees, time entries, and pay runs. We designed the schema to be the single source of truth — every mutation goes through one API, whether it originates from the POS terminal, the website, or the payroll module.

Week two we built the POS interface. A Next.js app running on the store’s existing iPad, optimized for touch: barcode scan, cart, Stripe Terminal for card processing, receipt by email or print. Every sale decrements inventory in real time. The cashier sees current stock counts inline — no more “let me check in the back” when the system says zero.

Week three was e-commerce. We migrated 340 SKUs and their photos from Shopify into the new system and built a storefront that reads directly from the same Postgres inventory table. When an online order comes in, stock is reserved immediately. When an in-store sale happens, the website reflects it within seconds. Stripe handles both channels through a single account.

Week four we tackled payroll and time tracking. Employees clock in and out on the POS iPad. The system calculates regular hours, overtime (Montana rules), and generates a pay run summary. Marcus reviews and approves; the system generates pay stubs as PDFs. We integrated direct deposit through Stripe Connect so payroll funds move without a third-party processor.

Week five was data migration and parallel running. We imported three years of sales history, ran both systems side by side for a full week, and reconciled every transaction. Zero discrepancies. Week six was training, edge case testing (returns, exchanges, gift cards, partial refunds), and decommissioning the old systems. Marcus cancelled Square, Shopify, Gusto, and Airtable on the same day.

Results

Since launch, Bridger Outfitters has had zero oversells. Inventory is accurate across both channels in real time — the Sunday counting ritual is gone. Marcus estimates he saves five hours a week on reconciliation and payroll alone.

Monthly vendor costs dropped from $1,400 to roughly $200 (Stripe processing fees and Vercel hosting). The consolidated system is faster to operate: a new product goes from unboxing to live on the website in under three minutes, versus the 15-minute multi-system entry process before.

Payroll errors stopped entirely. The seasonal hire’s overtime is calculated correctly every period. Marcus runs payroll in ten minutes on the 1st and 15th instead of the hour-long spreadsheet ritual.

The store’s Shopify-to-in-store return rate was 18% — customers who ordered online and then returned in person because the item wasn’t what they expected. Marcus attributes a drop to 11% to better product pages with accurate stock levels and honest delivery estimates pulled from real inventory data.

In their words

“We were paying four different companies to do things that should be one job. Coldsmoke replaced all of them in six weeks, and I haven't had a customer buy something that's out of stock since. That alone is worth it.”

Marcus Hale Owner · Bridger Outfitters