§01
Обзор
- Что это: civic-tech продукт для приёма и отслеживания обращений об экологических нарушениях: карта (Leaflet) с маркерами, загрузка фото/медиа, страница детализации нарушения, кнопка «Помочь решить», аутентификация и бот в Telegram, мультиязычность (ru/uz/en), фоновые задачи, админ-панель. Выглядит как личный продукт/стартап (потенциал build-in-public).
- Тип / статус / роль: web-app (фулстек-монорепо) / active / solo (~96% коммитов — пользователя; в v2 — 4 коммита от Shahzod).
- Окно активности: 2025-08-09 → 2026-03-08. Две папки = две итерации:
ecomap_new(v1, авг–дек 2025, 51 коммит): Next.js + Supabase.ecomap_full(v2, фев–мар 2026, 94 коммита): полный переписыв на монорепо-стеке ShipKit (Elysia/Drizzle/BetterAuth).
§02
Стек
- v2 (`ecomap_full`, текущий): монорепо на Turborepo (
apps/web,apps/admin,apps/api,apps/jobs+ 10 пакетов). Next.js 16 + React 19, API на Elysia.js (Bun) с Eden Treaty (типобезопасные вызовы), Better Auth (+кэш сессий в Redis), Drizzle ORM + PostgreSQL, Telegram-бот на grammY (+@grammyjs/conversations), sharp (обработка фото нарушений), Resend (email), next-intl (ru/uz/en), Tailwind v4, shadcn/ui, Swagger. - v1 (`ecomap_new`): Next.js + Supabase (ssr + supabase-js), TanStack Query, обширный Radix/shadcn, Tiptap (rich-text), @ai-sdk/openai (AI-категоризация/обработка), grammY, фоновая очередь, systemd (
ecomap-queue.service). - Инфраструктура: Bun, Turborepo, деплой-скрипты (API через
bun runиз-за нативного sharp), systemd для очереди, Redis. - Данные: PostgreSQL (Drizzle) в v2; Supabase Postgres в v1.
§03
Что реализовано
- v1 (Supabase): интернационализация (ru/uz/en — header/footer/home/map), locale-aware редиректы (фикс бесконечного редиректа), фоновая очередь + Telegram-бот, интеграция AI SDK, редактор Tiptap. Настроены Claude GitHub Actions (воркфлоу PR Assistant + Code Review).
- v2 (монорепо, переписыв): план миграции (
docs/migration-plan/TASKS.md), флоу Telegram-аутентификации (много итераций: postMessageauth_result, cross-origin сессионная cookie сcredentials: include,setSessionCookie, защита от дублирования пользователей по bot-email, синхронизация telegram→profiles), консолидация auth-роутов,USE_SECURE_COOKIESвместо NODE_ENV, страница нарушения с картой и media-пропсами, деплой-скрипты,--external sharp(нативная зависимость). - Объём: ~145 коммитов суммарно (51 v1 + 94 v2), ~139 от пользователя. Активная итеративная разработка, полный переписыв между версиями.
§04
Технические челленджи
- Миграция архитектуры v1→v2 (Supabase BaaS → self-hosted монорепо на Elysia + Drizzle + Better Auth): задокументированный план (
docs/migration-plan/TASKS.mdс таблицей прогресса). → Демонстрирует осознанный уход от vendor lock-in BaaS к контролируемому стеку; сильная контентная история. - Telegram-аутентификация в вебе (
apps/api, серия коммитов): обработкаpostMessage {event:'auth_result',result:{...}}, установка сессионной cookie через Better Auth, решение проблемы cross-origin cookie (credentials: include), защита от дублей (валидация формата bot-emailtelegram_{id}@ecomap.uz), синхронизация telegram-данных вprofilesна/me. → Реальный, нетривиальный инжиниринг аутентификации (а не «прикрученный сбоку OAuth»). - Типобезопасный фулстек через Eden Treaty (Elysia → клиент): end-to-end типизация API без codegen.
- Обработка изображений (sharp) для фото нарушений + корректная сборка нативной зависимости (
--external sharp, деплой черезbun run). - Фоновые задачи (
apps/jobs+packages/jobs-shared+ очередь + systemd) — работа вынесена с HTTP-пути. - AI-обработка (v1,
@ai-sdk/openai) — вероятно, категоризация/суммаризация обращений.
§05
AI-разработка
- Найдено сессий: 99 .jsonl в локальной директории сессий Claude Code для v2 (~42 МБ) — очень интенсивное использование Claude Code на переписе v2. (У v1
ecomap_newотдельный путь без прямых CC-сессий, но в git естьclaude[bot].) - Что делалось с AI: весь переписыв v2 вёлся через Claude Code по
docs/migration-plan/TASKS.md(CLAUDE.md требует отмечать задачи ✅ и обновлять таблицу прогресса — структурированный AI-driven процесс). - Паттерны AI-воркфлоу (сильный бренд-сигнал):
- Claude GitHub Actions в v1: ветки
claude/issue-N-*→ PR, воркфлоу «Claude PR Assistant» и «Claude Code Review» (7 коммитовclaude[bot]). - Plan-driven разработка с AI в v2: миграция через TASKS.md с обязательными чекпоинтами прогресса.
.mcp.json,.playwright-mcp/,.kombai/— MCP-тулинг и Playwright MCP для UI.
§06
Достижения и метрики
- Завершённый civic-tech продукт в 2 итерациях, переписанный на современный self-hosted стек.
- v2: 4 приложения (web/admin/api/jobs) + 10 пакетов в Turborepo, solo.
- ~145 коммитов за ~7 месяцев; 99 CC-сессий (42 МБ) на v2.
- Интеграции: Telegram (аутентификация + бот), карты (Leaflet), фото (sharp), email (Resend), AI (OpenAI в v1).