Big Button Tile

Last update: September 3, 2026
•
1 min to read

Overview

The Big Button Tile puts one action one press away. It’s a single, large, tactile button on the record’s page — a glossy red dome, an arcade cap, a giant keycap, a neon orb, a full-tile CTA, a printed cargo-label plate, or a plain quiet button — and pressing it runs one configured action on the record you’re looking at: open a form, assign the case, refer it, or set a status.

The action goes through the app’s own action pipeline — the same route as the record page’s action menu. The button opens the same forms and the same dialogs, respects the same permissions, and refreshes the page the same way afterwards. It’s a shortcut, not a side door.

A Big Button tile: a glossy red dome on a silver base, with a file-plus icon and the label Add a file, sitting directly on the page
The easy style as an "Add a file" button — no card behind it, just the button on the page. One tap opens the standard upload dialog, parented to the record in view.

How it behaves

  • Tap, or hold to press. With HoldToPressMs set, a tap does nothing — you hold the button while a ring (or a sweep, on the flat, dataspace and basic styles) fills, and it fires only when the fill completes. Let go early and it drains harmlessly. Use it as the safety on consequential buttons.
  • The button only arms when it can actually work. The configuration is checked against the model, the action against your permissions, and the record must be in view. If anything fails, the button greys out and a line underneath names the reason — it never looks alive and then errors.
  • Field writes give the standard feedback. A SetField-style press shows the app’s own “updated” message and reloads the page data; form and dialog actions open the standard modal.
  • It knows when the work is already done. For a field-writing button, also fetch the target field (add it to Fields) and set DoneValues to every value that means “finished”. A case that’s already Resolved shows a disarmed button reading DoneLabel (“Closed”) with “This case is already closed” underneath — and a successful press flips the tile to that state by itself when the page data reloads.

The actions

Action is a platform action name. Six are supported:

ActionOn pressAlso needs
AddEntityOpens the New form for TargetEntity (a new, unlinked record)TargetEntity; optional FormName
AddLinkOpens the Add-Link form: a new TargetEntity linked to this recordTargetEntity; optional FormName
EditEntityOpens the Edit form for this recordoptional FormName
AssignOpens the Assign dialog for this record—
ReferOpens the Refer dialog for this record—
EditFieldWrites TargetValue into TargetField on this recordTargetField, TargetValue; optional DoneValues + DoneLabel for the already-done state

Opening a specific form

By default, the three form actions open the record type’s default New, Add-Link or Edit form. To open a different form, set FormName to that form’s name:

{ "Action": "EditEntity", "FormName": "CaseTriageEditForm" }
  • Leave FormName out (or empty) for the default form.
  • FormName only works with AddEntity, AddLink and EditEntity. On any other action the button greys out and says so.
  • For AddEntity and AddLink, the form belongs to the new record’s type (TargetEntity), not the record in view.
  • The name isn’t checked before the button arms. A misspelt name only shows up when the form opens, so press each new button once after configuring it.

Assign and Refer open the standard dialogs on purpose. A button that silently assigned a case to someone — with no reviewer, no note — would be worse than the menu it replaces. The dialog is the action; the button puts it one press away. Configure them only on record types whose page menu offers Assign/Refer.

The configuration shape

Everything is edited as JSON on the tile’s rule, in the admin. Changes take effect after a cache clear — no deployment, no downtime.

{
  "Fields": ["ID", "Name", "GUID", "Status"],
  "UIProperties": {
    "EntityName": "Investigation",

    "Action": "EditField",
    "TargetEntity": "",
    "TargetField": "Status",
    "TargetValue": "Resolved",
    "DoneValues": ["Resolved", "Inconclusive"],
    "FormName": "",

    "ButtonStyle": "flat",
    "Icon": "check-circle",
    "Color": "",
    "LabelColor": "",
    "HoldToPressMs": 800,
    "Theme": "dark",
    "Disabled": false
  },
  "StaticContent": {
    "Label": "Close case",
    "DoneLabel": "Closed",
    "AlreadyDoneMessage": "This case is already closed.",
    "PlateText": "HUBSTREAM · CASE ACTIONS",
    "NoDataMessage": "There is no record to act on.",
    "NotPermittedMessage": "You don't have permission for this action.",
    "NotConfiguredMessage": "This tile is not configured correctly: {reason}",
    "ActionFailedMessage": "The action could not be completed. Try again."
  }
}

