← Към Началото

КАКВО ИМА ПОД КАПАКА

Тази страница е за хората, на които им е любопитно как е направен сайтът. RUSE AI HACK не е само landing page, а малка платформа за събитието: публичен сайт, регистрации, билети, админ панел и showcase режим в една кодова база.

Тук ще намериш стека, библиотеките, техниките и част от решенията зад проекта: как е направен, как е оптимизиран и какво използваме за анимации, дизайн, performance и backend логика.

Кодът е публичен под MIT лиценз. Ако ти хрумне подобрение или откриеш нещо интересно, issues и PR-и са добре дошли.

КАКВО ПРАВИ ПЛАТФОРМАТА

Преди да говорим за библиотеки, по-важно е да е ясно какъв проблем решава проектът. Това не е просто “сайт за събитието”, а цялостен event flow.

Публичен сайт за хакатона

Начална страница, програма, жури, спонсори, правила и цялата информация, която трябва да е ясна още преди регистрацията.

Регистрационен поток в 3 стъпки

Форма с валидация, проверка на статуса на регистрацията, обработка на дублирани имейли и плавен преход към личен билет.

Персонален билет за всеки участник

Автоматично генериран ticket number, GitHub avatar, PNG export и споделяне. Това е и най-разпознаваемата UI част на проекта.

Админ зона за организаторите

Скрита секция за преглед на регистрации, смяна на статуси, статистики, CSV export, имейли и контрол върху отварянето на регистрацията.

Showcase режим след събитието

Същата кодова база може да се превключи от registration mode към archive/showcase mode и да покаже победители, снимки и recap съдържание.

СТЕК & ИЗБОРИ

Технологиите тук не са подбрани, за да звучат модерно, а защото вършат конкретна работа добре за малък, бърз и поддържим продукт.

Core

  • Next.js 16 (App Router, route groups, Server Components)
  • React 19
  • TypeScript 5

UI & styling

  • Tailwind CSS v4
  • lucide-react
  • `clsx` + `tailwind-merge` през `cn()` helper

Animations & effects

  • three.js
  • vanilla-tilt
  • canvas-confetti
  • html-to-image

Forms & backend

  • react-hook-form + Zod
  • Supabase + Postgres
  • Resend + React Email

Tooling

  • Vitest + Testing Library
  • ESLint 9
  • Prettier
  • Husky + lint-staged

Как е организирано

  • src/app/(site) държи публичните страници.
  • src/app/(admin) е отделен route group за организаторските инструменти.
  • src/components/views съдържа page-level изгледите, а src/components/sections разбива landing page-а на преизползваеми секции.
  • src/lib и src/hooks пазят бизнес логиката отделно от UI.

ЗАЩО Е БЪРЗ

Сайтът изглежда ефектно, но идеята не е да се жертва скоростта заради визуалности. Точно обратното: по-тежките неща са изолирани така, че да не пречат на първото зареждане.

  • Server Components са default. `"use client"` се слага само там, където наистина има интеракция.
  • Тежките ефекти не участват в първоначалния SSR. `dotted-surface`, `cursor-trail` и `konami-easter-egg` се зареждат динамично само в браузъра.
  • `three`, `vanilla-tilt`, `canvas-confetti` и `html-to-image` се import-ват чак когато потрябват, вместо да надуват началния bundle.
  • Tilt ефектът е изключен на touch устройства, за да няма излишен JavaScript там, където ефектът не носи реална стойност.
  • Live registration count е решен с лек polling модел и споделен module-level store, вместо по-скъп realtime subscription за толкова проста метрика.
  • В `next.config.ts` има image optimization, компресия, package import optimization и caching headers за по-добро реално поведение в production.

Конкретни примери

dotted-surface.tsx зарежда three вътре в useEffect, а не още при първия render. ticket-visual.tsx активира vanilla-tilt само ако устройството има fine pointer. За download на билета html-to-image се вика чак при натискане на бутона, не предварително.

СИГУРНОСТ & ДОВЕРИЕ

При форма за събиране на лични данни и админ достъп не е достатъчно всичко да изглежда добре. Трябва да има и разумни защитни слоеве.

  • Формата не разчита само на client-side проверки. Данните се валидират отново на сървъра със Zod преди запис.
  • Има guard за твърде големи заявки и ясна обработка на duplicate email случаи.
  • Supabase схемата е с Row Level Security, а публичният достъп е ограничен само до безопасните операции, които са нужни.
  • Админ частта е зад отделен route group, session cookie и HMAC подписване с `ADMIN_SECRET`, плюс constant-time compare при проверка.
  • В `next.config.ts` има CSP, HSTS, `X-Frame-Options`, `nosniff`, `Permissions-Policy` и други защитни headers.
  • Production browser source maps са изключени, а чувствителните операции минават през server routes, не през клиентски ключове.

Това не превръща приложението в банков софтуер, но е добър пример как дори малък проект може да мисли за сигурност от самото начало, а не чак когато стане проблем.

АНИМАЦИИ & ДИЗАЙН

Визията е важна, защото сайтът е част от преживяването на хакатона. Добрата новина е, че много от по-интересните идеи вътре са напълно разглобяеми и можеш да ги изучиш поотделно.

  • Билетът е най-силно вдъхновен от виртуалните event системи на Next.js Conf, но е адаптиран към идентичността на RUSE AI HACK.
  • Hero секцията използва custom Three.js dotted surface вместо генеричен background, за да създаде собствена атмосфера още от първия екран.
  • Decrypt текстът, shimmer ефектите, glitch елементите и console easter egg-ите подсилват hacker/AI настроението, без сайтът да изглежда като клише template.
  • Анимациите не са самоцелни. Те са ограничени, lazy-loaded и използвани основно там, където носят емоция: hero, ticket reveal, микровзаимодействия.
  • Вдъхновение има и от places като 21st.dev, но реалната стойност е в това как идеите са пречупени през конкретен event продукт.

РЕСУРСИ & КРЕДИТИ

Репо и документация

Вдъхновения

  • Q2OQL7 ZPZUCPN MM0·H I2QQLN/ ·RP — важна отправна точка за идеята с персоналния билет
  • E·1JSFZZ — библиотека от модерни UI идеи, от които често тръгват експерименти