It started at home,
the night before a show.
DidiScore wasn't planned in a boardroom. It was built for one singer, by the person who sits next to her at the kitchen table.
My wife, the singer and songwriter Didimpress, is a professional musician. In a typical month she sings with several different bands: different repertoire, different keys, different arrangements and a different running order every night. Her entire book of music lives on an iPad.
For years that iPad ran the industry's leading score app. It is capable and feature-rich, and she was still not happy with it. It is built around the document, while her working life is built around the gig: tonight's setlist, this band's markings, the pedal under her foot, and the certainty that the next page will be there when she needs it.
The friction showed up in the same places every time. The same song needed different markings for different bands. Building tonight's running order was a chore. Nothing told her, before she walked on stage, whether everything was actually ready. And if the app misbehaved in the middle of a set, there was no plan B.
I design products for a living. I spend my days watching people fight with software and turning that into better tools. Watching the person I love fight with it late at night, before a show, was different. So I sat next to her, listened, took notes, and built her the app she actually needed. I named it after her. She became its first user, its sharpest critic and its most honest tester.
- Vocals, first user, toughest tester
- Didimpress
- Product, design, spec, build direction
- Denis Zastanceanu
- Recorded at
- The kitchen table, Bad Kreuznach, Germany
- Sessions
- 6 – 25 September 2026, twelve build phases
- Instruments
- Swift 6, SwiftUI, PDFKit, PencilKit, SwiftData. Native by conviction, no cross-platform layers.
- Engineered with
- AI agents writing code against a 1,600-line spec, under written rules, verified on the running app
- Takes
- 237 commits · 462 automated tests · 457 designed screen states · 19 verification reports
- Test score
- “Valerie”, straight from her book. The Soundexpress gig in the designs is a real one.
- “Thinner. As thick as a note, but semi-transparent.”Custom notehead, thin and wide highlighter presets at 30–40% opacity.
- “The eraser. Usually it erases. What is this?”Reproduced in an automated test, root-caused and fixed, with regression tests.
- Black ink appeared white on the dark stage.Ink always renders as ink on white paper, on stage and in the Emergency Book.
- “There should be two modes. Read mode and editing mode.”Named Read and Edit modes, Read by default, no accidental ink.
- “Maybe some kind of history…” with greyed-out undone steps.Change history with rollback and jump-to-page.
- “Controls, Hide. I didn't understand what Hide is. Maybe a cross?”The full-screen panel was rebuilt with a familiar close ×.
- “Leave for Now” read as closing the whole gig.Pause Performance and Finish Gig, each with a one-line explanation.
- A hard stop at the end of a song felt wrong.I reversed my own earlier decision: next page opens the next song.
“I don't just want to sing. I want to touch people.”
Professional singer and songwriter from Bad Kreuznach, Germany. She sings with the Soundexpress Bigband, performs as a soloist with gospel choirs in Wiesbaden and Mainz, and plays weddings, corporate events and private celebrations, solo, as a duo, with a three-piece band or a five-piece party band. She also writes and releases her own music. A big band on Friday, a gospel choir on Sunday, a wedding in between: that is exactly the life DidiScore is built for.
- KurhausStama-Ball, Bad Kreuznach, with the Soundexpress Bigband
- Spa gardensJazz Matinee, Bad Kreuznach
- MainzSoloist with New Spirit Gospel Choir and Downtown Bigband
- RingkircheChristmas concert with the gospel choir XANG, Wiesbaden
Product designer. AI-native DesignOps.
DidiScore began as a gift to someone I love. It became the clearest demonstration of how I work: research that becomes structure, opinionated product judgement, a real design system, engineering fluency and AI agents inside a disciplined spec → plan → build → verify loop. Real testing reversed some of my own decisions. I documented why, and the product got better.
“I built DidiScore so my wife could walk on stage with one less thing to worry about.”
- Never write to an imported PDF.
- A page turn never queries the database.
- Every page position is saved immediately, off the main thread.
- The Emergency Book is built in the background, never during a page turn.
- Preflight informs; it never blocks Start Performance.
- Stage changes edit tonight's order, never the planned setlist.
- Unreadable ink is preserved, never silently dropped.







