Multi-location RV dealership group
Dealership staff get training assigned by title and location inside their own portal
An RV dealership group wanted staff training inside the portal we had built for it, not on a rented platform. We fixed the people data first, so assignments follow the portal's own titles and locations, and kept the tab hidden until the client verified it on staging.
Automotive & DealershipsStaff training moduleModernized a live product
The challenge
Training ran on a third-party platform outside the portal, and job titles that existed there but not in the portal broke course assignments and completion percentages.
What we did
We built an education module into the portal on its own people records, scripted the course library across, documented every title gap and kept the tab hidden until the client verified it on staging.
The outcome
The module replaced the third-party platform for course delivery, assignment and reporting, and went to production the day the client gave its green light, ahead of its own go-live date.
- Replaced
- A rented third-party training platform
- Assigned by
- User, department, title and location
- Migrated
- Courses, topics, steps and tests, audited on staging
- Reports
- Company and location completion, scoped by permission
The starting point
The group sells and services RVs across many locations, and its staff already used an internal portal we had built for the directory, announcements and events. Training ran on a separate third-party platform.
What had to change
The group wanted training inside its own portal, assigned by department, title and location, with reports it could rely on. Job titles in the old platform did not all exist in the portal, and those gaps broke assignments and completion percentages.
What could not break
- Staff keep using the live portal every day while training is built and migrated
- The portal stays the source of truth for users, titles, departments and locations
- The whole course library comes across: courses, topics, steps and tests
- Access follows roles and permissions, read-only users included
- Shared course links open only for signed-in staff, never the public
The calls we made
We treated the move as a data problem before a feature: assignments and reports only work when every user, title and location lines up.
- 01
The portal owns people data
Users, titles, departments and locations come from the portal, so course assignments follow the same records staff see everywhere else in it.
- 02
Reconcile titles before launch
Titles that existed in the old platform but not in the portal broke assignments and completion percentages, so we documented every gap for the client to resolve before staff saw the tab.
- 03
Script the migration, then audit it
Courses, topics, tests and steps were scraped from the old platform into staging by script and audited by our team, with a further scrape scheduled before release.
- 04
Report by company and location
The admin dashboard shows overall company completion and completion per location, and a Statistics tab lets anyone sort by location and department.
Ruled outA progress chart for every course, unreadable for a library that could reach about 300 courses.
- 05
Hidden until the client verifies
The education tab stayed hidden on live while the client checked assignments and progress on staging, and each issue it found was fixed there and confirmed by its IT team.
How the system fits together
What we built
Course builder
Courses made of topics, steps and tests, with forced step order, due dates, expiry, passing scores, random question order, certificates and publish checks, and PowerPoint import that turns each slide into a step.
Assignment and enrollment
Searchable assignment by user, department, title and location, a course library staff can enroll from, course requests with a reason such as promotion or department transfer, and course links that open only for signed-in staff.
Dashboards and reports
Admin and user dashboards with company and location completion, a company-wide Statistics tab, course and user reports with last login and last course activity, CSV and PDF export, and a report permission limited to the locations an admin grants.
Migration scripts
Scripts that scraped courses, topics, tests and steps from the old platform into staging, where our team audited the result before anything reached staff.
How it works
Build
An admin builds a course from topics, steps and tests, or imports a PowerPoint deck with each slide as a step.
Assign
The admin assigns it by user, department, title or location, with a due date and an expiry.
Learn
Staff see their courses and progress on their own dashboard and work through the steps, in a fixed order where the admin sets one.
Certify
A completed course issues a certificate, and staff can request a course they need, with a reason.
Report
Admins see company and location completion, users granted locations read course and user reports, and anyone can check the Statistics tab; reports export as CSV or PDF.
A closer look
What changed
The education module replaced the third-party platform for course delivery, assignment and reporting. It went to production the day the client gave its green light, ahead of the client's own go-live date for the education tab, and training now runs on the same people records as the rest of the portal.
- Ahead of the client's own go-live date
- Went live
- The rented training platform
- Replaced
Under the hood
- Datics role
- Modernized a live product
- Identity and people data
- Staff sign in with company Google accounts, and assignments read users, titles, departments and locations from the portal's own records.
- Permissions
- Role and permission control per module, read-only users kept out until ready, and a separate report permission scoped to the locations an admin grants.
- Migration
- Courses, topics, tests and steps scraped from the old platform into staging by script, audited by our team, with a further scrape scheduled before release.
- Deployment
- React and Node.js with Sequelize and PostgreSQL on AWS, with separate dev, staging and production environments for an internal portal kept out of search engines.
Data and retrieval
Cloud and infrastructure
Apps and APIs
Also in the stack
How it shipped
Requirements and design
Training went into the portal's requirements document, and we designed the course list, course builder, tests, reports and dashboards after studying the old platform's dashboards.
Module build
Courses, topics, steps and tests came first, then assignment by department, progress and reports, built sprint by sprint on the portal's people data.
Client review
The client's IT director reviewed the module with us and set the reporting shape: company and location completion, a Statistics tab, Not Started and Not Published categories and secured course links.
Migration to staging
We moved the course library into staging, documented the title gaps and deployed dashboards, assignment, progress, reports, library and enrollment for the client to verify, with the tab hidden on live.
Pre-production and release
We fixed what the client's testing found, added its requests such as PowerPoint import and assignment modals, audited the migrated data and released to production on the client's green light.
Staging before production
Every release went to a staging site first, with issues fixed there and confirmed by the client's IT team before production.
Client feedback in writing
The client's IT director sent meeting notes after each review, and we answered each point in writing before building it.
Written test cases
We wrote QA test cases for course search, settings, topics, steps and tests, and the client's pre-production requests went into the release rather than a later phase.
What this unlocked
Later sprints added course requests with reasons, an achievements and certificates tab and email notifications. With clean people data and location-scoped permissions in place, the portal holds what any later AI training feature would need first.
Related work
Have a product with the same kind of constraints?
Tell us what already exists and what you want it to do. We will tell you what it takes.
