If your application makes active use of multiple tabs, it might make sense to use YJS or something, because it's very effective in resolving those types of problems.
However, if your profile edits are single-user only, it's probably overkill to introduce a CRDT. At first glance, it seems the two-tabs-open scenario is your highest source of bugs, so what you could do is use a BroadcastChannel to signal update events to all other tabs.