Time limits, baking

I'm working on a fourth kind of rule: time limits. You give an app thirty minutes a day, and when they're spent, the shield comes down until midnight. It's only on my phone for now. Counting minutes reliably on iOS is trickier than I expected, and I'd rather let it bake.

Borrowed quotes

When Cactus asks you to type a quote to unlock a rule, the words used to be mine. They aren't anymore.

I swapped them for nine lines about attention, silence, and the present moment, from Woolf, Thoreau, Pascal, Weil, Marcus Aurelius, Dillard, and Rilke. Each one is credited under the line as you type.

Set in stone

I added a toggle called Set in stone, for the rules I know I'll try to talk my way out of.

Flip it, save, and the rule is sealed until its end date. You can't edit it, can't delete it, can't remove apps from it. Adding more is the only change allowed. Breaks still work, because a rule with no way out isn't a rule, it's a trap.

Block a website from Safari

Cactus can now block websites, straight from the page you're trying to escape.

Share from Safari, tap Cactus, pick a rule, done. If the rule is running, the site is blocked before you can refresh it. Share it again to remove it, unless the rule is active, in which case no. That's the point.

If you'd rather type, the rule form takes websites directly, with a folded-away list of the usual suspects.

Emergency mode

I've built a new mode. I call it emergency mode for now. I thought it'd be cool to stop the phone altogether.

Emergency mode locks everything except a few apps you choose ahead of time: Messages, Maps, whatever you actually need. One tap in.

I originally built it to only block what your rules already covered, and when I tried it on my own phone it felt broken. Everything else was still right there. So I flipped it: block it all, let a few things through.

Graduated friction

I noticed I was taking breaks a little too easily, so I made them cost something.

The first break of the day is a tap. The second asks you to type part of a quote. From the third on, the whole thing. Each rule counts its own breaks, and everything resets at midnight.

Frosted glass

The blocking screen used to be a solid sheet of color. Now it's frosted glass. The app you tried to open is right there behind it, blurred, with the message on top.

The lock icon got redrawn too. It was being scaled up from a small image and arrived soft, and now it's crisp.

Vacation mode

Sometimes you don't want a rule forever, just until the end of the trip.

So rules can now carry an end date. Set it before you leave, pick the day you're back, and the rule retires itself when the trip is over. It wears a little rainbow glow while it runs, and the blocking screen tells you when it ends.

Always on

Cactus rules used to live on a schedule: these apps, these hours. Now a rule can simply be always on, blocked all the time until you take a break or delete the rule.

It's the mode I use for the apps I don't want a schedule for. I just don't want them.

Step by step

Setting your first rule used to drop you into the full rule form, every option at once. It's now a flow with one question per screen: which apps, then when, then how much of a break budget you get.

Existing rules keep the regular form. The flow is only for the first one.

The fifteen minute floor

You can't block an app for five minutes. Apple's scheduling framework rejects any window shorter than fifteen, and Cactus used to let you save one anyway.

The form now stops you with "Must be at least 15 minutes long".

A choice of icons

Cactus can change its icon now. Alongside the default spark there are two alternates, one called Grow and one called Plant, and a sheet in the app to pick from.

A ticking card

Rule cards tick now. Each one counts down to its next change, the moment a block starts or lifts, live to the second.

Past 24 hours the countdown gives up on hours and just says "3 days".

The midnight bug

A rule that runs overnight crosses midnight, and Cactus treated each day it touched as a separate block. When the first one ended, the shields came down in the middle of the night, hours before the rule was done.

Consecutive days now merge into one continuous block. A rule set for Friday and Saturday, 7pm to 6:55pm, is one block instead of two, and the shields stay up until it actually ends.

Tips instead of a manual

I don't want a help section, so Cactus explains itself in passing. The first time you create a rule, pause one, or come back from a pause, a small sheet tells you what just happened. Each tip shows once and never again.

Meet Cactus

The screen time app I've been prototyping has a name now: Cactus.

I built it because I didn't want streaks or guilt or another subscription. Just something small and prickly between me and the apps I asked it to guard.

More than one rule

The prototype had a single hardcoded rule. Now rules are a list, each with a name and its own schedule, running independently of the others.

The old single rule migrates over on its own the first time you open the new version.

Surviving a reboot

Three days in, I found the first hole in the wall: restarting the phone. iOS clears every shield on reboot, and the schedule won't fire again for a window that's already underway, so a block you were in the middle of never came back.

Cactus now checks on launch whether a rule should be active and puts the shields back itself.

Before the name

Before Cactus was Cactus it was a project called Quiet, and it did exactly one thing. You picked apps and a window of hours, and iOS put a shield over them until the window closed.

There was one rule, and only one. I wanted to know if Apple's Screen Time APIs would actually let me build the blocking part before building anything around it. The form for a second rule came three days later.