Інтелект ціноутворення продуктів: заощадження на кошику понад 60% у 4 магазинах
Інтелект ціноутворення продуктів: заощадження на кошику понад 60% у 4 магазинах
Ситуація
Український засновник технологій споживчого сектора хотів надати покупцям те, чого не пропонує жоден місцевий додаток: єдиний вигляд їхнього повного кошика продуктів, ціни на який одночасно порівнюються у чотирьох найбільших мережах доставки в країні. Кінцева мета була простою. Покупець вводить тижневий список, бачить, який магазин є найдешевшим для цього конкретного кошика, і створює виграшний кошик в один клік.
Проблема
Українські покупці продуктів зазвичай звикають до однієї мережі і переплачують, не знаючи про це. Ціни суттєво варіюються між Silpo, Novus, Auchan та Metro, але перевірка чотирьох додатків вручну займає більше часу, ніж саме шопінг. Крім того, домінуюча мережа доставки захищає свій сайт агресивним виявленням ботів, тому наївні підходи до автоматизації кошика ламаються після одного або двох запусків. Засновнику потрібна була надійна система, яка працювала б у виробництві, а не демонстрація, яка зазнала б невдачі, як тільки реальний покупець спробував би її використати.
Рішення
Я побудував систему від початку до кінця як платформу автоматизації повного стеку. Панель управління React дозволяє покупцеві вводити список природною українською мовою ("молоко 2шт, хліб, курка 1.5кг") або шукати продукти у всіх чотирьох магазинах з фотографіями. Коли покупець натискає "порівняти", бекенд надсилає паралельні запити до всіх чотирьох API магазинів і повертає порівняння загальної вартості кошика, відсортоване за найдешевшим, з розбивкою по товарам.
Для складання кошика в основному магазині я вирішив проблему виявлення ботів за допомогою інвертованої архітектури: замість сервера, що контролює браузер, власний Chrome покупця опитує сервер для виконання роботи через розширення Chrome. Розширення атомарно отримує завдання з черги Postgres, складає кошик у справжній сесії браузера і звітує назад. Це працює на домашньому з'єднанні покупця, яке веде себе як справжній покупець, оскільки є ним.
Я також створив парсер чеків: покупці вставляють URL українського фіскального чека, і система витягує кожен рядок (включаючи вагові товари та знижки) і перетворює його на багаторазовий шаблон для повторних замовлень.
Технологічний стек: NestJS, TypeScript, React, Vite, Tailwind, Supabase (PostgreSQL), Redis, BullMQ, Playwright, розширення Automa Chrome, Docker, Fuse.js, grammY Telegram бот
Результати
- 62% заощаджень на кошику виявлено під час живого тестування: кошик з 5 товарів коштує 301 грн у виграшному магазині проти 787 грн у звичайному магазині
- 4 магазини оцінюються паралельно в одному запиті на порівняння, а не послідовно
- Автоматизація кошика виробничого рівня, яка витримує агресивне виявлення ботів, де стандартні інструменти браузера на стороні сервера зазнають невдачі після 1-2 запусків
- 31 REST-інтерфейс, 7 таблиць бази даних з безпекою на рівні рядків, 37 успішних тестів
- Робочий потік від початку до кінця: створення списку, порівняння 4 магазинів, автоматизоване складання кошика, парсинг чека в список, відстеження життєвого циклу замовлення
Як це працює
1. Покупець вводить або імпортує список покупок у панелі управління
2. Система надсилає паралельні запити цін до всіх 4 API магазинів
3. Панель управління показує загальні суми кошика, відсортовані за найдешевшими, з деталізацією по товарам
4. Покупець обирає виграшний магазин і натискає "створити кошик"
5. Розширення Chrome отримує завдання і складає кошик у браузері покупця
6. Покупець переглядає кошик, обирає час доставки і оформляє замовлення
Ситуація
Український засновник технологій споживчого сектора хотів надати покупцям те, чого не пропонує жоден місцевий додаток: єдиний вигляд їхнього повного кошика продуктів, ціни на який одночасно порівнюються у чотирьох найбільших мережах доставки в країні. Кінцева мета була простою. Покупець вводить тижневий список, бачить, який магазин є найдешевшим для цього конкретного кошика, і створює виграшний кошик в один клік.
Проблема
Українські покупці продуктів зазвичай звикають до однієї мережі і переплачують, не знаючи про це. Ціни суттєво варіюються між Silpo, Novus, Auchan та Metro, але перевірка чотирьох додатків вручну займає більше часу, ніж саме шопінг. Крім того, домінуюча мережа доставки захищає свій сайт агресивним виявленням ботів, тому наївні підходи до автоматизації кошика ламаються після одного або двох запусків. Засновнику потрібна була надійна система, яка працювала б у виробництві, а не демонстрація, яка зазнала б невдачі, як тільки реальний покупець спробував би її використати.
Рішення
Я побудував систему від початку до кінця як платформу автоматизації повного стеку. Панель управління React дозволяє покупцеві вводити список природною українською мовою ("молоко 2шт, хліб, курка 1.5кг") або шукати продукти у всіх чотирьох магазинах з фотографіями. Коли покупець натискає "порівняти", бекенд надсилає паралельні запити до всіх чотирьох API магазинів і повертає порівняння загальної вартості кошика, відсортоване за найдешевшим, з розбивкою по товарам.
Для складання кошика в основному магазині я вирішив проблему виявлення ботів за допомогою інвертованої архітектури: замість сервера, що контролює браузер, власний Chrome покупця опитує сервер для виконання роботи через розширення Chrome. Розширення атомарно отримує завдання з черги Postgres, складає кошик у справжній сесії браузера і звітує назад. Це працює на домашньому з'єднанні покупця, яке веде себе як справжній покупець, оскільки є ним.
Я також створив парсер чеків: покупці вставляють URL українського фіскального чека, і система витягує кожен рядок (включаючи вагові товари та знижки) і перетворює його на багаторазовий шаблон для повторних замовлень.
Технологічний стек: NestJS, TypeScript, React, Vite, Tailwind, Supabase (PostgreSQL), Redis, BullMQ, Playwright, розширення Automa Chrome, Docker, Fuse.js, grammY Telegram бот
Результати
- 62% заощаджень на кошику виявлено під час живого тестування: кошик з 5 товарів коштує 301 грн у виграшному магазині проти 787 грн у звичайному магазині
- 4 магазини оцінюються паралельно в одному запиті на порівняння, а не послідовно
- Автоматизація кошика виробничого рівня, яка витримує агресивне виявлення ботів, де стандартні інструменти браузера на стороні сервера зазнають невдачі після 1-2 запусків
- 31 REST-інтерфейс, 7 таблиць бази даних з безпекою на рівні рядків, 37 успішних тестів
- Робочий потік від початку до кінця: створення списку, порівняння 4 магазинів, автоматизоване складання кошика, парсинг чека в список, відстеження життєвого циклу замовлення
Як це працює
1. Покупець вводить або імпортує список покупок у панелі управління
2. Система надсилає паралельні запити цін до всіх 4 API магазинів
3. Панель управління показує загальні суми кошика, відсортовані за найдешевшими, з деталізацією по товарам
4. Покупець обирає виграшний магазин і натискає "створити кошик"
5. Розширення Chrome отримує завдання і складає кошик у браузері покупця
6. Покупець переглядає кошик, обирає час доставки і оформляє замовлення