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

B2B Chemicals SaaS

Продакшн B2B SaaS для поставщика клининговой химии B2B chemicals supplier (UZ) (Узбекистан): сайт + API + админка + Telegram mini-app, построенный на собственном ShipKit-бойлерплейте на самом свежем стеке.

Статус
активный
Период
2025-11-10 → 2026-05-14
AI-сессий
2
Стек
Языки
TypeScriptSQL
Фреймворки · Инфра
Next.js 16Elysia.jsDrizzle ORMBetter AuthgrammYReact PDFTurborepo
§01

Обзор

  • Что это: full-stack B2B-платформа продаж клининговой химии. Публичный сайт (каталог, отрасли, блог, калькуляторы расхода, лиды), Elysia API, админка с RBAC (лиды, каталог, коммерческие предложения) и Telegram mini-app для менеджеров (калькулятор + генерация PDF-предложений). Построено на собственном SaaS-бойлерплейте «ShipKit» (бренд DavrApps).
  • Тип / статус / роль: web-app (монорепо) / active / solo (~99% коммитов — пользователь; один внешний контрибьютор с 2 коммитами).
  • Окно активности: 2025-11-10 → 2026-05-14, ~6 месяцев плотной разработки, проект живой (самые свежие коммиты — правки UI и контента в мае 2026).
§02

Стек

  • Языки: TypeScript (strict), SQL (Drizzle).
  • Фреймворки/библиотеки: Next.js 16 (App Router, роутинг [locale], Turbopack, React 19), Elysia.js (Bun-нативный типизированный API), Drizzle ORM, Better Auth (+ RBAC, access-control), grammY (Telegram-бот), @react-pdf/renderer (PDF коммерческих предложений), next-intl v4.5 (useExtracted + .po/gettext), Tailwind v4 + shadcn/ui, Fuse.js (поиск), Polar.sh (из бойлерплейта).
  • Инфра/деплой: Turborepo (монорепо, 4 приложения + 10 пакетов), Bun 1.3 (рантайм + пакетный менеджер), deploy-skill (nginx + systemd + SSL). .mcp.json, .claude/skills/ — AI-native обвязка.
  • Данные: PostgreSQL (Drizzle, 16+ таблиц), Redis (ioredis — кэш, rate limit, учёт использования).
  • Заметный тулинг: .pen-файлы (Pencil — дизайн-макеты), CLI-пакет, React Email + Resend, собственный бойлерплейт как фундамент.
§03

Что реализовано

