Бронирование боксов для склада хранения в Красноярске: демо-система
Склад ответственного хранения из Красноярска, 93 бокса в двух ярусах. Я собрал демо: схема склада, бронь на 15 минут, кабинет арендатора и панель владельца. Оплата имитируется, в бою система не запущена.
Коротко (TL;DR)
- Склад ответственного хранения в Красноярске, 93 бокса в двух ярусах. Нужна система: клиент видит схему склада, выбирает бокс, бронирует и платит сам, а владелец видит занятость и долги без штатного администратора.
- Я собрал демо: 7 экранов, 28 эндпоинтов API на FastAPI, 9 таблиц в SQLite. Схема яруса А нарисована по плану склада, ярус Б условный, потому что схемы от склада ещё нет.
- Бронь держит бокс 15 минут, пока клиент оформляет аренду. Двух арендаторов на один бокс система не допускает, это закрыто в коде.
- Статус: демо на нашем стенде. Оплата имитируется, SMS не уходят, договор и запуск на складе не состоялись.
Рассказываю, как я собрал демо системы для такого склада и что в нём настоящее, а что пока заглушка.
Задача
Владелец склада в Красноярске хотел облачную систему без собственного администратора. На складе 93 бокса, замки пока навесные, позже планируют электронные. Нумерация по ярусам: А, Б и так далее, внутри яруса слева направо, то есть А1, А2.
От системы нужно было пять вещей. Показать клиенту свободные боксы на схеме. Дать забронировать и оплатить онлайн. Выдать договор. Напоминать о продлении. Показать владельцу, кто не платит и какие боксы простаивают. Минимальный срок и залог склад ещё не определил, поэтому я сделал их настройками.
Первый разговор начался со страницы предложения про self-storage и ответственное хранение. Дальше я сразу показал работающий стенд.
Что я сделал
Схема склада и бронь
Склад прислал план одного этажа картинкой, на нём 50 боксов с объёмами. Я снял с неё координаты в пикселях: контур, двери, каждый бокс, включая те, что идут многоугольником. Получился ярус А на 50 боксов. Для яруса Б плана не было, я нарисовал условную раскладку на 43 бокса. Вместе 93, как у клиента. Карта рисуется как SVG, на экране брони бокс выбирается кликом, цена считается от объёма.
Бронь устроена так. Клик по свободному боксу создаёт запись-удержание на 15 минут. За это время человек вводит имя и телефон, выбирает срок, принимает договор и согласие на обработку данных. Если время вышло, бокс снова свободен. Если человек ушёл на этапе контактов, запись попадает в список брошенных оформлений, и владелец может его дожать сообщением.
Для других ресурсов такую механику я разбирал в статье про бронирование ресурсов компании.
Кабинет арендатора и панель владельца
Арендатор входит по номеру телефона. Видит свой бокс, срок, договор с чеками, может продлить аренду в два нажатия и отметить автопродление, в демо это флаг без списаний. У кабинета есть манифест и сервис-воркер, чтобы поставить его на телефон как приложение, установку на устройствах я не проверял.
Панель владельца показывает занятость, деньги за 30 дней, долги, тех, у кого срок заканчивается, и карту склада с цветами по состоянию боксов. Есть спрос по размерам: боксы делятся на четыре группы по объёму, 26, 39, 21 и 7 боксов, и по каждой видно занятость. Есть лист ожидания: если нужного размера нет, клиент оставляет телефон. Владелец одной кнопкой переключает замки с навесных на электронные, и в кабинете появляется код доступа.
Ещё я сделал 14-шаговую экскурсию по демо через все страницы, потому что владелец склада открывает систему впервые и не знает, куда смотреть. Отдельная страница описывает запуск по этапам, а страница сети управляющей компании показывает, как могли бы подключаться чужие склады. Партнёрские склады там условные, и это написано на самой странице.
Что было сложно
Первое, схема. Ярус А снимал с картинки вручную, и номера пришлось сохранить как на плане клиента, хотя он говорил про нумерацию слева направо. Вопрос про нумерацию остался открытым. Ярусы В и Г не нарисованы совсем.
Второе, гонка за бокс. Два человека могут нажать на один бокс одновременно. Я закрыл это блокировкой в API и проверкой внутри одной транзакции: занят или удержан, значит ответ 409 и сообщение «бокс только что заняли». От перебора броней по одному адресу стоит лимит в три удержания.
Третье, фоновые задачи без планировщика. Снятие просроченных удержаний, напоминания и закрытие доступа должникам выполняет функция, которая запускается при обращении к API. Для демо хватает, для боя я бы вынес их в планировщик.
Четвёртое, честность демо. Данные в нём сгенерированы: арендаторы вымышленные, их номера не набираются, все звонки ведут на телефон склада. Сид устроен так, что маленькие боксы заняты почти полностью, а большие простаивают. Так выглядит реальный склад, и подсказки владельцу работают на этих данных, но это моя модель, статистики склада у меня нет.
Что получилось
| Что | Состояние |
|---|---|
| Боксов в схеме | 93 (50 по плану склада, 43 условных) |
| Экранов | 7 страниц |
| Эндпоинтов API | 28 |
| Таблиц в базе | 9 |
| Автотестов | нет |
| Оплата | имитация записью в базе, провайдер не подключён |
| SMS и мессенджеры | показываются как события в журнале, не отправляются |
| Вход по коду из SMS | в демо фиксированный код |
| Запуск в бою | не состоялся |
Все 7 страниц стенда отвечают кодом 200, я проверил запросами. Но это демо: система работает на нашем стенде, на тестовых данных. Реквизиты в договоре аренды заглушки, юридические формулировки в нём я не проверял. Рядом с кодом лежит проект договора на разработку, подписания не было.
Что дальше
Склад ещё не принял решение. Если оно будет, порядок такой. Сначала реальные платежи: приём через эквайринг или СБП, с чеком. О выборе между ними я писал в статьях эквайринг или СБП и как принимать оплату на сайте. Затем SMS через провайдера и вход по настоящему коду. Затем схемы остальных ярусов и настоящие условия аренды. Только после этого запуск на одном складе.
Электронные замки и сеть складов я считаю отдельными этапами. По замкам есть близкая тема, IoT-платформы для арендодателей. Любой этап проще согласовывать, когда деньги и сроки разложены по шагам, как в статье про этапы разработки.
Частые вопросы
Система уже работает на складе?
Нет. Это демо на нашем стенде. Клиент видел его и обсуждал запуск, но договор не подписан, на реальных боксах система не работала.
Можно ли принимать оплату прямо в системе?
В демо оплата имитируется: запись о платеже создаётся, деньги не движутся. Для боевого запуска нужно подключать эквайринг или СБП и чеки. Я это не проверял, пока подключения нет.
Что будет, если два клиента выберут один бокс?
Первый получит удержание на 15 минут, второй увидит сообщение, что бокс занят, и карта обновится. Так устроен код: блокировка и проверка в одной транзакции. Параллельную нагрузку я не гонял, это не проверено.
Коротко о главном
Для склада с десятками боксов система бронирования собирается на небольшом стеке: Python, SQLite и статические страницы. Схема из SVG, удержание бокса на 15 минут, кабинет и панель владельца закрывают основной цикл аренды. Объём работы виден по числам: 7 экранов, 28 эндпоинтов, 9 таблиц.
Сейчас это демонстрация. Платежи, SMS, схемы остальных ярусов и запуск на реальном складе ещё впереди, и решение за владельцем. Если вам нужна такая система под свой склад или другой объект с боксами, напишите в Telegram, MAX или VK.
Что я делаю для бизнеса
- Боты в Telegram, MAX, VK
- Автоматизация процессов и CRM
- Аналитика и дашборды
- Сайты и лендинги под ключ
Бесплатно: чек-лист «Готов ли ваш бизнес к 152-ФЗ»
12 пунктов, которые проверяют готовность за час: данные, согласия, уведомление в РКН, локализация, защита. Отметьте, что уже сделано, и увидите дыры, за которые сейчас штрафуют.
Готовы обсудить вашу задачу?
Бесплатная консультация — разберём, как внедрить это в вашем бизнесе под ключ. Без форм, пишите напрямую.
Разборы, кейсы и практика — без воды. Выходит регулярно, читать 3–5 минут.


