Возможно, вам это не нужно
Отдельная разработка стоит дорого и нужна не каждой компании. Если ваш сайт показывает информацию, собирает формы и ведёт блог, вам хватит готовой системы управления контентом. Говорить это нам невыгодно, но исправлять неверное вложение потом дороже.
Граница такая: на сайте есть правила или только содержимое? Если нет цены, прав или расчёта, который меняется от пользователя к пользователю, дальше можно не читать.
Чем это отличается от дизайна
На сайте-визитке поменять страницу — значит поменять текст. Здесь изменение одного правила задевает все экраны, права и отчёты, которые с ним связаны.
Поэтому половина работы — не программирование, а правильная запись правил. По той же причине мы не называем цену, пока нет документа объёма.
На чём пишете
Выбираем по трём вопросам: будет ли это поддерживаться долго, найдётся ли разработчик, который примет проект, и смогут ли поисковики прочитать содержимое без выполнения JavaScript.
То, чем мы не пользуемся, тоже стоит назвать: Flash, FrontPage, Fireworks и классический ASP не встречаются ни в одном нашем сегодняшнем проекте. Если ваш сайт сделан на них, предстоит не обновление, а переписывание.
Какие задачи берём
- Кабинеты дилеров и сервисов: цена по роли, ввод заказов, учёт расчётов
- Управление каталогом и технической документацией, таблицы вариантов и размеров
- Потоки заявок: от формы до предложения в PDF, с согласованием и версиями
- Системы брони и записи, с учётом загрузки и напоминаниями
- Внутренние панели: заявки, задачи, документы, права
- Интеграции: ERP, бухгалтерия, доставка, электронные счета, эквайринг, маркетплейсы
- Приём чужих проектов: чтение кода, документирование, поэтапное обновление
Как строится интеграция
Интеграция — это когда две системы разговаривают, а одни и те же данные не вносят дважды. Здесь проекты застревают чаще всего: документация другой стороны неполная, названия полей не совпадают, и нигде не написано, что делать при ошибке.
Поэтому работу делим на три части. Таблица соответствия полей: какое поле чему отвечает. Сценарии сбоев: что происходит, если связь оборвалась или данные отклонены. И логика повторных попыток. Пока эти три вещи не записаны, код мы не начинаем.
- ERP и бухгалтерия: перенос товаров, остатков, контрагентов и цен
- Электронные счета и архив: выпуск документов через оператора
- Доставка: создание отправления, штрихкод, привязка трек-номера
- Оплата: банковский эквайринг или платёжный сервис; данные карты до нас не доходят
- Маркетплейсы: синхронизация товаров и остатков, забор заказов
Что делаем по безопасности
Безопасность — не отдельный модуль, а привычка, которой держатся на каждом шаге. Наш минимум такой:
- Всё, что приходит из браузера, проверяется на сервере заново; проверка на стороне клиента — только удобство для пользователя
- Пароли хешируются через bcrypt и нигде не хранятся открытым текстом
- Права проверяются на сервере; спрятанная кнопка — не граница прав
- Ограничение частоты запросов, ловушка для ботов и проверка на бота на входе и в формах
- Параметризованные запросы к базе, проверка типа и размера при загрузке файлов
- Данные карты никогда не попадают на наш сервер, они остаются в рамке платёжного сервиса
- Реестр данных, сроки хранения и процедура удаления — как требует KVKK, турецкий закон о персональных данных
- После настройки резервных копий восстановление проверяется на деле; непроверенная копия копией не считается
Кому в итоге принадлежит программа
Система работает на ваше имя: домен ваш, доступ к панели у вас, данные внутри ваши. Выгрузить записи о товарах, клиентах и заказах можно в любой момент. Годовую лицензию за то, чтобы сайт оставался включённым, вы нам не платите.
Передача исходного кода — отдельный разговор. Настоящая стоимость программы не в том, чтобы её запускать, а в том, чтобы спроектировать, написать и описать; поэтому передача кода не входит в цену пакета. Кто хочет — поднимает этот вопрос на встрече, и мы вписываем стоимость и объём в договор. Говорим об этом сразу, чтобы потом не было сюрприза.
Когда передача кода согласована, в папке передачи лежат репозиторий Git, резервная копия базы и файлы схемы, список переменных окружения, учётные записи сторонних сервисов, инструкция по установке и перечень известных недоработок. Последний пункт мы выписываем намеренно. Ни одна программа не сдаётся без недоработок; честен тот, кто переносит их на бумагу.