Туннели
Туннель — это путь, разбитый на шаги — регистрация, оформление заказа, продление — который может меняться в зависимости от ответов посетителя. Пакет запоминает, на каком этапе находится каждый посетитель, пропускает их через доступные шаги и возвращает назад, когда они пытаются перескочить вперёд.
Дерево курсоров
Туннель строится как дерево, а не как список. Шаг, доступный из двух мест, — это два курсора, каждый со своим хешем и своими сохранёнными значениями: это позволяет одной ветке расти шагами, которых нет у другой, и то, как вы пришли, отображается в конце каждого туннеля.
Сессия в базе данных
Открытие туннеля создаёт сессию, которую браузер знает только по её id. Она хранит значения, которые сохраняются на шагах, и истекает через день после последнего показанного шага — или раньше, если этот шаг требует этого. Истекшие сессии удаляются планировщиком каждые 15 минут; завершённые и ожидающие сессии сохраняются.
Куда может пойти посетитель
Каждый шаг решает, можно ли его показать и куда отправить посетителя в противном случае. Ссылки и кнопки создаются по одним и тем же правилам, так что ссылка никогда не ведёт на перенаправление назад: нет кнопки «Далее», где дорога разветвляется, нет пути обратно после оплаты, нечего возвращать в закрытой сессии.