Native modules vs. Electron
The database and keychain libraries are native modules compiled against Node's ABI — and Electron ships its own. The result was a wall of ERR_DLOPEN_FAILED errors every time the environment shifted. The fix was a proper rebuild pipeline that recompiles the native modules for Electron's ABI, plus unpacking them from the app archive at package time. Tedious, invisible to users, and completely mandatory.
The free trial is bypassable — on purpose
Trial enforcement is local, which means someone determined enough can reset it with a clock change or a reinstall. I could have built a phone-home system to stop that. I didn't, and the tradeoff is documented in the code: the paid unlock validates server-side and can't be forged, and that's the part that matters. Knowing which battles not to fight is an engineering decision too.
A security tool can't overpromise
The hardest part wasn't a bug — it was wording. A tool like this could easily print "Your app is secure ✓" and make users feel great. It would also be a lie. The report language took real deliberation: findings are ranked by severity, and a clean pass says exactly what was checked and nothing more. That same standard carries into my client audit reports.