Progress is stored per user per tutorial in the database — status, current step, steps done, steps skipped, completion time. The browser keeps a mirror purely so the launcher paints instantly. Restart and 'reset all progress' write a fresh in-progress row rather than deleting, so the action works for every role without opening delete permissions.
Also called: resume tutorial · training completion · where did I leave off
- 1Writes are debounced per row (roughly one update per step); completion, dismissal, restart and preference changes flush immediately
- 2Leaving the page flushes with keepalive so the last step is not lost
- 3Org and user are stamped server-side before the upsert, so the client only ever sends a tutorial id and its data
- 4Rows are self-scoped: every read passes the user id explicitly so even an admin's own store stays personal
- 5Academy progress writes are exempt from the audit log so a tour cannot bury real actions in it
Training that lives on one device is training a crew leader loses when he starts a lesson at the desk and finishes it in the truck. Progress is saved to the person rather than the browser, so a tour picks up where it stopped on whatever they open next. Restarting is a real reset instead of a half-finished state nobody can clear, and it works for a field worker holding the narrowest permissions in the company — a lesson that cannot be saved is a lesson nobody repeats.
- Browser-only progress vanishes on a different device or after a cache clear
- Restarting a tutorial required permissions a field worker does not have
See it on your own jobs
Twenty minutes, your numbers, no slide deck. We’ll build one of your real buildings in front of you and send you the estimate link at the end — yours to keep either way.
or keep browsing features →