SWIFTPOINT//HUB
Support

Profile Builder · The interface, your way around

An orientation tour of the Profile Builder: views, tabs, the selection panel and every control that builds your profile.

The Builder is a three‑column workspace: structure on the left, overview in the middle, focused editing on the right. Nothing scrolls except the panels themselves.


┌──────────────────────────────────────────────────────────────────────────┐
│  Header: brand · tool nav · status · undo/redo · New/Open/Load · Save    │
├───────────────┬──────────────────────────────────────┬───────────────────┤
│ LEFT          │ CENTER                               │ RIGHT             │
│ • Groups      │  Tabs: Mouse | Bindings | Settings   │ • Press stages    │
│ • Profile     │        | JSON | Diagnostics          │ • Trigger section │
│ • Diagnostics │  (the area described in each tab)    │ • On activation   │
│               │                                      │ • On deactivation │
│               │                                      │ • Nesting & label │
└───────────────┴──────────────────────────────────────┴───────────────────┘

Header (top bar)

Control What it does
New Start a fresh blank template (warns if you have unsaved work).
Open… Pick a .spcf file from your computer and edit it.
# ID + Load Load an existing hub profile by its number (#123).
Download Write the current profile to a .spcf file locally.
Save Publish a new profile or save changes to one you own. Label changes with your state: Save / publish profile → Save changes.
↶ ↷ Undo / redo (full‑document).
● modified Dot appears the moment your document differs from the saved state.
? Shortcut help overlay.

You can also drag & drop any .spcf file onto the page to open it, and deep‑link to a profile with /editor?id=<ID>.


Left rail — Groups, Profile, Diagnostics

  • Groups — the list of all groups in the file, indented by depth (sub‑profiles sit inside their parent). Click to select; a + adds a new group, +sub adds a sub‑profile under the selected group, − removes the selected group (and everything in it).
  • Profile — the profile title, hub ID and group/mapping counts.
  • Diagnostics — a quick sanity line: Looks coherent or N issues.

Groups are your layers. A sub‑profile is a normal group nested inside another one — the Z3 switches between groups/sub‑profiles when a Select profile or Jump to profile action fires.


Center — the five tabs

Mouse (default)

The full Z3 button map in six sections: Mousewheel · Main · Thumb · Fingertip · Triggers · Edges.

Every button card shows its light press stage and any deep zones as separate rows, with the bound actions summarized inline. Clicks select the button and jump into the right rail editor. A stats strip above the mouse sums up the whole profile (bindings / buttons / deep zones / tilt‑pivot / surface / wheel / scripts).

Bindings

The complete list of everything in the profile, grouped by type: Buttons → Wheel → Surface → Tilt / Pivot → Other → Settings, followed by the Nesting tree of the selected group. There's a filter bar (Filter bindings — key, button, action…) and a trigger‑type dropdown (Button presses / Deep zones / Tilt / Pivot / Wheel / Surface / Settings / Other). Each button card carries a + Add menu for creating bindings — and for choosing the trigger a new binding is nested under, which is what makes it live only while that trigger is held.

Settings

The device settings of the selected group (Layers/DPI/etc. — the whole list is covered in settings-and-dpi.md). Changes apply to the group you currently have selected on the left.

JSON

The raw serialized profile, formatted and read‑only. Great to copy if you want to keep a full text version of the file.

Diagnostics

The full check result for the whole profile. Each issue has a quick action (see below).


Right rail — the binding editor

Narrow editing of the selected binding (or the press‑stages of the selected button):

  • Press stages — the pressure‑axis card (see deep-click.md). From here you add + Light press bindings and + Deep zone bindings.
  • Trigger — the trigger type plus its fields (zone ranges, direction, axis, etc.).
  • On activation — the list of actions fired when the trigger engages, with + Add action.
  • On deactivation — the list fired when the trigger releases / leaves the zone, with + Add action.
  • Nesting & label — you can name the binding (Label), pick the trigger it is nested under (empty = always live), and Move to… when the profile has more than one group. A nested binding is active while that parent's trigger is held — nothing else, and no delay.

Action rows get ↑ ↓ (reorder), ⎘ (duplicate), ✎ (edit) and × (remove) buttons. Editing uses a small composer window with a Kind dropdown and its fields.


Diagnostics — what the checks catch

The tool checks the whole profile and flags:

  • A group with no bindings at all.
  • A mapping with no trigger type.
  • A mapping with no actions (neither activation nor deactivation).
  • A broken nesting link that points at a mapping that no longer exists.
  • Nesting past 20 levels, and a cycle of bindings gating each other.
  • Overlapping deep zones on the same button (e.g. Left Button: deep zones overlap at NN%).

Each entry offers a one‑click action: Jump to Group / Mapping, Add Action, Remove Binding / Group, Make Top-Level. When nothing is wrong you see "No issues found — the profile looks coherent."


Keyboard shortcuts (Ctrl+/ to show the overlay)

Shortcut Action
Ctrl+S Save changes / publish
Ctrl+Z Undo
Ctrl+Shift+Z / Ctrl+Y Redo
Ctrl+Shift+D Duplicate the selected mapping
Delete / Backspace Remove the selected mapping (when focus is not in a text field)
Ctrl+/ Toggle shortcut help
Esc Close the help overlay
Ctrl+C / Ctrl+V Copy/paste OLED images & animations (on canvas/OLED fields)

FAQ

"Why does the left Diagnostics say one thing and the Diagnostics tab another?" The left card is a one‑line status; the tab lists every finding in detail.

"I switched tabs and my drag on a range plot was lost — why?" Range plots for triggers push a single undo snapshot when you start dragging (not on every pixel), so one drag = one undo step.

"Can I reorder bindings in the right rail?" Yes — the ↑/↓ buttons on each action row move actions within the activation/deactivation list. Whole mappings are grouped under the binding they are nested in, and that tree is drawn under the Root key (see nesting.md).

"What does the modified dot mean exactly?" Your working tree differs from what's saved on the hub (or, for a brand‑new profile, from nothing yet). The browser warns you before you close the tab with unsaved changes.