Narro
Narro was a service I operated from 2014-2023 and a company I operated from 2016-2023 that turned your reading list or blog into a podcast. It was the best way to listen to the internet. As one user said: “Pretty much the best thing to happen to your morning commute since the iPod.”
For readers and consumers, it provided a way to send articles, ebooks, PDFs, videos, and plain text to a single source and have them transcribed via text-to-speech into a personal podcast.
For publishers, it provided a way to programmatically turn a blog or other feed into a brandable podcast for their audience. Public podcasts also came with audience engagement and demographic metrics.
For advertisers, it offered the ability to upload ads and bid on placement for them into semantically-relevant audio readings for free accounts on the platform. Ad placement also came with click tracking and audience measurement.
History
I had a long commute into my first job in Chicago. Somehow I figured out how to pipe text into the say
command on my Mac OSX laptop. I would manually extract text from articles I wanted to read online, pass that into a script I wrote to use this text-to-speech command, and then save the result into an audio file. I would upload those audio files into my iPod and listen to them on my commute. This was in 2013.
Soon, I was experimenting with Festival TTS, building a Node.js API and server so that I could send copied text into speech synthesis via API. I paid a Mac Mini colocation company to host a PHP script so that I could use the Mac speech synthesis tooling as an API. No good, performant TTS APIs existed in the ecosystem at this time. 2-3 years later Amazon and eventually Google would start offering TTS APIs and voice agents.
In 2014, I had gotten a good article text extraction algorithm written and opened up Narro as a SaaS tool where anyone could sign up and then use a bookmarklet to send any public web page for text scraping and text-to-speech synthesis. Users could select a voice, reading/speaking speed, and more. After a free trial, users could get unlimited readings for a $3/mo subscription (processed via Stripe’s brand new subscription billing model). Each account came with a podcast URL to listen to the resulting readings. This was the first real version of Narro!
From there, I continued adding more voices, natural language processing, language detection and localization, better text extraction from more sources, etc. Eventually Amazon released their Polly TTS engine and many more voice options became available. I built out a public API, many integrations into automation services, article ingestion sources, mobile phone apps, and a Chrome extension.
In 2016 Stripe launched a beta of their Atlas program and invited me to incorporate Narro as an initial member. Narro the corporation was formed and it started gaining more subscribers. Brand marketers had discovered Narro and started using the RSS feed ingestion to turn topical blogs into branded podcasts. I built out the advertisement model and onboarded an advertiser, as well as built out an audience metrics system for reporting engagement. I increased the subscription price to $5/mo to support more expensive speech synthesis.
Over the next few years, Narro’s feature set grew as more TTS engines became publicly available, voices became more realistic and palatable, and people became more acquainted with their computers speaking to them. Soon, costs became greater for Narro’s most prolific users and so I changed the pricing model to be usage-based instead of a flat monthly subscription.
Heading into the 2020s, Narro’s feature set was pretty complete for what users needed. Spam accounts had also discovered Narro as a way to create podcasts and backlink or otherwise promote scams (I wrote a deep-dive into one example). Combating spam became a major time and profit sink for me operating the service.
In 2022 I decided to shut down Narro. Operations ceased in December 2022 and the business was wound down in January 2023. Read more here:
What I Learned
Early on, Narro was a prime vehicle for me learning new languages (Node.js, Go), pricing theory, customer support, interface design, and much more.
Later I learned about incorporating a business, corporate taxes and finance (I filed most tax years myself), and a taste of the fees/work required to run a corporation.
I taught myself iOS and Android development, database re-platforming strategies, PostgreSQL performance optimization, frugal computing, domain driven application design, and how to combat spam accounts on the modern web. I was the only developer and only operator for the entire life of Narro, so I learned how to deploy and scale the service and its components as it grew.
Numbers
- Over $2k in monthly revenue at Narro’s peak
- 45 thousand Narro accounts
- ~1.5 million readings generated through Narro
- Over 3.5TB of generated audio
- 2GB of uploaded files to generate readings
- Over 3,000 commits to Narro’s codebase
- 10 open-sourced libraries and projects (sponsor ongoing development on GitHub)
Design & Branding
The logo was originally designed by my friend Josh Martin. The ‘N’ is supposed to imitate a play/pause button, as is the center of the ‘o’.
All other site, app, and interface designs were built and hamfistedly refined by myself. The branding and tone was familiar, brief, and focused on the fact that it was a one-person service/company. At the bottom of this page are selections of screenshots from the interfaces.
Technology Stack
Initial versions of Narro used:
- PHP and Node.js for server logic
- MongoDB for storage
In 2017 Narro outgrew MongoDB’s aggregating abilities (for what I wanted to pay) and so I migrated to PostgreSQL. For most of its life Narro’s stack was:
- Application logic written in Node.js
- Podcast server written in Go
- Database storage in PostgreSQL
- Redis for background queues
- Android app written in Java
- iOS app written in Objective-C and then rewritten in Swift
- Chrome extension written in JavaScript
- Inbound and outbound email through Postmark
- Blog hosted by Tumblr
- Source code hosted in GitHub
- Status page and API documentation hosted in GitHub Pages
- Application servers and databases hosted in Heroku
- Generated audio and uploads/assets hosted in AWS
- Text-to-speech integrations with Amazon, Google, Microsoft, and others
API & Ecosystem
I tried to make Narro a good exemplar of an open player in a larger ecosystem. I opened up Narro’s public API in 2016, then used that exact same API to build all future features, apps, and integrations. All of Narro’s apps and integrations were OAuth API clients the same as any others.
Narro was integrated into IFTTT, allowing users to create and remix their own applications on top of the base functionality (which they definitely did). Several users made their own API clients and built services on top of Narro.