Client work

/ Case study / Custom LMS

A custom LMS for auctioneer pre-licensing and continuing education

Safock built a custom learning management system for a US auctioneer training school that runs pre-licensing and continuing education courses. The platform ties course access to each student's license states, keeps exams locked until prerequisites are complete, issues certificates automatically, and gives staff a CRM and admin back office. It runs on Next.js and Supabase.

Client
A US auctioneer training school
Name withheld by agreement with the client
Industry
Professional education, auctioneer licensing
Stack
Next.jsSupabaseSupabase Edge FunctionsSCORMxAPI

What it includes

  • SCORM and xAPI
  • State-aware learning paths
  • Built-in student CRM
  • Prerequisite-gated exams
  • Auto-issued PDF certificates
  • CDN and cache versioning
  • Email-matched bulk enrollment
Client work
52CoursesProfessional education, auctioneer licensing

/ At a glance

  • 0152CoursesPlus 11 exams and 8 tracks
  • 022,200+Course completion recordsRecords, not unique learners
  • 03510Exam completions507 passed, across 55 students
  • 0422US states represented

How to read these figures. The project developer supplied these metrics for this case study in October 2026, and they were not independently audited. Roughly 80 users have course activity. Completion and event counts can include several records for one person, and passing an exam on the platform is not proof of state licensure. Reporting periods were not supplied.

On this page
  1. 01One school, several licensing pathways
  2. 02A student experience and the back office behind it
  3. 03Enrollment matched to purchases and license states
  4. 04Engineering decisions behind dependable completion
  5. 05Delivery continued after the core build
  6. 06A working platform with learning activity to show

01The challenge

One school, several licensing pathways

Rules for auctioneer training vary by state and by course, and the school serves students across many states. A course library alone would not do. The platform had to match what each student bought to the right learning path, hold exams back until prerequisites were complete, and keep student records usable for the staff who support them.

Before the build, three parts of the operation leaned on manual work:

  1. 01

    Pre-licensing packages were sold on a separate content site, and every buyer then needed access set up by hand.

  2. 02

    Students needed courses relevant to their license states, while exams had to stay locked until the earlier steps were done.

  3. 03

    Student records lived outside the platformThe school wanted its student database inside the LMS, with imports that matched the structure of the records it already kept.

02The solution

A student experience and the back office behind it

Safock built the learning platform students use and the admin tools staff run it with, then extended it with a CRM, support tools and performance work. Learning follows one flow. A student's license states decide the relevant courses, those courses gate the exams, and passing produces a certificate.

  1. 01

    LearnThe player detects whether an upload is a SCORM or xAPI package, saves progress, resumes where the student stopped and detects completion.

  2. 02

    ProgressOrdered tracks have sections and drag-and-drop ordering, keep their progress separate from standalone courses, and close with a completion popup.

  3. 03

    CertifyPrerequisite gates control exam access, attempts are tracked, and a Supabase Edge Function generates PDF certificates automatically. Tracks have certificates too.

  4. 04

    PublishStaff manage metadata, tags, state restrictions, visibility, bulk uploads and downloadable resources across the catalog.

  5. 05

    OperateThe CRM brings together students, licenses, enrollments, notes and saved filters.

  6. 06

    SupportAdmins can preview a course as a student, or log in as a user to see a problem from their side.

03How it works

Enrollment matched to purchases and license states

Bulk imports bring pre-licensing access records into the platform. Email-matched enrollment then links each record to the right student account automatically, so a buyer no longer waits for a staff member to grant access.

Multi-state onboarding checks course access against each student's license states. Ordered tracks and prerequisite gates guide the student through courses in sequence, and the exam opens only when the required steps are done.

The CRM import was built to match the format of the school's existing student records, so its data could move in without being reshaped first.

04How it works

Engineering decisions behind dependable completion

Students study on phones and laptops, lose connections and close tabs mid-exam. Progress had to survive all of it, content updates had to reach students, and a new package format had to fit the same learning experience. Four decisions carried most of that weight.

  1. 01

    Completion that holdsWe fixed a race condition in the SCORM player, file-type problems with served content, and mobile Safari bugs. Keepalive requests and optimistic UI help an exam completion save even when a student closes the tab.

  2. 02

    Caches updated togetherThe browser and CDN cache and the service-worker cache are versioned as a pair. When a package changes, both versions move, so an older copy of an asset cannot linger.

  3. 03

    xAPI on the existing upload pathAutomatic package detection lets SCORM and xAPI share one upload flow, and students keep their completions when a package changes format.

  4. 04

    Less database work as usage growsWe removed queries that fetched every row and changed security checks to run once per query. Those were identified sources of unnecessary database load; the cost savings were not measured.

05How it works

Delivery continued after the core build

The work kept going after the core platform shipped. From May to August 2026, Safock added the CRM, more admin tools and performance improvements.

A beta feedback tool went in alongside them. Each report captures a screenshot and any JavaScript errors automatically, and 46 reports have come in that way. Staff see what the student saw, which saves the usual back-and-forth of trying to reproduce a problem.

06The outcome

A working platform with learning activity to show

The catalog holds 52 courses, 11 exams and 8 tracks. The reported records show students completing courses, sitting exams and finishing structured pathways.

Read these numbers with the note below. They count records and events, and several can belong to the same person.

  1. 01

    2,200+ course completion records

  2. 02

    510 exam completions, 507 of them passes, by 55 students

  3. 03

    46 track completions, with 80 students enrolled in tracks

  4. 04

    About 69,000 xAPI learning events

  5. 05

    Students across 22 US states

/ FAQ

About this project

What happens to student completions when a package changes from SCORM to xAPI?

Students keep them. The player detects whether an upload is a SCORM or xAPI package, so both formats share one upload path, and completions carry over when a package changes format. The browser, CDN and service-worker caches are versioned together, so students load the new package instead of a stale copy of the old one.

Can course access follow state licensing rules?

Yes. Onboarding checks course access against each student's license states, and staff set state restrictions per course in the catalog. Ordered tracks and prerequisite gates then keep exams locked until the required courses are complete, so each student sees the path that applies to them. Students from 22 US states appear in the platform's records.

Does passing an exam on the platform mean a student is licensed?

No. A platform exam pass records what the student completed in the course, and the platform has logged 510 exam completions, 507 of them passes. State licensure is a separate process, and the platform does not certify it. Students still meet their own state's licensing requirements outside the LMS.

Does exam progress survive a closed tab or a dropped connection?

That was a design goal from the start. Keepalive requests and optimistic UI help an exam completion save even when a student closes the tab, and the SCORM player saves progress and resumes where the student stopped. We also fixed a race condition in that player, file-type problems with served content and mobile Safari bugs.

/ Next step

Need a system like this?

Tell us what you are working on. You will speak with a founder, and you will leave the call with a clear next step, even if that step is not us.

Prefer writing? Send us a brief and a founder will reply.

WhatsApp usBook a call