Б
Белиберда
ООО «23 программиста»

Описание функциональных характеристик

Мобильное приложение «Белиберда»

Версия приложения1.0.3 (сборка 9)
Дата составления18 сентября 2026 г.
ПравообладательООО «23 программиста»
ОГРН 1225400010670, ИНН 5473003039, КПП 547301001
Адрес правообладателя633010, Новосибирская область, г. Бердск, ул. Ленина, д. 69, офис 306

1. Общие сведения

1.1. Наименование

Полное наименование: мобильное приложение «Белиберда».

Идентификаторы в магазинах приложений:

Платформа Идентификатор Магазин
Android com.devs23.nonsense RuStore, Google Play
iOS / iPadOS id6774589652 App Store

Страницы приложения:

RuStore: https://www.rustore.ru/catalog/app/com.devs23.nonsense

App Store: https://apps.apple.com/us/app/белиберда/id6774589652

Google Play: https://play.google.com/store/apps/details?id=com.devs23.nonsense

Сайт: https://beliberda.23devs.ru/

Руководство пользователя: https://beliberda.23devs.ru/docs/beliberda-user-guide.pdf

1.2. Назначение

«Белиберда» — мобильное игровое приложение (party-игра) для одного или нескольких участников. Игроки по очереди отвечают на короткие вопросы («КТО?», «ГДЕ?», «ЧТО СДЕЛАЛ?»), не видя контекста истории и ответов друг друга. После последнего ответа приложение подставляет все ответы в заранее подготовленный текст сценария и показывает готовую юмористическую историю, которой можно поделиться.

1.3. Класс ПО

Класс программного обеспечения по классификатору Минцифры России: 05 «Прикладное программное обеспечение», подкласс 05.03 «Игры и развлечения».

1.4. Область применения и пользователи

Досуг и развлечение. Пользователь — физическое лицо, владелец мобильного устройства. Специальной подготовки не требуется. Регистрация и учётная запись не нужны.

2. Функциональные характеристики

2.1. Перечень функций

  1. Выбор роли рассказчика (профиль). При первом запуске пользователь выбирает одну из шести «масок» (три мужские, три женские). Маска задаёт грамматический род рассказчика и подставляется в текст истории. Выбор хранится на устройстве и меняется в любой момент.
  1. Выбор режима игры. «Один» — все ответы даёт один пользователь; «Команда» — вводятся имена участников, ответы даются по очереди с передачей устройства.
  1. Выбор сценария. Каталог из 18 сценариев в шести жанрах (романтика, фантастика, работа, детектив, школа, вечеринка). 12 сценариев бесплатны, 6 объединены в платные тематические пакеты.
  1. Ввод ответов вслепую. Игрок видит только короткую подпись вопроса и не видит текст истории, в который попадёт ответ.
  1. Экран передачи устройства (командный режим). Скрывает ответ предыдущего игрока и называет следующего.
  1. Формирование истории. Ответы подставляются в шаблон сценария с учётом рода рассказчика и позиции ответа в предложении (см. раздел 4).
  1. Экспорт результата. Сохранение истории как изображения и отправка через системное меню «Поделиться»; при недоступности — копирование текста в буфер обмена.
  1. Отправка материалов разработчику (только по явному действию пользователя): идея нового сценария, картинка результата в «предложку», отзыв о приложении.
  1. Покупка платных пакетов сценариев (сборки для App Store и RuStore) и восстановление ранее совершённых покупок.
  1. Запрос оценки приложения — после третьей завершённой игры приложение спрашивает «Подняли настроение?». Ответ «Всё супер!» открывает системное окно оценки и отзыва магазина (App Store, Google Play или RuStore — в зависимости от сборки); ответ «Есть косяки» позволяет написать отзыв разработчику. При ответе «Позже» вопрос повторяется с увеличивающимся интервалом.
  1. Экран настроек: восстановление покупок, ссылки на политику конфиденциальности, условия использования, каналы проекта, номер версии.

2.2. Порядок экранов

