С нуля сделать мобильный веб-сервис развлекательных тестов для девушек 16–30 лет, который растёт за счёт пересылки результатов в Telegram.
На входе — скриншоты профиля или экспресс-тест из 8 вопросов, на выходе — красивая карточка с архетипом, которую хочется переслать подруге. Результат должен быть стабильным, а сервис — работать даже когда лимит языковой модели исчерпан.
Сделал 11 механик на одном конвейере «профиль → четыре оси → карточка». Архетип и совместимость считаются формулой: одинаковые ответы всегда дают одинаковый результат. Модель нужна только для разбора скриншотов; если лимит исчерпан, вместо ошибки сразу открывается тест.
• Дизайн-система: токены, шрифты Unbounded + Onest, стикеры пяти цветовых семейств, контраст по WCAG AA.
• Контент: 32 архетипа, матрица совместимости 16×16, тексты для всех механик.
• Фронтенд: Next.js 16 (App Router, TypeScript strict, Tailwind v4), мобильная вёрстка.
• Бэкенд: единый API запуска механик, PostgreSQL + Prisma, суточная квота вызовов модели.
• Модели через Vercel AI SDK: Gemini и Groq с автопереключением и откатом на квиз.
• Серверный рендер карточек в PNG 1080×1920 для сторис (satori + resvg) с кэшем.
• Деплой: Docker Compose (Caddy + Next standalone + Postgres) на VPS, ночные бэкапы базы с копией на второй сервер.
• Тесты: 120 юнит-тестов Vitest и 15 сквозных сценариев Playwright.
Сервис работает на VPS (пока на техническом домене).
— 16 женских и 16 мужских архетипов, матрица совместимости 16×16.
— «Сравни со мной»: подруга по ссылке отвечает на вопросы и видит процент совместимости.
— Досье, красные флаги, вайб, батл, тир-лист, угадайка, прогноз.
— Без регистрации: «мой тип» запоминается в браузере.
— Если лимит модели исчерпан, пользователь не видит ошибку — сразу проходит тест.
Срок: 3 рабочих дня, около 8 200 строк TypeScript.