WatchGenius: Image pipeline v1 (no-hotlink) — worker download→WebP→Supabase Storage + backfill

Заказчик: AI | Опубликовано: 02.03.2026

Мы строим сайт аналитики часов (Next.js). Сейчас у нас есть внешние URL картинок (из источника/RTL, часто Chrono24 CDN), но мы НЕ используем hotlink. Нужно реализовать правильную систему изображений, чтобы потом не переделывать при масштабировании до 1000+ моделей. Стек: Frontend: Next.js Backend/API: Node/Next API routes (или отдельный сервис) DB/Storage: Supabase (Postgres + Supabase Storage) Hosting: Vercel (FE), Render (API/worker) Требование (контракт навсегда): UI показывает только из нашего storage/CDN по image_key (никаких внешних URL). Если изображения нет/не готово: 1 аккуратный placeholder (не 4–5 дублей). Что нужно сделать (v1): Этап 0 (C0) — UI контракт + схема: добавить поля в models: image_key, image_status (missing|queued|ready|failed), image_updated_at API отдаёт image_url (формируется из storage) и image_status UI: если ready → показываем фото; иначе 1 placeholder Этап 1 (C1) — image worker: таблица очереди image_jobs (kind, source_url, dest_key, status, tries, last_error) worker (Render): download → validate → convert WebP (sharp) → upload в Supabase Storage → обновить image_key/status безопасность: allowlist доменов, запрет private IP, лимит размера, таймауты cache headers: long cache (max-age/immutable) на storage/CDN (если применимо) Этап 2 (C2) — backfill: прогнать текущую партию (39/84 моделей): взять 1 main image на модель, заполнить storage отчёт: % success, список failed + причины Дополнительно (опционально): батчи для 1000+ (по 100–200, ограничение параллелизма) retries/backoff + dead-letter DoD (критерии приёмки): на сайте нет вообще в каталоге/PDP показываются реальные model images из storage (или 1 placeholder) нет дублей placeholder в галерее worker корректно грузит WebP в /images/models/{slug}/main.webp и обновляет image_status есть лог ошибок и список неудачных загрузок Важно: Нужна оценка по этапам (фикс-цена и ETA на каждый этап). Доступы: сначала только консультация/оценка. Код/репозиторий даём после выбора исполнителя (NDA по необходимости). Просьба в отклике: оценка стоимости/сроков по этапам C0/C1/C2 (и отдельно опционал для 1000+) какие риски видите (3–5 пунктов) примеры похожих задач (worker/media pipeline) какой формат работы: фикс или почасово с лимитом