Skip to content

Upgrade prompt

The upgrade prompt is what you see when you try an action on the free tier that would take a syndicate over one of its limits: adding a second asset, or inviting a fourth admin or member. The prompt explains the limit and, depending on the platform you are on, offers a path to upgrade.

It does not fire for a viewer. Viewers are read-only and take up no seat, so a free syndicate already at three members can invite as many as it likes without ever being asked to upgrade.

Because Apple’s and Google’s store rules forbid in-app calls-to-action that route payment outside their stores, the prompt behaves differently on web and on mobile. On web you can go straight to checkout. On iOS and Android you get a plain notice, and an upgrade email is sent automatically to the address on your account.

  • Admin: sees the prompt when performing an action that breaks a limit. Any admin can complete the checkout on the web version.

The prompt is triggered by actions, not a settings page. It appears:

  • When adding an asset on a free-tier syndicate that already has one asset. Screen: Create asset (/syndicates/:syndicateId/assets/new).
  • When inviting an admin or member on a free-tier syndicate that already holds three seats, at the moment you tap Generate Invitation. Screen: Create invite (/syndicates/:syndicateId/invite). Picking Viewer instead does not raise it.

A dialog appears with:

Element What it does
Title “Upgrade Your Plan”
Message The limit-specific message (e.g. “Your syndicate has reached the free plan limit of 1 aircraft” or “Your syndicate has reached the free plan limit of 3 members”).
Cancel Dismisses the dialog. No side effects.
Upgrade Now Requests a checkout URL and opens it in a new browser tab.

A snackbar appears with the limit message. There is no call-to-action button, in line with App Store and Google Play rules. In the background, the app fires off a one-line request to send the account holder an email with an upgrade link to the web version. No user interaction is needed to send the email; it is automatic.

  • On web, Upgrade Now opens checkout directly. It does not send an email. The URL is returned by a server endpoint and opens in a new tab; completing checkout there upgrades the syndicate.
  • With no payment provider configured, neither path offers an upgrade. On web the dialog drops Upgrade Now altogether and says upgrading is not available yet, leaving only an acknowledgement button. On mobile the snackbar says the same and no email is sent. The limit still blocks the action either way. No client-app change is needed once a provider is brought online; both paths light up on their own.
  • On mobile, the email is sent automatically. There is no button to request it. Fire-and-forget: the app submits the request and continues. Delivery is handled server-side with a cooldown so repeated bumps do not spam the account holder.
  • The snackbar on mobile is informational. No links, no CTAs, per store rules.
  • The action that triggered the prompt is always blocked. Dismissing the prompt leaves the syndicate at its current size. The limit is not bypassable.
  • The role decides whether the limit applies at all. The member limit counts seats, and only admins and members hold one. An invitation to a viewer is never measured against it, on the server or in the app.
  • This is not the size-change confirmation. A paid syndicate adding an aircraft or a member above its allowance sees a cost confirmation instead, which checks the price with the payment provider before quoting it. See pricing.
  • Any admin can complete the checkout on the web version. Completing it upgrades the syndicate.
  • The upgrade email goes to the account holder who triggered the prompt, not to every admin.
  • At most one upgrade email per syndicate per 24 hours. The cooldown is on the syndicate, not on the admin or on the event, so a second admin who hits the same limit an hour later gets no email at all — only the snackbar. If an admin is waiting on the link, check with whoever hit the limit first before assuming it failed to send.