Beachside Racetrack Info-Screens — це масштабована система реального часу для керування гонками та інформування глядачів. Проект розроблений як MVP (Minimum Viable Product) для автоматизації процесів на гоночній трасі, мінімізуючи потребу в ручній праці персоналу.
Система підтримує високий контраст для роботи під прямим сонячним промінням на узбережжі океану та має адаптивний дизайн для будь-яких пристроїв (планшети, телефони, Smart TV).
- Node.js: версія 20.x або новіша.
- npm: версія 9.x або новіша.
Склонуйте репозиторій та встановіть залежності:
npm installСтворіть файл .env у кореневій папці проекту та додайте ключі доступу (Access Keys):
PORT=3000
NODE_ENV=production
__ якщо буде будь-яке інше значення замість production - то проект переходит в режим розробки з автоматичним логіном всього персоналу
# Ключі доступу для персоналу
RECEPTIONIST_KEY=admin123
OBSERVER_KEY=watch123
SAFETY_KEY=safe123
__ якщо хоча б одне поле не буде присутнє або буде не визначене проект не запуститься в production режимі, на режим розробки це не впливаєПримітка: Сервер не запуститься, якщо ці змінні не будуть визначені.
- Режим розробки (Dev Mode): Таймер гонки триває 1 хвилину. Увімкнено авто-логін для розробника.
npm run dev
- Production режим: Таймер гонки триває 10 хвилин. Потрібно вводити ключі доступу вручну.
npm start
- Мета: Реєстрація гонщиків та підготовка сесій.
- Функціонал:
- Додавання нових гоночних сесій з унікальними короткими ID (4 символи).
- Додавання/редагування/видалення гонщиків.
- Автоматичне призначення номерів машин.
- Видалення сесій.
- Мета: Головний пульт керування гонкою.
- Функціонал:
- Вибір наступної сесії:
safetyобирає, яка група йде на брифінг (відображається на екраніNext Race). - Старт гонки: запуск таймера та перемикання режиму в
SAFE. - Керування прапорами: миттєва зміна прапорів на трасі (Safe, Hazard, Danger, Finish).
- Двофазний фініш: після закінчення часу або натискання
FINISHкнопки блокуються. Коли машини повертаються, натискаєтьсяFinalizeдля очищення треку. - Sidebar: можливість змінювати чергу наступних гонок прямо під час активного заїзду.
- Вибір наступної сесії:
- Мета: Фіксація перетину лінії фінішу кожною машиною.
- Функціонал:
- Великі кнопки для кожного автомобіля.
- Автоматичне блокування кнопок при прапорах
DANGERабоFINISH. - Відображення поточного прапора та таймера для координації.
- Відображає топ-8 гонщиків у реальному часі.
- Сортування за найшвидшим колом (Best Lap).
- Показує час останнього кола та загальну кількість кіл.
- Результати зберігаються на екрані до моменту старту наступної гонки.
- Повноекранні цифрові прапори, що стоять навколо траси.
- Змінюють колір миттєво: Зелений (Safe), Жовтий (Hazard), Червоний (Danger), Шаховий (Finish).
- Великий таймер для гонщиків та глядачів.
- Змінює колір на червоний/пульсуючий коли гонка завершена.
- Показує список гонщиків та номери їхніх машин для наступної сесії.
- Після фінішу гонки виводить повідомлення "Proceed to Paddock" для поточної групи.
- Real-Time Sync: Використання Socket.io Rooms для розділення трафіку ( екрани прапорів отримують лише дані про прапор).
- Persistence (Збереження даних): Всі сесії та результати кіл записуються в асинхронний
storage.json. Дані не втрачаються при перезавантаженні сервера. - Security delay: При введенні неправильного ключа сервер робить примусову затримку 500мс для захисту від перебору паролів.
- Smart Update: Інтерфейси не перемальовують всю сторінку без потреби, що дозволяє таймерам працювати плавно без "мерехтіння".
- Sidebar Management: система висувного меню для Safety Official, що дозволяє керувати чергою без зупинки поточної гонки.
- Backend: Node.js, Express.
- Real-time: Socket.IO.
- Frontend: EJS (Server Side Rendering), Client-side JS.
- Styling: SCSS (BEM methodology), Adaptive Design.
- Data: JSON File System (Async I/O).
DEVELOPED WITH LOVE AND CATS 💕💕😽 .