Сообщения коммитов аккуратные, в стиле conventional commits (feat(...), fix(...), refactor(...)) — в отличие от более старых проектов.

  • Доменная модель калькулятора — таблицы object_types, object_type_parameters, consumption_rules, calculation_periods: расчёт расхода химии по типу объекта и параметрам.
  • Калькулятор расхода + bin-packing (feat(calc): industry-specific ... savings calculator — автомойки/horeca/клининг): подбирает фасовки, чтобы покрыть требуемый объём.
  • Коммерческие предложенияquotes/quote_items, атомарная нумерация KP-00042, генерация PDF (ru/uz, НДС, скидки).
  • Лидыfeat(leads): server-side /api/lead bridge posts to Telegram group via bot + localStorage retry queue (клиентская очередь повторов при сбое).
  • Онбординг менеджеров в Telegram — инвайт-токены (inv_...), калькулятор в mini-app.
  • Блог с модерируемыми комментариямиfeat(blog): moderated comments system end-to-end, 6 SEO-статей.
  • Сравнение товаров + поискfeat(compare): /compare side-by-side, agent/search: catalog search with Fuse.js (Ctrl+K).
  • Сквозная i18n по всему сайту — next-intl useExtracted + .po, 3 языка (ru/uz/en).
  • SEO — sitemap, robots, JSON-LD, канонизация роутов с 301-редиректами, noindex на служебных страницах.
  • Объём: 189 коммитов за ~6 месяцев. Примечательно: работа идёт через ветки agent/* (agent/calculators, agent/sample, agent/compare, agent/search, agent/routes-dedup) — параллельные AI-агенты, вливаемые в master.
§04

Технические челленджи

  • Жадный bin-packing с юнит-тестами (apps/api/src/modules/v1/calculator/pack-greedy.ts + pack-greedy.test.ts): покрыть требуемый объём requiredMl набором фасовок — сортировка по убыванию объёма, floor для всего, кроме самой мелкой фасовки, ceil для округления остатка вверх, деньги в BigInt (UZS). → Настоящий алгоритм + TDD; доказательство инженерной работы, а не CRUD.
  • BigInt-safe деньги (apps/api/src/lib/bigint-json.ts): цены/суммы хранятся как Drizzle bigint (без проблем с точностью float), а глобальный BigInt.prototype.toJSON чинит сериализацию в ответах Elysia. Подробный комментарий объясняет, почему именно так, а не через number. → Осознанное решение для денежной арифметики.
  • Атомарная нумерация предложений (quotes/number.ts): UPDATE counters SET value = value + 1 ... RETURNING value внутри транзакции вместе со вставкой предложения → race-safe последовательность KP-NNNNN.
  • Singleton Telegram-бот с защитой от init-race (telegram/bot.ts, grammY): двойной guard (botSingleton + botInitPromise), одноразовые инвайты с проверками not_found/used/expired, запуск mini-app через кнопку web_app.
  • Генерация PDF-предложений (packages/pdf, @react-pdf/renderer): кастомные кириллические шрифты, ru/uz, снапшот цены на момент оформления (unitPriceUzsSnapshot), расчёт НДС/скидок, подписи/реквизиты.
  • i18n в масштабе (next-intl v4.5 useExtracted + gettext .po, proxy.ts для Next 16): профессиональная локализация каждой страницы на 3 языках.
  • Архитектура монорепо (Turborepo): чистое разделение приложений (web/api/admin/miniapp) и общих пакетов (auth/db/cache/ui/email/entities/pdf/cli) через workspace:*.
§05

AI-разработка

  • Найдено сессий: 2 (локальная директория сессий Claude Code для этого проекта), суммарно ~13 МБ (9.3 МБ + 3.3 МБ) — очень плотное использование AI. Присутствует директория memory/.
  • Что делалось с AI: массовый перевод каждой страницы (useExtracted/getExtracted), фичи калькулятора, сравнение/поиск, SEO-аудит, генерация контента блога. Сессии включают собственный I18N_GUIDE.md проекта как контекст.
  • Паттерны AI-воркфлоу (сильный сигнал для бренда):
  • Параллельные агенты на git-веткахagent/calculators, agent/sample, agent/compare, agent/search, agent/routes-dedup, вливаемые в master: пользователь распараллеливает независимые фичи по AI-агентам.
  • AI-native репозиторийCLAUDE.md (210+ строк правил «из реальных продакшн-багов»), .claude/skills/ (deploy/dev/ui-ux/polar), .mcp.json.
  • superpowers-скиллы — в сессиях видно вызов superpowers:using-superpowers.
  • Бойлерплейт спроектирован под AI-ассистентов (Claude Code/Cursor/Copilot/Windsurf).
§06

Достижения и метрики

  • 4 приложения + 10 пакетов в одном Turborepo, solo-разработка.
  • 16+ таблиц БД (Drizzle): posts, leads, products, product_variants, object_types, consumption_rules, calculation_periods, managers, manager_invites, quotes, quote_items, settings, counters, blogComments, subscriptions.
  • 3 языка интерфейса через полноценный gettext-пайплайн.
  • Реальный продукт на самом современном стеке 2026 года (Next 16 / React 19 / Bun / Elysia / Tailwind v4).
  • README позиционирует фундамент как ShipKit — бойлерплейт, на котором «построено 4+ живых SaaS».
§07

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

git shortlog · все ветки

  1. Dave93137
  2. Your Name50
  3. handenis86-ux2
3 контрибьютора189 коммитов всего
Сейчас

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

Связаться