We will be undergoing planned maintenance on Oct 7th 6:00AM UTC / Oct 7th 2:00AM ET

Inspiration

I didn't get into the university I wanted. I spent those years on my phone instead of studying.

So I tried app blockers. All of them did the same thing: made unlocking harder. Twenty push-ups. A math problem. A hundred steps.

I did them all, and unlocked anyway. That's the whole problem. If you can get past a lock, sooner or later you get past it. Making it harder fixes nothing, because the thing that needs fixing isn't how hard your phone is to open. It's that you don't want to work.

The only thing that ever actually made me want to work was other people. A friend posting that they were studying. Someone who had already made it talking about how they got there. No amount of friction ever did that.

So I built the blocker around that instead.

What it does

Every other blocker is trying to make your phone harder to reach, whether by adding friction or by blocking hard.

1% Lock is trying to do something else: make you want to go back to work.

It blocks. Apple's Screen Time API handles that part: the apps you pick, for as long as you choose. Nothing new there.

Then it gives the urge somewhere to go. Blocking your apps doesn't remove the urge to scroll. It only removes the destination, and an urge with no destination is what makes you unlock in the first place. So 1% Lock gives it one. Inside the app there is a feed, and every post is screened by AI. Gambling, junk food, gaming, nights out. All filtered out. What is left is people working. Studying. Training.

When the urge hits, you scroll here instead, and somebody studying at 2 a.m. makes you want to get back to work.

Unlocking is designed the same way. Before the lock starts, you pick what it will take to end it:

  • Declaration — write one line about what you'll do after the break. This is an implementation intention; the meta-analysis (Gollwitzer & Sheeran, 2006, 94 independent tests) puts the effect at d = 0.65
  • Feed — you have to look at five posts, three seconds each, before the unlock button appears. Scrolling past them doesn't count. Every post you see is about studying, training or working
  • Your image — the same five and three seconds, but with pictures you picked yourself and keep on the device. A role model, a goal, whatever works on you
  • Hard Lock — no way out until the timer ends (Pro)

None of these four is meant to be an obstacle. Push-ups make unlocking hard; these put something in front of you at the moment your willpower is weakest, to make you want to stay locked. And while you are looking, whether at the feed or at your own pictures, a button sits underneath the whole time, as prominent as the one that unlocks: "Actually, keep working."

Every blocker has a way out, and no developer can take it away. Delete the app and the blocks go with it, and no app on the App Store can stop you from deleting it. That is the limit of the whole approach: making the lock stronger can never be the fix. So instead of competing on how inventive the unlock could be, I put the work into making people want to keep going.

I don't try to close that exit, and I don't pretend that I have. What I can do is make leaving cost something, and make staying the easier choice.

How I built it

Alone, in SwiftUI, in about two months of real work.

  • Blocking — FamilyControls / DeviceActivity / ManagedSettings, with a custom ShieldConfiguration so the block screen shows your own goal and a quote instead of a generic warning
  • Feed & social — Supabase: Postgres with row-level security on every table, Edge Functions, Storage
  • Moderation — Claude, running a discipline-ethos filter on every post
  • Monetization — RevenueCat

Moderation had to be cheap enough to offer for free. Every post and comment is checked for two things at once: is it safe, and does it fit what the app is for. Unsafe posts are rejected. Safe posts that are off-topic, like a night out, stay out of the feed. Every check goes to Claude Haiku first, and only the ones Haiku is not sure about go to Sonnet. If someone appeals, Haiku and then Sonnet look at it again, and anything still unclear comes to me. A normal check costs under one US cent. Each account can post five times a day, so no single user can run up the AI bill.

RevenueCat is the source of truth for Pro. Scheduled locks, location locks and Hard Lock are Pro. The app logs in to RevenueCat with the same user ID as Supabase, so a purchase belongs to the account, not the phone. A webhook writes Pro status into the database, where users cannot change it themselves, and test purchases are ignored in production. Before a scheduled lock starts, the lock extension checks that status. The "3-day free trial" label only appears when RevenueCat says the user is eligible for it. I never wrote a single line of receipt validation.

Two problems came up before launch. In sandbox testing, buying Pro did not unlock anything: my code checked for an entitlement called "pro", the one in the dashboard was named "1% Pro", and the webhook was skipping every event without an error. And RevenueCat does not promise that webhooks arrive in order, so an old expiration could arrive after a new purchase and switch Pro off. The database now ignores any event older than the last one it applied.

I'm twenty, a university student in Japan, and I didn't come into this as a professional engineer. The subscription layer is the part most people my age assume is out of reach for one person working alone. It isn't out of reach, and RevenueCat is most of the reason why. I'd like more students in Japan to know that.

How the monetization is designed

Most Screen Time apps sit behind a hard paywall. I couldn't do that here. A social app behind a paywall ends up with nobody in it and nothing to look at.

