PRD: Expat Community Platform
Версия: 1.0
Автор: Олег Вегерия / Claude Code
Дата: 19 марта 2026
Статус: V1 (в разработке)
1. Обзор продукта
Что это
Нишевая веб-платформа для украинских и восточноевропейских экспатов в Испании. Объединяет релокационные гиды, AI-ассистента, бизнес-каталог и форум сообщества в одном месте на родном языке пользователя.
Зачем это нужно
340,000+ украинцев живут в Испании. Ни одна существующая платформа не обслуживает их на русском/украинском языке. Информация разбросана по Telegram-чатам, Facebook-группам и устаревшим форумам. Каждый новый экспат проходит один и тот же болезненный путь: NIE, empadronamiento, банк, жилье, школы, ветклиники — без структурированной помощи.
Для кого
| Сегмент | Размер | Боль |
|---|
| Украинцы в Испании | ~340k | Языковой барьер, бюрократия, нет "своей" платформы |
| Экспаты с питомцами | ~50% домохозяйств | Ветклиники, pet-friendly жилье, перевозка животных |
| Digital nomads | Растущий (DN visa 2023) | Налоги, жилье, коворкинги, нетворкинг |
Ключевые дифференциаторы
- Язык — RU/UA/ES/EN с первого дня (конкуренты только EN)
- Pet-ниша — единственная платформа с фокусом на экспатов с питомцами
- AI-ассистент — персонализированные ответы по релокации на основе гидов
- История основателя — личный опыт релокации = доверие аудитории
2. Пользователи и персоны
Персона 1: "Новичок" — Марина, 34
- Кто: Украинка, приехала в Валенсию 2 месяца назад с дочкой и котом
- Контекст: Временная защита, базовый испанский, ищет NIE, школу, ветклинику
- Задачи: Получить пошаговый гид по NIE, найти русскоязычного ветеринара, задать вопрос AI-ассистенту
- Барьеры: Не доверяет англоязычным платформам, боится бюрократии
- Метрика успеха: Получила ответ на свой вопрос в течение 24 часов
Персона 2: "Обустроившийся" — Андрей, 41
- Кто: Живет в Испании 2 года, IT-специалист, digital nomad visa
- Контекст: Знает систему, хочет помогать другим и находить услуги
- Задачи: Отвечать на форуме, искать нового бухгалтера в каталоге, делиться опытом
- Барьеры: Нет единой площадки — информация разбросана по чатам
- Метрика успеха: Нашел нужного специалиста, помог новичку на форуме
Персона 3: "Бизнес" — Елена, 38
- Кто: Владелица юридической фирмы в Валенсии, работает с украинскими клиентами
- Контекст: Ищет целевой трафик, готова платить за видимость
- Задачи: Разместить листинг в каталоге, получить premium-позицию, видеть аналитику
- Барьеры: Facebook-реклама дорогая и не таргетированная
- Метрика успеха: Получает 5+ лидов в месяц через платформу
3. Архитектура продукта
Модули
Expat Community Platform
|
|-- [Landing] Email signup, value proposition, social proof
|-- [Guides] MDX-гиды по релокации (NIE, банки, питомцы, жилье, здоровье)
|-- [Directory] Бизнес-каталог с категориями, поиском, premium-листингами
|-- [Community] Форум с категориями, постами, ответами
|-- [AI Assistant] RAG-чат на базе Claude + контент гидов
|-- [Auth] Magic link через Supabase
|-- [Dashboard] Управление листингами, Stripe-оплата
|-- [Pricing] Тарифные планы для бизнесов
Технический стек
| Слой | Технология | Обоснование |
|---|
| Framework | Next.js 15, App Router, TypeScript strict | SSR/SSG, производительность, типобезопасность |
| Database | Supabase (PostgreSQL + Auth + Storage) | Бесплатно до 50k MAU, встроенный auth, RLS |
| Styling | Tailwind CSS v4 + shadcn/ui | Быстрая разработка, консистентный дизайн |
| AI | Anthropic Claude API (Sonnet 4) | Лучший для диалога на русском/украинском |
| i18n | next-intl (ru, uk, es, en) | Нативная поддержка App Router |
| Payments | Stripe (Subscriptions) | Стандарт для EU SaaS |
| Email | Resend | Дешевле SendGrid, хороший DX |
| Deploy | Vercel | Zero-config, edge, preview deploys |
4. Функциональные требования
4.1 Landing Page
| ID | User Story | Acceptance Criteria | Статус |
|---|
| LP-01 | Как посетитель, я хочу понять ценность платформы за 5 секунд | Hero с заголовком, подзаголовком, CTA. Value props видны без скролла на desktop | Done |
| LP-02 | Как посетитель, я хочу подписаться на рассылку | Форма email signup, welcome email через Resend, success/error state | Done |
| LP-03 | Как посетитель, я хочу видеть социальное доказательство | Секция с цифрами/отзывами, блок "как это работает" | Done |
| LP-04 | Как посетитель, я хочу видеть страницу на своем языке | Автоопределение языка, переключатель RU/UA/ES/EN | Done (переключатель работает, auto-detect через Accept-Language) |
4.2 Релокационные гиды
| ID | User Story | Acceptance Criteria | Статус |
|---|
| GD-01 | Как экспат, я хочу найти пошаговый гид по NIE | MDX-гид с TOC, reading time, SEO metadata | Done (RU) |
| GD-02 | Как экспат, я хочу гид по открытию банковского счета | Конкретные банки, документы, сроки | Done (RU) |
| GD-03 | Как владелец питомца, я хочу гид по перевозке животного | Документы, ветсертификаты, авиакомпании, карантин | Done (RU) |
| GD-04 | Как экспат, я хочу гид по аренде жилья | Где искать, документы, залог, контракт | Done (RU) |
| GD-05 | Как экспат, я хочу гид по системе здравоохранения | SIP-карта, врачи, страховка, экстренная помощь | Done (RU) |
| GD-06 | Как украиноязычный, я хочу читать гиды на украинском | Все 5 гидов переведены на UK | Backlog |
| GD-07 | Как испаноязычный, я хочу читать гиды на испанском | Все 5 гидов переведены на ES | Backlog |
| GD-08 | Как экспат, я хочу гид по empadronamiento | Документы, муниципалитеты, сроки | Done (RU) |
| GD-09 | Как экспат, я хочу гид по школам и образованию | Типы школ, запись, homologacion | Backlog |
| GD-10 | Как DN, я хочу гид по Digital Nomad Visa | Требования, процесс, налоги, сроки | Backlog |
4.3 Бизнес-каталог (Directory)
| ID | User Story | Acceptance Criteria | Статус |
|---|
| DR-01 | Как экспат, я хочу найти русскоязычного специалиста по категории | Страница категории с листингами, фильтр по городу | Done |
| DR-02 | Как экспат, я хочу искать бизнес по ключевому слову | Поисковая строка, результаты по названию/описанию | Done |
| DR-03 | Как экспат, я хочу видеть детали бизнеса | Страница с контактами, описанием, адресом, часами работы | Done |
| DR-04 | Как бизнес, я хочу создать бесплатный листинг | Форма создания через dashboard, базовые поля | Done |
| DR-05 | Как бизнес, я хочу обновить свой листинг | Форма редактирования, только свои листинги (RLS) | Done |
| DR-06 | Как бизнес, я хочу удалить свой листинг | Кнопка удаления с подтверждением | Done |
| DR-07 | Как бизнес, я хочу premium-размещение | Stripe checkout, 3 тира (Basic/Pro/Premium), приоритет в поиске | Done |
| DR-08 | Как экспат, я хочу видеть бизнес на карте | Интерактивная карта с маркером на странице листинга | Placeholder |
| DR-09 | Как экспат, я хочу фильтровать по "говорит на русском/украинском" | Фильтр по языку специалиста | Backlog |
| DR-10 | Как экспат, я хочу видеть рейтинг и отзывы | Звезды, текстовые отзывы, модерация | Backlog |
| DR-11 | Как бизнес, я хочу видеть аналитику листинга | Просмотры, клики, конверсия за период | Backlog |
4.4 Форум сообщества (Community)
| ID | User Story | Acceptance Criteria | Статус |
|---|
| CM-01 | Как экспат, я хочу видеть категории форума | Список категорий с иконками и счетчиками | Done |
| CM-02 | Как экспат, я хочу читать посты в категории | Список постов с пагинацией, автор, дата, reply_count | Done |
| CM-03 | Как экспат, я хочу читать пост и ответы | Страница поста с деревом ответов | Done |
| CM-04 | Как зарегистрированный, я хочу создать пост | Форма создания (title, content, category), auth-gated | Done |
| CM-05 | Как зарегистрированный, я хочу ответить на пост | Форма ответа, auth-gated, reply_count обновляется | Done |
| CM-06 | Как модератор, я хочу закреплять/удалять посты | Модераторские действия, роли | Backlog |
| CM-07 | Как экспат, я хочу подписаться на тему | Уведомления о новых ответах (email или in-app) | Backlog |
| CM-08 | Как экспат, я хочу голосовать за полезные ответы | Upvote/downvote, сортировка по полезности | Backlog |
4.5 AI-ассистент
| ID | User Story | Acceptance Criteria | Статус |
|---|
| AI-01 | Как экспат, я хочу задать вопрос о релокации на русском | Чат-интерфейс, стриминг ответа, контекст из гидов (RAG) | Done |
| AI-02 | Как экспат, я хочу получить ответ на своем языке | Ответ на языке вопроса (RU/UA/ES/EN) | Done |
| AI-03 | Как экспат, я хочу видеть suggested questions | Предзаполненные вопросы для быстрого старта | Done |
| AI-04 | Как экспат, я хочу видеть форматированные ответы | Markdown рендеринг (заголовки, списки, ссылки, код) | Backlog |
| AI-05 | Как экспат, я хочу получить рекомендацию конкретного специалиста | AI интегрирован с каталогом, рекомендует листинги | Backlog |
| AI-06 | Как экспат, я хочу персонализированный чеклист | AI генерирует план на 30 дней по профилю (дети, питомцы, город) | Backlog |
4.6 Аутентификация
| ID | User Story | Acceptance Criteria | Статус |
|---|
| AU-01 | Как посетитель, я хочу зарегистрироваться через magic link | Email form, Supabase magic link, redirect после подтверждения | Done |
| AU-02 | Как пользователь, я хочу войти через magic link | Email form, Supabase magic link, сессия сохраняется | Done |
| AU-03 | Как пользователь, я хочу выйти | Кнопка sign out, сессия очищается | Done |
| AU-04 | Как пользователь, я хочу войти через Google/Apple | OAuth провайдеры | Backlog |
| AU-05 | Как платформа, я хочу защитить роуты | Dashboard и создание постов требуют auth, middleware редирект | Done |
4.7 Оплата и подписки
| ID | User Story | Acceptance Criteria | Статус |
|---|
| PY-01 | Как бизнес, я хочу видеть тарифные планы | Pricing page с 3 тирами, фичи, CTA | Done |
| PY-02 | Как бизнес, я хочу оплатить premium через Stripe | Stripe Checkout Session, redirect на success/cancel | Done |
| PY-03 | Как платформа, я обрабатываю webhook при оплате | checkout.session.completed -> апгрейд листинга в Supabase | Done |
| PY-04 | Как платформа, я обрабатываю отмену подписки | customer.subscription.deleted -> даунгрейд до basic | Done |
| PY-05 | Как пользователь, я хочу premium membership | Подписка за 9 EUR/мес, доступ к закрытым фичам | Backlog |
4.8 Интернационализация (i18n)
| ID | User Story | Acceptance Criteria | Статус |
|---|
| I18N-01 | Как экспат, я хочу видеть UI на своем языке | Все UI-строки переведены на 4 локали | Done |
| I18N-02 | Как экспат, я хочу переключить язык | Selector в хедере, URL меняется (/ru/ -> /en/) | Done (проверено E2E 2026-04-19 — работает на всех путях) |
| I18N-03 | Как поисковик, я хочу видеть hreflang | <link rel="alternate" hreflang="..."> для всех страниц | Backlog |
| I18N-04 | Как экспат, я хочу видеть корректный испанский | Все диакритические знаки на месте | Баг (~25 строк) |
5. Нефункциональные требования
5.1 Производительность
| ID | Требование | Целевое значение |
|---|
| NF-01 | Largest Contentful Paint (LCP) | < 2.5s |
| NF-02 | First Input Delay (FID) | < 100ms |
| NF-03 | Cumulative Layout Shift (CLS) | < 0.1 |
| NF-04 | Time to First Byte (TTFB) | < 800ms |
| NF-05 | Bundle size (JS) | < 200KB gzipped |
| NF-06 | Lighthouse Performance score | > 90 |
5.2 Безопасность
| ID | Требование | Текущий статус |
|---|
| NF-07 | Row Level Security на всех таблицах Supabase | Done (миграции) |
| NF-08 | CSRF-защита на POST-эндпоинтах | Не реализовано |
| NF-09 | Rate limiting на API (persistent, cross-instance) | In-memory (не production-ready) |
| NF-10 | Input validation (Zod) на server actions и API | Не реализовано |
| NF-11 | Content-Security-Policy header | Не реализовано |
| NF-12 | PII masking в логах (GDPR) | Не реализовано |
| NF-13 | Max message length на /api/chat | Не реализовано |
| NF-14 | Stripe webhook signature verification | Done |
5.3 Доступность (a11y)
| ID | Требование | Целевое значение |
|---|
| NF-15 | WCAG 2.1 Level AA | Все интерактивные элементы |
| NF-16 | Мобильная навигация | Hamburger menu < md breakpoint |
| NF-17 | Контрастность текста | Ratio >= 4.5:1 |
| NF-18 | Клавиатурная навигация | Tab order, focus visible |
| NF-19 | Screen reader support | aria-labels, semantic HTML |
5.4 SEO
| ID | Требование | Текущий статус |
|---|
| NF-20 | Unique title + description на каждой странице | Частично |
| NF-21 | OpenGraph + Twitter Card метатеги | Не реализовано |
| NF-22 | JSON-LD structured data | Не реализовано |
| NF-23 | Canonical URLs | Не реализовано |
| NF-24 | Hreflang alternate links | Не реализовано |
| NF-25 | Sitemap со всеми публичными страницами | Частично |
| NF-26 | robots.txt (noindex auth pages) | Частично |
5.5 Надежность
| ID | Требование | Текущий статус |
|---|
| NF-27 | Error boundaries (error.tsx) на всех роутах | Не реализовано |
| NF-28 | Loading states (loading.tsx) на всех роутах | Не реализовано |
| NF-29 | Not-found pages (not-found.tsx) | Не реализовано |
| NF-30 | Graceful degradation без Supabase (mock data) | Done |
| NF-31 | Graceful degradation без API keys (Stripe, Resend, Claude) | Done |
6. Модель данных
Таблицы Supabase
users
id UUID (PK, = Supabase Auth UID)
email TEXT (NOT NULL)
locale TEXT (DEFAULT 'ru')
has_pets BOOLEAN (DEFAULT false)
city TEXT
created_at TIMESTAMPTZ
listing_categories
id UUID (PK)
slug TEXT (UNIQUE)
name_ru TEXT
name_uk TEXT
name_es TEXT
name_en TEXT
icon TEXT
created_at TIMESTAMPTZ
listings
id UUID (PK)
user_id UUID (FK -> users)
category_id UUID (FK -> listing_categories)
name TEXT
description TEXT
city TEXT
phone TEXT
website TEXT
is_premium BOOLEAN (DEFAULT false)
is_verified BOOLEAN (DEFAULT false)
premium_tier ENUM (basic | pro | premium)
stripe_customer_id TEXT
stripe_subscription_id TEXT
created_at TIMESTAMPTZ
updated_at TIMESTAMPTZ
guides
id UUID (PK)
slug TEXT (UNIQUE)
locale TEXT
title TEXT
content_mdx TEXT
seo_description TEXT
published_at TIMESTAMPTZ
created_at TIMESTAMPTZ
forum_categories
id UUID (PK)
slug TEXT (UNIQUE)
name_ru/uk/es/en TEXT
description_ru/uk/es/en TEXT
icon TEXT
sort_order INT
created_at TIMESTAMPTZ
forum_posts
id UUID (PK)
category_id UUID (FK -> forum_categories)
user_id UUID (FK -> users)
title TEXT
content TEXT
is_pinned BOOLEAN (DEFAULT false)
reply_count INT (DEFAULT 0)
created_at TIMESTAMPTZ
updated_at TIMESTAMPTZ
forum_replies
id UUID (PK)
post_id UUID (FK -> forum_posts)
user_id UUID (FK -> users)
content TEXT
created_at TIMESTAMPTZ
updated_at TIMESTAMPTZ
Запланированные расширения
reviews — отзывы на листинги (rating, text, user_id, listing_id)
events — мероприятия сообщества (title, date, location, organizer)
user_profiles — расширенный профиль (avatar, bio, social links)
notifications — in-app уведомления
subscriptions — premium membership (user_id, stripe_subscription_id, plan)
7. API Endpoints
| Endpoint | Method | Назначение | Auth | Rate Limit |
|---|
/api/chat | POST | AI-ассистент (SSE streaming) | No | 10 req/min per IP |
/api/subscribe | POST | Email signup (Resend) | No | Нет (нужен) |
/api/stripe/checkout | POST | Создание Stripe Checkout Session | Yes | No |
/api/stripe/webhook | POST | Stripe event handler | Stripe signature | No |
/[locale]/auth/callback | GET | OAuth code exchange | No | No |
Server Actions
| Action | Файл | Auth | Назначение |
|---|
createListing | dashboard/listings/actions.ts | Yes | Создание листинга |
updateListing | dashboard/listings/actions.ts | Yes | Обновление своего листинга |
deleteListing | dashboard/listings/actions.ts | Yes | Удаление своего листинга |
createPost | community/actions.ts | Yes | Создание поста на форуме |
createReply | community/actions.ts | Yes | Ответ на пост |
8. Роадмап
Phase 0: MVP Launch (текущий)
Цель: Задеплоить рабочую платформу, начать собирать пользователей.
Phase 1: Production Hardening (Issues #29-61)
Цель: Сделать платформу production-ready. 5 итераций:
- Security & Architecture — rate limiter, validation, CSRF, error boundaries
- SEO — metadata, OG, hreflang, canonical, JSON-LD, sitemap
- UX & A11y — mobile nav, language selector, markdown в чате
- i18n & Code Quality — диакритика ES, перевод ошибок, cleanup
- Performance — next/image hero, N+1 queries, lazy mock data
Phase 2: Content & Growth (Месяцы 3-5)
Цель: Органический трафик, первые платные листинги.
Phase 3: Network Effects (Месяцы 6-12)
Цель: Сетевые эффекты, MRR 10k EUR.
Phase 4: Scale (Год 2)
Цель: Экспансия за пределы Валенсии.
9. Метрики успеха
North Star
"% пользователей, получивших помощь в течение 24 часов" — через AI, форум или каталог.
Ключевые метрики по фазам
| Метрика | Phase 1 (M3) | Phase 2 (M6) | Phase 3 (M12) |
|---|
| Email подписчики | 500 | 2,000 | 5,000 |
| MAU | 200 | 1,000 | 5,000 |
| Гидов опубликовано | 5 | 15 | 25 |
| Листингов в каталоге | 10 (mock) | 100 | 300 |
| Paying businesses | 0 | 20 | 100 |
| MRR (EUR) | 0 | 500 | 10,000 |
| Organic traffic (мес) | 100 | 500 | 5,000 |
| 30-day retention | — | 30% | 40% |
| NPS | — | 40+ | 50+ |
| Lighthouse Performance | 90+ | 90+ | 95+ |
10. Ограничения и допущения
Допущения
- Supabase free tier достаточен до 50k MAU
- Claude API costs останутся в пределах 50-100 EUR/мес при текущем трафике
- Гиды читаются из файловой системы (MDX), не из БД — миграция в БД при необходимости
- Один разработчик (Claude Code) + один product owner (Олег)
Известные ограничения
- Нет мобильного приложения — только responsive web (PWA в Phase 4)
- Нет real-time — форум обновляется при перезагрузке (Supabase Realtime в Phase 3)
- AI без векторной БД — keyword scoring RAG, не embeddings (достаточно для 5-15 гидов)
- Нет модерации — форум без ролей и фильтрации (Phase 3)
- Нет офлайн-режима — требуется интернет
Риски
| Риск | Вероятность | Impact | Митигация |
|---|
| Cold start (нет пользователей -> нет бизнесов) | Высокая | Высокий | Контент-first, Telegram-группа, mock данные |
| Основатель перегружен (Grid Dynamics + Futurist) | Средняя | Высокий | Claude Code автономия, 2-3 ч/день |
| Конкурент (InterNations, украинский стартап) | Низкая | Средний | Ниша + язык + pet-фокус = moat |
| GDPR нарушение | Низкая | Высокий | Supabase EU, CSP, PII masking |
11. Глоссарий
| Термин | Определение |
|---|
| NIE | Numero de Identidad de Extranjero — идентификационный номер иностранца в Испании |
| Empadronamiento | Регистрация по месту жительства в муниципалитете |
| SIP | Tarjeta Sanitaria Individual — медицинская карта |
| DN Visa | Digital Nomad Visa — виза для удаленных работников (с 2023) |
| RLS | Row Level Security — политики доступа к строкам в PostgreSQL |
| RAG | Retrieval-Augmented Generation — AI-ответы на основе контекста из документов |
| Magic Link | Вход по ссылке из email, без пароля |
| Листинг | Запись бизнеса в каталоге |
Документ создан 19 марта 2026. Обновляется по мере эволюции продукта.