"Glow-up challenges" (30, 60, 75 or 90 days of small daily habits) are all over TikTok, but most trackers for them want an account, a subscription and your progress photos on their servers before you've checked off day one.
So I built GlowStreak: pick a challenge, tap your habits each day, keep your streak, share a "Day X" story card. No sign-up, English and Spanish, installs to your home screen.
The constraints I set
-
No backend. Everything lives in
localStorageon the device. No accounts means no password resets, no GDPR export requests, and nothing to breach. - Photos never leave the phone. Progress photos are stored locally and only ever rendered into a share card when you hit share.
-
One file. The app is a single
index.htmlwith inline CSS and JS, plus a manifest and a tiny service worker. It deploys to Cloudflare Pages in seconds. -
Bilingual from day one. All strings sit in one EN/ES dictionary; language defaults from
navigator.language.
The bits that were fun
Streaks without a server. A day key is just YYYY-MM-DD in local time, and a streak is "walk back from today while every habit is checked". Doing it in local time (not UTC) matters a lot when someone checks in at 11:50 pm.
The share card. It's drawn on a 1080×1920 <canvas> (Stories size), turned into a File, and handed to the Web Share API with navigator.canShare({files}). On browsers that can't share files it falls back to a download.
Feeling native. Spring-y cubic-bezier transitions, a progress ring with stroke-dashoffset, small navigator.vibrate taps on Android, and a confetti burst when the last habit of the day is checked. Small things, but they're what make people come back on day 2.
Presets
Gentle 75 (miss a day, log it, keep going), Glow-Up 60, Balanced 75, Monk Mode 30, a 30-Day Walk, and Lock-In 90, or your own habits.
Try it / roast it
👉 https://glowstreak.pages.dev
I'd love feedback on the onboarding flow and the share card. What would make you actually open a habit app on day 14?













