Every runner on the start line.

Custom control panel for running events: registrations, bib numbers, promo codes, SMS notifications for participants — no Bitrix, all in one system.

"Before, registrations, bib numbers and participant emails lived across separate tables and Bitrix exports. Now it is one screen — and the team has time for the next race."— running club organizers
8 sections

Control panel screens:

runclub.app/manage/
Registrationsmain panel · 1,240 entries
Total registrations
1,240

Filters by event, search by name/email/phone, one-click CSV export.

Last 7 days
+24% WoW
Completed
982
Paid
Pending
258
Awaiting
Revenue
$31K
Per race
Promo
147
Applied
Ivanov A.10 km · Moscow · +7 999 ***12,500 RUB● paid
Petrova E.21 km · SPB · promo EARLY-152,975 RUB● pending
Sidorov K.3 km · kids · age 8800 RUB● paid
runclub.app/manage/users/
Site usersunified participant base · 4,820 records
Total
4,820
Active
Moscow
2,110
43.7%
SPB
780
16.2%
Other regions
1,930
40.1%
Anna IvanovaMoscow · Strela club · F · 19915 starts● active
Maxim PetrovSPB · no club · M · 19883 starts● active
Dmitry OrlovKazan · Run Volga club · M · 19958 starts● active
Svetlana KozlovaMoscow · Adidas club · F · 199612 starts● VIP
Alexey SokolovKrasnodar · no club · M · 19932 starts● paused
runclub.app/manage/numbers/
Bib numberslinked by email · permanent history
Reserved bib numbers
2,187

Returning participants receive the same number as before. No manual assignment.

Used for current race
982 / 9999
#0007anna.ivanova@mail.ru · since 20235 starts● locked
#0142m.petrov@gmail.com · since 20243 starts● locked
#1024d.orlov@yandex.ru · since 20228 starts● locked
runclub.app/manage/promocodes/
Race promo codesdiscounts, limits, expiry dates
Total
28
Codes
Active
11
Now
Used
147
This race
Discount
$5,160
Total
EARLY-15−15% · until Jul 31 · limit 200147 / 200● active
CLUB-FRIENDS−10% · no expiry · no cap82● active
VIP-2025−50% · until Jun 1 · 50 left48 / 50● running out
SUMMER-FUN−20% · until Aug 31 · 500 cap214 / 500● active
runclub.app/manage/settings/
NotificationsEmail · Telegram · SMS — for participants and the team
SMS sent this month
3,142

Registration confirmations, briefing reminders, bib numbers, schedule changes — plain SMS that reaches everyone.

Delivery channels
SMS · Email · TG
Registration confirmationSMS + Email · automatic100%● live
Bib numberSMS 7 days before race98.4%● live
Schedule changesSMS to selected segmentmanual● on event
Team — new paymentTelegram bot, org chatinstant● live
runclub.app/manage/shop-promocodes/
Shop promo codesapparel, club merch
Shop
142
SKUs active
Codes
7
In use
Orders
312
This month
AOV
$47
+12% MoM
RUNNER-15−15% on apparel · until Sep 3062 orders● active
MERCH-2025−10% on club merch28 orders● active
FRIENDS-FREEfree tee with order $90+14 times● active
runclub.app/manage/panel-users/
Panel users · 2FAroles, TOTP authentication, access control
Accounts
2
Active
Superadmin
1
Full access
2FA enabled
1 / 2
TOTP secret
Session
24h
Auto logout
kouzsuperadmin · last login 2h ago2FA: on● online
adminadmin · last login yesterday2FA: off● offline
runclub.app/manage/profile/
Administrator profilepassword change, 2FA setup
Profile

Login (read-only), name, email for notifications. Password change with current + new + confirm. 2FA enables via password + scanning TOTP QR code.

Authentication speed
with 2FA: 4s
Change password
min 8
Chars
TOTP
Google Auth
Any app
Skip 2FA
by IP
last_login_ip
Session
24h
HttpOnly cookie
01 / 08
4,820participants

