OSBSA Bilişim

Веб-разработка и приложения под задачу

Сайт-визитка показывает информацию. Здесь работа другая: мы пишем приложение, которое принимает заказы, списывает остатки, готовит предложения и решает, кто что видит. Если у вас процесс держится на таблицах Excel, разговор пойдёт скорее всего об этом.

Возможно, вам это не нужно

Отдельная разработка стоит дорого и нужна не каждой компании. Если ваш сайт показывает информацию, собирает формы и ведёт блог, вам хватит готовой системы управления контентом. Говорить это нам невыгодно, но исправлять неверное вложение потом дороже.

Граница такая: на сайте есть правила или только содержимое? Если нет цены, прав или расчёта, который меняется от пользователя к пользователю, дальше можно не читать.

Чем это отличается от дизайна

На сайте-визитке поменять страницу — значит поменять текст. Здесь изменение одного правила задевает все экраны, права и отчёты, которые с ним связаны.

Поэтому половина работы — не программирование, а правильная запись правил. По той же причине мы не называем цену, пока нет документа объёма.

Сравнение двух видов работы
Сайт-визиткаПриложение под задачу
РезультатСтраницы, показывающие информациюПриложение, которое выполняет работу
ДанныеТекст и изображенияЗаказы, остатки, пользователи
ПользовательПосетительПосетитель и пользователи с правами
Мера сложностиЧисло страницЧисло бизнес-правил и ролей
Объём тестовВнешний вид и формыПравила, права, целостность данных
СопровождениеОбновление содержимогоИзменение правил, работа с версиями

На чём пишете

Выбираем по трём вопросам: будет ли это поддерживаться долго, найдётся ли разработчик, который примет проект, и смогут ли поисковики прочитать содержимое без выполнения JavaScript.

Стек, который мы используем
СлойВыборПочему
ЯзыкTypeScriptЛовит ошибку при написании, а не при работе; код остаётся читаемым для того, кто его примет
Каркас приложенияNext.js и ReactСтраница собирается на сервере, первое открытие быстрое, поисковики видят содержимое напрямую
Серверная частьNode.js, Server Actions и маршруты APIФронт и бэк на одном языке и в одном репозитории; расходы на интеграцию падают
База данныхPostgreSQL или MariaDBГарантии транзакций, целостность связей, широкая поддержка на хостингах
Доступ к даннымPrismaСхема в одном файле, история миграций прослеживается, риск SQL-инъекции ниже
Проверка данныхZodОдно и то же правило работает и в форме, и на сервере
СессииПодписанные куки, пароли хранятся через bcryptПароль нигде не лежит открытым текстом, права проверяются на сервере
ИнтерфейсСвой набор компонентов поверх Tailwind CSSНет привязки к теме, неиспользуемые стили не тащатся следом
ФайлыХранилище, совместимое с S3, конвертация в AVIF и WebPБольшие файлы не нагружают сервер приложения
ВыкладкаGit, автоматическая сборка, отдельная тестовая средаПлохую версию можно откатить, файлы на рабочий сервер руками никто не кладёт

То, чем мы не пользуемся, тоже стоит назвать: Flash, FrontPage, Fireworks и классический ASP не встречаются ни в одном нашем сегодняшнем проекте. Если ваш сайт сделан на них, предстоит не обновление, а переписывание.

Какие задачи берём

  • Кабинеты дилеров и сервисов: цена по роли, ввод заказов, учёт расчётов
  • Управление каталогом и технической документацией, таблицы вариантов и размеров
  • Потоки заявок: от формы до предложения в PDF, с согласованием и версиями
  • Системы брони и записи, с учётом загрузки и напоминаниями
  • Внутренние панели: заявки, задачи, документы, права
  • Интеграции: ERP, бухгалтерия, доставка, электронные счета, эквайринг, маркетплейсы
  • Приём чужих проектов: чтение кода, документирование, поэтапное обновление

Как строится интеграция

Интеграция — это когда две системы разговаривают, а одни и те же данные не вносят дважды. Здесь проекты застревают чаще всего: документация другой стороны неполная, названия полей не совпадают, и нигде не написано, что делать при ошибке.

Поэтому работу делим на три части. Таблица соответствия полей: какое поле чему отвечает. Сценарии сбоев: что происходит, если связь оборвалась или данные отклонены. И логика повторных попыток. Пока эти три вещи не записаны, код мы не начинаем.

  • ERP и бухгалтерия: перенос товаров, остатков, контрагентов и цен
  • Электронные счета и архив: выпуск документов через оператора
  • Доставка: создание отправления, штрихкод, привязка трек-номера
  • Оплата: банковский эквайринг или платёжный сервис; данные карты до нас не доходят
  • Маркетплейсы: синхронизация товаров и остатков, забор заказов

Что делаем по безопасности

Безопасность — не отдельный модуль, а привычка, которой держатся на каждом шаге. Наш минимум такой:

  • Всё, что приходит из браузера, проверяется на сервере заново; проверка на стороне клиента — только удобство для пользователя
  • Пароли хешируются через bcrypt и нигде не хранятся открытым текстом
  • Права проверяются на сервере; спрятанная кнопка — не граница прав
  • Ограничение частоты запросов, ловушка для ботов и проверка на бота на входе и в формах
  • Параметризованные запросы к базе, проверка типа и размера при загрузке файлов
  • Данные карты никогда не попадают на наш сервер, они остаются в рамке платёжного сервиса
  • Реестр данных, сроки хранения и процедура удаления — как требует KVKK, турецкий закон о персональных данных
  • После настройки резервных копий восстановление проверяется на деле; непроверенная копия копией не считается

Кому в итоге принадлежит программа

