А в чем проблема-то? Верстайте отдельные блоки, в которых полоса и круг по центру, сверху требуемый текст, и т.д., задайте блоку разные CSS-состояния, .step-completed, .step-selected, .step.-empty, .step-hidden, .step-first, .step-last и т.д., немного напишите на JS, чтобы при клике менять классы.
Чтобы блоки прокручивались по необходимости, их нужно завернуть в еще один блок, которому задать свойство: overflow: visible (потомкам inline-block или с flex-column & flex-wrap: nowrap), а его завернуть в еще один, которому ограничить ширину и задать свойство overflow-x: auto, это классический подход.
Тут просто рутина, какие-то под-задачи может вызовут вопросы, но если что, пишите в комментарии.