All writing

OpenAppLock and vibe coding

2026.06.19

OpenAppLock is an app blocker with some handy features to curb screen time usage. It is also the first time I’ve been this close to taking a vibe coded app to production.

The development process started out like this:

  • I started Xcode and Claude Code
  • I activated the built-in MCP integration in Xcode
  • I had it generate a list of requirements based on a recording
  • I let it run in auto mode for some number of hours
  • I installed the app on my phone, and played around with it

This video actually did the bulk of the work for me. Claude recognized I had ffmpeg installed on my system, and began extracting frames locally. From this, it got pretty far in creating a local backend and layering a frontend on top of it. This was the first insight: it was fairly easy for Claude to re-create the app because screen time blockers operate mostly on device. OpenAppLock is a fully-local app, and everything stays on-device. There is no backend to orchestrate, which is one less integration that I needed Claude to talk to.

Not only this, but the only major external API I had to talk to for this app was Apple’s screen time API. There were few dependencies even by the standards of a standalone iOS app.

I think what drew me to this project, and why I kept it as opposed to other vibe coding experiments, was that it was immediately useful to me. No, not all of the features worked on the first try, but the one most important to me (scheduled times for app blocking) did. Arguably, still not all of the features work, which is the real hurdle I’ll need to clear before putting it on the App Store. But I immediately saw how this app would fit into my personal life; then, I saw how this app could be useful to others.

Check it out if you’re interested! I can’t promise that everything works right now. But, I’ll get around to fixing the interactions with the screen time API + making the code better designed for humans to work on.