Система работает на ваше имя: домен ваш, доступ к панели у вас, данные внутри ваши. Выгрузить записи о товарах, клиентах и заказах можно в любой момент. Годовую лицензию за то, чтобы сайт оставался включённым, вы нам не платите.

Передача исходного кода — отдельный разговор. Настоящая стоимость программы не в том, чтобы её запускать, а в том, чтобы спроектировать, написать и описать; поэтому передача кода не входит в цену пакета. Кто хочет — поднимает этот вопрос на встрече, и мы вписываем стоимость и объём в договор. Говорим об этом сразу, чтобы потом не было сюрприза.

Когда передача кода согласована, в папке передачи лежат репозиторий Git, резервная копия базы и файлы схемы, список переменных окружения, учётные записи сторонних сервисов, инструкция по установке и перечень известных недоработок. Последний пункт мы выписываем намеренно. Ни одна программа не сдаётся без недоработок; честен тот, кто переносит их на бумагу.

Пакеты

Старт

Необходимый минимум, чтобы вас было видно

Фиксированной цены нет

Цену определяют две вещи: сколько будет страниц и кто пишет тексты. Пока не обсудим обе, цифру не называем.

  • Сайт, который объясняет, чем вы занимаетесь: главная и внутренние страницы
  • Кто смотрит с телефона, читает без увеличения
  • Заполненная форма падает вам на почту, есть и кнопка WhatsApp
  • Маршрут до вашего адреса открывается с карты одним касанием
  • Текст и картинки меняете сами в панели управления
  • В адресной строке браузера не появляется предупреждение «не защищено»
  • При поиске по названию компании в Google видны верный заголовок, описание и адрес
  • Кто откуда пришёл, смотрите в Search Console и Analytics
  • Изображения ужимаются и конвертируются, страница не тормозит и на мобильном интернете
  • Страницы, по которым можно ходить с клавиатуры и которые читает экранный диктор
  • Объяснение панели при сдаче; домен, код и файлы остаются на ваше имя
  • Раздел блога и новостей
  • Каталог товаров и таблицы технических характеристик
  • Второй язык
  • Корзина, оплата и отслеживание заказов
  • Разработка программы под вас
Посмотреть объём
Рекомендуем

Корпоративный

Для тех, у кого есть каталог и регулярный контент

Фиксированной цены нет

Цена зависит от того, сколько товаров вы заведёте и откуда начнётся дизайн. Приходите со своим каталогом, посчитаем позиции вместе.

  • Всё из пакета «Старт»
  • Не готовая тема, а нарисованный под вас дизайн: вы не будете похожи на конкурента
  • Каталог товаров и услуг: категории, таблицы характеристик, документы PDF для скачивания
  • Блог: каждая написанная статья открывает в поиске ещё одну дверь
  • Ваши работы оформлены как разборы проектов, и вопрос о рекомендациях закрывается на встрече
  • Форма заявки идёт по шагам, и клиент не бросает её, увидев длинную анкету
  • Частые вопросы размечены так, что могут попасть в блок ответов Google
  • Заголовок и описание каждой страницы настраиваются отдельно, страницы не отбирают позиции друг у друга
  • Адреса старого сайта перенаправляются на новые, ваша позиция в Google не обнуляется
  • Скорость как условие сдачи: на медленном 4G LCP меньше 2,5 с · INP меньше 200 мс · CLS меньше 0,05
  • Где посетитель застрял: видно по тепловым картам и записям сессий
  • Файл llms.txt и политика для роботов, чтобы ИИ-инструменты читали ваш сайт правильно
  • Второй язык
  • Корзина, оплата и отслеживание заказов
  • Кабинет дилера и интеграция с внешними системами
Посмотреть объём

Профессиональный

Если нужны продажи, работа с дилерами или интеграции

Фиксированной цены нет

Цену определяет число интеграций. Связь с бухгалтерией — отдельная работа, связь с доставкой — другая; какая нужна вам на самом деле, обсуждаем на первой встрече.

  • Всё из пакета «Корпоративный»
  • Корзина, заказы, остатки и купоны: продажа идёт с сайта
  • Оплата картой принимается через 3-D Secure, данные карты на ваш сервер не попадают
  • Связь с доставкой: трек-номер сам прикрепляется к заказу
  • Дилеры, клиенты и сотрудники разводятся по правам, никто не видит лишнего
  • Отдельный прайс для дилера открывается только вошедшему дилеру
  • Второй язык: посетитель из-за рубежа читает на своём
  • Обмен данными с бухгалтерией, ERP и электронными счетами (с документом соответствия полей)
  • Тексты о дистанционной продаже, возврате, доставке, персональных данных и cookie идут готовыми
  • Страницы товаров могут показываться в Google с ценой и наличием
  • Какой товар сколько продан, какой клиент что купил: отчёты из панели
  • Изменения сначала проверяются в тестовой среде, живые продажи не прерываются
Посмотреть объём

Под проект

Работа, которая не помещается в пакеты

Если ваши бизнес-правила нестандартны, если должны разговаривать несколько систем или если надо принять существующую программу, логика пакетов перестаёт работать. Сначала готовим документ технического объёма и считаем по его позициям. Встреча по объёму бесплатная.

Цифр на этой странице вы не увидите. Цена, названная до разговора об объёме, либо покрывает лишнее, либо недотягивает. За один разговор мы проясняем объём и в тот же день присылаем письменное предложение, где каждая позиция стоит отдельной строкой.

Определим объём вместе

Расскажите, какой процесс хотите перенести на экран; набросаем список экранов, модель данных и бизнес-правила, а потом посчитаем. Этот разговор бесплатный.