WinterArc
An offline-first habit tracker for a fixed run of days. October 1 through December 31 is the winter arc, but you can set any dates. All habit data stays in your browser. No account, no sync, no backend. Ships as a PWA you can add to your home screen, with a warm-up window, rest days, a grid for the full run, per-habit rings and streaks, local reminders, and JSON and CSV export.
Problem
Winter arc discipline breaks when the tool assumes a perfect start on day one. Miss a log, and history is lost. Take a rest day, and the streak breaks. Wait for October 1, and you lose a month you could have used to build the habit.
Approach
- Keep all state in localStorage with no backend and no account, so habit data never leaves the browser and the app works with no network.
- Ship as a PWA that installs to the home screen and opens on the tracker, with offline support and a service worker that routes notification taps back to the right view.
- Add a warm-up window: when the arc is weeks away, setup offers a run from today until the day before it starts, then rolls you into the arc with the same habits.
- Make rest days first class. Mark weekdays as rest and they never count as a miss and never break a streak, and the grid and rings reflect that.
- Use two optional local reminder slots stored as HH:MM, quiet on rest days, finished days, and while the tab is already in front of you, with an honest fallback when the browser freezes a backgrounded tab.
Outcome
A minimal, installable tracker people actually use. Live at trywinterarc.vercel.app at v1.0.1, with grid, rings, streaks, achievements, a share card rendered to PNG in the browser, and JSON and CSV export plus a copyable prompt for an LLM.
Highlights
Offline-first PWA that installs to the home screen and opens on the tracker. Works with no network.
Grid for the full run, per-habit rings, streaks, perfect days, and achievements, with rest days that never count as a miss.
Warm-up from today until the arc starts, then rolls into the arc with the same habits and original dates.
Local reminders for morning and evening, JSON and CSV export, and a share card rendered to PNG in the browser.
Stack
- TypeScript
- React
- Vite
- Tailwind CSS
- shadcn/ui
- PWA
