Training Franchise — 200+ Locations

Anonymized at the customer's request pending a named case study.

At a glance

Industry Sales training, professional development, franchise operations
Size Global, 200+ franchise locations + direct enterprise channel
Engagement Multi-year, ongoing
Stack Kubernetes (AWS) · Postgres · Python (FastAPI + asyncio daemon) · SolidJS · Authentik · self-hosted analytics
PKG role End-to-end design, build, and ongoing operation

The problem

The customer ran two completely different learning management platforms in parallel. The incumbent platform — twenty years of accumulated content, thousands of learners, deeply customized — was being retired in favor of a new strategic platform. But the migration was stuck.

The two LMS vendors had no path between them. Each exposed a different API with a different data model. Course content didn't map cleanly. Learner progress didn't transfer. The franchise hierarchy in the old system didn't exist in the new one. Every previous attempt at a migration plan had ended in "we'll do it manually, organization by organization" — which, with hundreds of organizations to migrate and thousands of learning paths, would have taken years and produced a different broken state in each one.

Underneath the migration problem was a deeper one: leadership had no unified view of the business. Reports came out of two different platforms in two different shapes. Cross-platform questions ("how are franchisees who completed our flagship program performing on the new platform?") were unanswerable. Both vendors offered "their" analytics dashboards. Neither could see the other.

There was also a third system: a communication-coaching SaaS that produced conversation transcripts and behavioral data — an entirely separate vendor with its own dashboard and no path into the operational picture.

What PKG packaged

A private data platform, hosted in a Kubernetes cluster we built and operate, doing five things:

1. Daily aggregation from both LMS platforms. A Python ingestion daemon pulls from both vendor APIs every day. Hundreds of organizations, ~1,500 courses, 5,000+ users, full incremental sync, retried on failure. Source data lands in a canonical Postgres database we modeled around the customer's actual business — not either vendor's schema.

2. An automated migration engine. Customer organizations are migrated from the old platform to the new one one at a time, on a schedule, by an operator that runs every fifteen minutes. The engine handles per-franchisee learning path duplication, course mapping with safety guards against the master-content templates, learner enrollment transfer, and state reconciliation. Every migration is observable. Every failure auto-retries with backoff. Sandler-level master content is protected by hard guards and admin approval.

3. An admin web UI. A SolidJS single-page app, OAuth-authenticated, gives the customer's operations team direct visibility into everything: which organizations are migrated, which are queued, what failed, what reports are available. They can pause sync, trigger a re-run, drill into an audit log, and export any report to CSV — without filing a ticket with us.

4. Cross-platform reports. Dynamic SQL views, registered through the admin UI, surface answers neither vendor's dashboard could produce on its own: user-schema reconciliation across both LMS platforms, attendance correlated against virtual classroom data, completion patterns by franchise, retention curves by region.

5. AI-driven communication coaching analytics. A separate ingestion pipeline pulls daily from the communication-coaching SaaS into the same cluster. Conversation transcripts and behavioral metrics feed a dedicated dashboard, with AI-driven analysis on top — running against models we deploy in the customer's cluster, not against a third-party AI service.

The result

  • Hundreds of organizations migrated, with the rest queued and progressing daily
  • Zero data loss during migration — every failure is recoverable, every action is audited
  • Unified operational reporting for leadership for the first time
  • One platform running on a fixed monthly run-rate, replacing what would have been a multi-year manual project plus a separate analytics vendor plus a separate AI tool plus the integration tax of stitching all three together
  • All data in one place, owned by the customer, in a cluster they could take over tomorrow if they wanted to

Anonymous quote

"We had two LMS vendors who couldn't talk to each other and a third coaching tool we couldn't see at all. PKG built us a single platform that runs all three and shows us things neither vendor's dashboard ever could. They run it; we use it."

— VP, Operations, training-industry customer

What this engagement demonstrates

Most of what PKG does fits inside this one engagement:

  • Custom Kubernetes environment — single-tenant, dedicated cluster on AWS
  • Custom applications — Python data daemon, FastAPI admin API, SolidJS admin UI, all built for this customer
  • Enterprise data migration — the migration engine itself, plus the underlying ingestion pipelines
  • AI-native data repository — unified Postgres canonical store, AI-driven analysis layered on top, all running in the customer's environment

Different customer, different industry, different sources — same packaged solution.

Talk to us about your data →