hintuitiondocs

Experiences

An experience is one in-app message. Find them under Experiences in the dashboard, and start a new one with New experience.

How it appears

Pick one of five surfaces. The first three float on the page; the last two point at something in your own interface.

  • Modal — centred, with the page dimmed behind it. The most interruptive, so save it for something that genuinely can't wait.
  • Slideout — a panel in the corner. Noticeable without blocking what someone was doing.
  • Banner — a strip along the edge of the page. The quietest option, and the right one for status and maintenance notices.
  • Tooltip — sits beside a specific element, with a small arrow pointing at it. Use it when the message is about that control, not about the page.
  • Hotspot — a small dot on the element that opens the message when clicked. The least interruptive of all: it waits to be noticed.

Pointing at an element

Tooltips and hotspots need to know which element they belong to. There are two ways to say so, and you can move between them freely.

Click it. Put in the address of a page in your own app and press Pick an element. That page opens in a new tab with a picking overlay: hover to see what would be selected, click to choose it. The selector fills in here by itself.

Nothing to install — no browser extension, unlike most tools in this category. The snippet you already added is what makes the picking possible, which also means picking only works on pages where the snippet is live. Your workspace has to allow the address first; see Install the snippet.

Or type a selector, if you'd rather, or if the element is somewhere the picker can't reach. The field stays editable either way.

Stable and fragile

After picking, we tell you what we chose in plain words — "the button with data-testid="upgrade"" — and whether it will last.

Stable means we found something durable to point at: an attribute you or your engineers put there on purpose.

Fragile means the only thing available was the element's position — "the 3rd button in the 2nd panel". That works today and breaks the next time somebody reorders that panel. It's a warning, not an error.

The fix for a fragile selector is to add data-hintuition-id="something" to the element and pick it again. One attribute, and the tooltip survives every redesign after it.

Elements inside a web component (shadow DOM) can't be pointed at yet. We say so when you click one rather than saving a selector that would silently never match.

What it says

Name is for you, not your users — it's how the experience is listed in the dashboard. Something like "Autumn release announcement" beats "Modal 3" when you come back to it in six months.

Title and Message are what people read. Titles can run to 200 characters and the message to 2,000, though shorter almost always does better in a banner.

A button is optional. Give it Button text and a Button link and both have to be filled in — a button with nowhere to go is a dead end, so we ask for the pair. Button text is capped at 60 characters.

Links must start with http:// or https://, and must be absolute. Relative links like /pricing are rejected: your message renders inside your own app, and a relative link is ambiguous about where it should land.

Multi-step flows

An experience can be more than one message. Press + Add another step and it becomes a flow people walk through in order — a welcome sequence of modals, or several tooltips leading someone across a page.

Every step uses the same surface. A flow is three modals or three tooltips, never a modal that turns into a tooltip halfway through. Pick the surface once, at the top, and it applies to the whole thing.

Once there's a second step, a numbered list appears above the content fields. Click a step to edit it — the title, message, button and target below always belong to whichever step is selected. Use and to reorder, and × to remove one.

Two refusals you can hit:

  • Twenty steps is the maximum. Real flows are three to seven; past that, people stop reading rather than stop clicking.
  • You can't remove the last step. An experience with no content can't be published and wouldn't show anything, so the × is disabled when one step is left. Archive the whole experience instead.

Reordering and removing are safe for people who are already partway through: the steps keep their identity, so someone on step 2 stays on the message they were reading. If you delete the exact step someone is on, they start the flow again from the top rather than getting stuck.

Only show this step on this page

Each step can carry its own page restriction — the field appears under the message once there's a second step. Leave it blank and the step shows wherever the flow is active; fill it in and that step only appears on those pages.

This is how a flow spans pages. Give step 1 /dashboard and step 2 /exports, and someone who finishes step 1 sees nothing more until they navigate to /exports themselves — at which point step 2 is waiting for them. We never move anyone's browser for them.

It narrows the experience's own Only on pages starting with setting rather than replacing it. Keep that one broad enough (or blank) to cover every page a step lands on. See Who sees it, and how often.

Back, Next and Done

Every step shows ◀ Back, a Step 2 of 3 counter, and Next ▶ — or Done on the last one.

Back reviews, it doesn't rewind. It steps through what someone has seen during that visit, and it's greyed out on the first step they saw. If they close the tab on step 3 and come back tomorrow, the flow resumes at step 3, not wherever Back last took them — progress only ever moves forward.

An in-progress flow ignores the Show again after cap for 24 hours, so people can cross pages at their own pace without the flow going quiet on them. After that it goes back under the usual cap.

Dismissing vs. finishing

These are different, permanent outcomes, and the difference is what tells you whether a flow works.

  • Dismissing — the × on any step. The rest of the flow stops there.
  • FinishingDone on the last step. The flow is complete and won't return.

Both are cleared only by Reset audience (below), which puts people back at step 1.

One flow is one published experience, whatever the step count — a seven-step onboarding tour uses a single slot on your plan, the same as a one-line banner.

Draft, published, archived

New experiences start as a draft. Drafts are private to your dashboard and can be edited freely.

Publishing marks an experience ready to go out. Archiving retires one without deleting it, so you keep the record of what you sent.

Who can publish. Anyone in your workspace can write and edit an experience. Publishing it — and unpublishing or archiving a live one — needs an owner or admin, because that is the step that puts something in front of your own users. Teammates with the member role can draft freely and will be told to ask when they try to publish. See Roles and permissions.

Each status has its own pill in the list, so you can tell them apart at a glance: a draft is outlined, a published experience is filled in, and an archived one is greyed back.

Publishing is the only status that counts toward your plan's limit. Unpublishing frees the slot again, and drafts and archived experiences never consume one — so on the Free plan you can hold three live announcements and as many drafts as you want.

If we can't reach your account service when you hit publish, publishing pauses with a message asking you to retry shortly. It doesn't fail silently, and it doesn't guess at your plan.

Reset audience

Dismissals outlive editing. If someone dismissed an experience and you then rewrite it, unpublish it, or publish it again, they still won't see it — the dismissal was about the message, and we can't tell a fixed typo from a fresh announcement.

Reset audience clears every dismissal on that experience, so the people who dismissed it become eligible again. Use it when you've genuinely changed what the message says, or if a dismissal looks wrong.

For a multi-step flow it clears completions too, and puts everyone back at step 1 — including anyone who was partway through. It is the only way back from either outcome.

Two things it deliberately doesn't do:

  • It doesn't change how often someone sees the experience. The "Show again after" cap still applies, so anyone shown it recently waits out that window. Reset undoes a dismissal, not the fatigue cap — it can't be used to re-nag someone who saw it an hour ago.
  • It doesn't reset your view counts. The record of how many times the experience has been shown is left intact — see Analytics.

It can't be undone, so it asks for confirmation first. If you'd rather not reset anyone, note that no dismissal suppresses an experience for more than 180 days on its own — see Who sees it, and how often.