Ценообразуване
Този документ описва ценовата стратегия на Dictaro, конфигурацията в Stripe и интеграцията с уебсайта.
Ценови нива
| Характеристика | Free | Pro |
|---|---|---|
| Цена | €0 | €9.99/мес или ~€99/год |
| Диктовка | 10 мин / цикъл, 5ч cooldown | Неограничена (fair use: 720 ч/мес) |
| Поддържани езици | 25 | 25 |
| System tray | Да | Да |
| Hotkey контрол | Да | Да |
| Обработка на аудио | Локална | Локална |
| AI text cleanup | Не | Да (BYOK) |
| Professional tone | Не | Да |
| Reformulation | Не | Да |
| Grammar correction | Не | Да |
| CLI transcription | Не | Да |
| Пробен период | - | 7 дни (без кредитна карта) |
| Регистрация | Не е задължителна | Задължителна |
* Fair use лимит: до 720 часа на месец.
Stripe конфигурация
Продуктова структура
Environment variables:
STRIPE_PRODUCT_ID— ID на Stripe продуктаSTRIPE_SECRET_KEY— Secret key за Stripe APISTRIPE_WEBHOOK_SECRET— Webhook signing secret
PricingService
Сървърът използва PricingService за динамично извличане на цени от Stripe:
PlanInfo структура:
type PlanInfo struct {
PriceID string // Stripe price ID (напр. "price_1Abc...")
Interval string // "month" или "year"
Amount int64 // В най-малката единица (999 = €9.99)
Currency string // "eur"
FormattedPrice string // "€9.99"
}
Cache характеристики:
- TTL: 5 минути (
cacheTTL: 5 * time.Minute) - Thread-safe:
sync.RWMutex - Double-check locking при refresh
Поддържани валути:
eur→ символ€usd→ символ$gbp→ символ£- Други → ISO код + интервал (напр.
BGN 9.99)
Checkout Session параметри
При създаване на Checkout Session:
| Параметър | Стойност | Описание |
|---|---|---|
mode | subscription | Режим абонамент |
customer | cus_... | Stripe Customer ID (lazy created) |
allow_promotion_codes | true | Разрешава промо кодове |
line_items | 1x price_id | Един ценови ред |
success_url | /billing/checkout-success?session_id={CHECKOUT_SESSION_ID}&... | URL при успех |
cancel_url | /billing/checkout-cancel | URL при отказ |
metadata | dictaro_user_id | За свързване с вътрешен потребител |
Промоционални кодове
- Промо кодовете се създават в Stripe Dashboard
- Активирани в checkout чрез
AllowPromotionCodes: true - Могат да бъдат процентни или фиксирана сума
- Могат да имат срок на валидност и лимит на използвания
- Не изискват промени в кода — управляват се изцяло от Stripe
Monthly vs Annual ценообразуване
Изчисляване на отстъпка
Уебсайтът динамично изчислява процента отстъпка при годишен план:
// website/src/lib/stripe.ts
export function getSavingsPercent(data: PricingData | null): number {
const monthly = data?.plans.find((p) => p.interval === "month");
const annual = data?.plans.find((p) => p.interval === "year");
if (!monthly || !annual) return 17; // fallback
return Math.round((1 - annual.amount / (monthly.amount * 12)) * 100);
}
Примерно изчисление:
- Месечна цена: €9.99 x 12 = €119.88/год
- Годишна цена: ~€99/год
- Отстъпка:
1 - (9900 / (999 * 12))= ~17%
Интервали на клиента
Клиентът може да изпрати следните стойности за interval:
| Клиентска стойност | Stripe interval | Описание |
|---|---|---|
monthly (default) | month | Месечен абонамент |
annual | year | Годишен абонамент |
yearly | year | Алтернативно име |
year | year | Алтернативно име |
Mapping в BillingHandler.CreateCheckout:
stripeInterval := "month"
switch body.Interval {
case "annual", "yearly", "year":
stripeInterval = "year"
}
Уебсайт — ценова страница
Архитектура
Build-time fetching:
- Цените се извличат от licensing API при build на сайта
- Ако API не е достъпен → fallback стойности: €9.99/мес, €99/год, 17% отстъпка
- Цените се вграждат в HTML като
data-monthlyиdata-annualатрибути
Компонент Pricing.astro
Free tier features (показвани на сайта):
- Daily dictation allowance
- 25 supported languages
- Windows system tray integration
- Customizable hotkey control
- Local audio processing
- No account required
Pro tier features (показвани на сайта):
- Unlimited monthly dictation *
- AI text cleanup
- Professional tone mode
- Reformulation mode
- Grammar correction
- CLI transcription
- Bring your own API key
UI елементи:
- Monthly/Annual toggle с JavaScript
- Процент отстъпка за годишен план (
Save {percent}%) - "7-day free trial -- no credit card required" текст за Pro
- Бадж "Most Popular" на Pro плана
- Fair use disclaimer с линк към Terms of Service
Интернационализация (i18n)
Ценовата страница поддържа превод чрез t и common props:
tr("heading", "Simple,")— заглавиеtr("pro.period", "/month")— периодtr("toggle.save", "Save {percent}%")— отстъпка- Fallback стойности на английски за всички ключове
Защо Stripe, а не Windows Store Commerce
| Критерий | Stripe | Windows Store |
|---|---|---|
| Комисиона | 2.9% + €0.25 | 15% (до 12%, после 8%) |
| Контрол | Пълен контрол върху checkout | Microsoft контролира UX |
| Webhooks | Пълна webhook система | Ограничени callbacks |
| Customer Portal | Вграден self-service | Няма |
| Промо кодове | Вградена поддръжка | Ограничена |
| Analytics | Детайлна Stripe Dashboard | Базова |
| Гъвкавост | API за всичко | Store ограничения |
| Multi-platform | Работи навсякъде | Само Windows Store |
Основен довод: При €9.99/мес Stripe комисията е ~€0.54, докато Windows Store би взел ~€1.50 — разлика от ~€1/месец на потребител.
Бъдещи ценови съображения
Потенциални промени
Отворени въпроси
- Lifetime лицензи — вече имат инфраструктура чрез license keys, но без Stripe интеграция за еднократно плащане
- Team план — множество потребители под един акаунт/фактура
- Regional pricing — различни цени за различни пазари (Stripe поддържа)
- AI credits — вместо BYOK, предлагане на вградени AI credits с markup
- Windows Store listing — възможност за продажба и чрез Store за по-голямо покритие, въпреки по-високата комисиона