Стек

Framework
Next.js 16.2 (App Router, static export)
Language
TypeScript 5.9 (strict)
Styling
Tailwind CSS 4 (oklch native), CSS @theme tokens
Motion
Motion 12 (Framer Motion lineage), GSAP, Lenis smooth scroll
3D moment
react-three-fiber + drei (one scene on /journey)
i18n
next-intl, 4 locales (EN / UK / RU / ID)
Forms
react-hook-form + zod (no form on /contact by default)
Lint + format
Biome (replaces eslint + prettier)
Package manager
pnpm@9

Шрифты

Display
Fraunces (variable: wght · SOFT · WONK · opsz)
Pangram-feel editorial, single-axis serif for cinematic emphasis.
Body
Newsreader (variable opsz)
Designed for long reading at body sizes.
Mono
JetBrains Mono
Eyebrows, year stamps, marginalia, switcher.

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

Hosting
Bare nginx on Debian, static files via rsync
CI/CD
GitHub Actions on push to main → build → rsync to /var/www/zapleo.com (~50s end-to-end)
TLS
Cloudflare Origin Cert + edge proxy
Analytics
Cloudflare Web Analytics (cookieless)
Backups
Server-side nightly snapshots, off-site mirror

AI / человеческое разделение (честное раскрытие)

Design system
Drafted with Claude · reviewed and adjusted by Dmitriy
Copy
Co-authored with Claude · facts cross-checked against LinkedIn, GitHub, Clutch, DOU, Tripadvisor public records
Photos / b-roll
Mine. Or labelled stock when used.
Voice in social
AI-augmented per Vibe Coding strategy. Decisions and replies — mine.

Исходный код и аудиты

  • github.com/zapleoceo/zapleo.com →
  • Лицензия: MIT для сборки; контент © Дмитрий Запорожец.
  • Цель доступности: WCAG 2.2 AA. Нашёл нарушение? Напиши на dima@zapleo.com.
  • Без кук. Без сторонних трекеров. Без поп-апа на рассылку.