Преминете към основното съдържание

Ценообразуване

Този документ описва ценовата стратегия на Dictaro, конфигурацията в Stripe и интеграцията с уебсайта.

Ценови нива

ХарактеристикаFreePro
Цена€0€9.99/мес или ~€99/год
Диктовка10 мин / цикъл, 5ч cooldownНеограничена (fair use: 720 ч/мес)
Поддържани езици2525
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 API
  • STRIPE_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:

ПараметърСтойностОписание
modesubscriptionРежим абонамент
customercus_...Stripe Customer ID (lazy created)
allow_promotion_codestrueРазрешава промо кодове
line_items1x price_idЕдин ценови ред
success_url/billing/checkout-success?session_id={CHECKOUT_SESSION_ID}&...URL при успех
cancel_url/billing/checkout-cancelURL при отказ
metadatadictaro_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Месечен абонамент
annualyearГодишен абонамент
yearlyyearАлтернативно име
yearyearАлтернативно име

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 (показвани на сайта):

  1. Daily dictation allowance
  2. 25 supported languages
  3. Windows system tray integration
  4. Customizable hotkey control
  5. Local audio processing
  6. No account required

Pro tier features (показвани на сайта):

  1. Unlimited monthly dictation *
  2. AI text cleanup
  3. Professional tone mode
  4. Reformulation mode
  5. Grammar correction
  6. CLI transcription
  7. 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

КритерийStripeWindows Store
Комисиона2.9% + €0.2515% (до 12%, после 8%)
КонтролПълен контрол върху checkoutMicrosoft контролира 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/месец на потребител.

Бъдещи ценови съображения

Потенциални промени

Отворени въпроси

  1. Lifetime лицензи — вече имат инфраструктура чрез license keys, но без Stripe интеграция за еднократно плащане
  2. Team план — множество потребители под един акаунт/фактура
  3. Regional pricing — различни цени за различни пазари (Stripe поддържа)
  4. AI credits — вместо BYOK, предлагане на вградени AI credits с markup
  5. Windows Store listing — възможност за продажба и чрез Store за по-голямо покритие, въпреки по-високата комисиона