Технический обзор

На этой странице кратко и по-техничному: из чего состоит сайт, как загружаются/кэшируются данные, и какие принципы доступны для SEO и безопасности.

Версии пакетов

Версии читаются на сервере из package.json (ничего не утекает на клиент).

  • next14.2.5
  • react18.3.1
  • react-dom18.3.1
  • typescript5.4.5
  • tailwindcss3.4.10
  • postcss8.4.38
  • autoprefixer10.4.19
  • swiper11.1.4

Фреймворк и рендеринг

  • Next.js App Router: серверные компоненты по умолчанию; клиентские — только там, где нужны (напр., слайдер).
  • SSR + SSG/ISR: рендер на сервере; часть секций — статично с переобновлением.
  • Динамический импорт (без SSR) для слайдера, чтобы исключить конфликты гидрации.

I18n и маршруты

  • Структура URL: /lv/... и /ru/... , например /lv/home, /ru/home.
  • Язык берём из URL-параметра [lang]; не используем клиентский стейт, чтобы избежать расхождений SSR/CSR.
  • Компоненты получают язык через props (всегда детерминированно на SSR).

Новости (Facebook Graph API)

  • Серверный компонент <News/>: `async` fetch из Graph API, фильтрация по тегу (#site-news-lv / #site-news-ru).
  • Кэш: используем Next revalidate или `cache: "no-store"` в зависимости от требований (rate-limits/латентность).
  • Секреты FB_PAGE_ID / FB_PAGE_TOKEN живут только на сервере (process.env).

Кэш и производительность

  • ISR revalidate (напр., 300–600s) для новостей; критические секции — SSR без кэша.
  • Картинки — Next/Image с оптимизацией и корректным `sizes` под грид.
  • Динамические импорты без SSR (например, слайдер), чтобы уменьшить стартовый JS.

UI-стек

  • Tailwind CSS + дизайн-утилиты (градиенты, тени, радиусы).
  • Загрузка шрифтов через next/font (Inter, Playfair_Display) — без FOUT/FOIT.
  • Чёткая декомпозиция: Header/Footer/News/Services и т.д.

Безопасность

  • Секреты (.env) — только на сервере; не попадают в клиентский бандл.
  • CSRF/XSS: защиты Next/React + не используем `dangerouslySetInnerHTML` с недоверенным контентом.
  • Рекомендуется добавить заголовки безопасности (CSP, Referrer-Policy) на уровне прокси/приложения.

SEO и метаданные

  • Next Metadata API: тайтлы/описания на страницу/язык.
  • Семантический HTML, структура h1/h2, alt у картинок.
  • Чистые URL с языковым префиксом.

Структура URL

/lv/home, /ru/home
/lv/privacy, /ru/privacy
/lv/tech, /ru/tech

Диаграмма потока данных (упрощённо)

Клиент → сервер (Next) → Graph API; кэширование — на стороне Next.

Browser ───────→ Next.js (SSR/Server Components)
                 ├─ fetch News → Facebook Graph API
                 └─ ISR cache / revalidate
HTML/JSON ←─────┘

Переменные окружения (.env)

  • FB_PAGE_IDID Facebook страницы
  • FB_PAGE_TOKENДолгоживущий Page Access Token
  • NEXT_PUBLIC_SITE_URLПубличный URL сайта

Чек-лист деплоя

  • Добавить/обновить .env (FB_PAGE_ID/FB_PAGE_TOKEN).
  • Проверить доступ к Graph API и лимиты.
  • Включить ISR revalidate, настроить заголовки безопасности.
  • Build + старт с NODE_ENV=production.

Roadmap

  • Redis-кэш для ответов Facebook (с учётом лимитов).
  • Sentry/логи для наблюдаемости.
  • CI/CD и бюджет Lighthouse.

Операционный runbook

  • Если пропали новости: проверить валидность FB-токена; обновить при истечении.
  • Если гидрационные ошибки: убедиться, что клиентские компоненты не SSR (dynamic(..., { ssr:false })).
  • Если просела производительность: проверить настройки ISR и размеры/sizes изображений.