Демо
Гость передаёт адрес. API нормализует его, отказывается от частных адресов, смотрит кэш домена и либо отдаёт уже снятую страницу, либо ставит новую в очередь. Ответ гостю не ждёт конца съёмки. Прогресс идёт событиями: что открыли, что прочитали, готово или не вышло.
Снимается отрисованная страница. Аналитику клиента и чужие чат-виджеты на время съёмки глушат: наш прогон не должен считаться визитом, а второй пузырь рядом с нашим убивает единственную фразу, которую демо продаёт. В файл снимка не зашивается ничего нашего. Запрет индексации, заморозка кликов и виджет добавляются в момент отдачи. Так боевой слой на настоящем сайте и демо устроены одинаково: один скрипт поверх нетронутой страницы.
Снимок не вечный. Чужой бренд на нашем домене лежит под случайным адресом, без индекса и с ограниченным сроком. Удаление демо удаляет и файлы. Строка без файлов честно ломается при следующем запросе. Файлы без строки — это чужой сайт, который больше некому стереть.
Тяжёлые страницы упираются в память браузера. Это известный предел маленького контейнера, не повод обещать, что снимется любой адрес в интернете.