Об этом проекте
Go Performance Starter — это ориентированный на конкретную архитектуру стартовый шаблон для небольших SaaS-продуктов с серверным рендерингом, объединяющий Go (Chi), шаблоны templ, HTMX с Alpine.js, Tailwind CSS, Supabase (Auth + PostgreSQL) и Cloudflare. Его ключевая концепция: серверный рендеринг на Go при минимальном использовании JavaScript, где бюджеты производительности и защитные механизмы для ИИ-агентов проверяются в CI, а не просто описаны.
Что он предоставляет
Аутентификация использует стандартную схему Supabase (email/пароль) с серверной проверкой JWT, а также поддерживает анонимный вход для гостей, чтобы демо-пользователи получали реальную идентичность без регистрации. Многопользовательская изоляция строится на PostgreSQL Row Level Security: требования JWT claims передаются в каждый запрос через транзакцию с локальной настройкой роли (SET LOCAL ROLE) плюс request.jwt.claims), так что auth.uid() разрешается внутри политик RLS, и слой репозитория не может пропустить тенантную изоляцию. В README отмечается, что это делает интеграцию с Supabase «несущей» (load-bearing), а не просто заменяемым адаптером; переход на аутентификацию, независимую от вендора, потребует переписывания middleware аутентификации, вспомогательной функции RLS scope и самих политик.
Включаемый демо-проект предназначен для проверки всего стека: раздел /patterns демонстрирует каждый поддерживаемый паттерн HTMX/Alpine с живым примером и исходным кодом, а архитектурный тест преобразует неправильные ответы в сохраняемые персональные флеш-карточки, которые хранятся как реальные защищенные RLS записи. Фоновая задача истекает срок действия неактивных гостей через административное API Supabase.
Инструментарий разработчика включает типобезопасные шаблоны templ, компилируемые в Go, генерацию кода sqlc с репозиторным паттерном, горячую перезагрузку через air, автоматизацию Taskfile, линтер golangci-lint, метрики Prometheus, структурированное логирование через log/slog, health checks и CI/CD. Ролевая система дизайна использует семантические токены, такие как bg-surface и text-muted-foreground, а переключение темной темы меняет сами токены, а не компоненты; CI проверяет отсутствие сырых серых цветов и дрейфа dark: токенов.
Бюджеты производительности
README перечисляет enforce бюджетов: время ответа P95 менее 100 мс, размер бинарника менее 20 МБ, образ Docker менее 30 МБ, стабильная память (steady-state memory) менее 128 МБ и время запуска менее 500 мс. Они проверяются командами task test:performance и task test:binary-size.
Разработка с ИИ-агентами
Проект содержит многоуровневую ИИ-конституцию: CLAUDE.md содержит правила остановки при нарушении (halt-on-violation rules), тогда как .claude/engineering.md, workflow.md и stack.md определяют инженерные стандарты, процессы и факты стека. AGENTS.md генерируется из этих слоев командой task agents:build, а CI падает, если файл уходит в дрейф. Для нетривиальных фич используется трехэтапный поток Architect to Coder to Reviewer. Единственный критерий готовности (definition of done) — прохождение задачи ci quality gate (форматирование, линтинг, race-тесты, проверка дрейфа, размер бинарника, сканирование уязвимостей), который агенты должны проходить без снижения порогов.
Записи об архитектурных решениях (ADR) содержат раздел Enforcement, сопоставляющий правила проверкам. Задача task check:adr запускает детерминированный набор, который проверяет тестируемые следствия ADR, включая сканер секретов. Проверки изначально начинаются как предупреждения и повышаются до блокирующих после чистого периода или реального обнаружения нарушения. Два хука являются блокирующими: Stop-gate предотвращает завершение хода агентом, если тесты падают или есть blocker, а PreToolUse блокирует ручное редактирование существующих ADR, AGENTS.md или сгенерированного кода; у обоих есть аварийные выключатели (kill-switches). В README помечено, какие части являются несущими, а какие можно удалить, включая инструкции для полной очистки enforcement suite.
Корневой versions.json описывается как публичный контракт потребления, содержащий привязки стека; задача task versions:check завершается неудачей, если какой-либо ключ расходится с источником в репозитории, при этом добавление ключей допустимо, а переименование или удаление является ломающим изменением.
Начало работы и объем
Для работы требуются Go 1.26+, Docker, Docker Compose, Task и Node.js 20+. Быстрый старт включает клонирование, копирование .env.example, запуск базы данных, выполнение миграций, генерацию типов sqlc, установку Go- и npm-зависимостей и запуск dev сервера с горячей перезагрузкой (порт 4000 по умолчанию). Описана одноразовая настройка шаблона восстановления пароля Supabase. Доступные задачи включают dev, ci, build, test, coverage, проверку производительности и размера бинарника, линтинг, сборку CSS, сборку образа Docker и сканирование уязвимостей. Проект выпущен под лицензией MIT.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.