Web App

Tidepool

An offline-first tide and weather planner for small-boat sailors, built as an installable progressive web app.

Placeholder preview of the Tidepool interface

Project data

Role
Solo developer
Type
Web App
Stack
  • SvelteKit
  • TypeScript
  • IndexedDB
  • Workbox
Duration
3 months
Year
2025
Status
Live

The challenge

No signal at sea

Sailors plan trips in the harbour and check them again on the water, where the connection disappears. Existing apps showed spinners exactly when people needed the data most.

Tidepool had to work fully offline for a week of planned trips and still feel instant on old phones.

How it was built

Development process

Six phases from the first conversation to the release. The bar shows how the time was split.

7 weeks in total

  1. Research

    Sailors walked us through planning a trip with no signal on board; the offline cases came straight from them.

    3 days · Offline scenarios

  2. Architecture

    Data model, rendering strategy and API contracts were agreed before the first screen was drawn.

    4 days · ADR, data model

  3. Interface

    A component inventory and responsive layouts, built entirely from design tokens.

    1 week · Token set, component inventory

  4. Build

    Features went live in small slices behind flags, with typed boundaries between client and server.

    3 weeks · Feature slices

  5. Testing

    Unit, end-to-end and accessibility checks ran on every pull request.

    1 week · Test suite in CI

  6. Deployment

    Every branch got a preview environment; the production rollout was a single click.

    3 days · Preview and release pipeline

  7. Result

    Used on more than 1,200 trips in its first season with zero reported data loss.

Screens

Outcome

The results

Placeholder preview of the Tidepool interface

What changed after launch

Used on more than 1,200 trips in its first season with zero reported data loss.

  • SvelteKit
  • TypeScript
  • IndexedDB
  • Workbox

Key figures

Offline score
100
JS shipped
40 kB
Store rating
4.8

Under the hood

Offline as the default state

The service worker precaches the shell and stores every planned trip as a self-contained bundle. The UI reads only from local storage, so online and offline look identical.

Forecast updates are diffed on the server and shipped as small patches, which keeps background syncs under 20 kB.

  • SvelteKit
  • TypeScript
  • IndexedDB
  • Workbox

Next project

Want something similar? Let’s talk.

Let’s talk

Tell me about your project. I usually reply within two working days.