The typical way of tracking habits
On Monday you add three new habits and feel unstoppable. By Friday a red "X" shows up, the chain breaks, and motivation dips. It happens to everyone.
Our new app, PandaFlow, approaches this differently. Treat habits like experiments: start small, collect signal, and only commit once it fits your life.
Why many trackers fall short
Tools should reduce friction, make progress legible, and nudge when useful. Optimizing for perfection creates pressure; optimizing for learning preserves momentum.
Common failure modes:
- All-or-nothing streaks: Miss one day and the system punishes you, even for reasonable life events.
- Binary completion: No room for partial progress or context; a 5-minute walk is better than nothing.
- Premature commitment: Forcing a routine before testing fit leads to churn.
- Skewed baselines: Counting success from day zero misrepresents early progress and demotivates.
- Noisy nudges: Notifications push compliance instead of reflection and adjustment.
- Overloaded UI: Too many dials and graphs obscure the simple question: “Did I move forward today?”
PandaFlow avoids these with trials, fair baselines, and clear, minimal feedback.
Trial first, then decide
In essence, the old way is to commit, try, fail, quit. The PandaFlow way is to try, learn, then decide.
We have built PandaFlow to be able to track habits in a way that feels more natural to us. The general approach is as follows:
- Start in Trial Mode: New habits begin with a trial status and end date—clear scope, low pressure.
- Track progress: Streaks, completions, and activity are recorded during the trial.
- Decide: At the end, choose to continue or end.
- End it: You learned what doesn’t fit.
- Continue: The habit becomes active with momentum and clarity.
This keeps expectations realistic and feedback honest.
Inside the app
Calendar heatmap
In the image above you can se a "Year-at-a-glance" intensity view. Darker green indicates more activity, similar to how git UIs track developer contributions. Some features we have added:
- Filter: Focus on a single habit or view all to spot patterns.
- Details: Hover any day to review completions. A stats panel shows current streak, longest streak, total completions, and a fair completion rate that starts at your first actual activity.
- Responsive: Horizontal scrolling for the current month and adaptive sizing for mobile.
Privacy-first community feed
Public completions (name, avatar, habit title, timestamp) provide light-weight social motivation. Private habits never appear.
Implementation notes
We favor clarity, security, and performance. You can expand our tech stack below for more detail.
Tech stack
Frontend
- Framework: SvelteKit + TypeScript (SSR via Node adapter).
- Styling: Tailwind CSS v4 and Lucide.
- Tailwind v4 keeps styles consistent, localized, and low-overhead; it encourages sensible constraints and trims unused CSS in production.
- Lucide provides clean, accessible icons with tree-shaking for a small bundle and a consistent visual language.
- API: All requests flow through a server-side proxy, which centralizes CSRF/session handling and simplifies the browser’s job.
Backend
- Core: Node.js + Express with PostgreSQL.
- Auth: Google OAuth via Passport.js; sessions persisted with
connect-pg-simple. - Security:
helmet, strict CORS,csurfon mutating requests, rate limits on sensitive routes, session fixation prevention, parameterized SQL. - Performance: Redis caching; private habits are excluded at the SQL layer; streaks are computed efficiently; critical queries are indexed.
Additional features in PandaFlow
- Visual tags: Optional colors for quick parsing on the calendar.
- Flexible scheduling: Optional weekly cadence (e.g., Mon, Wed, Fri).
- Responsive: The app looks and feels great on all devices.
- Themes: The app has both a light and dark mode that adapts to your device.
- Undo: Reverse a completion for any day if needed.
If this approach aligns with how you like to work, explore the app at pandaflow.app. 🐼