Hero image for Bullwinkle

Bullwinkle

a comprehensive exploration of what it takes to create blended-language books at scale

Keywords
LLMsAI/MLObject-Oriented ProgrammingPostgreSQLRequirements gatheringSpecification writingWireframingPrototypingProduct design
Tools used
FigmaAWSDirectusPythonSpacy.ioNLTK

Background

Prismatext's MVP, dubbed Gringlish, was the first iteration of the blended-language concept. It reduced the time to create a blended-language book by 99%, but it still had limitations: output was limited to one variant per language, it was still comparatively slow, efforts to update the books were divorced from automation, and the system was not scalable. Bullwinkle set out, first and foremost, to offer a greater number of variants per language: from 1 to 27. It also reduced further the time to create by another 90%, allowed for nuanced control of translations, and can scale to any language pair.

Workflow schematic of Bullwinkle within the Prismatext ecosystem

Before writing any code, it's important to understand how Bullwinkle relates to the apps and services it interacts with.

Process

One of the luxuries of having an MVP like Gringlish was that it helped me identify key issues that needed to be addressed in the next iteration. Bullwinkle's specification document was, essentially, a merge of these issues as well as customer feedback we'd accrued over the previous years. From these documents came detailed wireframes, which formed the outline of the code that needed to be written. (These wireframes also came in handy when we submitted our patent application in 2023.) Once the path forward was clear, I began writing the first lines of code in what became the blended language codebase.

Diagram detailing footnote functionality

We built our own e-reader in part because our need for rich footnotes wasn't available in other e-readers.

Wireframes detailing the book processing pipeline in Bullwinkle

A visual workflow of book processing is necessary to understand how each step relates to the next, as well as informing the development of each module.

Python code for adding a book to Prismatext

The entire Bullwinkle codebase is written in Python, and covers a wide range of functionality, from EPUB processing to LLM integration.

Mockups showing what different foreign word densities look like on a page

Mockups demonstrating foreign word density levels on a page.

Takeaway

This was the most daunting project of my professional career. As the sole developer, it was left to me to determine the best way forward, how to handle setbacks, and how to communicate the progress to the rest of the team. I was fortunate in being able to solicit feedback from more experienced developers for specific aspects of the logic, and I learned a great deal about perseverance and the importance of a good support network.

© 2025 Zak Erving
built with ❤️ from scratch👨‍🍳