SeRental
Прокат техніки з живою зайнятістю й однією сіткою знижок
- Галузь
- Прокат фото- і відеотехніки
- Рік
- 2026
- Що ми зробили
- Дизайн і розробка вітрини
- Сайт
- serental.com.ua
- Мови сайту
- UK

- Одиниць техніки в каталозі
- 153
- Категорій техніки
- 13
- Типів бізнесу на платформі
- 7
Огляд
SeRental здає в оренду камери, обʼєктиви, світло, звук і стабілізатори в Івано-Франківську — від однієї доби. Вітрина — сайт на Next.js без власної бази: кожна позиція, ціна, категорія й варіант оформлення приходять із CMS через API.
- 1–3 доби×1.0
- 4–7 діб×0.9
- 8–14 діб×0.8
- від 15 діб×0.7
Діє на весь магазин, категорію або одну позицію.
- 01Вибір датзайняті дні сірі
- 02Перевірказа реальними бронюваннями
- 03Бронюваннятелефон та Instagram
- 04Менеджер підтверджує
01 — Завдання
Прокат — це не магазин. Той самий обʼєктив вільний наступного тижня й зайнятий завтра, добова ставка падає з тривалістю оренди, а двоє людей можуть бронювати одну одиницю в ту саму мить. До того ж прокату потрібна була одна драбина знижок на 153 позиції і менеджер, який знає, кому віддає техніку, ще до видачі.
02 — Рішення
Кошик бронює весь комплект на один період і звіряє його з реальними бронюваннями одразу після вибору дат, гасячи дні, коли позицію вже зайнято. Знижки — одна сітка множників (×1,0, ×0,9, ×0,8, ×0,7 залежно від тривалості), адресована на весь прокат, категорію або одну позицію. У базі перетин бронювань однієї одиниці й перетин цінових смуг відхиляє сама база — exclusion constraints у Postgres, а не код, який може програти гонку.
03 — Результат
Вітрина, якою власник керує з адмінки: позиції, ціни, сітка знижок, доставка й оплата змінюються на сайті без деплою, бо адмінка сама скидає кеш сайту після змін. Кожна заявка приходить як одне бронювання в очікуванні — з телефоном та Instagram орендаря, — і менеджеру лишається його підтвердити.
Каталог і фільтри
Фільтри будуються з характеристик, які оператор заводить в адмінці, — байонет, формат матриці, тип оптики, фокусна відстань, світлосила, стабілізація — поруч із брендом, ціною й наявністю. Біля брендів і характеристик стоять лічильники, тож видно, що лишиться після кліку.
- Бренд, ціновий діапазон і «вільні зараз» поруч із характеристиками
- Повзунки для фокусної відстані й світлосили
- На телефоні фільтри й сортування — у доку внизу екрана
Картка позиції
Сторінка відповідає на три питання: що це, скільки коштує доба і що береться разом. Бронювання тут навмисно немає — позиція йде в кошик, де дати, отримання й оплату обирають один раз для всього комплекту.
- Добова ставка й чотири смуги знижок у гривнях
- Характеристики з адмінки, а не з опису
- «З цим беруть»: обʼєктиви, акумулятори й карти до цієї камери
Сітка знижок
Одна сітка множників рахує ціну кожної позиції: ×1,0 на 1–3 доби, ×0,9 на 4–7, ×0,8 на 8–14 і ×0,7 від 15. Її задають один раз, і вона лягає на базову ставку будь-якої позиції — від грипу за 50 ₴ до повнокадрових камер.
- Адресується на весь прокат, категорію або одну позицію
- Смуги, що перетинаються, відхиляє сама база
- Кошик називає знижку в гривнях, а не лише у відсотках
Кошик і бронювання
Один період на весь комплект. Наявність перевіряється проти реальних бронювань одразу після вибору дат, знижка названа в гривнях, а заявка стає одним бронюванням в очікуванні, яке менеджер підтверджує чи скасовує цілком.
- Календар гасить дні, коли позицію вже заброньовано
- Кількість зупиняється на тому, скільки одиниць є в прокаті
- Телефон та Instagram обовʼязкові — менеджер знає, кому видає

Ключові рішення
- Перетин бронювань однієї одиниці відхиляє exclusion constraint у Postgres по діапазонах часу, а пулову техніку рахують під блокуванням рядка.
- Смуги в сітці знижок теж не можуть перетинатися — той самий прийом, тож ціна ніколи не залежить від порядку рядків.
- Коли дати не сходяться, сайт повідомляє, яку техніку хотіли, а вона була зайнята, — так власник бачить, що варто докупити.
- Передоплата карткою зроблена наскрізно — перехід до еквайра, перевірка статусу після повернення, повернення коштів при скасуванні оплаченого бронювання — і вмикається в адмінці.
