Классный пример, спасибо, сохранил себе в закладки.
Тут сильно зависит от технологий, которые применяются в проекте. Если это стандартный серверный рендеринг, то такое сделать не получится. В данном же случае используется изоморфный фреймворк nuxt.js, который при переходам по ссылкам внутри проекта использует клиентский рендеринг, а при "прямой" загрузке страницы - серверный.
Именно за счет клиентского рендеринга можно хранить глобально определенные данные и делать такие смены интерфейса
Тут 2 подводных камня:
1. Красивые анимации - это всегда сложно и долго для тех, кто с ними плотно не работает.
2. Почти вся информация забирается с сервера, а значит надо при переходе на новые страницы постоянно делать запросы, выполняющиеся определенное время. В этот момент в интерфейсе желательно вставлять какие-то заглушки, которые потом аккуратно будут заменяться на новый контент.