The Challenge: A 6.5M-Record ERP No One Could Safely Change
CoolKit runs a business of roughly 35,000 customers on a legacy stack: a 138-table Microsoft SQL Server Express database driven by a Microsoft Access VBA front end, holding about 6.5 million records built up over years of trading. The structure had grown organically and undocumented, with business rules buried inside SQL triggers and Access VBA. The widest core table alone carried 202 columns.
That made everyday work fragile. Reporting needed specialist knowledge of the schema, modern tools could not integrate cleanly, and no one could change the structure without risking cascading failures.
What We Built: A Clean Platform on Neon Postgres
We started with deep profiling, mapping every table, extracting the business rules embedded in triggers and VBA, and separating live data from cruft left by systems long retired. That audit informed a ground-up redesign: a clean, normalised schema on Neon Postgres, built with Drizzle ORM, TypeScript and Next.js as the CoolerKit platform.
To move the data safely, we built a migration and sync engine with 14 entity translators, a dead-letter queue with replay, checksum-based reconciliation, and an orphan-quarantine table so no record is ever silently dropped. Soft-deleted customers are imported as archived, not discarded.
The Result: A Reconciled First Cutover
The first production cutover loaded the hot entities into the new platform: 35,126 customers, 53,918 contacts, 63,514 quotes and 30,315 builds, alongside a restructured catalogue of around 52,000 parts. Reconciliation held the unresolved residual under 1%, every exception quarantined and traceable rather than lost.
This is a live, in-progress modernisation. The legacy SQL Server and Access ERP still run in parallel while the remaining entities and write-back are migrated, so the business keeps trading on a data foundation it can finally trust.
If your business is running on a legacy database that has become a liability, let’s talk.