Бессерверный детектив: создание ARG с пятью шифрами без регистрации и бюджета
Привет, SE7EN. Я независимый разработчик, представляющий собой тандем одиночки и ИИ-ассистента. Наш проект — tempapp.ru, где разворачивается сюжет «дела № 031», сезонного детектива в жанре ARG (альтернативная реальность). Пользователю предстоит отыскать затерянную папку с документами, перехватить весточку от пернатого информатора, изучить чужой дневник образца 1999 года, распутать клубок головоломок и в кульминации осознать, что само расследование таило в себе куда больше смыслов, чем казалось на первый взгляд.
Вся архитектура держится на статическом хостинге. Никаких серверных скриптов, процедур регистрации или баз данных. Затраты на содержание инфраструктуры равны нулю. Ниже я подробно распишу внутреннее устройство проекта и те компромиссные решения, на которые пришлось пойти.
Цели и исходные ограничения
Хотелось реализовать: многоуровневое повествование на 6 эпизодов, персистентность пользовательского прогресса, атмосферный тайминг релизов (тематические ивенты по пятницам), сквозную продуктовую аналитику и устойчивость к паузам — возможность пройти сезон в любой момент без вмешательства администратора.
Технические рамки: статика на базе Object Storage + CDN, единственный разработчик в штате и абсолютное доминирование мобильных устройств у аудитории.
Проблема первая: синхронизация прогресса без учетных записей
Бэкенд отсутствует как класс. Сохранение идет через localStorage хаба, однако вспомогательным страницам с уликами нужно как-то сигнализировать главному модулю о прохождении этапа. Теоретически можно было завязаться на общее хранилище браузера в рамках одного домена, но это напрочь ломает сценарии вроде «улика найдена со смартфона, а сводный хаб открыт на ПК», да и в целом выглядит довольно хрупко.
Найденное решение: кодовые слова выступают в роли декларативного протокола синхронизации. Завершая главу, сателлит выдает игроку кодовую фразу. Пользователь вводит ее на хабе, после чего система фиксирует улику. Такой подход органично вплетен в лор, превращая служебный механизм интерфейса в элемент расследования.

Логика валидации на хабе выглядит примерно так:
function checkCode(word){ const w = (word || '').toLowerCase().trim(); if (w === 'клевета'){ /* улики 3-5, цель case031_kleveta_hub */ } else if (w === 'протокол'){ /* улики 6-7, цель case031_protokol_hub */ } else if (w === 'голубь'){ /* уже сработало раньше */ } else { /* ложный след, цель case031_wrong_code */ }}
Побочный эффект превзошел ожидания: необходимость вручную переносить слово между вкладками или девайсами создает мощный тактильный эффект работы с реальными вещественными доказательствами.
Проблема вторая: головоломки для человеческого ума
Кампания выстроена так, чтобы заставлять менять когнитивные паттерны, но при этом каждая задача решается подручными средствами:
|
Шаг |
Шифр |
Разгадка |
|---|---|---|
|
1 |
Цезарь +3: «ЁСОЦДЯ» |
ГОЛУБЬ (алфавит 33 буквы, с Ё) |
|
2 |
Морзянка |
КЛЕВЕТА |
|
3 |
Акростих из 8 записей дневника |
ПРОТОКОЛ |
|
4 |
Перестановка «УПШСОИ», ключ 1-7-0-9-1-9 |
ТИШИНА (ключ: дата газеты 17.09.1999) |
|
5 |
Дверь из пяти слов |
ОТДЕЛ |
Азбуку Морзе пернатый вестник отстукивает визуально через мерцание прозрачности изображений (длительность импульса — 170 мс). Ключ шифрограммы зашит в окружение: датировка газетного выпуска 17.09.1999 совпадает с реальной пятницей по календарю. Каноничное время пропасти персонажа — ночь на пятницу. Аудитория замечает и высоко оценивает такие детали.
Проблема третьих: расписание без серверного планировщика
Регулярные ивенты обычно требуют настройки cron-задач в облаке. В нашем случае временная шкала рассчитывается прямо в браузере:
const d = new Date();const isSignal = d.getDay() === 5 && d.getHours() >= 19;
В пятницу в 19:00 интерфейс папки подсвечивается «сигналом», а сателлиты открывают доступ к секретным записям. Никаких таймеров на бэкенде. Да, системное время на устройстве можно изменить, но это сюжетное приключение, а не киберспортивный турнир: честность игрока здесь является частью правил игры.
Проблема четвертая: адаптация под смартфоны
Для десктопных пользователей предусмотрена приятная пасхалка — тайп-трап. Игрок может вводить ключевое слово на клавиатуре в любой точке интерфейса, а кольцевой буфер последних 8 нажатий считывает команду:
buf = (buf + e.key.toLowerCase()).slice(-8);
На мобильных устройствах физической клавиатуры нет, поэтому данный метод не применим. Выходом стали стилизованные элементы ввода: «полевая рация» на сателлитах и консоль ввода кодов на хабе. Тайп-трап остался приятным бонусом для владельцев ПК, никак не блокирующим основной игровой процесс.
Сбор аналитики в бессерверной среде
Вся воронка завязана на кастомные цели Яндекс.Метрики: case031_open, case031_ep1, case031_morse, case031_kleveta_hub, case031_friday9 и так далее. Вызовы обернуты в блоки try/catch, чтобы блокировщики рекламы не нарушали стабильность работы скриптов:
function caseGoal(name){ try { ym(111******, 'reachGoal', name); } catch(e) {}}
Это позволяет отслеживать зоны, где пользователи теряют темп, не собирая при этом лишней чувствительной информации. Идеальный баланс: полная анонимность для аудитории и детальная воронка для автора.
Резюме
На текущий момент готовы три эпизода из шести, суммарный вес которых составляет около 80 КБ статического кода (HTML/JS). Содержание проекта обходится дешевле стоимости минимального VPS. Главные практические выводы:
-
Кодовые слова в качестве протокола синхронизации — это простое, отказоустойчивое кроссплатформенное решение, гармонично вписанное в контекст.
-
Клиентский расчет расписаний отлично работает везде, где манипуляции с часами не ломают игровую экономику.
-
Шифры должны поддаваться разгадке «на коленке». Появление необходимости использовать сторонние утилиты вроде CyberChef резко повышает порог входа.
-
Трекинг через цели аналитики заменяет сложный бэкенд, исключает сбор персональных данных и полностью покрывает продуктовые потребности.
Адрес проекта: https://tempapp.ru (папку с делом предстоит обнаружить самостоятельно). Сезон доступен для прохождения в любой момент, а трансляция сигналов традиционно стартует по пятницам после 19:00.
Готов ответить на любые технические вопросы в комментариях. Вопросы по сюжету оставим за кадром — расследование продолжается, никаких спойлеров.
История самой необычной японской видеоигры
NVIDIA показала возможности RTX Remix для преображения Minecraft
Crimson Desert: Патчноут 2.04.00 (Хотфикс для всех платформ)
В Tomb Raider: Legacy of Atlantis игрокам предоставят необычную свободу настройки сложности
Актёр намекнул на новую часть Mafia или дополнение для The Old Country
Аудитория Call of Duty Modern Warfare 4 на Xbox оказалась на 32% меньше по сравнению с Black Ops 7
ПК-версия Death Stranding 2 On the Beach получила возрастной рейтинг от цензоров
Discord разрешит поисковым системам индексировать публичные сообщения пользователей