SeaBorne grew out of real operations. I hold a USCG Master of Towing Vessels license, and I've done enough commercial maritime work to know that the planning side is mostly spreadsheets, paper charts, and manual calculations. SeaBorne is my attempt to build the tools I wished existed—mission planning, cost estimation, and fleet management in a single application.

What It Is

SeaBorne is a Progressive Web App for maritime commercial operations. The core features are mission planning (calculate fuel, time, cost for a towing job), fleet management (track vessel specs and operational costs), and financial tools (profit margin analysis, asset tracking). It's designed for the small-to-medium operators who don't have enterprise software but need more than notebooks.

The interface is mobile-first—you're often on a vessel or at a dock, not at a desk. Everything works offline thanks to service workers. Enter your data, plan your mission, get your numbers without needing cell service.

The Mission Planner

The mission planner is the centerpiece. You input origin and destination coordinates, vessel selection, tow specifications (weight, draft, etc.), and it calculates everything: distance, estimated time, fuel consumption, crew costs, total job cost, and suggested bid price with your margin built in.

Coordinate handling was surprisingly tricky. Maritime coordinates come in multiple formats—decimal degrees, degrees-decimal-minutes, degrees-minutes-seconds. The app includes a converter that handles all of them bidirectionally. Paste in whatever format you have, get whatever format you need.

The cost model is configurable per vessel. Fuel burn rates vary by speed and load. Crew costs vary by operation type. Insurance and wear factors differ by vessel age. All of this feeds into the calculation, so your estimates reflect your actual fleet, not generic industry averages.

Technical Stack

React 18 with TypeScript, using Redux Toolkit for state management. The state complexity justified Redux here—mission plans, fleet data, financial records all interact, and the time-travel debugging has been invaluable. Material-UI provides the component library.

Build is Vite, producing a ~315KB main bundle (93KB compressed). The PWA configuration includes a service worker for offline capability and an app manifest for installation. It works as a home-screen app on iOS and Android.

No backend. All data stays on-device in localStorage and IndexedDB. This was a deliberate choice—maritime operators are often privacy-conscious about their operational data, and many work areas have poor connectivity. Local-first eliminates both concerns.

Pros and Cons

What works well:

  • Offline-first design matches real maritime operating conditions
  • Cost calculations use your actual vessel data, not generic estimates
  • Mobile-friendly interface works on deck or dock
  • No account required, no data leaves your device

What's still rough:

  • No chart integration yet (coordinates only, no visual plotting)
  • Weather data would improve time estimates significantly
  • Multi-device sync would require a backend I've avoided building
  • Limited to towing operations; other maritime verticals need different models

Domain Knowledge Matters

This project reinforced something I already knew: domain expertise shapes software design. The features in SeaBorne exist because I've done the work and felt the pain points. The coordinate converter exists because I've fumbled with format mismatches. The offline mode exists because I've been on vessels with no signal.

It also means the tool has opinions. The cost models assume commercial towing operations. The terminology is industry-specific. This makes it more useful for the target audience but less general-purpose. That's the right trade-off for a tool like this.

What's Next

Chart integration is the obvious next step. Plotting routes visually, calculating distances along coastlines rather than great circles, showing hazards and traffic separation zones. The data exists in open sources; the work is in the rendering and interaction design.

Longer term, I'm interested in AIS integration—pulling in real-time vessel traffic data. But that requires a backend service, which changes the architecture significantly. For now, SeaBorne stays local-first.

Try SeaBorne →