One common way is to use "gating". Enable each user based on which the gate value defaulting to the old one. This allows you to keep both versions of your UI in the same codebase, so that you can re-use common code like controllers and data layer. Gates can be backed by your data layer for persistence.
Example: if enabled_for_new_ui(user) show_new_version else show_old_version
Eventually once all your users have transitioned to the new version, get rid of the gates and the old code.