Weaknesses of Current Development

vv-iOS and vv-web double code bases

vv-web

  • Web application
  • Runs in browsers
  • Likely built with React, Vue, or another JS framework
  • Uses the same backend APIs, Amplify services, or GraphQL endpoints as vv-ios
  • Possibly includes admin tools the mobile app doesn’t need

vv-ios

  • Mobile application
  • Built with a mobile framework (React Native)
  • Uses Amplify backend
  • Lives in App Store land
  • User-facing or crew-facing mobile experience
They may share backend services, but the frontends are completely separate codebases. This is the typical React Native + React Web problem — two parallel apps, two teams, double maintenance

Solution: Capacitor

Business logic in the front-end

Both the web app and the iOS app do a lot of the thinking (logic) on the user’s device. When the app starts, it downloads all the records the user is allowed to see from the server. On the web, those records go into a sort of “local storage box” (Redux) in the background. iOS does something similar with DataStore.

Once the records are on the device, each app then runs its own set of rules to calculate things like:

  • Which tasks are due
  • How many tasks match a filter
  • What should show on dashboard tiles


In other words, each app is doing its own maths on the same downloaded data, which is why they can behave differently.

Solution: Fetch counts directly from the server

Offline

The Core Problem: Amplify DataStore is not designed for our scale or data shape

DataStore + AppSync + DynamoDB works ONLY when:

  • Data models are small
  • Relationships are minimal
  • Sync is uni-directional and low-volume
  • Users have small datasets
  • Conflicts are rare
  • No large relational queries are needed
  • Offline-first behavior is simple (not multi-user, multi-role)

This means our architecture is fighting DataStore. Not because we implemented it wrong — because DataStore is just the wrong tool for a complex offline-first enterprise system.

Fixing DataStore Won’t Solve the Root Problems

Even if we:

  • Add conflict resolvers
  • Optimise sync expressions
  • Fix the iOS sync stall
  • Move relational data to Postgres
  • Rewrite the GraphQL schema
  • Reduce the collection size
  • Rebuild business logic

We’re still left with:

DataStore simply cannot guarantee consistency in a multi-user, multi-role, multimodification system at vessel scale

Solution: Capacitor

Can Capacitor replace React Native to unify code?

Explore a detailed analysis of Capacitor as a solution to the dual codebase
problem

Slow Loading Times

Vessel Vanguard’s current dashboard is built as a Single Page Application (SPA) that loads almost the entire system’s data immediately after the user logs in. This was done to simplify UI interactions but has created serious performance issues.

Solution: Create multi-page application that loads only the data needed for the page the user is viewing

GitHub Processes Need Love - Workflow Pain

The current GitHub structure is close, but it contains typical “single-developer legacy architecture”. A lot of the pain we are experiencing is not technical — it’s workflow.
Amplify, Cognito, DynamoDB, and model generation are all solid when the Git and environment workflow is correct.

Solution: 

If we can eliminate 90% of the prior chaos. The platform becomes predictable, stable, and easy to reason about.
And everything else (models, Auth, schema, push conflicts) will just work.