1) Мета проєкту Зробити backend та адмін-панель для сервісу “Driver & Equipment Verification” (перевезення авто). Адмін має мати можливість: створювати клієнта / замовлення (Load), вносити та оновлювати всі дані по перевезенню (водій, авто, обладнання, документи/фото), отримувати унікальне публічне посилання для кожного Load, за яким відкривається публічна сторінка з даними (без входу). Публічна сторінка повинна підтягувати дані з backend і відображати їх у поточному дизайн-шаблоні (frontend уже є / буде надано). 2) Основні сутності (модель даних) 2.1 Load (замовлення / перевезення) Обов’язкові поля: id (внутрішній UUID) loadNumber (рядок, напр. 13020766) status (enum: SCHEDULED, DISPATCHED, IN_TRANSIT, AT_PICKUP, LOADED, DELIVERED, CANCELLED) pickupDate (date) pickupWindow (рядок, напр. 09:00–11:00) pickupFacility (рядок) pickupAddress (рядок) dropAddress (рядок) notes (рядок) publicToken (унікальний токен для публічного посилання, UUID/slug) 2.2 Driver (водій) fullName (рядок) phone (рядок) cdlState (рядок) cdlNumber (рядок) cdlExpiresOn (date) photoUrl (рядок, завантаження файлу) 2.3 Driver License (документ) licenseFrontUrl (рядок, завантаження файлу) 2.4 Vehicle (етап 1: 1 авто) year, make, model, trim, color (рядки) vin (рядок; на публічній сторінці показувати лише останні 6 символів) pickupCity, dropCity (рядки) 2.5 Equipment (обладнання) tractorNumber (рядок) trailerNumber (рядок) trailerType (рядок) truckPhotoUrl (рядок, завантаження файлу) trailerPhotoUrl (рядок, завантаження файлу) 3) Публічне посилання Формат: https:///v/ Вимоги: За посиланням доступна лише інформація по конкретному Load. Без авторизації. Посилання має бути не вгадуваним: токен 32+ символів (UUID v4 або еквівалент). Має бути можливість деактивувати публічне посилання (наприклад, прапорець isActive або інвалідація/видалення токена). 4) Адмін-панель (CRUD) 4.1 Авторизація Доступ лише для адмінів. JWT або cookie-сесія (на вибір розробника). Мінімальна роль: admin. 4.2 Розділи адмінки A) Список Loads таблиця замовлень пошук за loadNumber фільтр за status дії: View/Edit, Duplicate (опційно), Deactivate link B) Редактор Load форми по секціях: Load, Driver, Vehicle, Equipment, Documents завантаження файлів: фото водія, ліцензія (front), фото трака, фото трейлера відображення поточного публічного посилання + кнопка “Copy” C) Створення нового Load створення нового замовлення автоматична генерація publicToken 5) Файли / завантаження зображень Вимоги: Підтримка форматів: jpeg, png, webp Зберігання: локально на сервері Backend має повертати публічно доступний URL для відображення на frontend. Обмеження: максимальний розмір файлу: 25 MB базова валідація типу файлу (MIME + розширення) 6) Безпека та обмеження Адмінка захищена логіном/паролем. Public endpoint не повинен розкривати зайві дані (наприклад, повний VIN). Мінімальний rate limit для публічних endpoint’ів. 7) Критерії приймання (Definition of Done) Адмін адмін може увійти адмін може створити новий Load адмін може заповнити всі потрібні дані адмін може завантажити 4 фото (водій, ліцензія, трак, трейлер) система генерує унікальне публічне посилання адмін може редагувати дані — зміни одразу відображаються на публічній сторінці