◆  A. Lech Schiedam  51.92°N 4.39°E

Cleared

A quit tracker for cigarettes, heated tobacco, vapes and nicotine pouches that works with the aeroplane mode on. No account, no ads, nothing to buy, and no way for it to talk to me about you.

Everything else wanted my money

I tried to quit smoking, and did what everyone does: went looking for an app to count the days. Every one I found either cost money up front or handed me the counter for free and then sold the useful parts back to me one micropayment at a time — the timeline, the milestones, the thing that tells you why day three feels like that.

Charging someone for help quitting a substance that is actively killing them is a business model I want no part of. So I wrote the version I wanted: free, complete, no account, no upsell, no ads. It exists because the alternative made me angry, which turns out to be a decent reason to build something.

It started as a cigarette tracker. But nicotine doesn’t only come in cigarettes any more, and people move between them — so Cleared doesn’t assume. Tell it you quit heated tobacco, a vape or pouches, and that’s what it tracks.

A promise you don’t have to take my word for

Every app claims it respects your privacy. This one removes the ability to break the promise: android.blockedPermissions strips INTERNET out of the manifest, so the installed app physically cannot open a network socket. Not "doesn't", not "we don't sell your data" — cannot. Anyone suspicious enough can pull the APK apart and verify it in about a minute, which is the point. A privacy claim you can check beats a privacy policy you have to trust.

The other decision I’m glad about is refusing to make things up. Every physiological claim in the recovery timeline resolves to a real source. Two milestones that appear in nearly every quit-smoking timeline online — nerve endings regrowing at 48 hours, lung capacity jumping at 72 — are deliberately absent, because I couldn’t trace either one to a primary source. And when someone slips, the app doesn’t invent a number of "days of healing lost". Markers driven by a single exposure restart; markers driven by years of cumulative exposure don’t. Where the honest answer is "nobody knows", it says nothing rather than something comforting and false.

The same rule decides what each product gets. A milestone measured in smokers is not shown to someone who only ever vaped; carbon monoxide recovery is not promised to a pouch user, who never had the carbon monoxide to recover from. Every source was checked against the page it cites, and the ones that didn’t hold up are gone.

A craving lasts minutes, so the craving button hands you something to do for them: a breathing guide, memory pairs, bubbles to pop, a grounding exercise — and a falling-blocks puzzle, because a small real-world study found that three minutes of Tetris weakened cravings, nicotine included. Every craving you ride out is counted.

The domain layer is pure functions with the clock passed in as an argument, which is why 295 tests can run in Node with no emulator anywhere in sight.

Expo SDK 57 expo-router TypeScript SQLite Vitest 295 tests

←  All work