Экраны проходятся по порядку: Приветствие → Настройка игры → Выбор сценария → Ввод ответа → Результат. В командном режиме после каждого ответа показывается экран передачи устройства. С экрана приветствия также открываются Настройки.

Экран Назначение
1 Приветствие (WelcomeScreen) Заголовок, выбранная роль, переход к игре и настройкам; при первом запуске — выбор роли
2 Настройка игры (SetupScreen) Режим «Один»/«Команда», ввод имён участников, смена роли на раунд
3 Выбор сценария (ThemeScreen) Карточки сценариев, фильтр по пакетам, покупка пакета, отправка идеи сценария
4a Ввод ответа (AnswerInputScreen) Подпись вопроса, поле ввода, индикатор прогресса
4b Передача устройства (PassPhoneScreen) Скрытие предыдущего ответа, имя следующего игрока
5 Результат (ResultScreen) Готовая история с выделенными ответами, «Поделиться», «Играть снова»
Настройки (SettingsScreen) Восстановление покупок, юридические ссылки, версия

3. Архитектура

3.1. Технологическая основа

Компонент Значение
Язык программирования Dart 3.11
Фреймворк Flutter 3.41 (единая кодовая база для Android и iOS)
Управление состоянием Riverpod 2 с генерацией кода
Модели данных неизменяемые классы (Freezed)
Хранение данных локальное хранилище «ключ–значение» ОС (SharedPreferences на Android, NSUserDefaults на iOS)
Серверная часть отсутствует

Приложение работает полностью автономно: игровой процесс не требует подключения к сети. Сеть используется только для необязательных функций (раздел 5).

3.2. Структура исходного кода

Каталог Содержимое
lib/screens/ экраны пользовательского интерфейса (один файл — один экран)
lib/providers/ провайдеры состояния: игровая сессия, профиль, покупки
lib/models/ модели: игровая сессия, сценарий, вопрос, роль
lib/logic/ движок сборки истории (result_builder.dart)
lib/data/ встроенный контент: сценарии и метаданные пакетов
lib/services/ локальное хранение, аналитика, покупки, отправка сообщений
lib/services/billing/ абстракция магазина приложений и её реализации
lib/widgets/, lib/theme/, lib/utils/ общие элементы интерфейса, оформление, вспомогательные функции
test/, integration_test/ автоматические тесты

3.3. Слои

  1. Представление — экраны и виджеты Flutter. Не содержат бизнес-логики, читают состояние через провайдеры.
  1. СостояниеGameNotifier (игровая сессия), ProfileNotifier (роль), PurchaseNotifier (покупки). Живут всё время работы приложения.
  1. Логика — чистые функции сборки текста истории, не зависящие от интерфейса.
  1. Сервисы — доступ к локальному хранилищу, магазинам приложений, аналитике и сети.
  1. Данные — сценарии, скомпилированные в приложение.

4. Движок сценариев

4.1. Модель сценария

Сценарий (Scenario) содержит:

Пример фрагмента шаблона:

Мысленно я уже отправился [2], но пришлось вернуться к реальности.

...

Ну, а как иначе, я же {подпись}!

4.2. Игровая сессия

Во время игры приложение держит в памяти текущее состояние партии: режим (один игрок или команда), имена участников, чья сейчас очередь, роль рассказчика, выбранный сценарий, уже введённые ответы и номер текущего вопроса.

Партия последовательно проходит следующие состояния:

Состояние Что происходит
Ожидание Сценарий ещё не выбран.
Ввод ответа Игрок видит короткий вопрос и вводит ответ.
Передача устройства Только в командном режиме. После каждого ответа экран скрывает введённое и называет следующего игрока; после нажатия «Я ГОТОВ!» снова открывается ввод ответа.
Завершена Получены ответы на все вопросы — открывается готовая история.

Каждый введённый ответ сохраняется по порядку, лишние пробелы по краям удаляются. Когда ответов становится столько же, сколько вопросов в сценарии, партия завершается. В командном режиме вопросы достаются участникам по кругу: первому, второму, …, последнему, затем снова первому.

4.3. Хранение ответов

