Yo en su día aprendí Vue y más o menos lo controlo y es lo que uso para UIs de proyectos web. Ahora me da pereza aprender otra cosa porque no lo necesito, pero React sería una opción lógica porque tiene soporte muy sencillo a dispositivos móviles.
No suelo usar Bootstrap porque es tan utilizado que tus webs parecen iguales a media internet, manías mías. En páginas estáticas sí, es lo más rápido para tener algo bonito y visitable. Pero para páginas dinámicas en Vue la librería que prefiero es Vuetify que es una implementación de Google Material para Vue. Pero sí, nunca toco nada del estilismo aparte de definir el color principal de la web porque ya tenemos bastante con nuestras obligaciones.
Lo que sí que te recomiendo es aprender y usar cuanto antes una store "State Management Pattern" para tener los datos (modelo y acciones) de tu web centralizados en una sola clase compartida. Cuando usas componentes enseguida pierdes dónde está qué variable y quién la está tocando, y las stores te permiten tener la base de datos y las comunicaciones con el servidor centralizadas e incluso debugar fácilmente las llamadas que piden/cambian datos. Pinia (y antes Vuex) son la store de Vue. En React es Redux o Flux y en Angular no estoy seguro. NgRx?
-----Actualizado-----
Una store te añade un poco de complejidad y al principio no entiendes para qué porque los proyectos aún son sencillos. Por eso no te das cuenta de que la necesitas hasta que estás hasta el cuello en un mega-proyecto y no tienes ni idea de cuál de los 150 componentes te está cambiando las variables. Entonces desearías haber diseñado la web con los datos centralizado. Mejor usar las store cuanto antes y acostumbrarte a ellas incluso en proyectos pequeños.
-----Actualizado-----
Para los que no sepan lo que son:
Aunque tú puedes tener, por ejemplo, una lista con los mensajes de un usuario y que un componente X la descargue del servidor y otro componente Y la visualice, en cuanto la aplicación crezca, es muy posible que pierdas dónde está pasando qué. Especialmente si las llamadas al servidor cambian o similar, no sabrás qué componentes tienes que actualizar.
Una store te permite centralizar estas cosas, similar al "modelo" del MVC pero separando aún más las reponsabilidades: para cambiar algo tienes que (1) tu componente pide por favor que se cambie con un "dispatch", (2) las "actions" recogen el dispatch y solo ellas se comunican con el servidor y, si todo va bien, (3) emiten una orden "commit", que la atenderá una función "mutation" que es quien hace el cambio en el "state" de la web, y (4) todos los componentes se enteran de los cambios por la magia de la reactividad de JavaScript.
Esto es Vuex pero los demás son similar. Tú programarías las funciones que responden a las llamadas de "dispatch" y las que atienden los "commits". El state es literalmente el modelo del MVC, que debería ser de "solo lectura" para toda la web menos para las funciones de mutations: nadie puede cambiar nada sin hacer un dispatch. Además como puede ver los debugger tienen un solo punto al que conectarse, lo que te permite hacer pruebas o buscar errores" más fácilmente.

Marcadores