Yachtxchange: одно приложение с ролевым доступом, пять функций ИИ и стек почти без затрат в простое для яхтенных брокеров
Дневник разработки Yachtxchange — B2B SaaS SEYSO для яхтенных брокерских компаний. Просмотр для покупателей уровня YachtWorld, но продаваемый брокерам как ПО с тарифами: одно мобильное приложение в обоих магазинах, портал, создающий объявления по фото за три минуты, и счёт за инфраструктуру, округляющийся до нуля, пока компания спит.
1 app
Оба магазина, ролевой доступ
5
Ролей, одна кодовая база
30→3
Минут на объявление
~$0
Инфраструктура организации в простое
Точка входа: брокеры покупают ПО, покупатели получают торговую площадку
Яхтенные площадки монетизируют объявления, а брокеры, выполняющие всю работу, всё ещё пользуются таблицами, папками фото и скопированными описаниями Word. Хорошее объявление — заголовок, текст для покупателя, перечень оборудования, заметки о состоянии — занимает у брокера около тридцати минут на судно, и неравномерное качество заметно на странице любой компании.
Yachtxchange меняет модель: клиент — брокерская компания . Она оформляет тариф, получает портал для рутинной работы, а её ассортимент формирует для покупателей полноценную торговую площадку в вебе и нативном мобильном приложении — без собственной разработки со стороны брокера.
Четыре тарифа с ограничениями в коде, а не в PDF
Solo за $99/мес. (5 объявлений, 1 пользователь), Pro за $299 (25 объявлений, 3 пользователя, оценка лидов), Brokerage за $799 (100 объявлений, 10 пользователей, ценовая аналитика) и индивидуальный Enterprise с API и оформлением под собственным брендом. Интересно, где находятся ограничения: ensureCanCreateListing , ensureCanAddSeat и ensureAiCreditsAvailable — проверки внутри Server Actions и API-маршрутов, где Stripe — источник достоверных данных , а вебхук локально отражает состояние подписки. Никаких ограничений на доверии и ночных заданий сверки.
Использование ИИ учитывается так же: каждый вызов помощника записывает строку в usage_events — таблицу, благодаря которой кредиты тарифа с первого дня можно считать, оплачивать и проверять при аудите.
Пять ролей, одна кодовая база и самоорганизующиеся брокерские компании
В обоих магазинах ровно одно мобильное приложение и одно веб-приложение на одном домене. Интерфейс зависит от вашей роли:
buyerСамостоятельная регистрация. Просмотр, сохранение поисков, связь с брокерами.
broker_leadПервая регистрация с почтового домена компании. Полные права брокера плюс управление оплатой и командой.
broker_backupВторая регистрация с того же домена. Полные права и автоматическое назначение руководителем при уходе текущего. Преемственность — правило предоставления доступа, а не обращение в поддержку.
broker_agentПриглашён руководителем или заместителем. Объявления и лиды, права настраиваются для каждого пользователя.
adminСотрудник Yachtxchange. Полное администрирование платформы.
Брокерские компании соответствуют Clerk Organizations , а взаимодействие руководителя, заместителя и агента реализовано в одном модуле предоставления доступа. Небольшая, но крайне важная защита: бесплатные почтовые домены — Gmail и подобные — никогда автоматически не сопоставляются с существующей компанией, поэтому посторонний с адресом Gmail не попадёт в чужую организацию.
Монорепозиторий: схемы Zod как контракт
Два приложения — apps/web (Next.js 16 App Router, группы маршрутов для маркетинга, покупателей, брокеров и администраторов) и apps/mobile (Expo + EAS) — используют шесть общих пакетов: db (Drizzle ORM на Neon), auth (обёртки Clerk + предоставление доступа), ai, billing , ui и types . Пакет types — краеугольный камень: схемы Zod — единый контракт для веб-Server Actions, API-маршрутов, мобильного API-клиента и инструментов ИИ. Одно изменение схемы распространяется всюду, где это видит компилятор.
Модель данных шире объявления
Каталог схем раскрывает суть продукта: объявления, лиды, предложения, встречи, сюрвейеры и хранилище документов. Yachtxchange постепенно строит пространство сделки, а не просто витрину.
Мультитенантность благодаря дисциплине
Каждая строка данных организации содержит brokerage_id , и каждый запрос фильтруется по нему либо защищён проверкой администратора. Деньги хранятся в центах как bigint — никогда не float.
Слой ИИ: пять функций без привязки к поставщику
Всё проходит через Vercel AI Gateway с обычными "provider/model" строками — SDK поставщика не встроен в кодовую базу, поэтому для замены модели или A/B-теста достаточно изменить строку, получив наблюдаемость и резервные варианты без дополнительных усилий.
Помощник для объявлений — с 30 минут до 3
Брокер загружает фото и краткие характеристики; модель с анализом изображений возвращает структурированный черновик через generateObject по схеме Zod: SEO-заголовок, описание для покупателя из 3–5 абзацев, ключевые преимущества первого экрана, перечень оборудования по фото, оценка состояния и автоматические теги. Особенно важны два решения. Промпт запрещает выдуманные характеристики — только предоставленные или визуально определимые. А схема включает warnings — массив противоречий и утверждений, требующих проверки, чтобы брокер проверял замечания, а не вычитывал текст. Создание объявления сокращается с ~30 до ~3 минут.
Семантический поиск
Косинусное сходство pgvector по эмбеддингам объявлений: работает запрос «устойчивый траулер для Great Loop дешевле 400 тысяч», а не только фильтры марки и модели.
Оценка лидов
Запросы ранжируются от 0 до 100 с рекомендацией следующего действия: брокеры тарифа Pro перестают разбирать почту на интуиции.
Извлечение данных обследований
Структурированные данные из PDF морских обследований — документ, от которого зависит каждая сделка, наконец становится машиночитаемым.
Проверка сюрвейеров
Сведения из реестра сюрвейеров поступают в процесс записи на встречи — доверие, заложенное в код.
Подготовлена основа следующих функций: ценовая аналитика, улучшение фото и автоматические теги, поиск по изображению, перевод и выявление мошенничества с повторными фото.
Экономика: стек с нулевой стоимостью в простое
Маржинальность B2B SaaS закладывается выбором инфраструктуры. Компания активна примерно восемь часов в день — стек подобран так, чтобы остальные шестнадцать ничего не стоили:
Тарификация Vercel Active CPU — платите за CPU во время фактической работы, а не пока функция ждёт базу данных или ответ ИИ.
Масштабирование Neon до нуля — Стоимость вычислений Postgres в простое снижается до $0. Брокерская компания, активная 8 ч/день, платит за 8 ч.
Одно мультитенантное развёртывание — все брокерские компании используют один проект и одну базу данных с изоляцией по brokerage_id — без отдельной инфраструктуры для каждой организации, требующей сопровождения.
Повторное использование экземпляров Fluid Compute — параллельные запросы используют общие прогретые экземпляры; холодные запуски — исключение, а не правило.
Реальная верхняя граница затрат — хранение фото и видео: объявления о яхтах объёмны. Уже применяются уменьшение изображений и AVIF при загрузке, активное кеширование, а также заранее согласованное условие: если исходящий трафик превысит ~$500/мес., хранилище переносится в R2. Определить условия выхода до получения счёта — самая дешёвая архитектурная проверка.
Текущее состояние
Веб и мобильное приложение уже работают с актуальной схемой: каталог для покупателей, портал брокера с ИИ-помощником, тарифная оплата и мобильный ролевой доступ функционируют в закрытой разработке. Профили EAS настроены для подачи в магазины. Пространство сделки — предложения, встречи, расписание сюрвейеров, хранилище документов — выпускается на уже готовой схеме.
Если вы руководите брокерской компанией и хотите проверить сокращение создания объявления с 30 до 3 минут на своих судах, мы открываем ограниченное число обсуждений пилотных проектов.
Обсудить пилотный проект
Yachtxchange создаёт команда LiftCrew AI, Sentinel и Liftline; та же модель подписки лежит в основе нашей услуги «Мобильные приложения как сервис».