На каких технологиях сделан этот сайт
4 апреля 2026, 16:44
Dumb Lab
Блог-платформа для трейдеров и инвесторов — архитектура и стек
🏗️Как это всё устроено
Dumb Lab — это полнофункциональная блог-платформа, заточенная под трейдерское комьюнити. Весь проект живёт в одном монорепо: фронт, бэк, API, миграции базы, сиды переводов — всё вместе. Деплоится одним docker compose up на любой сервер.

⚡Технологический стек
Фреймворк
Next.js 16.2
+ App Router + Turbopack
Самая свежая версия. Сервер и клиент в одном проекте — SSR, API routes, middleware (он же proxy.ts в v16). Turbopack вместо Webpack — билд в 5 раз быстрее.
Фронтенд
React 19 + Tailwind 4
+ Zustand + Lucide Icons
React 19 с серверными компонентами. Tailwind 4 — новый движок, zero-config. Zustand для глобального стейта вместо громоздкого Redux. Lucide — лёгкие SVG-иконки.
База данных
PostgreSQL 16
+ Prisma 7.5 ORM
Postgres — надёжен, поддерживает полнотекстовый поиск, JSON, и case-insensitive сравнения из коробки. Prisma 7 — type-safe запросы, миграции, auto-generated типы.
Аутентификация
NextAuth v5 (beta)
JWT стратегия
Credentials-провайдер: логин/email + пароль. Пароли хешируются bcrypt (12 раундов). JWT-токены хранят id, username, role, spiritAnimal. Без сессий в БД — stateless.
Хранилище файлов
AWS S3
+ Sharp для ресайза
Аватарки и картинки в постах загружаются на S3. Sharp ресайзит аватарки до 256×256 на лету перед загрузкой — экономит трафик и место.
Редактор
Tiptap 3.20
15+ расширений
Полноценный WYSIWYG: заголовки, списки, код с подсветкой синтаксиса (lowlight), картинки, ссылки, цитаты, таблицы. Контент сохраняется и как HTML, и как JSON.
Почта
Nodemailer + Titan
STARTTLS на порту 587
Верификация email и сброс пароля через Titan SMTP (Namecheap). Почта отправляется с admin@dumb-lab.org — свой домен, не «от gmail.com».
Инфраструктура
Docker + Lightsail
Nginx + Let's Encrypt
Multi-stage Docker билд — финальный образ ~200MB. AWS Lightsail (8GB RAM). Nginx терминирует SSL с бесплатным сертификатом от Let's Encrypt.
Валидация
Zod 4 + React Hook Form
type-safe на обоих концах
Формы на клиенте через React Hook Form. Серверная валидация — Zod-схемы. Один и тот же тип описывает и форму, и API — ошибки невозможны.
Почему именно этот стек?
Next.js 16 = фуллстек в одном проекте. Не надо отдельно пилить API на Express и фронт на Vite — всё рядом, всё типизировано
PostgreSQL + Prisma = надёжность + удобство. Prisma генерирует типы прямо из схемы БД — забудь про расхождения между фронтом и бэком
JWT вместо серверных сессий = горизонтальное масштабирование без проблем. Добавил второй сервер — и всё работает
Tailwind 4 = стили прямо в JSX, никаких CSS-модулей, никакого BEM. Новый движок — в 10 раз быстрее компиляция
Docker = «работает у меня» ≡ «работает на сервере». Один Dockerfile, один compose — и проект живёт
🌍Мультиязычность — но не как у всех
Три языка: русский, английский и NSF (шуточный «олбанский» язык). Но переводы хранятся не в JSON-файлах, а прямо в базе данных (таблица Translation). Это значит: можно менят�� тексты на лету, без передеплоя. Кэш в памяти обновляется к��ждые 60 секунд.
Локаль определяется из cookie NEXT_LOCALE, а если его нет — из заголовка Accept-Language. Middleware (proxy.ts) автоматически редиректит / на /ru/, /en/ или /nsf/. В URL всегда видно, на каком языке страница — SEO-friendly.
Сиды переводов (prisma/seed-translations.ts и seed-nsf.ts) содержат 349+ ключей. При деплое достаточно запустить сид — и все переводы обновятся через upsert.
✨Интересные фишки
🦥 Красивый Rate Limit
Если пользователь слишком активен — вместо сухой 429 ошибки он видит стильную страницу с ленивцем и обратным отсчётом до разблокировки. Три уровня: general (200 req/min), API (100 req/min), auth (20 req/5min).
🐾 Духовные животные
При регистрации можно выбрать «духовное животное» — от Капибары до Малыша Йоды. Оно отображается как маленький бейдж на аватарке пользователя по всему сайту. 15 вариантов, каждый с уникальной PNG-иконкой.
🔒 Auth Modal вместо редиректа
Незалогиненный пользователь нажимает «Лайк» или «В избранное» — вместо грубого редиректа на логин появляется элегантная модалка с предложением войти или зарегистрироваться. Контекст страницы не теряется.
📝 WYSIWYG как у взрослых
Tiptap-редактор с подсветкой кода, вставкой картинок (drag & drop в S3), форматирование�� текста, таблицами. Контент сохраняется и как HTML для рендеринга, и как JSON для редактирования — не теряется ни крошки форматирования.
🧹 XSS-защита через DOMPurify
Весь пользовательский HTML (посты, комментарии) прогоняется через isomorphic-dompurify с белым списком тегов. Работает и на сервере, и на клиенте — изоморфно. Вставить <script> не получится.
🎯 Система рейтингов
Посты ранжируются по лайкам, избранным, обсуждаемости. Периоды: 24 часа, 7 дней, 30 дней. Есть порог лайков для попадания на главную страницу — настраивается админом через панель.
👑 Полная админка
Управление пользователями (роли, баны на 1ч/24ч/7д/30д/навсегда с причиной), модерация постов, настройка порога лайков. Всё через веб-интерфейс, без SSH на сервер.
🔔 Нотификации
Лайк на пост, ответ на комментарий, новый подписчик — всё приходит в колокольчик в шапке сайта. Типизированная система: COMMENT_REPLY, POST_LIKE, NEW_FOLLOWER, MENTION и т.д.
📧 Верификация по email
6-значный криптографически безопасный код (crypto.randomInt, не Math.random!). Отправляется через Titan SMTP. Код живёт 24 часа. Без верификации — нельзя залогиниться.
🛡️Безопасность
Прошли полный аудит безопасности и закрыли все критические и высокоприоритетные уязвимости:
✓Content-Security-Policy
✓HSTS (2 года)
✓X-Frame-Options: DENY
✓XSS-санитизация (DOMPurify)
✓bcrypt (12 раундов)
✓Rate limiting (3 уровня)
✓Крипто-коды верификации
✓SSL/TLS (Let's Encrypt)
✓Docker non-root user
✓PostgreSQL/Redis только localhost
✓Пароли через env vars
✓Case-insensitive уникальность
🚀Деплой
Весь цикл от коммита до продакшена — три команды:
[Локальная машина]
git push origin main ← код улетает на GitHub
[AWS Lightsail — 3.129.93.77]
cd /opt/dumblab && sudo git pull ← сервер забирает код
sudo docker compose build app ← пересобирает образ
sudo docker compose up -d app ← перезапускает контейнер
sudo -E npx tsx prisma/seed-*.ts ← обновляет переводы (если менялись)
Всё. Сайт обновлён. https://dumb-lab.org
Dumb Lab — Апрель 2026
Архитектура и разработка при содействии Claude Code (Anthropic)
Комментарии
Комментариев пока нет. Будьте первым!