← All Projects
APPPersonal Product

I built four recovery apps and a landing hub — zero dependencies, offline forever.

People quitting substances need simple, private, always-available tools that show real progress. Existing apps were bloated with ads or required accounts. I built four recovery trackers plus a central hub, with clinically sourced milestones, offline-first architecture, and no account required.

React 19 (CDN)PWAlocalStorageCaddyDockerRailway
Clear Suite app setup screen
Setup — personalized quit date and usage history
Clear Suite onboarding flow
Recovery dashboard — real-time milestone tracking
5
Production apps
0
Dependencies installed
$4.99
One-time unlock
100%
Offline capable

Recovery apps that need WiFi, accounts, and tolerance for ads

Someone trying to quit smoking at 2am doesn't want to create an account. They don't want ads for vape shops. They don't want their recovery data on someone else's server. They want to see that their lungs are healing and their blood pressure is dropping.

Every existing app I found was either bloated with features, gated behind subscriptions, or treated recovery as a social media experience. None of them felt like something you'd actually use at your worst moment.

Four trackers, one landing hub

01

Clear Air

Nicotine & vaping recovery

Cardiovascular recovery, lung function, cancer risk reduction. Milestones sourced from Cleveland Clinic and AHA research.

02

Clear Mind

Cannabis recovery

Cognitive function, REM sleep restoration, memory improvement. Based on NIDA and PubMed studies on THC elimination timelines.

03

Clear Flow

Alcohol recovery

Liver function, blood pressure, immune system recovery. Clinically weighted from Journal of Hepatology data.

04

Clear Body

Sugar & fast food recovery

Insulin sensitivity, inflammation markers, gut microbiome restoration. Front-loaded scoring shows fastest progress in the first week.

Four design decisions that matter

Clinically Weighted Milestones

Every milestone sourced from peer-reviewed medical literature — Cleveland Clinic, AHA, NIDA, PubMed. Not motivational fluff. Actual physiological recovery curves with weighted scoring that reflects clinical significance.

Front-Loaded Reward Design

The scoring system intentionally shows the most visible progress in the first days and weeks. This is a behavioral design choice — early recovery is when relapse risk is highest, so the app reinforces progress when people need it most.

Craving Intervention Tools

Built-in 4-4-6 breathing exercises activated during craving moments. Craving logging with trigger categorization and outcome tracking, so users can identify their patterns over time.

Privacy as the Product

For something as sensitive as substance recovery, the zero-server architecture is the product decision, not just a technical one. No account. No data leaves the device. Nothing to breach, nothing to subpoena, nothing to be embarrassed about.

Simplicity is the hardest architecture

Zero dependencies as an architecture choice

Each app is a single HTML file — ~80KB containing all React components, CSS, and logic inline. React 19 loads from CDN. No npm, no bundler, no build step, no node_modules. This eliminates entire categories of complexity: no dependency vulnerabilities, no build failures, no version conflicts. The trade-off is manual component management, but for apps this size, that's the right call.

Offline-first for people without reliable internet

Recovery doesn't pause when WiFi drops. Each app has a service worker and full PWA manifest. After the first load, everything works offline forever. localStorage handles all persistence. There are zero network requests after the initial page load.

Making medical data motivating without being misleading

Clinical recovery timelines are real but complicated — lung cilia regrowth takes months, liver enzyme normalization takes weeks, dopamine receptor density takes a year. The scoring weights milestones by clinical significance, not just time elapsed, so the progress bar reflects actual healing rather than arbitrary percentages.

Monetization without dark patterns

Free 7-day trial, then $4.99 once for all four apps forever. No subscription. No ads. No upsells. No account required. The payment flow is simple — unlock page, payment, thank you. Users keep their data regardless of payment status.

Radically simple by design

Each app is a single HTML file. React loads from CDN. No build step, no bundler, no node_modules directory. The entire repo is 41 files. Each app deploys as its own Railway service with its own Caddy/Docker config, but shares a single monorepo for management.

Full Stack

FrontendReact 19 (CDN, no build step), single-file components, CSS custom properties, light/dark themes
StoragelocalStorage only — zero server-side persistence, zero network requests after load
PWAService workers, manifest.json, installable on home screen, full offline support
DeployCaddy (Alpine Docker), Railway — each app deploys as its own independent service
DesignDM Sans + DM Serif Display (trackers), custom accent colors per app, light/dark theme toggle

A complete product, not a demo

Shipped and live

Five apps deployed and serving real users. Monetization built in. Analytics tracking usage. PWA installable on any device. This isn't a side project that lives in a repo — it's a product.

Clinical rigor

Milestone data sourced from peer-reviewed medical literature. Cleveland Clinic, AHA, NIDA, PubMed. The recovery timelines model actual physiological healing, not motivational guesswork.

Constraint-driven design

Zero dependencies wasn't a limitation — it was the architecture. Eliminating the build toolchain, the server, and the account system made the apps faster, more private, and more reliable than the alternatives.

Design for vulnerability

Recovery is deeply personal. The entire product is designed around that reality — nothing leaves the device, no judgment, no social features, no ads. The architecture serves the user's emotional state, not engagement metrics.

Need a product built with this level of intention?

Let's Talk