# seed-bank.online — план платформы (v2, углублённый) ## 1. Позиционирование Не ещё один seed-shop. **Инфраструктурный хаб** для мировой seed-индустрии: единая точка регистрации для seed banks, ботанических садов, питомников, магазинов семян, садоводов и сборщиков. Oreshka Seeds — первый зарегистрированный магазин, эталонный профиль. ## 2. Типы участников (registry entities) | Тип | Что делает на платформе | |---|---| | Seed bank / генбанк | Публичный профиль, каталог хранимых видов, научное описание | | Ботанический сад | Профиль, экспозиция видов, возможна раздача/обмен дублирующего материала | | Питомник (nursery) | Продажа на маркетплейсе, каталог | | Магазин семян | Продажа на маркетплейсе (Oreshka — первый) | | Садовод / коллекционер | Обмен, раздача, покупка, личная коллекция | | Сборщик (collector/wildcrafter) | Продажа/обмен собранного материала, происхождение обязательно | **Важное уточнение:** не каждый User = Organization. Обычный покупатель (просто пришёл купить семена) регистрируется как индивидуальный аккаунт **без** организации — организация нужна только тем, кто продаёт, обменивает или хочет публичный профиль в директории. ## 3. Роли и права доступа | Роль | Кто | Доступ | |---|---|---| | Guest | Не залогинен | Просмотр директория, маркетплейса, биржи. Покупка требует логина на этапе checkout | | Buyer | Индивидуальный покупатель | Личный кабинет, история заказов, избранное, участие в обмене как частное лицо (без публичного профиля организации) | | Org member | Сотрудник организации | Доступ к Vendor Panel своей организации, редактирование листингов, без прав на биллинг/удаление аккаунта | | Org admin | Владелец/представитель организации | Полный доступ к Vendor Panel: биллинг, подписка, приглашение org member, смена контактов | | Platform admin | Команда seed-bank.online (Max) | Модерация регистраций, верификация, управление комиссиями, доступ ко всем данным | Реализация: Mercur/Medusa customer groups (Buyer vs Seller) + отдельная RBAC-таблица `organization_members` с ролью `member`/`admin` — стандартный Mercur seller team pattern, не писать с нуля. ## 4. Персоны и пользовательские сценарии ### 4.1 Садовод-покупатель (Buyer) **Хочет:** купить редкие семена, надёжно, с доставкой в свою страну. Сценарий: Guest → поиск в Маркетплейсе (фильтр по виду/зоне зимостойкости) → карточка товара → корзина (может содержать товары от разных продавцов) → регистрация/логин на checkout → раздельная оплата по продавцам (split checkout) → email-подтверждение по каждому под-заказу → трекинг доставки. ### 4.2 Коллекционер/обменник (Grower/Collector) **Хочет:** обменять свои редкие семена на другие, без денег. Сценарий: регистрация как Organization(grower) → создание Exchange-листинга (вид, кол-во, "хочет взамен") → другой пользователь находит листинг → контакт напрямую через Telegram/WhatsApp (MVP) → обмен происходит вне платформы → инициатор вручную отмечает листинг как `completed` → +1 к `completed_trades_count`. ### 4.3 Владелец магазина/питомника (Vendor) **Хочет:** продавать через маркетплейс, не теряя контроль над каталогом. Сценарий: регистрация Organization(shop/nursery) → форма заявки → **модерация platform admin** (ручная на MVP) → approved → доступ к Vendor Panel → импорт каталога (CSV/API) → настройка доставки/регионов → первая продажа → **выплата за вычетом комиссии** (см. раздел 8) на банковский счёт/Stripe-аккаунт продавца. ### 4.4 Seed bank / ботанический сад (Institutional) **Хочет:** публичный научный профиль + возможность раздавать дублирующий материал, без коммерции. Сценарий: регистрация Organization(seed_bank/botanic_garden) → заявка с указанием официального сайта/email на домене организации (сигнал доверия при верификации) → approved → verified badge (см. монетизацию) → публикация коллекции в директории → опционально: Exchange-листинги на раздачу дублей. ### 4.5 Модератор платформы (Platform admin, MVP = Max) **Хочет:** не пропустить фейковые/мошеннические регистрации, держать каталог чистым. Сценарий: новая заявка на регистрацию → попадает в **очередь модерации** (Admin Panel) → проверка (email-домен совпадает с заявленным сайтом? есть ли открытая информация об организации?) → approve/reject/request-more-info → при approve — organization становится видна в директории. ## 5. Три направления функционала ### 5.1 Маркетплейс (продажа) - Multi-vendor: магазины/питомники продают напрямую, платформа берёт комиссию с транзакции - Витрина = агрегация каталогов зарегистрированных продавцов (Oreshka каталог — первый импорт) - Единые карточки товара со Schema.org Product разметкой (наследуется опыт Oreshka SEO/GEO) - Корзина может содержать товары нескольких продавцов → на checkout заказ автоматически разбивается на под-заказы по продавцу (Mercur split-order, встроенная логика) ### 5.2 Биржа (обмен / раздача) - P2P между садоводами и коллекционерами: seed swap, gift, trade-for-trade - Без денег по умолчанию — репутационная система (rating, completed trades count) - Отдельная категория для дублирующего материала ботсадов/генбанков (не для коммерции, посевной фонд) ### 5.3 Директорий (публичная база + верификация) - Карточка организации: тип, страна, координаты, специализация, контакты, verified-badge - Публичный поиск "seed bank near me" / "nursery in [region]" — сам по себе SEO/GEO актив (AI-краулеры любят structured directories) - Verified-статус — платный/премиум (см. монетизацию) - Гео-поиск: карта (map view) с точками организаций, кластеризация при масштабе "весь мир" ## 6. Data model (расширенная) ``` User id, email, role[buyer|org_member|org_admin|platform_admin] organization_id (nullable — buyer без организации = null) Organization id, type[seed_bank|botanic_garden|nursery|shop|grower|collector] name, country, region, lat/lng, description verified: bool, verified_at, verification_notes subscription_tier contact_link (Telegram/WhatsApp — конвенция без телефонов) payout_account_id (Stripe Connect account, nullable до первой продажи) completed_trades_count Listing id, organization_id, mode[sell|exchange|donate] species, variety, origin_country, quantity_available price (nullable для exchange/donate) photos[], schema-совместимые поля compliance_flag[none|phytosanitary_required|restricted] -- см. раздел 9 status[draft|pending_review|active|sold_out|withdrawn] Order (стандартная Medusa order + split по продавцам через Mercur) id, buyer_id, sub_orders[] (по одному на organization в корзине) status, total, commission_total Payout id, organization_id, order_id, amount, commission_deducted, status[pending|paid|failed] Review id, order_id, buyer_id, organization_id, rating[1-5], text, created_at ModerationQueueItem id, organization_id, submitted_at, status[pending|approved|rejected|info_requested] reviewed_by (platform_admin user_id) Notification id, user_id, type[order_status|new_message|listing_approved|...], read: bool Subscription organization_id, tier[free|verified|pro|marketplace_seller] price, renews_at, stripe_subscription_id ``` ## 7. Доверие и репутация - **Verified badge** — не автоматический: platform admin проверяет email-домен организации, публичную информацию (сайт, соцсети), при необходимости — запрашивает документ - **Review только после завершённой транзакции** (Order.status = completed) — защита от накрутки фейковых отзывов - **Completed trades count** для Exchange — инкремент только по подтверждению **обеих сторон** в Фазе 2 (на MVP — вручную одной стороной, с пометкой "unverified" в UI, честно показываем ограничение, не выдаём за железную метрику) - **Report/flag** кнопка на любом листинге и профиле — репорты попадают в ту же ModerationQueue, что и новые регистрации ## 8. Платежи и выплаты продавцам (multi-vendor) - Провайдер: **Stripe Connect** (Express accounts) — стандартная интеграция для multi-vendor маркетплейсов, поддерживается плагинами Medusa/Mercur - Флоу: покупатель платит один раз за корзину → Stripe разносит средства по под-заказам → комиссия платформы удерживается автоматически (Stripe Connect application fee) → остаток переводится на Stripe-аккаунт продавца по расписанию выплат (напр. еженедельно) - Продавец обязан пройти Stripe onboarding (KYC уровня Stripe, не платформы — снимает с нас юридическую нагрузку по проверке личности) - Валюта: EUR по умолчанию (согласовано с Oreshka), Stripe сам конвертирует при мультивалютных продавцах в будущем ## 9. Международная доставка и комплаенс — ВАЖНО, шире чем просто CITES Оригинальный план флагировал только CITES-регулируемые виды. Проверка показала более широкую картину: ввоз в ЕС растений для посадки (включая семена) из стран вне ЕС по умолчанию требует фитосанитарного сертификата, выданного национальной службой защиты растений страны-экспортёра, согласно Регламенту (EU) 2019/2072, с ограниченным списком исключений (например, для 5 видов фруктов сертификат не требуется). Аналогично UK после Brexit — часть товаров требует фитосанитарный сертификат при ввозе из ЕС, некоторые категории дополнительно требуют предварительного уведомления. **Вывод: это не нишевый вопрос редких видов — это касается потенциально любой международной пересылки семян между продавцами и покупателями на маркетплейсе.** У Oreshka уже есть опыт международной доставки как у единственного продавца — но multi-vendor маркетплейс распределяет этот риск между множеством независимых продавцов из разных стран, что качественно другая ситуация с точки зрения ответственности платформы. **Структурные меры (архитектурные, не юридическая консультация):** - Поле `compliance_flag` на каждом листинге — продавец обязан указать, требует ли вид фитосанитарный сертификат в стране происхождения - Возможность прикрепить скан фитосанитарного сертификата к листингу/заказу (опционально на MVP, обязательно для Фазы 2 при масштабировании в ЕС/UK продажи) - Явные Terms of Service: **продавец несёт ответственность за законность экспорта, покупатель — за законность импорта в свою страну**, платформа — техническая инфраструктура, не сторона сделки (стандартная модель маркетплейсов) - Предупреждение на checkout при выборе страны доставки с высокими фитосанитарными барьерами (не блокировать заказ автоматически на MVP — юридически рискованно давать точные советы без консультации) **Это прямо в списке открытых вопросов (раздел 13) — рекомендую консультацию с юристом по международной торговле/таможенному праву до открытия регистрации сторонним продавцам за пределами Oreshka**, особенно если в маркетплейс попадут виды, регулируемые CITES или национальными карантинными списками. ## 10. Поиск и обнаружение - Text search (Meilisearch) по названию вида, латыни, региону, организации - Faceted-фильтры: тип организации, страна, mode (sell/exchange/donate), verified-статус - Map view для директория: точки на карте, кластеризация при zoom-out (мировой масштаб) - Saved search / алерты (Фаза 2): "уведоми, когда появится Nelumbo × в обмене" ## 11. Уведомления MVP: email только (заказ создан/оплачен/отправлен, заявка на регистрацию одобрена/отклонена, новый отчёт о листинге для админа). Push/in-app — Фаза 2. ## 12. Модерация контента - Очередь: новые регистрации организаций + репорты на существующие листинги/профили - MVP: полностью ручная (Max как единственный platform admin), интерфейс — простой список в Admin Panel с approve/reject/request-info - Автоматические red flags (Фаза 2): email не с корпоративного домена при заявке типа seed_bank/botanic_garden, дублирующееся название организации, подозрительно низкая цена относительно похожих листингов ## 13. Admin-панель платформы (отдельно от Vendor Panel продавцов) - Очередь модерации (раздел 12) - Управление комиссией по категориям/продавцам - Общая аналитика: рост числа организаций по типам, GMV маркетплейса, активность биржи - Ручное управление verified-статусом и subscription_tier ## 14. Монетизация | Тариф | Кому | Что даёт | Модель | |---|---|---|---| | Free listing | Любая организация | Базовый профиль в директории | Бесплатно — драйвер сети | | Verified | Seed banks, ботсады, питомники | Verified badge, приоритет в поиске | Подписка (годовая), Stripe Billing | | Marketplace seller | Магазины, питомники | Продажа через маркетплейс | Комиссия с транзакции (%) через Stripe Connect application fee | | Exchange | Садоводы/сборщики | Обмен/раздача | Бесплатно (сеть растёт за счёт открытого обмена) | Логика: **директорий и обмен — бесплатные, чтобы быстро набрать критическую массу участников**. Монетизация — с продавцов на маркетплейсе (комиссия) и с organizations, которым нужен verified-статус для доверия. ## 15. MVP (Фаза 1) — что нужно для первого запуска 1. Регистрация организации (форма + **ручная** модерация platform admin) 2. Публичный директорий-профиль (карточка + поиск по типу/стране, без карты на старте) 3. Импорт каталога Oreshka как первого продавца маркетплейса 4. Базовый marketplace: листинг, split-корзина, checkout через Stripe Connect (Mercur встроенная логика) 5. Простой exchange-модуль: листинг "на обмен/в дар", контакт через мессенджер, ручная отметка `completed` 6. Email-уведомления только по критичным событиям (заказ, модерация) 7. `compliance_flag` поле на листинге (простой selector, без загрузки документов на старте) **Осознанно НЕ в MVP:** встроенный чат, карта директория, автоматизированная модерация, аналитика продавцов, мультивалютность, push-уведомления, двусторонняя верификация обмена. ## 16. Фаза 2+ (после набора базы) - Встроенный чат/переговоры по обмену - Двусторонняя верификация completed trades - API для генбанков/ботсадов на массовый импорт коллекций - Аналитика для продавцов (просмотры, конверсия, тренды спроса) - Мультиязычность (минимум EN/RU, дальше по спросу регионов) - Map view директория, saved search/алерты - Автоматизированные red-flags модерации - Загрузка фитосанитарных документов к заказам ## 17. Data sourcing для мировой базы (холодный старт директория) - Публичные списки: Millennium Seed Bank Partnership, BGCI (Botanic Gardens Conservation International) — открытые реестры ботсадов - Национальные генбанки (публичные данные о существовании, не о фондах) - Self-registration: сами seed banks/питомники/магазины подают заявку — основной канал роста после старта - Не скрейпить закрытые/приватные базы данных — только публичная информация + добровольная регистрация ## 18. Tech stack (согласовано с бесплатным Oreshka-стеком) **Выбор Node/TS (Mercur на Medusa) вместо PHP (Bagisto) — обоснование по объективным критериям, не по familiarity (сайт строит LLM-агент):** - Mercur специализирован под multi-vendor маркетплейсы из коробки (vendor onboarding, комиссии, split payments), Bagisto — generic e-commerce + multivendor add-on - Medusa headless/API-first по дизайну — чище стыкуется с отдельным Astro-фронтендом, чем Laravel-монолит - TypeScript даёт статическую типизацию — меньше runtime-багов в LLM-сгенерированном коде - Общий язык с уже написанным Cloudflare Worker AI-widget — переиспользование типов между function calling и backend API - Модульный паттерн Medusa задокументирован именно под расширения (exchange, reputation, subscriptions) - Frontend: Astro (Cloudflare Pages) - Backend: **Mercur** (open-source marketplace-акселератор на Medusa.js) на Oracle Always Free VM - Платежи: Stripe Connect (Express accounts) — split payments, комиссия, KYC продавцов через Stripe - Директорий-поиск: Meilisearch (self-host на той же VM) — гео-фильтр по стране/региону, в перспективе map view - Auth: Buyer и Organization — разные типы аккаунтов, RBAC через `organization_members` (роль member/admin) ## 19. Открытые вопросы (нужно решить до старта) - Домен seed-bank.online — проверить доступность/зарегистрировать напрямую в регистраторе - Модель верификации: кто и как подтверждает, что seed bank/ботсад реальный (документы? официальный email домена организации?) - **Юридический статус маркетплейса при международных продажах между третьими продавцами и покупателями** — фитосанитарные требования (раздел 9) касаются широкого круга видов, не только CITES. Нужна консультация с юристом по международной торговле до открытия регистрации сторонним продавцам, особенно за пределами Oreshka. Это не блокирует MVP (Oreshka как единственный продавец — уже отработанная модель), но блокирует масштабирование на сторонних vendors - Модель Stripe Connect Express — проверить доступность в странах, где будут регистрироваться первые продавцы (Stripe Connect не покрывает все страны мира одинаково)