In a single base — no dependency on Bitrix exports or Excel sheets.

14days

From first screen to production launch before a major race.

3,142SMS / month

Direct messages to participants — they reach where emails do not.

Section 01 · Registrations

All event entries in one table with instant filters.

Online and offline registrations land in a shared list. Search by name, email and phone is instant. Statuses pending/completed, totals per race, CSV export — for volunteer briefings and reports.

  • Filter by event and search — find a specific participant or segment in a second.
  • Bulk actions — delete, send an email to a group.
  • Manual entry — for offline participants, no cash desk workaround.
  • CSV export — a format volunteers and chip-timing crew understand.
Section 02 · Bib numbers and promo codes

Bib numbers are locked to an email — for life.

Returning participants always get their original number. Promo codes for registrations and the shop run as two separate pools. Percent or flat discount, usage limits, expiry dates.

  • 1–9999 — bib range with auto-check for free slots.
  • Import from history — past assignments migrated in a single batch.
  • Per-event promo stats — clear data for marketing.
  • Two pools — race promo codes and shop promo codes never collide.
Section 03 · SMS notifications for participants

Wired up an SMS channel — for everyone who is not on Telegram.

The runner audience is mixed: about half use Telegram, half do not. We solved both with plain SMS. After registration the participant gets a confirmation; a week before the race — their bib number and meeting point. Schedule changes go out as bulk segmented messages.

  • Plain SMS via a provider — reaches any phone, no app required.
  • Triggered scenarios — registration confirmation, briefing reminder, bib number 7 days before the start.
  • Segmented broadcasts — only participants of a specific distance or event.
  • Delivery logs and cost per campaign — transparent for the budget.
Section 04 · Admin security

2FA for administrators, roles, and access control.

The panel stores participant personal data — phone numbers, medical clearances, payments. We protected it like a bank: bcrypt password hashes, TOTP authentication, separation of superadmin and admin roles.

  • Bcrypt password hashes — no plain-text in the database.
  • TOTP 2FA — Google Authenticator, 1Password, Bitwarden and similar.
  • Superadmin / admin roles — different sections and actions per role.
  • 24-hour session with HttpOnly cookies and auto logout.
Section 05 · Integrations

YooKassa payments, team Telegram bot, compliance documents.

YooKassa handles payments with automatic status sync into the panel. The team receives push notifications via a Telegram bot — new payment, new shop order, important registrations. Compliance documents (Russian PD law) live in a dedicated panel section and surface in the footer.

  • YooKassa Payment ID stored against each registration — reconciliation with the bank in minutes.
  • Team Telegram bot — instant pushes for payments and orders.
  • 4 footer documents — clearance, offer, consents, policy. PDF upload or external URL.
  • Consent checkboxes on forms — covering the current data protection law requirements.
Section 06 · MAX bot

MAX bot for participants — schedule, bib number, race-day check-in.

Alongside SMS, we shipped a MAX bot for participants who use the messenger. Inside: race schedule, personal bib number, check-in button at briefing, answers to common questions. The team handles everything from one chat — no context-switching between messengers.

  • Personal account inside the bot — bib number, distance, start time, venue.
  • Briefing and start check-in — participant taps a button, the organizer sees attendance in real time.
  • FAQ bot — answers common questions (how to get there, what to bring, weather) without team intervention.
  • Support — switch to a human operator with one tap, message history is logged in the admin panel.
Timeline and support

14 calendar days — from the first screen to race day.

1—2Brief and architecture

Scope of sections, agreement on integrations (YooKassa, SMS provider, Telegram), mockups for primary screens.

3—8Core build

Registrations, users, bib numbers, promo codes, auth with 2FA, role model.

9—11Notifications and integrations

SMS channel, team Telegram bot, YooKassa webhooks.

12—14Training and launch

Historical data import, organizer and volunteer instructions, production deploy.

Need something like this?

Your project:

Tell us your task — within 24 hours we'll come back with an estimate and timeline.

And get a personalized proposal with pricing and timeline.