Задача: Разработать и запустить сайт
Разработать и запустить сайт
Разработать и запустить haih.site как продуктовый сайт новой концепции HAIH: минимальная архитектура, которая растёт вместе с требованиями, и живые showcase от статического сайта и отдельного API до полноценного интернет-магазина.
Цель
Разработать и запустить haih.site как основной публичный сайт новой концепции HAIH.
Сайт должен не просто описывать технологии или существующий движок, а наглядно объяснять конечному пользователю новый подход к разработке с AI и давать работающие showcase прямо на сайте, пока отдельная библиотека кейсов на GitHub ещё не оформлена.
Что мы хотим донести
Основная идея:
Не начинай проект с большого движка. Начни с минимальной архитектуры, которая решает текущую задачу, и добавляй следующий слой только тогда, когда он действительно понадобился.
HAIH должен помогать человеку и coding agent дешёво эволюционировать проект: от нескольких статических файлов до сложного типизированного приложения.
Главная ценность — не количество возможностей «из коробки», а стоимость добавления следующей необходимой возможности.
Если задаче достаточно HTML/CSS/JS — не нужны React, база, GraphQL и application server.
Если появилась необходимость хранить данные — добавляется persistence.
Если данные нужно предоставить программным клиентам — появляется API.
Если API нужен frontend — добавляется типизированная клиентская интеграция.
Если нужны пользователи — добавляется auth.
Если нужен полноценный commerce-продукт — архитектура дорастает до него, но проект не должен платить эту цену раньше времени.
Позиционирование
HAIH сейчас следует показывать не как ещё один большой full-stack framework и не как каталог обязательных модулей.
Более точная модель:
минимальная основа + совместимые архитектурные принципы + best practices + законченные вертикальные кейсы для AI-assisted development.
В перспективе это может быть скорее архитектурный протокол, чем единый runtime: разные проекты используют разные части стека, но остаются предсказуемыми и понятными coding agents.
Ключевой принцип:
Use the cheapest architecture that completely solves the requirement.
Каждая новая зависимость должна быть оправдана пользовательской функцией.
Для кого сайт
В первую очередь:
- разработчики, активно использующие Claude Code, Codex, Cursor и другие coding agents;
- solo-разработчики и небольшие команды, которым важно быстро запускать и изменять продукты;
- разработчики, уставшие от избыточной сложности современных full-stack boilerplate;
- люди, которые хотят self-hosted/open-source основу и возможность менять архитектуру под себя;
- авторы собственных решений и кейсов, которыми впоследствии можно делиться с сообществом.
Сайт должен быть понятен человеку, который впервые слышит про HAIH и не знает историю существующего haih-net/agent.
Основное маркетинговое обещание
Не обещать «мы уже реализовали всё».
Показывать:
Start with almost nothing. Add architecture only when your requirements demand it.
И второе обещание:
Дайте coding agent понятные контракты, проверенные примеры и минимальный контекст — и он сможет развивать проект вместе с требованиями.
Пользователь должен после знакомства с сайтом понять:
- ему не предлагают принять огромный стек заранее;
- простой проект действительно может оставаться простым;
- когда требования растут, существуют проверенные пути усложнения;
- решения проектируются так, чтобы их было удобно понимать, изменять и проверять AI-агенту;
- showcase — не игрушечные screenshots, а рабочие образцы архитектурных переходов;
- конечную реализацию пользователь и AI адаптируют под конкретную задачу, а не обязаны устанавливать универсальный модуль.
Почему это важно для AI
Сайт должен отдельно объяснить Agent Experience (AX).
Для coding agent важны:
- минимальный необходимый context;
- предсказуемая структура проекта;
- локальность изменений;
- явные зависимости;
- отсутствие ручного дублирования контрактов;
- типизированные точки соединения компонентов;
- понятные compiler/runtime errors;
- воспроизводимый способ проверки результата;
- готовые кейсы, из которых можно перенести архитектурный принцип в новую задачу.
Сквозная типизация в сложных приложениях должна показываться как feedback loop для AI, например:
Prisma schema
↓
Prisma types
↓
Pothos
↓
GraphQL schema
↓
GraphQL Codegen
↓
Typed frontend
↓
tsc / tests
Но нельзя создавать впечатление, что весь этот стек обязателен каждому проекту.
Showcase как центральная часть сайта
Пока отдельная база showcase/cases на GitHub не оформлена, реализовать принципиальные showcase непосредственно на haih.site.
Showcase должны демонстрировать не список технологий, а разные разумные архитектурные состояния и переходы между ними.
Каждый showcase должен отвечать на вопросы:
- какая была задача;
- почему текущей архитектуры достаточно или уже недостаточно;
- какое новое требование появилось;
- что именно добавили;
- почему не добавили больше;
- как выглядит структура проекта;
- какие зависимости появились;
- как проверить результат;
- что из этого кейса может перенести AI в другой проект.
Showcase 1. Статический сайт
Задача: корпоративный сайт / landing / документационная страница без динамических данных.
Минимальная архитектура:
HTML / CSS / JS / assets
+ Docker Compose
+ Traefik
Никакой БД, GraphQL, auth, React и application server.
Главный тезис: если достаточно статики — движок не нужен.
Показать, насколько дёшево AI может менять такой проект.
Showcase 2. Обособленный API
Задача: сервис, который предоставляет программный API и вообще не нуждается в собственном frontend.
Показать API-first проект как самостоятельное конечное состояние, а не как недоделанный web-сайт.
Варианты развития:
API only
или при необходимости persistence:
PostgreSQL
+ Prisma
+ API
Показать, что UI не является обязательным слоем системы.
Showcase 3. Статический сайт + небольшая динамическая функция
Задача: например, форма обратной связи.
Не превращать ради неё весь сайт в full-stack application.
Показать минимальный переход:
static site
+ small endpoint/service
Если сообщения можно сразу отправлять во внешний сервис — БД не добавлять.
Это важный кейс против overengineering.
Showcase 4. Сайт с persistence
Задача: данные уже необходимо сохранять: заявки, каталог, записи или другой доменный объект.
Добавить:
PostgreSQL
+ Prisma
Показать Prisma как источник типизированной модели данных и объяснить, почему persistence появился именно на этом этапе.
API и сложный frontend добавлять только если задача действительно этого требует.
Showcase 5. Типизированный API поверх данных
Задача: сохранёнными данными должны пользоваться несколько клиентов или frontend должен работать с полноценным API.
Добавить, например:
PostgreSQL
+ Prisma
+ Pothos
+ GraphQL
Показать связь типов Prisma и GraphQL и минимизацию ручного glue-кода.
Showcase 6. Полноценное типизированное web-приложение
Задача: появляется интерактивный frontend, работающий с собственным API.
Архитектура развивается до:
PostgreSQL
+ Prisma
+ Pothos / GraphQL
+ GraphQL Codegen
+ client
+ UI
Показать сквозной контракт database → server → API → frontend и автоматическую проверку изменений компилятором.
Frontend framework не позиционировать как обязательный. Выбор React/другого решения должен быть следствием задачи.
Showcase 7. Пользовательское приложение с авторизацией
Задача: появляются персональные данные, аккаунты или закрытые операции.
Только теперь добавить auth/session/permissions.
Показать, что авторизация — не обязательная инфраструктура каждого сайта, а ответ на конкретное требование.
Продемонстрировать прохождение identity/permissions через API и UI без разрушения предыдущей архитектуры.
Showcase 8. Полноценный интернет-магазин
Задача: реальный сложный продукт.
Должны появиться необходимые доменные части, например:
- каталог товаров;
- категории;
- карточка товара;
- поиск/фильтрация, если оправданы требованиями;
- корзина;
- пользователь/покупатель;
- оформление заказа;
- заказы и их состояния;
- административное управление товарами и заказами;
- изображения/файлы;
- интеграция оплаты как отдельный архитектурный шаг;
- необходимые фоновые процессы/уведомления.
Этот showcase должен показать, что минималистичный подход не ограничивается лендингами: из той же системы принципов можно эволюционно получить полноценное production-oriented приложение.
При этом важно визуально/архитектурно показать происхождение сложности: каждый новый слой существует потому, что его потребовало конкретное бизнес-требование.
Показывать не только состояния, но и переходы
Showcase желательно связать в визуальный граф, а не линейную лестницу.
Пример:
┌→ small endpoint
static website ───┤
└→ persistence → API → typed web app → auth → commerce
API service ─────────→ persistence
└────────────→ agent/client integrations
Главная мысль: нет обязательного конечного стека.
Пользователь может остановиться в любой точке, если она полностью решает задачу.
Что должен делать каждый showcase на самом сайте
Не ограничиваться текстовым описанием.
По возможности каждый showcase должен быть работающим примером:
- открыть результат;
- посмотреть архитектуру/структуру;
- увидеть используемые компоненты;
- увидеть diff или последовательность изменений относительно предыдущего состояния;
- прочитать краткое объяснение архитектурного решения;
- увидеть способ проверки;
- получить инструкцию/prompt/context, с которыми coding agent может воспроизвести или адаптировать решение.
В дальнейшем эти материалы можно вынести/синхронизировать с отдельными GitHub cases.
Предлагаемая структура главной страницы
Hero
Очень коротко объяснить отличие HAIH.
Не «ещё один AI framework», а идея минимальной эволюционной архитектуры для разработки вместе с coding agents.
Основной CTA должен вести к работающим showcase.
Проблема
Современные boilerplate/framework часто заставляют проект платить за сложность заранее.
AI дополнительно платит за неё контекстом и количеством связей, которые должен понять.
Принцип
Start minimal. Add only what the next requirement needs.
Показать визуальную эволюцию от static до сложного приложения.
Live showcase
Центральный раздел сайта с описанными выше кейсами.
AI / AX
Объяснить, почему архитектура специально оптимизируется под coding agents: context, locality, types, compiler feedback, tests, cases.
Best practices / Cases
Объяснить модель базы знаний: не навязывать одну конечную реализацию, а собирать проверенные архитектурные решения и законченные вертикальные изменения.
Open source / Participate
Объяснить будущий community loop:
requirement
→ minimal solution
→ verified case
→ AI reuse
→ new projects
→ new cases
Приглашать пробовать подход, адаптировать кейсы и публиковать собственные решения.
Чего сейчас не обещать
- не позиционировать HAIH как готовую универсальную SaaS-платформу;
- не делать акцент на продаже/монетизации;
- не обещать огромный marketplace готовых модулей, которого пока нет;
- не создавать впечатление, что Prisma/Pothos/Apollo/React обязательны;
- не переносить на новый продукт весь feature list старого
haih-net/agent; - не говорить, что существует единственно правильная архитектура;
- не перегружать главную техническими деталями раньше, чем пользователь понял ценность.
Критерий результата сайта
Новый посетитель без знания истории HAIH должен после просмотра сайта понять:
«Я могу начать с минимального проекта. Когда появится новое требование, AI сможет взять проверенный кейс, добавить только необходимую архитектуру и проверить результат. Мне не нужно заранее принимать огромный framework и тащить в проект функциональность, которой у меня нет».
После понимания этой идеи пользователь должен иметь возможность сразу открыть живой showcase, увидеть её на реальном проекте и получить достаточно информации, чтобы попробовать аналогичный подход самостоятельно.
Цель распространения
На текущем этапе оптимизировать сайт под понимание идеи, эксперименты и участие, а не под продажи.
Желаемый цикл:
посетитель
→ понимает принцип
→ смотрит живой case
→ пробует подход
→ адаптирует решение с AI
→ делится собственным case/best practice
→ следующий пользователь получает ещё один проверенный путь
Сайт должен стать первой публичной демонстрацией этой модели и временно выполнять роль витрины/базы ключевых showcase до появления полноценного открытого каталога кейсов.
Ворклоги
Прогресс: от application engine к базе инженерных решений для AI
В ходе дальнейшего проектирования уточнена общая парадигма HAIH и проверено, как она уже проявляется в текущем haih.site, в частности на странице /solutions.
1. Переиспользовать не обязательно application engine
Основная гипотеза стала радикальнее: в эпоху coding agents значительная часть ценности большого application framework/engine может переноситься из готового универсального кода в повторно используемое инженерное знание.
Новая схема:
requirements
+ best practices
+ showcases
+ evidence
+ mature primitives
↓
coding agent
↓
project-specific implementation
То есть reuse остаётся, но его объектом всё чаще становится не универсальная реализация бизнес- и application-слоя, а проверенный способ решения задачи.
2. Граница проходит не между «готовым» и «самописным»
Нет цели переписывать PostgreSQL, OpenSSL, Sharp и другие зрелые специализированные primitives. Но интеграционные framework'и следует оценивать по фактически используемым capabilities.
Пример с Next.js: задача не в создании собственного аналога Next.js, а в определении того, какие его возможности реально требуются проекту — routing, layouts, build, SSR/SSG, image processing и т. п. Если конкретный набор требований дешевле и прозрачнее реализуется через React + Vite + специализированные primitives + небольшой project-specific glue, большой framework перестаёт быть обязательным.
Ключевой эффект coding agents: стоимость написания и сопровождения небольшого специализированного glue-кода резко снизилась. Поэтому старое правило «не писать своё, потому что придётся поддерживать» больше нельзя применять без сравнения с ценой чужой abstraction model, upgrade path и compatibility constraints.
3. React — пример dependency с высоким architectural leverage
Отдельно уточнено, что минимализм не означает механическое исключение framework/library dependencies.
React хорошо соответствует новой модели: при сравнительно компактной концептуальной поверхности он снимает большой объём сложной универсальной работы по декларативному UI, состоянию, композиции и rendering, не навязывая архитектуру persistence/API/deployment всего приложения.
Полезный критерий:
Сколько полезной сложности dependency забирает у проекта и сколько чужой сложности заставляет проект принять?
Таким образом, HAIH не должен оптимизировать dependency count. Нужно оптимизировать architectural leverage и суммарный friction.
4. /solutions уже является зачатком knowledge layer
Текущая страница haih.site/solutions фактически реализует часть этой модели. Она разделяет application, development/build, production runtime и optional deployment services и описывает технологии через выполняемые ими capabilities и зависимости.
Особенно полезна модель статусов решений: In use, Optional, Configured, Connected; verification in progress, Implementation open, Future branches. Это позволяет coding agent видеть не только решение, но и статус достоверности знания о нём.
Страница также оставляет будущие capabilities открытыми — standalone API, persistence, typed API/data contracts, identity/authorization, payments, formal solution composition — не назначая заранее обязательную технологию каждому требованию.
5. Следующий шаг — инвертировать каталог решений
Сейчас /solutions преимущественно отвечает на вопрос: «Что используется в haih.site и какую работу выполняет?»
Следующий уровень должен позволить идти от требования к композиции решений:
Requirement
↓
Capabilities needed
↓
Trade-offs
↓
Solution composition
↓
Implementation
↓
Verification
↓
Evidence
Пример: responsive images → on-demand transformation → Sharp → expensive deterministic computation → cache → Varnish/CDN/другая подходящая реализация.
Важно, что showcase не обязан предписывать конкретный стек. Агент должен уметь взять инженерный опыт и адаптировать его: например, не ставить Varnish, если требуемое кеширование уже обеспечивает существующий CDN.
6. Возможное развитие: machine-readable solution graph
Перспективное направление — машиночитаемое описание solutions: какие capabilities решение предоставляет, какие prerequisites требует, какие verification checks подтверждают корректность и с какими решениями оно композиционно совместимо.
Тогда HAIH сможет быть не runtime framework, присутствующим в каждом production-проекте, а engineering knowledge system, из которой coding agent синтезирует архитектуру конкретного проекта под requirements.
Текущая формулировка направления
Не «новый модульный движок», а система повторного использования инженерного опыта:
Libraries provide primitives. Cases provide engineering experience. Agents synthesize the application. Evidence verifies it.
haih.site/solutions уже можно рассматривать как первый практический слой этой системы; showcases должны добавить законченные вертикальные переходы от requirement к проверенному результату.
Прогресс: проверка архитектуры haih.site на реальном проекте
Изучили текущую реализацию haih.site и уточнили критерий минимальности архитектуры. Важный вывод: минимализм нельзя измерять количеством технологий или зависимостей. Нужно минимизировать суммарный friction разработки, эксплуатации и дальнейших изменений, включая feedback loop человека и AI.
Development stack
React/Vite сами по себе не являются избыточностью даже для сайта, который в production в основном отдаёт статический контент.
Vite оправдан реальным требованием к разработке: быстрый edit → HMR → browser feedback loop без ручных reload/cache-reset действий пользователя.
React может быть оправдан компонентной моделью и локальностью изменений растущего UI. Для AI это также даёт предсказуемую, хорошо известную структуру кода.
Уточнённый принцип:
Не минимизировать число зависимостей. Минимизировать friction. Каждая добавленная технология должна уменьшать суммарную сложность сильнее, чем увеличивает её.
Production serving: baseline
После build запущен npm run start и проведён synthetic benchmark:
ab -c 1000 -n 100000 http://localhost:3000/
Результат:
- 100 000 запросов;
- concurrency 1000;
- 0 failed requests;
- 11 515.51 req/s;
- p50 27 ms;
- p95 37 ms;
- p99 67 ms;
- max 8658 ms.
Типичная latency низкая, но присутствовали единичные большие outliers.
Docker + Traefik + Varnish
Затем тот же workload запущен через production-like цепочку:
client → Traefik → Varnish → app
Benchmark:
ab -c 1000 -n 100000 http://localhost:8088/
Результат:
- 100 000 запросов;
- concurrency 1000;
- 0 failed requests;
- 15 871.02 req/s;
- p50 62 ms;
- p95 74 ms;
- p99 88 ms;
- max 129 ms.
По сравнению с прямым app-server throughput вырос примерно на 38%, а распределение latency стало существенно более стабильным: исчез многосекундный tail.
Поведение origin
docker stats показал, что во время 100k запросов app практически не участвовал в обработке повторных запросов.
До теста app имел примерно:
NET I/O 9.56kB / 126B
MEM 25.73 MiB
После:
NET I/O 10.9kB / 3.68kB
MEM 26.16 MiB
При этом Traefik обработал порядка 370MB / 394MB, Varnish — 41MB / 328MB.
Это подтверждает полезную архитектурную границу: cacheable delivery-нагрузка заканчивается на Varnish и почти не доходит до application layer.
Почему Varnish нужен проекту
Критически важное требование: сайт использует динамический resize/processing изображений через Node + Sharp.
Без cache повторный запрос одного варианта изображения потенциально повторяет дорогой цикл:
request
→ Node
→ Sharp
→ decode
→ resize
→ encode
→ response
С Varnish вычисление выполняется на cache miss, после чего одинаковый вариант может обслуживаться из cache без повторной работы Sharp:
request
→ Varnish
├─ HIT → response
└─ MISS → Node → Sharp → result → cache → response
Поэтому Varnish оправдан не просто увеличением RPS статического HTML, а изоляцией application layer и кешированием результатов дорогих повторяемых вычислений.
Архитектурный вывод
Текущий стек следует оценивать не как список технологий:
React + Vite + Node + Sharp + Varnish + Traefik + Docker
а как набор решений конкретных требований:
- Vite → быстрый development feedback loop;
- React → композиция и локальность изменений UI;
- Node + Sharp → on-demand подготовка изображений нужного размера/формата;
- Varnish → не повторять дорогую обработку и не пропускать cacheable нагрузку до origin;
- Traefik → routing/deployment boundary;
- Docker → воспроизводимый runtime/deployment.
Хороший критерий для каждого архитектурного компонента:
Какую измеримую стоимость этот компонент уменьшает и превышает ли выигрыш стоимость самого компонента?
Это уточнение нужно использовать при разработке showcase и best practices HAIH: не навязывать минимальное количество технологий, а показывать минимально достаточную суммарную стоимость решения с evidence.
Следующая полезная проверка
Для чистого сравнения cache layer имеет смысл позже получить третий datapoint:
A. app
B. Traefik → app
C. Traefik → Varnish → app
с одинаковым workload и отдельной метрикой количества запросов, реально дошедших до origin.
Маркетинговую статью по этим выводам в рамках данного worklog не публикуем — оформить отдельно позже.