Inspiration

I needed a Pomodoro timer that let me track my productivity and keep count of pomodoros I was completing. And be able to have the counter states sync between my different devices. And work offline. Like a well built app should

What it does

  • Pomodoro timer with intervals of 15min, 30min or 60min
  • Automated timer that you can manually change or increments automatically on completion of a successful pomodoro
  • Works completely offline
  • Retains state when you come back later
  • Installable PWA that mimics any native app
  • Lets you save your timer counters to the IC and resume on another device using Internet Identity

How we built it

  • using all modern web stuff because I don't like Apple/Google app store monopolies

Challenges we ran into

The "ic0.app" link has its own service worker so I'm having to use the "raw.ic0.app" URL to serve my own service worker that enables the app to be

  • installable
  • work without a network connection/when offline

Accomplishments that we're proud of

  • Managing and orchestrating all the complex state that needs to be maintained for multiple timers and syncing that state to the browser storage and the IC storage. All this is done elegantly using state machines on the client side
  • Supporting complete offline capability
  • Elegant PWA comparable to any native app

What we learned

  • Complex state management client side
  • Using service workers for native offline first experiences
  • Modern crisp good looking UI

What's next for Timer Counter

  • Mechanism to support one time payments using ICP
  • Mechanism to visualize time spent data. Pretty graphs to visualize time spent on different activities

Built With

  • ic
  • internetidentity
  • svelte
  • sveltekit
  • tailwindcss
  • xstate
Share this project:

Updates