## Заказчик
Российский производитель промышленного оборудования: производственные линии, фасовочно-упаковочные станции, модернизация, сервис и запчасти. Его клиенты - предприятия непрерывного производства: полимеры, химия, пищёвка. Проект идёт месяцами: оборудование разбирается на узлы и детали, к нему идут схемы, несколько ТЗ и сотни файлов, где чертёж весит под сто мегабайт.
## Задача
Проекты жили в почте, мессенджерах и папках, состав оборудования держался на инженерах, клиент спрашивал статус у менеджера. Нужна была система, куда можно пустить внешнего заказчика, не потеряв контроль над тем, что он видит
## Решение
Сайт и личный кабинет с четырьмя ролями.
- проекты: состав оборудования, участники, этапы, график, отчёты;
- ТЗ с версиями и согласованием, каталог узлов, деталей и схем;
- документы с правами по ролям и квотами;
- чат с заказчиком, связанный с Telegram и MAX;
- заявки и заказы
## Сложности
1. Права, которые нельзя обойти: роль не даёт доступа к проекту, сотрудник должен быть назначен, клиент - принадлежать своей организации. Проверка на сервере
2. Документ живёт в нескольких проектах: чертёж приложен к ТЗ одного и к отчёту другого, поэтому удаление это пересчёт связей, а не стирание файла
3. Тяжёлые файлы идут мимо сервера: браузер грузит их прямо в хранилище по подписанной форме, сервер держит права и квоту
4. Внутренний чат дублирует сообщения в Telegram и MAX и обратно. По MAX мало документации, но пожелание заказчика мы реализовали
## Стек
Next.js и React на фронте, NestJS, PostgreSQL, Redis, S3-хранилище и Socket.IO на бэке, Telegram и MAX через отдельный шлюз, Docker, CI/CD. 15 модулей, 4 роли
## Результат
Сотрудники ведут в системе проекты, документацию и общение с заказчиками, знание о проекте больше не личный актив инженера. Рядом собрана база знаний, которая обновляется вместе с кодом: систему сможет поддерживать другая команда