All projects
Client & Production Projects

Speechise An AI text-to-speech platform, migrated onto a self-hosted voice engine and a cleaner backend architecture.

A full technical modernization — migrated the frontend to Next.js, restructured the backend around Onion Architecture, replaced a third-party TTS provider with a self-hosted Chatterbox-based voice service, and built a Chrome extension that reads any web page aloud.

Speechise reading a passage of Alice in Wonderland aloud, highlighting the paragraph being spoken

Client / Project

Speechise

Industry

SaaS — AI text-to-speech / voice generation

My Contribution

  • Next.js frontend + i18n
  • Onion Architecture backend restructuring
  • PostgreSQL migration
  • Stripe subscriptions & webhooks
  • TTS migration: Google TTS → self-hosted Chatterbox
  • Voice research & selection
  • Chrome extension (Manifest V3)
  • Content strategy & SEO
Speechise text-to-speech editor for turning any text into audio

The Brief

Speechise is an AI text-to-speech platform, rebuilt around a modernized stack and a move away from its dependency on a third-party TTS provider.

Built with: Next.js, TypeScript, C#, PostgreSQL, Onion Architecture, Stripe, Chatterbox, Chrome Extension (Manifest V3)

Problem

The product ran on Google's TTS service and an older backend structure that made ongoing feature work harder than it needed to be. Depending on a third-party TTS provider limited control over voice quality, cost, and roadmap, and the existing architecture wasn't organized in a way that supported continued evolution cleanly.

Solution

Migrated the frontend to Next.js with i18n from the outset, restructured the backend around Onion Architecture, and moved persistence to PostgreSQL. Set up Stripe subscriptions with self-built webhook handling. Researched viable alternatives to Google TTS, then helped design and build a self-hosted text-to-speech service based on Chatterbox — including researching and selecting the voices it would ship with — and migrated the product onto it. Also built a Chrome extension that brings the same voice engine to any web page: it pulls the readable text out of the page, detects its language, and reads it aloud from the browser's side panel, sharing sign-in and playback logic with the main site. It is currently being prepared for its Chrome Web Store release.

Feature direction, content, and SEO work were part of the same scope — deciding what to build, improve, or drop rather than working from a fixed spec.

Key Features

Paste text or upload a document, and Speechise reads it aloud on the self-hosted voice engine, highlighting each sentence as it's spoken.

Speechise with a whole eBook uploaded as a document, ready to be read aloud from its first chapter

Voices in more than twenty languages, with the language detected automatically from the text.

Speechise voice language picker listing more than twenty languages

A Chrome extension that reads any web page aloud from the side panel, highlighting each sentence as it goes.

Speechise Chrome extension reading a Wikipedia article aloud from the side panel, highlighting the sentence being spoken

Technical Approach

  • Frontend: Migrated to Next.js with i18n built in from the start.
  • Backend: Restructured around Onion Architecture for clearer separation between domain logic and infrastructure.
  • Database: Migrated to PostgreSQL.
  • Payments: Stripe subscriptions, with webhook handling implemented directly.
  • Text-to-speech: Replaced Google TTS with a self-hosted service built on Chatterbox — including voice research and selection — removing the dependency on a third-party provider.
  • Browser extension: a Manifest V3 Chrome extension — readable-text extraction with Mozilla Readability, audio played through an offscreen document (MV3 service workers have no audio APIs), upcoming sentences prefetched so playback doesn't stall between fragments, PDF support through a custom pdf.js viewer, and playback logic shared with the web app through a common package.

Challenges

Replacing a third-party TTS provider mid-product

swapping Google TTS for a self-hosted Chatterbox-based service meant validating voice quality and reliability before cutting over, without disrupting the existing product.

Restructuring the backend without stopping feature work

moving to Onion Architecture while the product was still live meant untangling existing logic incrementally rather than pausing for a rewrite.

Playing audio from a Manifest V3 extension

MV3 moves background logic into a service worker with no DOM or audio APIs, so synthesis, playback, and the side-panel UI had to be split across a service worker, an offscreen document, and the panel itself, coordinated through messaging.

Choosing voices for a self-hosted service

with no vendor catalog to pick from, voice selection had to be researched and evaluated directly.

My Role

Covered the technical modernization of Speechise: the Next.js/i18n frontend migration, the Onion Architecture backend restructuring, the PostgreSQL migration, Stripe subscriptions and webhooks, and — the core of the project — replacing Google TTS with a self-hosted Chatterbox-based service, including voice research and selection. Also built the product's Chrome extension and drove content and feature decisions alongside the technical work.

Conclusion

Speechise moved from depending on a third-party TTS provider to running its own voice engine — a shift that gave the product real control over voice quality, cost, and roadmap instead of being limited by someone else's API. Combined with a modern Next.js frontend and a backend rebuilt around Onion Architecture, the product came out of this stretch technically self-sufficient in a way it wasn't before, with its own foundation to keep building on.

Real products, practical engineering, and problems worth solving.

Selected work across .NET, full-stack SaaS, AI integrations, developer tooling, React, React Native, and more.

Get In Touch