Engineering Notes

Why we built a desktop app on local Flask + browser UI instead of PyQt or Electron

When you double-click WP Maintenance Manager, it opens a browser tab — and the entire UI lives inside that tab. No native window is created. It’s an unusual structure for a first-time user, and the natural question is: “why a browser?” That choice was an intentional design decision when building a Python desktop application. Here’s the comparison that led to it, and the side effects of the choice. Four realistic options For a WordPress maintenance automation tool, four implementation styles were practical: Approach UI Distribution size Dev cost Per-OS extra work Native (Swift / WPF) OS-native windows Small–medium High (separate impl per OS) Heavy PyQt / PySide Qt widgets Medium …

Read more
Engineering Notes

Cross-machine credential backup: a security-vs-portability trade-off we navigated

Once you’re maintaining 50+ WordPress sites from a single tool, the volume of credentials you accumulate climbs fast. Per-site admin passwords, SSH credentials and passphrases, the SMTP password used to send notification mail, server profiles ── all of these need to live somewhere reliable, and you need to be able to move them to a new machine without retyping fifty entries by hand. We added that “back up everything to a ZIP, restore on the new machine” capability to WP Maintenance Manager early on. Building it taught us a clear lesson: “a backup that works” and “a backup that travels” are two different design problems. This post is an honest …

Read more
Engineering Notes

When a macOS desktop app refuses to restart — LaunchServices and the Flask-server pattern

WP Maintenance Manager ships as a desktop app with an unusual structure under the hood: a local Flask server with a browser-rendered UI. Double-clicking the app icon starts the server, opens the user’s default browser at http://127.0.0.1:<port>/, and the management UI lives in that tab. The pattern fits well for tools that need rich admin UIs without the complexity of a full Electron build, and it lets us reuse standard web stack assets. Once the app reached real users on macOS, however, we got a recurring report: “I closed the browser tab, and now the app won’t restart.” The investigation led us not to a code bug, but to a …

Read more