BatchCodeCheck — розшифрування батч-кодів косметики

Про проєкт

  • Клієнт Власний продукт
  • Рік 2026 → дотепер
  • Категорія Вебсервіс / Косметика
  • Стек Next.js 15 (App Router), React 19, TypeScript, Tailwind v4, монорепо на npm workspaces зі спільним пакетом декодера, SQLite (better-sqlite3, WAL), Cloudflare Turnstile, Brevo SMTP, PM2-кластер
  • ШІ Claude Vision читає код із фото — і лише читає: дату завжди обчислює рушій правил

Опис проєкту

На кожній упаковці косметики є батч-код, який ставить лінія розливу, — і прочитати його майже ніхто не може. BatchCodeCheck розшифровує його в дату виробництва: вводите код або фотографуєте його, за бажання вказуєте бренд — і сайт повертає дату разом із правилом, з якого її отримано: група-виробник, схема і скільки реальних кодів за цією схемою вже звірено. Якщо схему бренду не підтверджено, сайт так і каже, а не вгадує.

Ключове рішення: схема — це дані зі статусом, а не код. Кожне правило декодера має статус verified / unverified, кількість еталонних спостережень і джерело. Правило стає підтвердженим лише тоді, коли щонайменше п'ять спостережень однієї групи залишають єдину гіпотезу, і вона збігається з точним еталоном — датою, надрукованою на тій самій упаковці, відкликанням регулятора зі списком лотів і дат (openFDA), схемою, яку опублікував сам бренд, або відповіддю його підтримки. Зараз сайт читає 19 схем: L'Oréal, Estée Lauder, Shiseido, Kenvue, P&G, Beiersdorf, Kao, Henkel, Burt's Bees і Dr. Bronner's; бренди, у яких формат змінюється всередині групи (Maybelline, Chanel, Dior), свідомо отримують відмову — неправильна дата коштує дорожче за чесне «не знаємо».

Архітектура: монорепо на npm workspaces — застосунок на Next.js 15 і спільний пакет із рушієм декодера, щоб мобільний клієнт узяв його без змін. Рушій віддає лише коди й числа, без жодної фрази: увесь текст збирається зі словника, а дати форматує Intl.DateTimeFormat. Фото зменшується на клієнті й читається Claude Vision; кожен API-маршрут на сервері закрито Cloudflare Turnstile. Форма «знаю справжню дату» збирає еталонні зразки в SQLite зі сповіщенням через Brevo, а таблиця покриття, сторінки брендів, sitemap і розмітка FAQPage будуються з тих самих даних про правила — нове правило оновлює весь сайт.

BatchCodeCheck — які схеми читає сервіс і де шукати код на упаковці