Core Concepts

Versions

App versions are containers of features, organizing account-level application functionality (e.g. Basic, Advanced, Professional). While accounts may have access to multiple versions, they can only subscribe to one at any given time.

Images

See the architecture page for additional information.


Creating versions

Versions are fully managed using the Backstack dashboard, including their assignment to domains with prescribed feature access. Resulting configurations are included in the app schema for use within your codebase.


Example versioning

VersionDescription
BasicProvides access to basic application functionality. This version of your application could be free.
AdvancedProvides all the functionality of the Basic version plus additional features. You'll probably assign a fee to this version.
PremiumProvides all the functionality of the Advanced version plus additional features. You'll probably assign a fee to this version.

Monetizing versions

Invoice items are automatically generated when any of the following fees are implemented.

FeeDescriptionImplementation
Version feeCollect a fee for any version of the application functionality.Implement in each domain.version.
User feeCollect a fee for each account user.Implement in each domain.version.

Optional feature fee

Collect a fee for any feature designated as optional.

Implement in each domain.version.features.

See invoicing-accounts for additional information.


Allowing accounts to select versions

Manage version configurations through the Backstack dashboard. Allow accounts to select their preferred version using your user interface, leveraging pre-configured app schema data and the API.

// extracting app schema values for account versioning options

Object.keys(domains[session.account.domain_id].versions).map((id) => {
  console.log({
    "active": session.account.version_id === id,
    "title": domains[session.account.domain_id].versions[id].title,
    "description": domains[session.account.domain_id].versions[id].description
  });
});

See the version assignment workflow for incorporating account-based version management into your UI.


The Version object

// version object
{
  "id": "ver_1234567890",
  "title": "App",
  "description": "Version for the main application.",
  "tag": "v1",
  "is_default": 1,
  "status": "active",
  "features": [
    {
      "id": "fea_1234567890",
      "title": "Account",
      "human_id": "account"
    },
    ...
  ]
}
PropertyTypeDescription
idStringThe version ID.
titleStringThe title of the version.
descriptionStringThe description iof the version.
tagStringThe sort tag associated with the version.
is_defaultBooleanWhether the version is the default when signing up.
statusStringThe status of the version (active or inactive). An inactive version haa no accounts subscribed.
fearuresArrayAn array of features included in the version.
features.idStringThe feature ID.
features.titleStringThe title of the feature.
features.human_idStringThe human-readable ID.

Previous
Roles