Text-to-speech goes live
Text-to-speech is out of beta — turn Khmer or English text into natural speech and download it as MP3.
- 🔊 Two voices — Sovann and Puthi — selectable per request via the
voiceslug onPOST /api/v1/tts - MP3 audio output, metered against the same audio-minutes pool as transcription — no separate quota
- Up to 1200 characters per request, Khmer-safe
- Live in the Playground: type a sentence, pick a voice, and hear it instantly — three free previews before sign-up
- Full Khmer + English API documentation, with a copy-paste
curlexample
Khmer everywhere + polish
Full Khmer consistency across the entire product, plus a round of tech-debt cleanup.
- Every page, dashboard screen, and email now renders consistently in Khmer or English
- Navigation and language switching hardened across mobile and desktop
- Accessibility and visual-consistency fixes throughout the marketing site and app
Rate limiting + Khmer localization
Two-layer rate limiting and complete Khmer localization across the platform.
- Edge rate limiting (Cloudflare) plus per-account audio-minutes quotas, with clear, friendly limit messaging
- A unified audio-minutes meter shared by transcription and speech
- Full English / Khmer localization across marketing, dashboard, emails, and error pages — crawlable Khmer SEO included
Cutover close-out + security
Verification and hardening after the move to doslarb.cloud.
- Organization-scoped access tightened so data never crosses tenant boundaries
- End-to-end live verification of authentication, transactional email, and speech-to-text
- Cleanup of retired infrastructure and configuration
Doslarb Cloud
We are now Doslarb Cloud, at doslarb.cloud.
- New name, new domain, and a refreshed brand across the product
- Clean-slate Firebase and Sentry setup on the new domain
- Payments verified end-to-end on the new platform
Quality + growth
Quality, growth, and platform polish.
- Dark mode restored across the app
- Two new subscription tiers
- Faster pages through smarter caching and SEO canonical links
- A broad UI/UX consistency pass
Complete gaps + marketing release
Closed open tech debt, shipped a 3-email dunning state machine, and executed the marketing-ready public release.
- Startup environment validation — Zod schema (
@t3-oss/env-nextjs) catches misconfigured secrets at build time and cold start; failed parse pins the previous Cloud Run revision - Sentry serverless capture —
serverlessCapture()helper wrapscaptureException+flush(2000)across ~30 server-side call sites; lazy-loaded Sentry feedback widget on every error page - Hydration-mismatch fix — OrgSwitcher / NotificationBell / Avatar root-cause-fixed via skeleton-swap (no
suppressHydrationWarning) - Structured 5xx error responses — every API error includes
trace_idfor one-click Sentry lookup; custom branded 404 + 500 pages preserve the Angkor Wat motif - Payment email recovery —
additionalPaymentEmailsfield with verify-link UI, 24-hour SHA-256 tokens, max 5 emails per organization;resolveOrgByEmailfalls back to alt-email when admin email doesn't match - Dunning state machine — 3-email series at day 0, day 3, day 7 driven by Cloud Scheduler; cancel-on-payment via NAS transaction success path; idempotency keys per stage per cycle
- Marketing launch — Lighthouse-green public pages with
@lhci/clias CI gate; sitemap, robots, JSON-LD; static OG cards across LinkedIn / X / Slack / Discord; PostHog cookieless analytics with an 8-event funnel and PII-free property allowlist; this hand-curated changelog with RSS / Atom / JSON Feed; independent Upptime status page onstatus.doslarb.cloud; ≥800-word launch announce post; 45-second Khmer → English demo video with km + en captions - ✨ Pricing update — Every paid plan now includes 2× the monthly audio minutes at the same price ($29 / $79 / $199), effectively halving the per-minute rate. Pay-per-use rate set to $0.06/min, aligned with subscription pricing math.
- 🧹 Removed PostHog analytics — zero third-party telemetry; per-page DevTools network shows no analytics requests.
NAS Zero Link payments + notification center
Replaced two payment integrations with a single consolidated gateway and shipped the in-app notification center.
- NAS Zero Link payment processor — replaces both Credyt (international) and Bakong KHQR (Cambodia) with a single Zapier-relayed flow; subscription state owned in Firestore, lifecycle driven by Cloud Scheduler
- Notification center — realtime bell with unread badge, desktop dropdown, mobile sheet, sonner toast, paginated
/dashboard/notificationsinbox, 5-category preference toggles in Settings - Billing-failure email + notification fan-out —
notifyAndEmail()dual-channel helper with 13-type registry, per-channel idempotency, 15-minute storm-window dedup, OPS-only short-circuit; cross-client verified across Gmail / Outlook / Apple Mail - Single-path NAS billing UI —
/dashboard/billingrewritten as the single NAS flow with subscription checkout (5 plans), wallet top-up (6 amounts $10–$1000), refund visibility, mailto support; 7-day grace period with renewal CTA - Refund safety — Cloud Monitoring alert policy on
nas_refund_normalize_failure(5-minute rolling SUM > 0 → email page); raw-payload capture deferred tov1.3 - Hard cutover — Credyt and Bakong code paths fully removed, Firestore rules updated, CI grep guard prevents legacy reintroduction
Production hardening + observability
Hardened the platform for production traffic with cryptographic webhook verification, end-to-end error monitoring, and reliable transactional email.
- Webhook security — dual-secret HMAC verification on the Credyt webhook with constant-time comparison; Bakong check route rewritten to close cross-organization replay risk
- Production deployment — Firebase App Hosting on
doslarb.cloudbehind Cloudflare WAF + rate limiting (100/300 requests per minute per IP) - Error monitoring —
@sentry/nextjsv10 instrumentation across server / edge / client / dispatcher; five-layer error boundary hierarchy with branded fallback pages - Transactional emails — Resend on
mail.doslarb.cloudsubdomain with verified SPF / DKIM / DMARC; 9 email types (welcome, billing receipt, password changed, plan change, 80% / 100% usage alerts and nudges, API key created / revoked) under a single Doslarb-branded layout - Performance — 60-second
/api/v1/transcribetimeout with504 processing_timeoutUX and an elapsed-time counter - Documentation —
DEPLOY-RUNBOOK.mdcovering bootstrap, deploy, rollback, secret rotation, and prod smoke
MVP — Khmer + English speech AI platform launches
The first AI speech SaaS platform purpose-built for Khmer and English ships to production.
- Authentication via Firebase session cookies — sign up, sign in, password reset
- Angkor Wat-inspired light + minimal design system with Khmer typography (Noto Sans Khmer)
- Multi-tenant organizations — invite teammates, role-based access (Admin / Developer), org switching
- API key system —
ds_sk_*format, SHA-256 hash-only storage, show-once reveal, per-key rate limits - Speech-to-text API —
POST /api/v1/transcribewith MP3 / WAV / M4A / OGG / FLAC / OPUS support, browser microphone via MediaRecorder - Text-to-speech API stub —
POST /api/v1/ttsreturns a 503 contract while we finish the engine - Usage metering — atomic Firestore counters, fail-fast 429 at plan limit, 5-tier plan enforcement
- Billing — Credyt (Stripe layer for international cards) + Bakong KHQR (NBC direct API for Cambodia), 5 plans, subscription + pay-per-use wallet
- Developer dashboard — usage analytics, billing management, in-platform API docs (curl / Python / Node.js), webhook CRUD with HMAC signing
- Public playground — 3 free transcription tries before login gate, file upload + live mic input
- Landing + public docs — Khmer narrative, pricing, transcribe API quickstart