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
рис. 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 узгоджених рядків.
- 01 Вхідні дані
- PDF-випискизавантаження
- Нотатки зустрічей
- Пошта + календарNylas
- 02 APINestJS 11Prisma 7 · PostgreSQL 18 · тенанти через Cognito
- 03 LLM-пайплайнOpenRouterLangfuse - версіоновані промпти, трасування
- 04 ПеревіркаZod-схемавихід моделі перевіряється до збереження
- 05 РезультатБриф із 8 розділівКлієнт React 19 · RTK Query
- AWS · Terraform · 2 середовищаVPC · RDS · ECS Fargate · ALB · S3 · CloudFront · Cognito · CloudWatch
- Ізоляція тенантівЧерез Cognito у кожному запиті, у 8 доменних модулях
- ТипобезпекаRTK Query, згенерований з OpenAPI - ~19k узгоджених рядків
- 01 Вхідні даніPDF-виписки · нотатки зустрічейпошта + календар через Nylas
- 02 APINestJS 11Prisma 7 · PostgreSQL 18 · тенанти через Cognito
- 03 LLM-пайплайнOpenRouterLangfuse - версіоновані промпти, трасування
- 04 ПеревіркаZod-схемавихід моделі перевіряється до збереження
- 05 РезультатБриф із 8 розділівКлієнт React 19 · RTK Query
Що я створив
- Наскрізний аудит; виправив зламаний LLM-пайплайн, завантаження кількох файлів і витоки мок-даних.
- LLM-пайплайн генерації брифів: NestJS + OpenRouter + Langfuse, з валідацією виходу моделі за Zod-схемою.
- Multi-tenant API на NestJS 11 + Prisma 7 + PostgreSQL 18 з 8 доменними модулями та ізоляцією тенантів через Cognito в кожному запиті.
- AWS як код: 8 модулів Terraform у двох середовищах, деплой через GitHub Actions.
- Синхронізація пошти/календаря Nylas через OAuth, OpenRouter і Langfuse за чистими сервісами з резервними сценаріями через конфіг.
- Клієнт на 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