Back to home
Personal Project

Foyer - Focus Timer

A Pomodoro-inspired focus timer, installable as a PWA, 100% local, no accounts or backend

Personal ProjectInstallable PWA100% Local
Foyer - Session de concentration active avec mascotte feu de camp

Why this project

Most focus apps show time as a ticking countdown, which creates anxiety rather than calm. Foyer takes the opposite approach: time is never shown as numbers by default. A ring draws itself over the course of a focus session, and going over your planned time never interrupts anything, an extra ring simply stacks on top of the first.

App preview

Foyer - Anneau de concentration au repos

Focus ring at rest

Foyer - Rituel de démarrage, trois respirations

3-step starting ritual

Foyer - Saisie de tags hiérarchiques avec autocomplétion

Hierarchical tags with autocomplete

Foyer - Dashboard de statistiques

Stats dashboard

Features

Graceful overflow

Going past your planned duration doesn't stop the timer: the main ring freezes full and new rings stack up, older ones fading so it stays readable.

Hierarchical tags

Every session can be tagged with a free-text path like code/refactor. Each root tag gets a distinct hue, subtags automatically spread into related shades.

Chains

A full sitting (focus → pause → focus → ... → stop) is tracked as one chain, which closes on an explicit stop or automatically after too long a pause.

100% local and offline

Installable as a PWA, works offline, no data ever sent to a server: everything lives in IndexedDB, with JSON export/import as a manual backup.

Svelte 5
TypeScript
Vite
IndexedDB (idb)
Vitest
Service Worker
PWA
Vercel

Project status

Actively developed

Functional and deployed PWA
Unit test suite (Vitest)
Manually verified on mobile (Playwright)

Have an app idea to bring to life?

Let's talk about your project