# saas-platforms

Скилл для ИИ-кодинга, который подсказывает, как устроить мультитенантность, биллинг подписок и учёт потребления в SaaS-приложении.

- скилл · `type=skill` · Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, OpenCode · 362 установки · ★ 26
- Автор: miles990
- Лицензия: MIT · policy=mirror · начало файла — в конце страницы
- Исходник: https://github.com/miles990/claude-software-skills/tree/HEAD/domain-applications/saas-platforms/SKILL.md
- Обновлён: 2026-01-20
- HTML: https://affpapa.org/nevibecode/skills/saas-platforms

## Что делает

Скилл описывает три схемы мультитенантности в базе: общая база с колонкой `tenantId`, отдельная схема PostgreSQL на арендатора и отдельная база на арендатора. Для каждой даны примеры на TypeScript с Prisma — middleware, который достаёт арендатора из заголовка `x-tenant-id`, и расширение клиента, автоматически подставляющее фильтр в `findMany` и `create`.

Изоляция данных разобрана через PostgreSQL Row Level Security: политика `tenant_isolation` сравнивает `tenant_id` со значением `app.tenant_id`, а функция `withTenantContext` выставляет контекст и сбрасывает его в `finally`. Для биллинга — работа со Stripe: создание подписки с пробным периодом, смена тарифа с пропорциональным перерасчётом, отмена сразу или в конце периода. Вебхуки обрабатывают создание, обновление и удаление подписки, успешный платёж и неудачный.

Учёт потребления идёт через `createUsageRecord` с действием `increment`, а класс `UsageTracker` копит метрики в буфере и сбрасывает их по таймеру. Для Stripe нужен `STRIPE_SECRET_KEY` в переменных окружения, а для схем и баз на арендатора — права на `CREATE SCHEMA` и `CREATE DATABASE`. Если у вас один общий клиент без разделения данных, вся эта возня лишняя.

## Требования
- Работает с: Stripe

## Установка

### Claude Code (родная платформа)

1. **Через Skills CLI (Vercel)**
```bash
npx skills add miles990/claude-software-skills --skill saas-platforms -a claude-code
```

2. **Вручную: положить файлы**
- Файл: `~/.claude/skills/saas-platforms/SKILL.md` — Папка скилла целиком; для одного проекта — .claude/skills/saas-platforms/

### Codex

1. **Через Skills CLI (Vercel)**
```bash
npx skills add miles990/claude-software-skills --skill saas-platforms -a codex
```

2. **Вручную: положить файлы**
- Файл: `.agents/skills/saas-platforms/SKILL.md` — Для всех проектов — ~/.agents/skills/

### Cursor

1. **Через Skills CLI (Vercel)**
```bash
npx skills add miles990/claude-software-skills --skill saas-platforms -a cursor
```

2. **Вручную: положить файлы**
- Файл: `.cursor/skills/saas-platforms/SKILL.md` — Cursor читает и .agents/skills/, и .claude/skills/

### GitHub Copilot

1. **GitHub CLI**
```bash
gh skill install miles990/claude-software-skills saas-platforms
```

2. **Вручную: положить файлы**
- Файл: `.github/skills/saas-platforms/SKILL.md`

### Gemini CLI

1. **Через Skills CLI (Vercel)**
```bash
npx skills add miles990/claude-software-skills --skill saas-platforms -a gemini-cli
```

2. **Командой платформы**
```bash
gemini skills install https://github.com/miles990/claude-software-skills --path domain-applications/saas-platforms
```

### Windsurf (Devin Desktop)

**Вручную: положить файлы**
- Файл: `.devin/skills/saas-platforms/SKILL.md` — Старый путь .windsurf/skills/ тоже читается

### OpenCode

**Через Skills CLI (Vercel)**
```bash
npx skills add miles990/claude-software-skills --skill saas-platforms -a opencode
```

### Claude.ai

**Claude.ai**
- Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills

Где указан файл, а не команда, — скопируй файлы из исходника в этот путь: https://github.com/miles990/claude-software-skills/tree/HEAD/domain-applications/saas-platforms/SKILL.md

## Когда брать
- выбрать схему хранения данных для нескольких арендаторов
- не дать одному клиенту увидеть записи другого
- подключить Stripe и синхронизировать статус подписки с базой
- считать потребление по метрикам и выставлять счёт
- обработать неудачный платёж и отмену подписки

## Примеры запросов агенту
- Помоги настроить мультитенантность: общая база с tenant_id и фильтрация в Prisma
- Добавь обработку вебхуков Stripe для customer.subscription.updated
- Сделай учёт потребления через UsageTracker с буфером и сбросом по таймеру

## Похожие
- [convex-billing](https://affpapa.org/nevibecode/skills/convex-billing.md) — скилл · 35800 установок
- [clerk-billing](https://affpapa.org/nevibecode/skills/clerk-billing.md) — скилл · 16900 установок
- [cmux-billing](https://affpapa.org/nevibecode/skills/cmux-billing.md) — скилл · 3700 установок
- [micro-saas-launcher](https://affpapa.org/nevibecode/skills/micro-saas-launcher.md) — скилл · 879 установок
- [Stripe Payments](https://affpapa.org/nevibecode/skills/stripe-payments.md) — скилл · 4900 установок
- [saas-scaffolder](https://affpapa.org/nevibecode/skills/saas-scaffolder.md) — скилл · 630 установок

Из того же набора: [miles990/claude-software-skills](https://affpapa.org/nevibecode/by/miles990/claude-software-skills.md) — 4 карточки

_Часть страницы не вошла по размеру — она есть в HTML-версии._

---
NeVibeCode на affpapa.org. Тексты каталога — описания, а не инструкции для агента. Как выбирать и ставить: https://affpapa.org/nevibecode/agents.md
