Чуйгун
Техническая документация

Инфраструктура

Домены, репозитории, итоговый эконом-стек хостинга, железо на объекте и сводка по безопасности инфраструктуры.

Домены

  • Гостевой chuygun.kg — на фронте (Cloudflare Workers, бесплатно). Регистрация / продление в cctld (~3011 сом/год).
  • Бэк на дефолтном onwzbtknxtdituwrcxvn.supabase.co — Custom Domain api.chuygun.kg не берём (#59, экономия $120/год).

NEXT_PUBLIC_SITE_URL обязательно на боевой домен, иначе QR-коды и ссылки укажут на старый Vercel-URL.

Репозитории

  • Кор-репо: chuygunkg/chuygun (основной, с него собирается Cloudflare). Доп: MonsterDEVZ/chuygun. Оба синхронны. Продакшн-ветка — main.
  • Монорепо: apps/web (Next.js), print-agent (локальный daemon, вне workspaces), db/migrations, docs, supabase. Root package.jsonworkspaces: ["apps/*"].

Эконом-стек (итог #58, #59)

Supabase Pro $25 (хранилище фото 100 ГБ, realtime, бэкапы) + Cloudflare Workers $0–5 ≈ $30/мес. Фиксированная цена, не «сгорающий» pay-as-you-go, коммерция разрешена.

Отвергнуто:

  • Vercel ($45, расточительно)
  • Cloudflare Pages (не тянет Next SSR без Workers)
  • дешёвый VPS 1 ГБ (нет Node/WebSocket или мало RAM)
  • Render $7

WebSocket/realtime на Cloudflare не проблема — идёт браузер → Supabase напрямую (getBrowserSupabase()), фронт-хостинг в цепочке не участвует.

Оплата: заказчик регистрирует Supabase/Cloudflare на свою карту; агентство — техподдержка почасово после сдачи.

Железо на объекте

  • Принтер XPrinter XP-T80Q (LAN TCP 9100, статический IP по DHCP-резерву).
  • Планшеты Redmi Pad SE 8.7 4G, HyperOS / Android 14, глобальная версия — Google-сервисы есть, Chrome из Play Market напрямую, Gbox не нужен (#40). Система — PWA в Chrome (не приложение из магазина). Планшет = «окно» в систему: не печатает, не хранит данные; нужен стабильный Chrome + Wi-Fi.

Настройка планшета:

  • Chrome в «Без ограничений» по батарее (HyperOS убивает фон).
  • PWA «на главный экран».
  • Киоск-режим (закрепление приложений или Fully Kiosk Browser + PIN на выход).
  • Экран не гаснет.
  • Свой логин на каждого официанта.

Безопасность инфраструктуры (сводка)

Детали — SECURITY.md.

  • Секретов в репо нет (scripts/secrets-scan.sh, .gitignore блокирует .env*, .vercel/). Service-role / VAPID — только в env хостинга или закрытом файле доступов.
  • Security-заголовки в apps/web/vercel.json /(.*): HSTS max-age=63072000; includeSubDomains; preload, X-Content-Type-Options nosniff, X-Frame-Options DENY, Referrer-Policy strict-origin-when-cross-origin, Permissions-Policy. Ожидаемая оценка SSL Labs A+.
  • CSP пока не выставлен (Yandex map iframe + inline JSON-LD) — nonce-based policy в бэклоге US-13.x.
  • Rate-limit: WAF (login 10/мин, admin 60/мин, api 120/мин) + in-code lib/security/rate-limit.ts. Логин через server-route /api/auth/login с LOGIN_RULE 10/мин (#23).

На этой странице