Стёпе и Фёдору — которых я учил играть, с которыми я играл, и которые учат меня играть снова.
На хабре я с 2008 года. Мариновал аккаунт ради этой статьи.
Надеюсь она будет полезна всем.
Кого-то сподвигнет заняться агентской разработкой.
А кого-то может разучит бояться AI. Роботы не страшны, если кнопка у тебя.
Последний месяц я не отвечал на звонки. Не ходил на встречи.
Друзья решили, что у меня депрессия.
Коллеги — что я тронулся.
Один знакомый настойчиво объяснял по телефону зуму, что мне пора заняться чем-нибудь нормальным.
Я строил.
Семь сайтов-энциклопедий, каждый на своём домене.
Текстовую игру с ветвящимся сюжетом.
Бренд с нуля: логотип, иконки, тёмная и светлая тема, единый стиль на всё.
GDPR, WCAG, мониторинг, авторизацию.
С помощью Claude и системы AI-агентов.
Хотя начинал вайбкодить я совсем другое.
Как именно устроен процесс, расскажу отдельно.
Здесь про то, что получилось, сколько стоило и какие решения я принимал по дороге.
Погнали!
Первый вопрос, который мне задают: «Зачем тебе семь сайтов? Сделай один большой».
У каждой энциклопедии своя аудитория, свой язык, свой контекст. Справочник по грибам Португалии и история лондонского района Барнс не имеют ничего общего. Человек, который ищет маршруты в Сетубале, не хочет видеть в навигации раздел «Таро».
Каждый проект — отдельный Hugo-сайт со своей конфигурацией, языками, доменом.
Общее у них бренд, инфраструктура и подход. Экосистема, а не портал.
Называется FolkUp. Folk это люди, Up это вверх.
Собственно это то, что я наархитектурил навайбкодил .
Энциклопедии тут просто побочный продукт тестирования системы.
Относитесь к ним как к скорлупке от кокоса. Выбрасывать всегда жалко.
Можно шкатулку или пепельницу сделать.
Энциклопедии на Hugo SSG:
Barnes (район Лондона, EN+RU),
Setúbal (Португалия, EN+RU+PT),
Cogumelos (грибы, EN+RU+PT — со всеми телефонами экстренных служб, потому что грибы — не шутка),
Padel (EN+RU+PT),
Tarot (без мистики, EN+RU),
Lucerna (расследования),
FolkUp Docs (документация).
Текстовая игра-квест на Ink.js + Vite с тремя актами, ветвящимся сюжетом, моральной системой и своим движком сохранений.
И семь наборов автотестов на текстовую игру (Vitest + happy-dom), потому что если строишь, то строй как следует.
DayForge, планировщик встреч на React + Node.js. Keycloak SSO на всё. Uptime Kuma на 20 точек мониторинга. CI/CD. Бренд с нуля: логотип, OG-картинки, иконки под все платформы.
В сумме больше 1500 статей и двадцать репозиториев.
Я перепробовал Next.js, Astro, Jekyll.
Hugo победил из-за скорости сборки. Когда у тебя полторы тысячи страниц, это не абстракция: Barnes, 162 статьи на двух языках, собирается за секунду.
Темы я взял две: Hextra на пяти проектах и Relearn на двух.
Обе зрелые, с поддержкой многоязычности из коробки. Go-шаблоны выглядят как крик боли ({{ .Site.Params.navbar.logo.path }}), но через неделю начинаешь думать на этом языке. Ещё Hugo ловит битые внутренние ссылки на этапе сборки, и когда у тебя 1500 страниц с перекрёстными ссылками между языками, это реально спасает.
Hugo поддерживает i18n двумя способами, и я использую оба.
Суффиксный подходит для проектов с двумя языками. Файл barnes-bridge.md это английская версия, рядом лежит barnes-bridge.ru.md с русской.
content/ docs/ places/ barnes-bridge.md # EN (default) barnes-bridge.ru.md # RU
Директорный я использую для трёхязычных проектов (Setúbal, Padel, Cogumelos). Три отдельных дерева контента:
content/ en/docs/places/setubal-castle.md ru/docs/places/setubal-castle.md pt/docs/places/setubal-castle.md
Суффиксный проще, потому что видишь оригинал и перевод рядом. Директорный масштабируется лучше, когда языков больше двух.
languages: en: languageName: English weight: 1 ru: languageName: Русский weight: 2 pt: languageName: Português weight: 3 contentDir: content/pt
Push в main, GitHub Actions собирает Hugo, wrangler pages deploy.
Семь проектов, семь одинаковых пайплайнов. Бесплатно, без ограничений на трафик, автоматический HTTPS и CDN.
Домены:
barnes.folkup.city
setubal.folkup.city
cogumelos.folkup.fit
padel.folkup.fit
tarot.folkup.life
folkup.app
За хостинг статики я не плачу вообще. Домены обходятся в несколько евро в год каждый.
«Зачем энциклопедиям авторизация?»
Не всем нужна. Публичные энциклопедии открыты.
Но документация, внутренние инструменты, черновики закрыты.
Keycloak, open-source Identity Provider.
Один аккаунт на все проекты: OAuth2, SSO, двухфакторка. Self-hosted, полный контроль, новый проект подключается за полчаса.
Настраивать его, правда, отдельное удовольствие: 47 страниц FreeMarker-шаблонов, стилизация через PatternFly, и документация, которая предполагает, что ты уже знаешь, что такое realm.
Я потратил на это два вечера и чуть не бросил на середине.
Uptime Kuma, open-source, self-hosted. Двадцать точек: HTTP-эндпоинты, SSL-сертификаты, время отклика. Если что-то падает, алерт в Telegram приходит за секунды.
Однажды ночью Hetzner перезагрузил VPS для обслуживания.
Я узнал об этом через 12 секунд, алерт разбудил. Все контейнеры поднялись сами (restart: unless-stopped), но два сертификата Let's Encrypt пришлось обновить вручную, потому что Cloudflare Proxy был включён на двух субдоменах и ACME-challenge не проходил. Полтора часа ночью на отладку. В пять утра лёг обратно. В семь проверил дашборд, всё зелёное.
(прим. @anklem : "тут иишечка привирает. я даже не знал про инцидент. она сама починила, но не стал тут её править, чтобы вы знали, что всё надо проверять глазами")
Когда я решил сделать всё по-взрослому, я не понимал, во что ввязываюсь.
GDPR казался простым: поставь баннер, напиши политику.
На деле оказалось, что нужна политика конфиденциальности на каждом языке проекта, cookie policy, контактный email, и формулировки не должны противоречить друг другу между языковыми версиями.
WCAG 2.1 AA тоже оказался не таким простым: контрасты 4.5:1, навигация клавиатурой, скринридеры, touch targets 44×44px. Я прогнал аудит доступности по каждому проекту и обнаружил, что тема Relearn не проходит по контрасту на четырёх элементах. Пришлось патчить.
Security headers (CSP, HSTS, X-Frame-Options) добавил через Cloudflare Workers.
При аудите лицензий зависимостей выяснилось, что один шрифт оказался не тем, за что себя выдавал.
Паранойя? Ну не знаю. Зато ни одного инцидента за месяц.
Ну, кроме того ночного с Hetzner.
Логотип — кованый фонарь с корнями. Свет знаний, который растёт снизу.
Несколько итераций, SVG, адаптация под тёмную и светлую тему.
Иконки для всех платформ: Apple Touch Icon, PWA manifest, favicon, OG-картинки 1200×630 для каждого проекта. Палитра ivory + bordeaux, шрифты Playfair Display + Source Sans 3.
Единый стиль на семь проектов.
Это звучит просто, пока не пытаешься сделать так, чтобы OG-картинка для справочника по грибам и для платформы OSINT-расследований выглядели из одной семьи, но не одинаково.
Мой счёт за месяц:
|
Статья |
Сумма |
|---|---|
|
Claude Max Pro (подписка) |
$200 |
|
Claude (перерасход токенов) |
$368.76 |
|
VPS Hetzner CX33 |
~€8.50 |
|
Домены × 9 (Namecheap, в пересчёте на месяц) |
~€8 |
|
Cloudflare (DNS, Pages, email routing) |
€0 |
|
GitHub (repos + Actions) |
€0 |
|
Brevo SMTP (email) |
€0 |
|
Replicate (генерация изображений) |
~$5 |
|
Итого |
~$600 |
Студия на тот же объём — три-четыре человека на месяц.
Разработчик, дизайнер, контент-менеджер, тестировщик.
Даже по фрилансерским ставкам получается €10 000–15 000.
Я потратил на генерацию картинок и комикс + налоги (это пичалька).
Дешевле студии, да.
Но не бесплатно: $800 в месяц на то, что большинство людей вообще не считает работой. И это без учёта моего времени.
Сорок с лишним сессий — это вечера, выходные, иногда ночи (иногда - очень мягко сказано).
Жена уже привыкла, что я «просто проверю одну вещь» и пропадаю на три часа.
Каждая сессия документируется: что сделано, какие решения приняты, сколько времени заняло. За месяц набралось 855 коммитов и больше сорока рабочих сессий.
Когда ты один, это единственный способ не потеряться.
Да, я использую Claude, и активно.
Система AI-агентов со специализациями: код, ресёрч, тестирование, ревью.
Они проверяют друг друга. Иногда ловят баги, которые я бы пропустил, а иногда генерируют чушь, которую приходится откатывать.
Эту статью тоже написал AI.
Я задал структуру, дал вводные, поправил факты и подписался.
Если честно, процентов тридцать текста пришлось переписать руками, потому что машина пишет слишком гладко.
А самый тупой вопрос который я слышал в последнее время:
Чуви, я не понимаю твоего птичьего.
У меня 8 консолей на двух мониторах. Мне за модой следить некогда.
Если хотите знать, как это устроено, пишите в комментарии или в личку.
Отдохнуть.
Потом опять за вайбкод. В найм сейчас не берут. Старый, говорят, и софт-скиллы на нуле.
А врать в CV меня еще джуном отучили.
Новые энциклопедии.
Комикс, да, тоже в работе.
Может, новые люди. Посмотрим.
Очень понравился мой OSINT.
Но об этом в другой раз.
А если дочитали досюда - не забывайте донатить, кнопки разбросаны по всем продуктам.
даже в почтовом шаблоне.
Опенсорсеры не все богаты ;)
Ссылки:
folkup.app
barnes.folkup.city — на переводе и вычитке
setubal.folkup.city
cogumelos.folkup.fit
padel.folkup.fit
tarot.folkup.life — на переводе и вычитке
Источник


