Skip to content

Cryptoteep/focustide

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

8 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

🌊 FocusTide

Privacy-first focus timer & deep-work analytics for developers. Your data never leaves your browser. 100% local, free, open source.

License: MIT Made with Next.js TypeScript PRs welcome Good first issues No telemetry

Ride the tide of deep work. FocusTide is a calm, keyboard-first Pomodoro & analytics app that runs entirely in your browser β€” no accounts, no servers, no tracking. Your focus history lives in localStorage, exportable to JSON/CSV/Markdown anytime.


✨ Why FocusTide?

The productivity tooling market is full of cloud timers that gate features behind paywalls and quietly ship analytics SDKs. FocusTide is the opposite:

  • 🌊 Local-first by design. No backend, no database, no account. Your data is yours.
  • πŸ”’ Zero telemetry. The network tab is silent after first load. The whole app is a static bundle.
  • ⌨️ Keyboard-first. Space to start/pause, R to reset, S to skip, ? for shortcuts.
  • πŸ“Š Real analytics. Daily, weekly, hourly and phase breakdowns β€” plus a 35-day streak heatmap.
  • 🎨 Calm & themeable. Light/dark/system + 5 accent presets. No streak-shaming, no nagging.
  • πŸ“€ Own your data. Export to JSON/CSV/Markdown. Import on any device. No lock-in.
  • πŸ’š Non-commercial & OSS. MIT licensed, maintained by volunteers, free forever.

πŸš€ Features

Area What you get
Timer Adaptive Pomodoro with focus / short-break / long-break, wall-clock accurate (survives tab throttling & sleep), auto-start options, cycle dots
Tasks Estimates, link a task to each focus tide, drag-to-reorder, completed pomodoro counts, notes
Analytics 14-day daily focus bars, cumulative focus area chart, hour-of-day histogram (find your peak), phase donut, recent session log
Streaks Current & longest streak, 35-day activity heatmap, weekly count
Themes Light / dark / system + 5 accent presets (Tide, Emerald, Violet, Amber, Rose) via CSS variables
Audio Web-Audio synthesized chimes (no audio files) with volume control
Alerts Optional browser notifications on phase completion
Data JSON backup, CSV sessions, Markdown report, import, one-click clear
Shortcuts Full keyboard control, ? help overlay, live timer in the tab title

πŸ§‘β€πŸ’» Quick start

Use it (no install)

Just open the deployed app and start a focus tide. Everything stays in your browser.

Run locally

# 1. Clone
git clone https://github.com/Cryptoteep/focustide.git
cd focustide

# 2. Install (Bun recommended, npm/pnpm/yarn also work)
bun install

# 3. Dev server
bun run dev
# β†’ http://localhost:3000

# 4. Lint
bun run lint

Requirements: Node.js 20+ (or Bun 1.1+). No environment variables, no API keys, no database to provision β€” there is no backend.


πŸ—οΈ Architecture

FocusTide is a Next.js 16 app (App Router) written in TypeScript, styled with Tailwind CSS 4 and shadcn/ui, with Recharts for visualizations and Framer Motion for subtle motion.

src/
β”œβ”€β”€ app/                     # Next.js App Router
β”‚   β”œβ”€β”€ layout.tsx           # Root layout, metadata, theme provider
β”‚   β”œβ”€β”€ page.tsx             # Single-page composition (hero + app + sections)
β”‚   └── globals.css          # FocusTide theme tokens (CSS variables)
β”œβ”€β”€ components/
β”‚   β”œβ”€β”€ focustide/           # Feature components (timer, tasks, analytics, …)
β”‚   β”œβ”€β”€ theme-provider.tsx   # next-themes wrapper
β”‚   └── ui/                  # shadcn/ui primitives
β”œβ”€β”€ hooks/
β”‚   └── use-timer-engine.ts  # Wall-clock accurate timer driver + live-seconds hook
└── lib/
    β”œβ”€β”€ store.ts             # Zustand store + localStorage persistence
    β”œβ”€β”€ stats.ts             # Streak & aggregation helpers
    β”œβ”€β”€ export.ts            # JSON / CSV / Markdown export + import
    β”œβ”€β”€ sound.ts             # Web-Audio chimes + accent presets
    └── types.ts             # Shared TypeScript types

Design principles

  1. No backend, ever. Anything that needs persistence uses localStorage. Future optional sync (v1.2) will be end-to-end encrypted via your own GitHub Gist.
  2. Wall-clock accuracy. The timer stores an endsAt deadline and computes remaining time from Date.now(), so background throttling and sleep can't drift it.
  3. CSS-variable theming. Brand colors are plain CSS custom properties swapped at runtime, so theme switching is instant and zero-JS after the first paint.
  4. Accessible by default. Semantic HTML, ARIA labels, keyboard navigability, 44px+ touch targets, prefers-color-scheme support.

⌨️ Keyboard shortcuts

Key Action
Space Start / pause the timer
R Reset the current phase
S Skip to the next phase
1 / 2 / 3 Switch to Focus / Short break / Long break
N Focus the new-task input
? Toggle the shortcuts overlay

πŸ”’ Privacy

FocusTide collects nothing. Concretely:

  • ❌ No analytics, telemetry, or error reporting SDKs
  • ❌ No third-party scripts, fonts, or CDNs at runtime (Google Fonts are self-hosted at build)
  • ❌ No cookies
  • ❌ No accounts or authentication
  • βœ… All data lives in your browser's localStorage
  • βœ… Export anytime; clear anytime; leave the platform anytime with your data intact

The entire app is a static bundle. After first load it works fully offline. You can verify all of this by reading the source β€” that's the point of open source.

See SECURITY.md for responsible disclosure.


🀝 Contributing

Contributions of every kind are welcome β€” code, docs, translations, design feedback, bug reports, feature ideas. Read CONTRIBUTING.md to get started, and check the good first issue label for beginner-friendly tasks.

All interactions are governed by our Code of Conduct.

Areas we'd love help with

  • 🌍 Translations (i18n is on the v1.2 roadmap β€” help us bootstrap ru/es/de/fr/zh)
  • 🎨 Themes & accessibility audits
  • πŸ§ͺ Cross-browser testing (Safari, Firefox, mobile browsers)
  • πŸ“± PWA shell (v1.1)
  • πŸ”Œ Optional encrypted Gist sync (v1.2)

πŸ—ΊοΈ Roadmap

See the live roadmap at focustide.dev/#roadmap or the GitHub Projects board. Highlights:

  • v1.1 β€” Calendar heatmap, ambient soundscape player, PWA install, tags & per-tag analytics
  • v1.2 β€” Goals & weekly targets, insights panel, ⌘K command palette, optional encrypted sync, i18n
  • Future β€” Community theme marketplace, local git-activity integration, WebRTC focus rooms, CLI companion

❓ FAQ

Head to focustide.dev/#faq or open a discussion.


πŸ“„ License

MIT Β© FocusTide contributors.

FocusTide is a non-commercial, community-maintained project. It will never be sold, paywalled, or acquire tracking. If you find it useful, the best way to say thanks is to ⭐ star the repo, share it with a friend, or open a pull request.

About

Privacy-first focus timer & deep-work analytics for developers. Your data never leaves your browser. 100% local, free, open source. MIT.

Topics

Resources

License

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Packages

 
 
 

Contributors

Languages