# Wishpad: monetization specification

## 1. Цель документа

Документ фиксирует идеи монетизации Wishpad на будущее.

Монетизация не входит в MVP. MVP должен быть спроектирован так, чтобы платные ограничения и donation-модель можно было добавить позже без переписывания базовой архитектуры.

Главный принцип:

- не монетизировать гостя напрямую;
- не мешать открытию публичной ссылки;
- не усложнять бронирование подарка;
- деньги брать за расширенные возможности владельца списка или за добровольную поддержку проекта.

## 2. Базовая Модель

Основная модель на будущее: freemium.

Тарифы:

- `free`;
- `plus`.

В MVP оплаты нет, но в коде желательно не зашивать лимиты жёстко в бизнес-логику. Лимиты должны быть вынесены в конфигурацию или application settings, чтобы позже администратор мог включить платную модель отдельной настройкой.

## 3. Admin-Настройка Платных Возможностей

Платные фичи должны включаться администратором через глобальную настройку.

Рекомендуемая future-настройка:

- `monetization_enabled`;

Когда `monetization_enabled = false`:

- приложение работает как бесплатный продукт;
- пользователи не видят paywall;
- ограничения plus/free не мешают обычному использованию;
- админка может показывать настройки монетизации как disabled/future section.

Когда `monetization_enabled = true`:

- backend применяет лимиты free/plus;
- frontend показывает состояние тарифа владельца;
- owner UI показывает upgrade prompt только в местах, где пользователь упёрся в платное ограничение;
- public guest UI не показывает paywall.

## 4. Первые Платные Фичи

### 4.1. Количество Списков

Free:

- до 5 активных wishlists.

Plus:

- максимальное допустимое количество wishlists по системному лимиту.

Текущий системный лимит:

- один пользователь может иметь не более 256 wishlists.

Правило:

- free limit применяется к активным спискам;
- деактивированные списки не должны блокировать создание нового активного списка, если продуктово решим считать только active wishlists;
- hard limit `256` остаётся защитным системным ограничением для всех тарифов.

### 4.2. Кастомизация Списков

Free:

- кастомизация публичной страницы wishlist недоступна;
- используется системный внешний вид Wishpad.

Plus:

- владелец может кастомизировать публичную страницу wishlist.

Возможные настройки кастомизации:

- цветовой акцент списка;
- обложка/фон списка;
- тема оформления;
- декоративный preset под событие;
- скрытие или уменьшение брендинга Wishpad в будущем.

Для первой версии plus достаточно минимальной кастомизации:

- accent color;
- optional cover image после появления upload/S3;
- theme preset.

### 4.3. Публичный Slug

Free:

- используется системный публичный slug/token;
- пользователь не вводит свой slug.

Plus:

- владелец может ввести custom public slug.

Пример:

- free: `https://wishpad.me/wishlist/7Nf8x...`;
- plus: `https://wishpad.me/wishlist/anna-birthday`.

Правила для custom slug:

- slug уникален;
- slug не должен совпадать с reserved routes;
- slug должен быть нормализован;
- slug должен быть безопасен для URL;
- смена slug не должна раскрывать статусы бронирования владельцу;
- старый системный token можно сохранить как внутренний stable identifier, даже если публичный URL использует custom slug.

Рекомендация:

- не заменять `public_token` полностью;
- добавить отдельное поле `public_slug` в будущем;
- публичный resolver должен уметь находить wishlist по `public_slug` или `public_token`.

## 5. Модель "Поддержать Проект"

Отдельная мягкая модель монетизации: добровольная поддержка проекта.

Цель:

- дать пользователям возможность поддержать Wishpad без подписки;
- не блокировать функции;
- не создавать давления на владельцев и гостей.

Возможные варианты:

- one-time donation;
- monthly supporter;
- yearly supporter;
- early supporter badge в owner UI;
- страница `Поддержать проект`;
- ссылка в owner settings;
- ненавязчивый пункт в footer/menu.

Правила UX:

- не показывать donation prompt гостям во время бронирования;
- не показывать modal paywall;
- не мешать созданию или просмотру wishlist;
- текст должен быть спокойным и честным;
- donation не должна обещать функций, если это именно поддержка, а не тариф.

Пример текста:

> Wishpad можно использовать бесплатно. Если проект оказался полезен, вы можете поддержать его развитие.

## 6. Что Не Делаем На Старте

Не рекомендуется для ранней версии:

- реклама на публичных wishlist pages;
- обязательная оплата для гостей;
- paywall перед бронированием;
- агрессивные upgrade prompts;
- скрытая подмена ссылок на affiliate без явного уведомления;
- продажа данных пользователей или гостей.

## 7. Future Monetization Ideas

Дополнительные идеи на будущее:

- affiliate/referral links для маркетплейсов;
- загрузка изображений в S3-compatible storage как часть plus;
- несколько изображений на подарок;
- расширенные email/push notifications;
- красивые шаблоны под события;
- B2B/workspace для команд и корпоративных подарков;
- кастомный домен для публичных страниц;
- экспорт списка;
- приоритеты, категории и расширенная организация подарков.

Эти идеи не входят в первые платные фичи и должны рассматриваться отдельно после MVP.
