Our update-safe customization method
Settings and CSS first
Many requests are covered by Tutor LMS settings, which are stored in a single tutor_option option and organized into tabs such as general, course, monetization, design and email. If a setting exists, we use it. Visual changes that only need styling go into the child theme stylesheet.
Hooks and filters second
Tutor LMS calls hundreds of actions and filters as it builds pages and processes enrollments, so many changes can be made from a small site plugin. Examples verified in the source: tutor_student_dashboard_nav and tutor_instructor_dashboard_nav for dashboard menus, tutor_after_login_redirect_url for login redirects, tutor_allow_course_enrollment and tutor_is_enrolled for enrollment decisions, and tutor_user_can_complete_course for completion. Our developer guides show how to use them.
Template overrides third
When markup has to change, we copy the specific template into the theme's tutor/ folder, where the Tutor LMS template loader picks it up before its own. We override as few templates as possible and record the Tutor LMS version each was copied from, so they can be compared after an update.
Plugins for bigger changes
When a customization grows into a feature, with its own settings or data, we package it as a plugin. See custom Tutor LMS development.