A low-commitment, research-backed habit tracker for humans with ADHD, depression, and busy lives.
Status: Repo is in setup. You can still clone and bootstrap the app shell once it lands.
# clone
git clone https://github.com/MaraschinoGirl/Pebble.git
cd Pebble
# install & run (Node 20+)
npm install
npm run dev
# open http://localhost:3000Requirements: Node 20+, npm (or pnpm/yarn), modern browser.
Pebble is a tiny, always-visible habit tracker designed to be frictionless on hard days and unnoticeable on good days. It’s built for people who struggle with consistency, time-blindness, and executive overload.
This repo documents the journey from idea → MVP → public release, with product choices tied to established behavioral science (full notes will live in DESIGN.md). The first user is me. If it works for one, we’ll cautiously grow.
- One-tap check-ins — no forms, no typing.
- Local-first, private by default — data on your device; export/sync optional.
- Always-visible (but gentle) — PWA you can pin; no dopamine traps.
- Forgiving streaks — grace by design rather than “all-or-nothing.”
- Implementation intentions built-in — If it’s 9:00 at my desk, then drink water.
- Behavioral activation, not guilt — micro-actions tied to values.
Core UX
- Create 1–5 micro-habits (e.g., “drink water,” “take meds”).
- Each habit has a floor (smallest action) and optional stretch.
- Today view: minimal grid of circles (“pebbles”). Tap = floor done; long-press = stretch.
- Gentle streaks: small line under the pebble. Missed days reduce softly, no hard reset.
- Tiny feedback: subtle haptic/animation; no confetti cannons.
Data
- Local storage in IndexedDB (via lightweight wrapper).
- Import/export JSON for backup/manual sync.
Installability
- PWA: offline, installable desktop/mobile; optional badge for remaining pebbles.
Accessibility & performance
- WCAG-minded contrast; reduced-motion option.
- Fast first load (<100KB JS target post-MVP).
Non-goals (MVP)
- Accounts, social features, heavy analytics, or naggy notifications.
- Make success tiny and obvious. 30–60s floors; the next action is visually near.
- Reduce choice at action time. Today shows only today; editing is elsewhere.
- Preview the win. Instant state change → tiny reward without overstimulating.
- Grace over perfection. Soft streaks + weekly “grace bank.”
- If-Then helpers. Habit editor suggests cue-response phrasing.
- Values before vanity. Actions tied to values (e.g., “text a friend → belonging”).
// pseudocode
User {
id: string
settings: { theme: 'auto' | 'light' | 'dark', reduceMotion: boolean }
}
Habit {
id: string
name: string
floor: string
stretch?: string
cue?: string
color?: string
createdAt: ISODate
archivedAt?: ISODate
}
Entry {
id: string
habitId: string
date: YYYY-MM-DD
floorDone: boolean
stretchDone?: boolean
note?: string
}
StreakState {
habitId: string
softStreak: number
graceBank: number
lastComputed: ISODate
}
- Framework: Next.js (React + TypeScript)
- Styling: Tailwind CSS
- State: Zustand or Redux Toolkit
- Storage: IndexedDB via Dexie/idb behind
repo/adapter - PWA:
next-pwa(offline app shell & install prompt) - QA: Playwright smoke tests
pebble/
apps/web/ # Next.js app
packages/ui/ # shared components
packages/data/ # schema + repo adapters
.github/ # workflows
- If-Then planning helper in the habit editor.
- Graceful streaks with a small weekly grace bank.
- Behavioral activation framing (action verbs + values).
- Low-friction notifications (post-MVP): sparing, actionable nudges.
- Time-visible affordances (post-MVP): analog ring/“next anchor” chips for time-blindness.
- Next.js app scaffolding with PWA & offline
- IndexedDB storage + repo layer
- Today view grid (pebbles): tap/long-press
- Habit editor with If-Then helper
- Soft streak calculation + grace bank
- Import/export JSON
- A11y pass + reduced motion support
- Haptics / subtle animations
- Color tokens & high-contrast theme
- Empty states and first-run guide
- Optional, quiet notifications
- Snooze / “done from notification”
- Simple weekly review (2–3 stats)
- Encrypted export/import presets
- Opt-in end-to-end sync (design first)
This starts as a personal pet project. External PRs welcome if they keep the app small, accessible, and science-grounded—please open an issue first.
See CONTRIBUTING.md and CODE_OF_CONDUCT.md.
Guidelines:
- Keep the JS bundle small.
- Prefer progressive enhancement over new deps.
- Avoid dark patterns; no addictive loops.
Code: MIT. Docs & visuals: CC BY 4.0 (unless stated otherwise).
Lesley-Ann Fenwick (@MaraschinoGirl) — initial user and product owner.
- Changes will be tracked in
CHANGELOG.mdonce code lands. DESIGN.mdwill summarize the evidence base and how it maps to features/UI.
Want me to also drop in starter files for `CONTRIBUTING.md`, `CODE_OF_CONDUCT.md`, and a minimal `DESIGN.md` you can commit right away?
::contentReference[oaicite:0]{index=0}