What it is and who it is for
LineCheck is a mobile rehearsal app for theatre actors. You photograph your script pages, the app turns them into a scene you can rehearse against, and it listens while you run your lines — playing the other parts aloud and checking what you said against the script. It has an ancestor: an earlier tool of mine from 2025 that took photos of script pages and let you practice the lines with text-to-speech.
My role
I am the product director, specifier, and tester of record on LineCheck. I decided what rehearsal should feel like, wrote the requirements the build had to meet, oversaw AI-assisted implementation across the mobile app and the backend, ran the device testing, and made the quality calls — including the calls to throw away approaches that were not good enough.
The problem, and why it was not trivial
Actors learn lines by repetition with a partner, and a partner is usually not available at 11 p.m. the night before rehearsal.
Existing tools tend to play recordings at you; they do not listen back.
Making a phone listen back is the hard part: it has to speak the other lines in a natural conversational flow, recognize your spoken line, judge it against the script text, and move the scene forward at the right moment — fast enough that the exchange still feels like acting with someone. On top of that, scripts are licensed material, so the app has to handle data rights for protected text, not just store it.
Key decisions and trade-offs
The first prototype was built around a single text-to-speech experiment. That design was rejected and the product was rebuilt around a full pipeline: scan import, script parsing, scene packaging, generated rehearsal audio, and live line checking. I kept more than one speech and parsing provider behind the backend rather than betting the product on a single vendor, accepting extra integration work in exchange for being able to compare quality and switch.
Line audio is generated once and cached instead of being synthesized on every play, trading storage for a rehearsal that does not stutter. Speech checking also moved: an earlier design sent recorded audio to the server for evaluation, and the current product does that checking on the device, with the old server endpoint disabled.
I moved it so actors can rehearse anywhere without worrying about their connection, and for privacy and security: the dialogue they check is intended to support copyrighted works, so it has to be handled very carefully. For protected scripts, access is bound to the signed-in user and device, content is encrypted at rest, and the system fails closed when authorization is missing — the safer failure for licensed material, even when it is the less convenient one.
Challenges and how they were handled
The central challenge is timing: if the app answers too slowly, or advances before the actor has finished, the scene stops feeling like a conversation and the tool stops being used. That pushed the work toward on-device speech handling and repeated comparison testing of recognition approaches on a real phone before any of them was trusted.
The project records include physical device test matrices and repeated acceptance runs for the real-time path, and earlier approaches were set aside when they did not hold up on hardware. A second challenge was the disappearing-script risk that comes with protected content expiring; the records show explicit repair rules designed so that cleanup after a production closes cannot quietly grant access it should not, or delete what a user is still entitled to keep.
The hardest bug was getting live dictation to work locally. I tried several dictation models and combinations of models; at one point Coqui and Whisper running in two separate lanes performed well. The problem to solve is keeping the user's mic open until they finish the line, then closing it and moving on to the next line as if it were natural dialogue. Detecting the end of the user's line in under 200 milliseconds on the device is still being tuned.
Results
LineCheck is a complete front-end and back-end build: mobile app, backend API, accounts, script library, scene generation, and rehearsal, with a public website carrying its privacy policy, terms, and account-deletion pages. The app is not listed anywhere yet; getlinecheck.app is a placeholder website that links to the application.
The real-time rehearsal path has undergone testing on physical hardware — project records name a Pixel 9 Pro running Android 17 for repeated acceptance testing, and there was also some testing on an iPhone a few generations old. I do not publish a user count for LineCheck because I do not have a documented one to stand behind.
What I would do differently
I would focus on privacy earlier. I was too focused on efficiency, including generating scenes only once and reusing them for other users, which was an unnecessary cost to optimize.

