Я, скорее всего, не открою ничего нового в самой миграции. Поэтому короткое резюме-спойлер:
Мы переводим код на реакт постранично. Отдельные элементы на страницах не переводим.
Всегда будет или легаси страница, или реакт страница. Обвязка (хидер и футер) у нас везде легаси >>>
Микрофронтенды мы не делаем. Вместо этого — четкая структура проекта. Выглядит вот так:

Каждая страницы — это отдельный chunk. На каждой странице, прямо внутри pages/PageName/component хранятся компоненты для каждой конкретной странице.
Если компонент используется больше, чем на 1 странице, то он переезжает в shared.
Chunk загружаем при запросе страницы. В отличие от микрофронтендов, у нас получается единый набор библиотек, что экономит размер бандла.
Так как при подобном переписывании кода получается много, он также выходит под фичей на часть пользователей. Если находятся ошибки, фичу отключают, ошибки правят и выкладывают снова.