Case study

RetailSync SaaS

Full-stack multi-tenant SaaS: POS ingestion, bank statement OCR, and QuickBooks sync in one platform.

  • React
  • TypeScript
  • Redux Toolkit
  • Express
  • MongoDB
  • Docker
  • Vite
  • Google Cloud
The core problem

What needed solving

Multi-location retail operators needed a single system to isolate tenant data, ingest POS exports, process statement PDFs without manual data entry, and hand off finalized records directly into QuickBooks — without bouncing between spreadsheets and carrier portals.

The solution

What I built

RetailSync centralizes authentication, tenant-scoped access, POS analytics, async PDF accounting pipelines, and QuickBooks operations into one coherent platform. Background jobs handle OCR, layout extraction, and artifact generation so the interactive UI stays fast.

A TypeScript monorepo SaaS for retail operations. Handles email/Google OAuth, company-scoped RBAC, POS CSV imports with Georgia sales-tax review, async bank statement PDF extraction via background jobs, and a standalone QuickBooks workspace for contacts, invoices, and reconciliation.

Integration

How it fits together

RetailSync is a TypeScript monorepo: a React + Redux Toolkit client and an Express API share one schema package, so a domain type is defined exactly once. Interactive requests stay fast because heavy work, such as PDF rendering, OCR, and artifact generation, runs as background jobs that write results to cloud storage. Google Sheets and QuickBooks sit behind their own service layers so each integration can fail on its own.

RetailSync SaaS architecture diagram
System architecture

The flow, step by step

  1. Register or sign in with Google OAuth. Create or join a company to enter the RBAC-scoped dashboard shell.
  2. Open the POS workspace and import daily sales CSVs. Review totals, Georgia Troup County sales-tax breakdowns, and monthly analytics.
  3. Upload a bank statement PDF in the Accounting workspace. Async pipeline renders pages, extracts text, builds validation artifacts, and surfaces them for structured review.
  4. Navigate to the QuickBooks workspace to manage contacts, invoices, vendor records, and finalize reconciliation entries.
Problems along the way

What got hard, and what I did about it

OCR is slow, users are not patient

The problem

Extracting a multi-page bank statement inside a request would freeze the UI and time out.

What I did

Built an async pipeline (PDF → storage → OCR jobs → artifact model → review UI) so uploads return immediately and results surface when ready.

One platform, many companies

The problem

Multiple retail operators share the system, and any cross-tenant leak would be unacceptable.

What I did

Scoped every workspace (Dashboard, POS, Accounting, QuickBooks, Settings, Access) to the company through role-based access control.

Types drifting between client and server

The problem

Separate definitions for validation, state, and domain models slowly disagree.

What I did

Moved the schemas into a shared monorepo package consumed by both sides.

Takeaways

What I learned

  • Anything slow belongs outside the request path; background jobs plus a status model keep the product responsive.
  • Tenant isolation has to be designed into the data layer from day one, not added to the UI later.
  • Third-party integrations should be isolated so one failing API degrades a feature, not the whole platform.
Outcome

Where it stands today

Company-scoped RBAC across 6 workspaces: Dashboard, POS, Accounting, QuickBooks, Settings, and Access.
Async statement pipeline: PDF → cloud storage → OCR jobs → artifact model → structured review UI.
Google Sheets and QuickBooks integrations isolated behind service layers so either can fail independently.
Monorepo shared-schema package eliminates drift between client state, server validation, and domain types.

Milestones

  • Auth & onboarding (Phase 0 + 2)

    Email/password, Google OAuth, verification, invite flow, forgot/reset, and QuickBooks-first company creation.

    Shipped
  • POS & sales tax (Phase 1)

    Daily/monthly POS import, analytics, and Georgia Troup County sales-tax review active.

    Shipped
  • Statement pipeline & QuickBooks workspace (Phase 3)

    PDF upload, async OCR jobs, artifact review, and standalone QuickBooks CRUD workspace live.

    Shipped
  • Procurement & invoice reconciliation (Phase 4)

    Planned expansion into deeper invoice OCR and automated reconciliation workflows.

    Planned

Next up

  • Expand statement pipeline into full automated reconciliation with confidence scoring.
  • Build procurement module for invoice CRUD and PO matching.
  • Add multi-location rollup dashboard across company tenants.