Ко мне приходят с интерфейсом, в котором сотрудники проводят весь рабочий день: списки на тысячи строк с фильтрами и сортировкой, формы с валидацией, разграничение прав, данные, которые должны обновляться сами. Обычно это два сценария. Либо проект запускается с нуля и нужно сразу заложить архитектуру, чтобы через полгода в него можно было добавлять разделы. Либо фронтенд писали несколько команд подряд, он оброс копиями компонентов, и каждая новая правка ломает соседний экран.
Собираю SPA на Vue 3 с Composition API и строгой типизацией TypeScript. Состояние на Pinia, маршруты с проверкой прав, база компонентов Quasar или PrimeVue. Повторяющееся выношу в общие компоненты: таблица с серверной пагинацией и фильтрами, формы, модалки, уведомления, чтобы новый раздел собирался из готового, а не писался заново. Где нужны живые данные, подключаю WebSocket. Легаси перевожу с Vue 2 на Vue 3, Vuex меняю на Pinia, попутно разбирая дубли компонентов и приводя стили к одному виду.
Интерфейс перестаёт быть узким местом: страницы открываются предсказуемо, новые разделы собираются из готовых блоков, типизация ловит ошибки до выкладки. По этой схеме собран фронтенд платформы мониторинга чрезвычайных ситуаций, которую я запускал с нуля и вёл почти два года: карты, происшествия, реагирование, отчётность, роли операторов экстренных служб.