Назад в архив
I. Собственные продукты и фреймворквитринасоло

EcoMap — Civic Environmental Reporting

Гражданская платформа EcoMap (Узбекистан): жители сообщают об экологических нарушениях с фото и геометками на карте. Solo-проект в двух итерациях — v1 на Supabase, v2 переписан на собственном монорепо-стеке ShipKit.

Статус
активный
Период
2025-08-09 → 2026-03-08
AI-сессий
99
Стек
Языки
TypeScriptSQL
Фреймворки · Инфра
Next.js 16Elysia.jsDrizzleBetter AuthgrammYTurborepo
§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-аутентификации (много итераций: postMessage auth_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-email telegram_{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).
§07

Контрибьюторы

git shortlog · все ветки

  1. Dave93139
  2. claude[bot]7
  3. shahzodsalimsakov4
3 контрибьютора150 коммитов всего
Сейчас

Открыт к ролям Senior / Staff инженера и избранному фрилансу — продакшн-AI, платформы и full-stack разработка.

Связаться