尚未检测到更新。GitHub 发布版本后会显示在这里。
制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗«Твояк» — веб-викторина для компании в духе «Своей игры». Ведущий открывает комнату на ноутбуке или телевизоре, игроки и зрители заходят с телефонов по QR-коду или четырёхбуквенному коду. Приложение ставить не нужно, аккаунты не нужны.
Ведущий сам не играет. Это либо человек в комнате, либо бот. Бот читает вопрос голосом браузера (Web Speech API) и сам засчитывает ответ. Живой ведущий может поправить вердикт с экрана.
clock_timestamp()) пишет ответ. Верный даёт стоимость и право выбора, неверный всегда снимает стоимость, кнопка открывается остальным. Если никто не взял вопрос, эталон показывают всем.ANSWER_CHECK_USE_LLM=true — OpenRouter.Сроки на сервере: 15 секунд на кнопку, 20 на обычный ответ, 25 на «кота», 60 на ставки, 45 на финальный ответ.
Вопрос может быть картинкой, видео или музыкой. Ролик — YouTube с началом и концом, если он не открылся, плеер пробует VK Video и затем Rutube. У музыки бывает шторка: картинки не видно, звук идёт. У живого ведущего есть галочка «Трек включает ведущий».
game_states.version растёт на каждом изменении, чтобы клиенты не затирали друг друга.Экраны опираются на портфолио Đặng Trung Thắng, 22–23: тёмное поле и серая сетка. Страница Behance из этой среды не открылась (403), палитра снята с публичных копий кадров. Свой акцент — лимонная полоска на кнопках и метках. Текст: Manrope и Literata, оба с кириллицей. Ячейка переворачивается, очки догоняют новое значение; при prefers-reduced-motion анимации нет.
Нужны Docker, Node.js 20.9 или новее и Supabase CLI.
npm install
supabase start
supabase status -o env
cp .env.example .env.local
Из вывода supabase status -o env перенесите в .env.local:
| В статусе | В .env.local |
|---|---|
API_URL | SUPABASE_URL |
ANON_KEY | SUPABASE_ANON_KEY |
SERVICE_ROLE_KEY | SUPABASE_SERVICE_ROLE_KEY |
OPENROUTER_API_KEY и OPENROUTER_MODEL для лобби не нужны. Service role остаётся только на сервере.
npm run dev
Откройте http://127.0.0.1:3000 и создайте комнату. На экране ведущего появятся код и QR, список игроков обновляется сам.
Телефон в той же сети не откроет localhost. Запустите сервер так:
npm run dev -- -H 0.0.0.0
Зайдите в браузер ведущего по http://<адрес-компьютера>:3000. QR соберётся из этого адреса.
Дальше на телефоне или во второй вкладке откройте /play/КОД, введите имя и роль. Ник появится у ведущего без перезагрузки. «Ответить» в лобби отвечает, что вопрос ещё не открыт, и показывает серверное время.
Тот же сценарий против локальной базы:
npm run verify:lobby
Скрипт создаёт комнату, сажает 10 игроков, проверяет отказ одиннадцатому, зрителя, что anon не видит эталон ответа и секреты, и что из двух одновременных нажатий побеждает более раннее серверное время. В конце тестовая комната удаляется.
curl -s http://127.0.0.1:3000/api/answer-check \
-H 'content-type: application/json' \
-d '{"given":"Ёлка!","expected":"елка"}'
{
"correct": true,
"method": "exact",
"similarity": 1,
"llmUsed": false,
"scoreEffect": "add"
}
Сначала текст нормализуется: регистр, ё → е, кавычки, дефисы, лишние пробелы. Потом нечёткое сравнение. Если ответ близкий, но не достаточно, и в окружении ANSWER_CHECK_USE_LLM=true (или 1), сервер спрашивает модель через OpenRouter. Без флага, ключа или модели вызова нет. scoreEffect: "subtract" значит, что ошибка снимает очки; сами очки в M0 ещё не пишутся в счёт.
Это заглушка: эталон приходит в теле запроса. В игре он останется в базе, клиент его не увидит.
Тесты нормализации:
npm test
npm run dev — разработкаnpm run build и npm start — сборкаnpm test — нормализация и нечёткое сравнениеnpm run lint — ESLintnpm run format — Prettiernpm run verify:lobby — лобби и buzz на локальном SupabaseПосле правки .env.local перезапустите npm run dev: URL и anon-ключ попадают в браузерный бандл при сборке страницы.
Уже применённый каркас:
supabase/migrations/20261028120000_init.sqlДальше строго по имени файла:
supabase/migrations/20261028200000_gameplay.sql — ход игры, секреты ответов, представление question_boardsupabase/migrations/20261028200100_question_bank.sql — пул вопросовsupabase/migrations/20261028210000_media.sql — картинка, видео, музыка, шторка, «трек включает ведущий»supabase/migrations/20261028210100_media_questions.sql — медиа-вопросыsupabase/migrations/20261028220000_packs.sql — пачки и протоколы проверки以上为 README 的开头部分。其余内容请阅读原文。 查看完整 README ↗