So locking is free, permanently, and so is posting and scrolling. The profile is built out of cumulative lock time, streak, completion rate and rank. Somebody who has never been able to lock once has an empty profile and no reason to come back.

Pro sells automation rather than access. Scheduled locks and location locks are the only features that lock your phone without you choosing to at that moment. That is worth paying for; another unlock method isn't. Hard Lock is Pro because the competitors that have it put it there too.

That decision comes with a cost attached. Free users get the whole social side, and every post they make goes through an AI moderation call, on top of storage and feed queries. A new user adds that cost with certainty, and subscriptions do not necessarily grow in step with it. So I added ads, which are the part of the income that arrives with the user rather than with the subscription.

I was giving away far more for free than the blockers that sit behind a hard paywall, so I expected a low conversion rate and set the price low to match. It came in at around 17%, much higher than I had planned for. So I tested it and more than doubled the price. Conversion fell, and I am still testing to find the right price.

Challenges I ran into

A social network is a lot to build. Feed ranking, follows, comments, notifications, reporting, AI moderation, rate limits, access rules on every table. The blocking engine is the part Apple helps with; everything else I had to build and secure on my own.

The harder problem was a different one. Blocking apps does not make anyone want to work, and neither does making the lock stricter. Building something that does is where the real work went, and most of this app is an attempt at that.

I started where everyone starts. The first thing I built was camera-verified push-ups, because that is what every other blocker does. Then I realized I had just made the same mistake the app exists to fix: it makes unlocking harder, and it does nothing to make you want to work. I took it out. Getting from there to what is in the app now took far longer than writing any of the code did.

Most of the time went into one moment: the second before someone unlocks. Working out what to put in front of a person at the point where they most want to quit, and then getting it to actually hold them, was the hardest thing in this project. The declaration came out of research. I looked for something that had already been shown to work and that I could put into an app, which is how it ended up being an implementation intention. The others, the feed of other people's progress and the image you set for yourself, came out of my own experience and a long time spent reading around it. None of it was obvious, and none of it came quickly.

Those unlock screens are the last line of defense. Wanting to unlock at all is already a partial failure, and the rest of the app has to make that moment arrive less often. That is a separate design problem and it was not an easier one. Cumulative lock time sits on your profile the same way followers and likes do, as something you build up over time. That number, the ranking and the completion rate are all public, and the completion rate drops visibly when you end a session early. All of it is there so that you don't want to unlock in the first place, and it had to do that without becoming a punishment for the people who do.

Accomplishments that I'm proud of

As of today, 808 people have signed up. They have locked away 4,667 hours across 2,471 lock sessions and posted 301 times, and every post was screened by AI. 41 of them have paid for it.

About 7 in 10 timer locks run to the end. And people come back: 131 have locked five times or more, and 34 have locked twenty times or more.

The people using it are young. The median age is 19 and 87% are under 25. More than half said during onboarding that they spend six or more hours a day on their phone, and 231 of them said eight or more. Six hours a day is more than 90 full days a year.

This is the age that decides most of what comes after it, and these are the people locking their phones and taking some of that time back.

It is also a real product rather than a demo: on the App Store, with paying subscribers, changed repeatedly on user feedback, and built by one student. On the Japanese App Store it has an average rating of 4.8 from 26 ratings. I am entering it for the Next Gen Award and the RevenueCat Peace Prize.

What I learned

After launch I was improving the app on guesswork. I could see what people did: how many of the people who installed it ever started a lock, how many of the people who locked went on to subscribe, how many came back the following week. What I could not see was why, or what they wanted next. So I kept changing whatever I thought was wrong.

Then I made a developer account inside the app's own feed and started talking to users as myself. Requests came back that I would never have arrived at on my own, and acting on them has done more for the app than anything I picked out of the numbers myself.

What I learned is that data and users answer different questions. The numbers told me what was happening, but never what people actually wanted, and the only way to find that out was to ask them.

What's next for 1% Lock

Turning what users say into what actually ships. A mandala chart for breaking a goal down, a streak for posting and not only for locking. Those are the requests sitting in front of me now, and keeping that process running is the first thing.

But asking only reaches the people who are still here. The ones it stopped working for have already left, and they only show up in the data: sessions that get ended early, people who stop starting locks, people who stop opening the app at all. There is enough of that now to find the patterns, and once I know where it breaks I can build alternatives and test them against each other instead of choosing by taste. Price belongs in that too. I tested it once by more than doubling it, and I want to keep testing until I know what the right number actually is.

Further out: an alarm feature, task management, and an Android build so this isn't limited to people on iPhones. Working toward something is a lonely thing to do, and locking your phone only makes it lonelier. Adding those pieces is how this turns into what I actually want: one app that holds the whole day of anybody, anywhere, who is trying to get something done, with other people doing the same thing alongside them.

Built With

Share this project:

Updates

Submission history