Перейти до вмісту
Ігор Романчук

Briefly - AI CRM для управління капіталом

Врятував застряглий AI-згенерований прототип і перетворив його на multi-tenant LLM-продукт продакшн-рівня на AWS.

Клієнт
Briefly
Галузь
Фінтех · управління капіталом
Роль
Senior full-stack інженер і архітектор рішень
Терміни
2026

8розділів

структурований бриф на кожну зустріч

8модулів

доменних модулів NestJS з ізоляцією тенантів

8tf-модулів

Terraform у двох середовищах

~19kрядків

з узгодженими типами від OpenAPI

Контекст і виклик

Контекст

Briefly допомагає фінансовим радникам готуватися до зустрічей із клієнтами, перетворюючи PDF-виписки, нотатки та синхронізовані листи на структурований бриф із 8 розділів - огляд портфеля, наступні кроки, податкові аспекти, настрої клієнта тощо.

Виклик

AI-згенерований прототип клієнта застряг: основний пайплайн генерації не працював, завантаження кількох файлів збоїло, а значна частина UI була заглушками.

Архітектура · рис. 02

Вхідні дані - завантажені PDF-виписки, нотатки зустрічей, пошта й календар, синхронізовані через Nylas, - надходять до API на NestJS 11 з Prisma 7 і PostgreSQL 18, де тенанта визначає Cognito. LLM-пайплайн звертається до моделей через OpenRouter, з версіонованими промптами й трасуванням у Langfuse. Zod-схема перевіряє вихід моделі до збереження, а результат - бриф із 8 розділів у клієнті на React 19 з RTK Query. Допоміжні частини: AWS у Terraform у 2 середовищах - VPC, RDS, ECS Fargate, ALB, S3, CloudFront, Cognito і CloudWatch; ізоляція тенантів через Cognito у кожному запиті, у 8 доменних модулях; і типобезпека завдяки RTK Query, згенерованому з OpenAPI, - близько 19k узгоджених рядків.

  1. 01 Вхідні даніPDF-виписки · нотатки зустрічейпошта + календар через Nylas
  2. 02 APINestJS 11Prisma 7 · PostgreSQL 18 · тенанти через Cognito
  3. 03 LLM-пайплайнOpenRouterLangfuse - версіоновані промпти, трасування
  4. 04 ПеревіркаZod-схемавихід моделі перевіряється до збереження
  5. 05 РезультатБриф із 8 розділівКлієнт React 19 · RTK Query

Що я створив

  1. Наскрізний аудит; виправив зламаний LLM-пайплайн, завантаження кількох файлів і витоки мок-даних.
  2. LLM-пайплайн генерації брифів: NestJS + OpenRouter + Langfuse, з валідацією виходу моделі за Zod-схемою.
  3. Multi-tenant API на NestJS 11 + Prisma 7 + PostgreSQL 18 з 8 доменними модулями та ізоляцією тенантів через Cognito в кожному запиті.
  4. AWS як код: 8 модулів Terraform у двох середовищах, деплой через GitHub Actions.
  5. Синхронізація пошти/календаря Nylas через OAuth, OpenRouter і Langfuse за чистими сервісами з резервними сценаріями через конфіг.
  6. Клієнт на React 19 + Vite + Tailwind 4 + shadcn з OIDC-автентифікацією та шаром RTK Query, згенерованим з OpenAPI.

Результати і роль

  • Робочий наскрізний продукт, яким можуть користуватися реальні радники, на захищеній інфраструктурі.
  • Застряглий прототип перетворено на робоче демо для радників.

Senior full-stack інженер і архітектор рішень - аудит, бекенд LLM-пайплайну, multi-tenant API, інфраструктура та клієнт.

  • NestJS
  • Prisma
  • PostgreSQL
  • OpenRouter
  • Langfuse
  • Zod
  • Nylas
  • React 19
  • Vite
  • Tailwind
  • shadcn
  • RTK Query
  • AWS
  • Terraform
  • GitHub Actions

Стек

  • NestJS
  • Prisma
  • PostgreSQL
  • OpenRouter
  • Langfuse
  • Zod
  • Nylas
  • React 19
  • Vite
  • Tailwind
  • shadcn
  • RTK Query
  • AWS
  • Terraform
  • GitHub Actions
Далі - 04PharmaRockIT - multi-tenant фармплатформа