all projects / case study 02

PandaSale Events — tournaments and game nights platform

client
events.pandasale.ru, our own product
platform
Next.js 14 + PostgreSQL
role
the entire product: architecture, development, deployment
timeline
spring 2026 — ongoing

Problem

The board game store and its community of players needed one venue: a schedule of game nights and tournaments, online registration with confirmed attendance, tournament results and player ratings — all in the same place.

Solution

A SaaS platform: an events calendar, a builder for registration forms, ELO ratings awarded automatically when a tournament closes and recalculated fairly when results are edited after the fact, a referee interface with a round timer, sign-in by magic link and via VK, game catalog sync with MoySklad, media in Object Storage behind a CDN. Strict typing with no any, every input validated through Zod, unit tests on Vitest.

Outcome

The MVP runs at events.pandasale.ru: events, calendar, ratings, game and table rentals. The architecture is set up to grow into a nationwide platform for stores, clubs and organizers.

// before → after

scope since MVPsignup form + admintournaments, ELO, referee tools
data schema68 tables108 tables

Как мы это делали

Продукт вырос из простой задачи «записать людей на игротеку» и за несколько итераций стал платформой. Схема данных выросла с 68 до 108 таблиц — каждая новая возможность добавлялась поверх работающего сервиса, без остановок и переписываний с нуля.

Из чего он состоит

  • Календарь мероприятий — расписание игротек и турниров, страница события с описанием, правилами и призами.
  • Конструктор форм регистрации — организатор сам задаёт поля, которые нужны на конкретное мероприятие.
  • ELO-рейтинг — очки начисляются автоматически при закрытии турнира и честно пересчитываются, если результат правят задним числом.
  • Судейский интерфейс — таймер раундов, ввод результатов, разбивка по столам.
  • Вход без пароля — magic-link на почту и авторизация через VK.
  • Аренда игр и столов — бронирование на конкретное время.
  • Синхронизация каталога игр с МойСклад — библиотека клуба и товары магазина не расходятся.

Строгая типизация без `any`, валидация всех входов через Zod, unit-тесты на Vitest — платформа рассчитана на рост, а не на демонстрацию.