Look & feel

KeyMeaning
ButtonStyleWhich of the seven looks the button uses — see the table below
IconGlyph shown above the label, from the app’s icon set (the hub-icon- prefix is optional). Empty = label only
Color / LabelColorCSS colour overrides for the style’s accent and label. Empty keeps each style’s own colours
HoldToPressMs0 = a tap fires. Above zero = hold that long to fire
Themedark or light, to match the page behind the tile — it picks the label ink and the weight of the button’s own shadow. On dataspace it also picks the plate stock (charcoal vs the Hubstream tan)
DisabledThe tile stays visible but inert and desaturated
LabelThe face text. Omit it for the style’s own word (easy, GO, ENTER, Press, PUSH, EXECUTE, Continue)
PlateTextdataspace style only: the microcopy band across the top of the plate

Button styles

ButtonStyleLooks like
easyA glossy red dome on a silver base
arcadeA convex cap in a chrome bezel
keycapOne giant mechanical key
flatA modern CTA that fills the tile
glowA neon orb
dataspaceA printed cargo-label plate
basicJust a button — a quiet, neutral surface with a hairline border and generous padding. No gradients, no uppercase; the calm choice for everyday actions

Every style sits straight on the page with no card behind it — just the button. On dataspace, the theme picks the print stock: dark is cream ink on the charcoal plate, light prints charcoal ink on the Hubstream tan.

Here’s the range — five of the styles, each from a real configuration:

The easy style: a glossy red dome on a silver base, carrying only the label Add a file
The easy style with "Label": "Add a file" and no Icon — the dome carries the label on its own.
The flat style: an orange rounded rectangle filling the tile, labeled Assign this Case
The flat style fills the whole tile — here as an Assign button, so one press opens the standard Assign dialog.
The glow style: a cyan neon orb on a dark page, with a lightning-bolt icon above the label CLOSE CASE
The glow style on "Theme": "dark" — a neon orb with an Icon above the label.
The dataspace style: a tan printed plate with HUBSTREAM · CASE ACTIONS across the top, ADD A FILE in orange in the middle, and a barcode strip along the bottom
The dataspace style on "Theme": "light" — charcoal ink on the Hubstream tan. The top band is PlateText.
The basic style: a plain white rounded button with a map-marker icon above the label Add an address, floating on the page
The basic style — just a button, with generous padding and no shouting. Here as an AddLink to Address: one tap opens the linked-record form for the case.

Examples

Close the case, with a hold-to-press safety

{ "Action": "EditField", "TargetField": "Status", "TargetValue": "Resolved",
  "ButtonStyle": "flat", "Icon": "check-circle", "HoldToPressMs": 800 }

with "Label": "Close case", "DoneLabel": "Closed" and "Status" in Fields. TargetValue is the status’s stored value, not its display caption. DoneValues: ["Resolved", "Inconclusive"] covers both endings, so the button doesn’t offer to “close” an inconclusive case — either way it reads Closed and disarms.

New task on this case

{ "Action": "AddLink", "TargetEntity": "Task",
  "ButtonStyle": "dataspace", "Icon": "plus-circle" }

with "Label": "New task" and "PlateText": "HUBSTREAM · CASE INTAKE". The Add-Link form opens with the new task already linked to the case.

Triage edit, not the full edit form

{ "Action": "EditEntity", "FormName": "CaseTriageEditForm",
  "ButtonStyle": "basic", "Icon": "edit" }

with "Label": "Triage". One press opens the short triage form instead of the case’s full Edit form.

Assign this case

{ "Action": "Assign", "ButtonStyle": "arcade" }

with "Label": "ASSIGN". One press opens the standard Assign dialog.

Common gotchas

  • TargetValue is the stored value, not the caption. A value the field’s list doesn’t contain is rejected when the write lands — that’s the platform validating, not the tile failing.
  • Don’t point EditField at a lookup field (one whose values are other records, like an owner). Only an exact target value would save. Use Assign for ownership.
  • AddLink needs a linkable child. The target must be a record type that can be linked to the record in view; the tile checks and says so if not.
  • A greyed button always says why. Read the line under it — it names the config key, the permission, or the missing record.
  • FormName is the one setting the tile can’t check. A wrong form name doesn’t grey the button out. It only shows when the form opens, so test the press.
  • More buttons = more rules. Each Big Button on a page is its own rule with its own JSON; they all share one tile type.