tremble7681andClaude Opus 5 5a65f8f1ca feat(repairs): поле поиска прямо в ленте ремонтов
Владелец: «не хочу ещё один раздел, хочу чтобы в списке ремонтов просто
появилось поле поиска». Поле встроено в шапку существующего экрана /repairs,
нового раздела и роута нет.

Поиск СЕРВЕРНЫЙ, и это принципиально. Лента грузится курсором по 20 строк:
фильтрация «по уже загруженному» на старте видела бы последние 20 ремонтов
парка и честно отвечала «ничего не найдено» на машину, которая была в ремонте
позавчера. Отсутствие поиска хотя бы не врёт. Вторая ловушка того же варианта:
маркер бесконечной прокрутки стоит сразу под списком, и схлопнутый фильтром
список подтянул бы его в кадр — лента начала бы молча выкачивать всю таблицу
по 20 строк за запрос.

- q уходит на КАЖДОЙ странице и входит в ключ кэша: смена запроса создаёт свой
  список со своим курсором, поэтому курсор нефильтрованной ленты физически не
  может подмешать чужие ремонты во вторую страницу найденного.
- Во время набора на экране остаётся прошлая выдача (приглушённой), а не
  пульсирующие скелетоны на каждое нажатие клавиши.
- «Обновить» перезапрашивает одну страницу вместо всех загруженных: у
  бесконечного запроса refetch тянет их последовательно, и на слабой сети это
  десять round-trip'ов подряд с десятью шансами словить ошибку.
  При этом во время обновления догрузка молчит — иначе схлопывание ленты
  подтягивает маркер в кадр, fetchNextPage отменяет летящий запрос обновления,
  и новые ремонты сверху не появляются, сколько ни жми.
- «Ничего не нашли по этому запросу» отличается от пустой ленты, а сбой сети —
  от ответа сервера с ошибкой: совет «проверьте сеть» на 500-ку отправляет
  механика перезагружать вайфай, когда чинить у него нечего.

Строка ремонта, дневные разделители, месячный итог и поведение ленты без
поиска не менялись.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-07 22:04:02 +10:00

mechanic-pwa

Собственное приложение для сотрудников-механиков PremiumPark — замена вендорского приложения «Механик» (NaughtySoft, com.naughtysoft.ttc). Все данные осмотров уходят в собственную PostgreSQL внутри Premium CRM, фото — в собственный MinIO. Никакого вендора и его 1С на критическом пути.

Контекст

Сейчас механики PremiumPark делают осмотры машин через приложение вендора NaughtySoft, поставляемое на условиях абонентки. Подрядчик заморозил разработку, парк хочет независимости. После разведки вендорского стека (см. recon/findings/01-static-analysis.md) принято решение строить собственное PWA — оно охватывает все ключевые сценарии вендора (фото, метки повреждений, история, дифф «было/стало») и хостится в нашей экосистеме.

Объём проекта

Только приложение механика. Это первый sub-project в umbrella-плане замены вендорских приложений. Будущие sub-projects (не в этом репозитории):

Sub-project Описание Статус
mechanic-pwa (этот репо) PWA для сотрудников-механиков парка в работе
driver-app Приложение для водителей — балансы, штрафы, платежи, обращения отложено, будем после mechanic
vendor-bridge Импорт исторических осмотров от вендора отложено

Структура

mechanic-pwa/                                  ← корень git репо
├── docs/superpowers/
│   ├── specs/
│   │   ├── 2026-05-11-driver-app-recon-design.md  ← разведка обоих вендорских приложений
│   │   └── 2026-05-16-premium-mechanic-design.md  ← дизайн нашего mechanic-приложения
│   └── plans/
│       └── 2026-05-16-premium-mechanic-phase1.md  ← план реализации Phase 1 MVP
├── mechanic-pwa/
│   ├── frontend/        ← React+Vite PWA (создаётся в Phase G)
│   └── assets/vendor-reference/    ← извлечённые из APK иконки вендора
├── recon/
│   ├── findings/        ← отчёт разведки (карта API, диаграммы)
│   ├── scripts/         ← mitmproxy фильтры, frida-скрипты, утилиты
│   ├── artifacts/       ← APK, декомпил, mitm dumps (не в git, .gitignore)
│   └── patched/         ← патченые APK для перехвата трафика (не в git)
├── ops/
│   ├── Caddyfile.fragment  ← конфигурация Caddy для mechanic.pptaxi.ru
│   └── minio-cors.json     ← CORS policy для bucket pp-inspections
└── README.md

Внимание: backend-модуль mechanic (Phase B-F плана) живёт не в этом репо, а в виде ветки feat/mechanic-mvp внутри репозитория premium-crm. Этот репо — только frontend + специфика, документация и ops.

Текущая фаза

Phase 1 MVP — см. docs/superpowers/plans/2026-05-16-premium-mechanic-phase1.md. 10 phases (A-J), ~40 задач, 3-4 недели разработки.

Деплой

Production URL: https://mechanic.pptaxi.ru (поддомен от 100.64.0.12, обслуживается Caddy) Бэкенд: модуль mechanic в FastAPI Premium CRM (тот же VDS) Хранилище фото: MinIO pp-inspections (тот же VDS)

S
Description
Premium Механик — PWA для механиков: приёмка и осмотр авто, фото с разметкой повреждений, ремонт и СТО, интеграция 1С (TT) + MinIO. Live: mechanic.pptaxi.ru
Readme
2.7 MiB
Languages
TypeScript 96.8%
Python 1.4%
CSS 1%
JavaScript 0.4%
HTML 0.2%
Other 0.2%