редакции
Как мы за несколько дней сделали русскоязычный портал с архивами Эпштейна
Нам стало интересно, есть ли в этих архивах, например, Елизавета II? Мы решили посмотреть на ситуацию с инженерной точки зрения.
Проблема
Официальный архив размещён на сайте Министерства юстиции США. Чтобы найти конкретную фамилию, необходимо:
- подтвердить 18+,
- вручную вводить запросы,
- работать с интерфейсом, который периодически сбрасывает сессию,
- открывать и самостоятельно изучать PDF-документы.
При активной работе это превращается в неприятный квест.
Решение

Мы подумали: а что, если сделать русскоязычную версию архива
с нормальным поиском и добавить инструмент, который объясняет содержание
документа человеческим языком? Оказалось, что у меня есть сотрудники, которые
могут развлечь шефа и сделать такой. А заодно встроить ИИ-скрипт, который
позволит коротко изложить в чем смысл документа.
Так родился проект epstein-archive.ru. И да, нам самим было интересно проверить пару фамилий.
(Спойлер: Елизавету II
мы там не обнаружили.) 1. Обход Akamai-защиты — автоматическое решение
Proof-of-Work челленджа justice.gov: парсинг JS-токена, вычисление PoW, POST
верификация, подстановка сессионных кук и ретрай 2. AI-анализ документов — локальная LLM развёрнута
через Ollama на собственной машине; стриминг ответа через SSE, очередь
запросов, отображение прогресса (downloading → analyzing → streaming) 3. Клиентская квота на AI — 5 анализов / 30 мин,
трекинг в localStorage, broadcast между вкладками через кастомные события 4. Rate-limiting
— sliding window per-IP (30 req / 5 мин), in-memory, с countdown-таймером на
клиенте 5. Dual-формат ответов DOJ — поддержка и
Elasticsearch-формата, и legacy flat-массива; нормализация в единую структуру 6. Стриминг прогресса загрузки — chunk-by-chunk
трекинг при получении данных от DOJ 7. Тёмная/светлая тема — CSS-переменные,
определение системных предпочтений, персистенция в localStorage 8. Мемоизация и ленивая загрузка — React.memo с
кастомным comparator для карточек, dynamic import AI-модалки (no SSR),
loading="lazy" для изображений 9. SEO и аналитика — sitemap.xml, robots.txt,
Яндекс.Метрика (webvisor, heatmap, click tracking) 10. Юридический
compliance — 18+ дисклеймер, cookie-баннер, страницы Privacy/Terms Выполненный бекенд: — Next.js API Routes — серверная логика внутри того же
приложения — Node.js
20 (Alpine) — Nginx — реверс-прокси, rate-limit (10 req/s), gzip, SSL (Let’s
Encrypt) — Docker — мультистейдж-сборка, docker-compose (dev/prod) — Отдельный AI-микросервис (Fastify, порт 3001) — анализ PDF
через локальную LLM (Ollama) Фронтенд выполнен: — Next.js
16 (App Router, Server Components, React
19) — TypeScript 5 (strict
mode) — Tailwind
CSS v4 — Zod — валидация ввода на клиенте и сервере — Lucide
React — иконки — react-markdown — рендер
markdown в AI-модалке Пользуйтесь. Ищите файлы для работы и для расширения
кругозора. Желаем вам не оказаться в этих списках :)

Ключевые технические свойства сайта