Ответы хранятся только в оперативной памяти в течение одной игровой сессии и на устройство не записываются. При начале новой игры или возврате на главный экран они удаляются. Наружу ответы попадают лишь в составе готовой истории и только по явному действию пользователя («Поделиться», «Отправить в предложку»).

4.4. Алгоритм подстановки

Сборка выполняется функциями buildResultText (текст для экспорта) и buildResultSpans (текст для отображения с подсветкой ответов) в lib/logic/result_builder.dart. Обе функции используют одинаковые правила, поэтому текст на экране и в экспорте совпадает.

  1. Выбор варианта по роду. Если роль рассказчика женского рода и у сценария есть женский вариант, берутся его шаблон (и вопросы, если заданы); иначе — вариант по умолчанию. Род выбирается один раз на всю историю.
  1. Подстановка роли. Токен {роль} заменяется на название роли («ёжик в тумане»), токен {подпись} — на развёрнутую фразу от первого лица («ёжик — я и не из такого тумана выходил»).
  1. Подстановка ответов. Каждая метка [n] (регулярное выражение \[(\d+)\]) заменяется на n-й ответ. Отсутствующий ответ заменяется на ???.
  1. Коррекция регистра. Если перед меткой стоит конец предложения (., !, ?, , перевод строки, в том числе за закрывающей кавычкой) или метка открывает текст, первая буква ответа делается заглавной. Остальной текст ответа не изменяется.
  1. Оформление. На экране результата ответы выделяются фоном-«маркером»; в экспортируемом тексте выводятся без разметки.

4.5. Контроль корректности контента

Автоматический тест проверяет каждый встроенный сценарий в каждом варианте рода: число меток [n] совпадает с числом вопросов, отсутствуют неизвестные токены в фигурных скобках. Ошибка в сценарии блокирует сборку релиза.

5. Внешнее взаимодействие

Направление Когда Что передаётся
AppMetrica (ООО «Яндекс») в ходе работы обезличенные события: начало/завершение/экспорт сценария (идентификатор сценария, режим, число игроков), события покупок
API ВКонтакте (ООО «ВК») только по действию пользователя текст идеи сценария, текст отзыва или изображение истории; анонимный случайный идентификатор установки, платформа и версия ОС
App Store (Apple) покупка / восстановление; оценка приложения запросы к платёжной системе магазина; системное окно оценки и отзыва App Store
Google Play (Google) оценка приложения системное окно оценки и отзыва Google Play (In-App Review); только в сборке для Google Play
RuStore (ООО «ВК») покупка / восстановление, оценка запросы к платёжной системе магазина; системное окно оценки и отзыва RuStore
Системное меню «Поделиться» по действию пользователя изображение и текст истории

Приложение не собирает имя, телефон, адрес электронной почты, геолокацию, контакты. Имена участников командного режима хранятся только в памяти и никуда не передаются. Весь обмен ведётся по HTTPS.

6. Данные, хранимые на устройстве

Ключ Содержимое
profile_persona, profile_onboarded выбранная роль, признак прохождения первого запуска
purchase_owned_packs идентификаторы купленных пакетов (кеш, источник истины — магазин)
review_* счётчик завершённых игр и параметры показа запроса оценки
install_id случайный анонимный идентификатор установки (6 байт), создаётся при первой отправке сообщения

Данные удаляются вместе с приложением.

7. Совместимость и системные требования

Параметр Android iOS / iPadOS
Минимальная версия ОС Android 8.0 (API 26) iOS 15.0
Целевая версия ОС Android 16 (API 36) актуальная
Архитектура процессора arm64-v8a, armeabi-v7a, x86_64 arm64
Свободное место не менее 150 МБ не менее 150 МБ
Оперативная память от 2 ГБ от 2 ГБ
Сеть не требуется для игры не требуется для игры
Разрешения доступ в интернет

7.1. Варианты сборки

Сборка Магазин Платные пакеты Сервисы Google
Android, RuStore RuStore есть (RuStore Pay SDK) исключены из сборки
Android, Google Play Google Play нет Google Play In-App Review
iOS App Store есть (StoreKit 2) нет

8. Ограничения

© 2026 ООО «23 программиста». Все права защищены.