Перейти к содержимому
Olista
Войти

О нас

Как мы работаем

Четыре правила, которые видно в коде, а не только в описании. Они дороже любого списка технологий: технологии у всех примерно одни.

Решение записано вместе с кодом

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

Тесты пишутся как атаки

Не «счастливый путь», а попытки: выйти из объявления стиля, подсунуть javascript: в ссылку, отправить форму с чужой страницы, назвать свою цену в корзине, дотянуться до данных чужого клиента. У отказа изоляции нет симптома: запросы проходят, страницы рисуются, отличается только то, чьи данные на них.

Ничего не грузится со стороны

Ни одного внешнего шрифта, ни одной библиотеки с чужого CDN — ни в наших приложениях, ни в страницах, которые публикует конструктор. Приложение обязано открыться и выглядеть собой на машине, у которой наружу ничего не пущено.

Незаконченное называется незаконченным

У каждой части продукта есть список того, чего в ней ещё нет, и он лежит рядом со списком того, что готово. Обещание, которое нельзя выполнить сегодня, обходится дороже честного пропуска — особенно тому, кто на него рассчитывал.

Что сделано

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

Конструктор

Продукт платформы Olista

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

  • Редактор блоков Страница собирается перетаскиванием, отмена сделана снимками документа, а панель настроек генерируется из описания блока — пятьдесят рукописных панелей означали бы пятьдесят разных форм и пятьдесят шансов принять значение, которое сервер отклонит.
  • Шаблоны вместо пустого холста Сайт начинается с готового набора страниц: салон, кофейня, студия услуг, мастерская, интернет-магазин, лендинг. Шаблоны проверяются по каталогу блоков при старте, поэтому переименованное свойство роняет запуск, а не страницу автора.
  • Публикация снимком Опубликованная страница — неизменяемая копия черновика вместе с темой, шапкой и подвалом. Правки не появляются на живом сайте, пока автор их не опубликовал, а откат — это восстановление предыдущего снимка, то есть одна запись.
  • Сайт без рантайма в браузере Посетитель получает обычный HTML, один файл стилей и один небольшой скрипт. Формы настоящие, фильтры — обычный GET, ссылки — ссылки: страница, которая без JavaScript выглядит сломанной, так же выглядит и для поискового робота.
  • Интернет-магазин Каталог, карточка с вариантами и галереей, фильтры, корзина и оформление заказа. Ни одна сумма не принимается от браузера: цену считает сервер, а при оформлении все строки переоцениваются заново — корзина может пролежать неделю.
  • Каталог из 1С Источник подключается по OData: номенклатура, цены, остатки и фотографии, обновление по расписанию. Правка, сделанная менеджером в консоли, накладывается поверх источника и переживает ночную синхронизацию — иначе складское название возвращается к утру.
  • Онлайн-запись Услуги, график работы и свободные окна. Два человека не займут одно окно, потому что это уникальный индекс в базе, а не проверка перед записью: проверка проигрывает гонку, индекс — нет.
  • Заявки и письма Формы складывают обращения в консоль сайта и присылают письмо владельцу; покупателю и гостю уходит своё подтверждение. Письма идут очередью с повторами, а не из середины оформления заказа.
  • Соавторы, роли и журнал Владелец сайта заводит соавторов. У платформы отдельный набор прав с областью «вся установка» или «один сайт», а заход сотрудника в чужой сайт остаётся в журнале — с повышением записи, если чтение перешло в правку.
  • Кабинеты покупателей Магазин может пускать покупателей в личный кабинет: у каждого сайта свой клиент входа и свой набор учётных записей. Клиент магазина — это организация со своими людьми и ролями, а покупатель одного магазина не существует для другого.
  • .NET 10
  • Blazor WebAssembly
  • MongoDB
  • OpenIddict
  • OData 1С
  • SkiaSharp

Чего пока нет: оплаты в магазине и редактора схемы каталога. Своё имя владелец заявляет в настройках сайта и подтверждает TXT-записью; отдача по нему в production выключена, пока нет сертификата на это имя. Сайт сегодня живёт по адресу конструктора.

Аналитика маркетплейсов

Рабочее место продавца

Аналитика открывается на этом же адресе Olista. Токен кабинета уходит через серверный шлюз и не остаётся в браузере. Пока activation не выполнен, экран отказывает, а не показывает демонстрационные цифры.

  • Тот же вход Человек уже на Olista: отдельного домена аналитики для посетителя нет, только этот сайт.
  • Секрет не возвращается Токен кабинета принимается один раз и хранится зашифрованным. Браузер его больше не видит.
  • Явная синхронизация Запрос имеет статус. Повторное нажатие не запускает скрытую вторую загрузку.
  • .NET 10
  • MongoDB
  • OpenIddict
  • Wildberries API

Карточка ведёт на настоящий экран. Пока Marketplace Analytics не активирован, сервер отказывает. Это не скрытая витрина и не демо-цифры.

Olista AI

Внутренняя лаборатория

У Olista AI собственный адрес и собственная страница: посетитель читает, что вертикаль умеет сегодня, а саму лабораторию открывает администратор установки после входа. Браузер не получает токен модели ни на одном шаге.

  • Та же учётная запись Вход — через общий Identity. Отдельного логина у приложения нет.
  • Черновик, не публикация Ассистент предлагает текст. Он не сохраняет страницу и не публикует сайт.
  • Модель за закрытой дверью К модели ходит только сервер этого приложения, по внутренней сети. Наружу она не выставлена.
  • .NET 10
  • Blazor WebAssembly
  • ASP.NET Core
  • MongoDB
  • OpenIddict

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

Восстанавливаем связь с сервером…

Не вышло. Следующая попытка через с.

Связь восстановить не удалось. Нажмите «Ещё раз» или обновите страницу.

Сервер приостановил работу страницы.

Продолжить не удалось. Нажмите «Продолжить» ещё раз или обновите страницу.