Веб-платформа для вечеринок с двумя играми: Мафия и Русская рулетка. Синхронизация в реальном времени через Firebase, деплой на Cloudflare Pages.
Классическая игра на дедукцию. Ведущий распределяет роли, игроки ищут мафию голосованием.
Роли:
| Роль | Действие |
|---|---|
| 🔪 Мафия | Убивает мирных по ночам |
| ⭐ Шериф | Раскрывает мафию днём |
| 💊 Доктор | Спасает игрока по ночам |
| 😈 Маньяк | Убивает каждую ночь |
| 👯 Путана | Блокирует способность цели |
| 👤 Мирный | Голосует днём |
6 камор, от 1 до 5 пуль. Игроки по очереди нажимают на курок — выживший побеждает.
- Хост настраивает количество пуль перед игрой
- Порядок ходов перемешивается случайно
- После 6 выстрелов барабан перезаряжается
- Побеждает последний живой игрок
- Node.js 18+
- npm
npm install
cp .env.example .env.local # заполни Firebase конфиг
npm run devПриложение: http://localhost:5173
npm run build # production сборка
npm run preview # предпросмотр сборкиПодробно — в FIREBASE_SETUP.md.
VITE_FIREBASE_API_KEY=
VITE_FIREBASE_AUTH_DOMAIN=
VITE_FIREBASE_DATABASE_URL=
VITE_FIREBASE_PROJECT_ID=
VITE_FIREBASE_STORAGE_BUCKET=
VITE_FIREBASE_MESSAGING_SENDER_ID=
VITE_FIREBASE_APP_ID=Скопируй правила из FIREBASE_RULES.md в Firebase Console → Realtime Database → Rules.
Правила разрешают запись в пути
games/(Мафия) иroulette/(Русская рулетка).
Cloudflare Pages — инструкция в CLOUDFLARE_DEPLOYMENT.md.
- Запуши код на GitHub
- Подключи репозиторий в Cloudflare Pages
- Добавь переменные
VITE_*в настройках проекта - Deploy готов
src/
├── pages/
│ ├── Home.tsx # Главная — выбор игры
│ │
│ ├── HostAuth.tsx # Авторизация ведущего (Мафия)
│ ├── HostChoice.tsx # Создать / присоединиться
│ ├── HostEditor.tsx # Настройка ролей
│ ├── HostWaiting.tsx # Зал ожидания (хост)
│ ├── HostGame.tsx # Активная игра (хост)
│ ├── PlayerJoin.tsx # Вход игрока
│ ├── PlayerWaiting.tsx # Ожидание роли (игрок)
│ │
│ ├── RouletteHome.tsx # Лендинг рулетки
│ ├── RouletteHostSetup.tsx # Настройка и зал ожидания (хост)
│ ├── RouletteHostPlay.tsx # Активная игра (хост)
│ ├── RouletteJoin.tsx # Вход игрока в рулетку
│ └── RoulettePlay.tsx # Активная игра (игрок)
│
├── services/
│ ├── firebase.ts # Firebase инициализация
│ ├── gameService.ts # Сервис Мафии
│ └── rouletteService.ts # Сервис Русской рулетки
│
├── types/
│ ├── game.ts # Типы Мафии
│ └── roulette.ts # Типы Рулетки
│
├── utils/
│ └── gameLogic.ts # Логика ролей и генерации кода
│
└── App.tsx # Роутер
| Путь | Страница |
|---|---|
/ |
Главная |
/host-auth |
Авторизация ведущего |
/host-choice |
Выбор режима хоста |
/host-editor |
Настройка ролей |
/host-waiting/:code |
Ожидание игроков (хост) |
/host-game/:code |
Активная игра (хост) |
/player-join |
Присоединение игрока |
/player-waiting/:code |
Ожидание старта (игрок) |
/roulette |
Лендинг рулетки |
/roulette/host-setup |
Настройка рулетки (хост) |
/roulette/host-play/:code |
Активная рулетка (хост) |
/roulette/join |
Вход в рулетку |
/roulette/play/:code |
Активная рулетка (игрок) |
- Главная → Host → введи пароль
7250mafia! - Настрой количество ролей
- Поделись кодом комнаты с игроками
- Нажми Start Game — роли раздадутся автоматически
- Веди игру по списку ролей, делай заметки
- Главная → Play → введи код комнаты и имя
- Жди старта — получишь роль
- Действуй согласно своей роли
- Главная → Russian Roulette → Host
- Выбери количество пуль (1–5 из 6 камор)
- Поделись кодом комнаты — жди минимум 2 игроков
- Нажми Start Game
- Нажимай Pull Trigger за текущего игрока или жди пока игрок сам нажмёт
- Главная → Russian Roulette → Play → введи код и имя
- Жди старта
- Когда твой ход — нажми PULL TRIGGER
- Выживи
games/
{gameCode}/ # Игры Мафии
status, players, roles, ...
roulette/
{gameCode}/ # Игры Рулетки
status, players, bulletChambers, currentChamber, ...
- Дон: @0nlymaxon
- Instagram: @vistula.family
Создано с ❤️ для Vistula Family