Brand and next steps

Your name, colour and logo in the room, and what it asks a viewer at the end.

On this page

A room wears your brand, not Roomi's: your name, your accent colour and your logo. And it ends with a question: what happens next. This page covers both: how the brand is set and where it shows, which answers a room can offer a viewer, what each answer does to that viewer's place in your pipeline, and what a plan without them gets instead.

Your brand in the room

A brand is three things, set once for the workspace and worn by every room in it: a name, an accent colour and a logo. Each is optional.

Name

The name the room calls you by: in its header, in its browser tab ("Corner for Bullring · Northwind"), and in its words to the viewer ("Send to Northwind", "Ask Northwind", "Book a meeting with Northwind"). Up to 80 characters.

Left empty, the room uses the workspace's name. A workspace that was named after an email address when it was made is never shown to a viewer by it: the room uses the project's name instead.

Accent colour

A colour as #rrggbb, used for the room's buttons, links and highlights. It has to read: at least 3:1 against the room's background and its cards, as WCAG asks of a shape. Where the room sets words in it, or words on it, it uses the nearest darker shade of your colour that reads at 4.5:1, and the words on a button are white or the room's ink, whichever reads better. The colour is checked when you save it and again when the room draws it.

When a colour is refused

A colour a viewer could not read is refused before anything is saved, with each pair that fails and the nearest shade of your colour that would pass:

{
  "error": "unreadable: The accent is 1.07:1 on the background; it needs 3:1. Try #7a7a00.",
  "reason": "contrast",
  "problems": [
    {
      "token": "accent",
      "role": "accent",
      "against": "the background",
      "ratio": 1.07,
      "needed": 3,
      "suggestion": "#7a7a00",
      "words": "The accent is 1.07:1 on the background; it needs 3:1. Try #7a7a00."
    }
  ]
}

A colour saved before this check that does not pass it is not drawn: the room uses its own accent instead, and GET /api/brand lists the colour's problems.

A PNG, JPEG or WebP image of up to 256 KB (262,144 bytes), from 16 × 16 to 2048 × 2048 pixels, and no more than 8 times as wide as it is tall. It takes the place of the initial the room's header otherwise shows beside your name, and it is the room's icon in the viewer's browser tab.

The room serves the logo itself, from your brand's own row: no storage address for it ever reaches a viewer's browser. A new logo replaces the old one, which is deleted.

Made with Roomi

Your own branding is a paid plan's (Plans and limits). On a plan without it, which is Free today, a room:

  • uses the workspace's name, the room's own colours and the initial mark;
  • carries a small Made with Roomi link at the foot of the stage, beside the notice that the demo runs on mock data.

Whatever you set is kept, and applies as soon as the workspace is on a plan that includes it; nothing needs setting again.

Where it does not show

A few pages a viewer can meet before the room itself use the workspace's name and the room's own look, not your brand: "This demo is full right now", "This room is not taking visits right now", and the plain page shown when an app is opened in its own tab before the demo has started. "Are you Priya?" and the page that asks for an email before the room opens do wear your brand.

The room theme

On a team's plan (Studio and up) the room can wear more of your look than an accent: a theme, set once for the workspace.

Token What it sets Takes
tour The guided tour's colour: its card's head, its dots and its buttons #rrggbb; unset, the accent
highlight The ring drawn over the demo for a tour step, and comment mode's outline #rrggbb; unset, the accent
attention A mode the viewer can leave, such as End tour #rrggbb
background The page behind everything #rrggbb, light
surface The cards, the notes and the panels #rrggbb, light
text Words, and the two dimmer shades worked out from it #rrggbb
radius The corners square, soft or round
font The typeface, from the viewer's own system system, serif or rounded

Every colour is checked as the accent is: each tone at least 3:1 on the background and the cards, words at 4.5:1 on everything they sit on, the highlight at 3:1 on white, since it rings the demo's own pixels, and the background and the cards light. Themes are light only for now.

No theme reaches the notice that the demo runs on mock data, the preview's notes, or the pages a viewer meets when a room is paused or turning visits away: those keep the room's own look.

A theme is kept whatever the plan. On a plan without it, rooms wear your brand in the room's own colours, and "Preview as viewer" says your theme is kept and when it shows; a plan with it shows it again exactly as you left it.

Endpoint Does
GET /api/brand/theme The theme as saved, whether the plan shows it, and what the room draws
POST /api/brand/theme Saves it whole: a token left out is the room's own
POST /api/brand/theme/check Checks a theme, and saves nothing
POST /api/brand/theme/reset Removes it
POST /api/brand/theme
Content-Type: application/json

{ "theme": { "tour": "#6a3fb5", "background": "#fdf8ef", "font": "serif", "radius": "round" } }

Setting the brand in the app

In the app, Settings, Customisation, has a Brand panel:

  • Name in the room: left empty, the workspace's name.
  • Accent colour: as #rrggbb. Save brand saves the name and the colour.
  • Logo: choose a file, then Upload logo. Remove logo takes it away.
  • Preview: the logo, the name and a swatch of the colour, as saved.

Each project's Room tab shows the brand as it stands, with Edit the brand, which goes to that panel. On Free both say that rooms carry "Made with Roomi" instead, and that your brand is kept for later.

Setting it through the API

The brand is the caller's workspace's, so none of these takes an id.

Endpoint Does
GET /api/brand The brand, the workspace's name, and whether the plan shows it
POST /api/brand Sets the name and the colour; null clears either
PUT /api/brand/logo Uploads a logo: the image's bytes as the body
GET /api/brand/logo The logo's bytes
POST /api/brand/logo/remove Removes the logo
POST /api/brand
Content-Type: application/json

{ "name": "Northwind", "accent": "#1f6feb" }
{
  "name": "Northwind",
  "accent": "#1f6feb",
  "logo": { "type": "image/png", "bytes": 48213 },
  "workspaceName": "Northwind Agency Ltd",
  "planAllows": true
}

A logo is uploaded as its own bytes, with its type in Content-Type and its size in Content-Length. A request without a length is refused with 411; a type other than PNG, JPEG or WebP, or a size over 256 KB, is refused before anything is stored.

PUT /api/brand/logo
Content-Type: image/png
Content-Length: 48213

(the image's bytes)

Next steps

A room ends every visit with a question: What happens next? A button at the foot of the room opens it, and the viewer answers in one or two clicks. Each answer reaches you, moves the viewer along your pipeline, and tells you what to do next.

There are six answers. Each project chooses which it offers, in what order, and in what words:

Answer Button, by default Line under it, by default What the viewer does Pipeline stage
meeting Book a meeting Pick a time with you Opens your booking page, or asks you for a meeting Said yes
yes Yes — send the proposal We want to go ahead Opens your proposal, or says go ahead Said yes
later Get back to me In a week, a month, next quarter Picks in a week, in a month, or next quarter Later
colleague Bring in a colleague Someone else should see this Gives a colleague's name, and an email if they like Engaged
question Ask a question You reply in the room Writes a question, up to 2,000 characters Engaged
no Not for me Tell us why, if you like Picks price, timing, not the right fit, already solved, or would rather not say Not now

A new project offers all six, in this order, in these words.

Book a meeting and Yes

These two can carry a link: your booking page (a Cal.com or Calendly page, say) for a meeting, your proposal for a yes. It must be an https:// address, up to 500 characters.

  • With a link, the viewer sees Open the booking page (or Open the proposal), which opens it in a new tab. Opening it counts as the answer: you hear they chose it, whether or not they then book.
  • Without one, the viewer sees "Northwind will be in touch to find a time" (or "Northwind will send the proposal") and a button that sends the answer.

Roomi does not see the booking itself: it lands in your calendar tool, not in the app.

Get back to me

The viewer picks In a week, In a month or Next quarter, and the answer carries which. Nothing is scheduled for you: set a follow-up date on the viewer's card in the pipeline, which reminds you there and sends nothing.

Bring in a colleague

The viewer gives a name (required, up to 80 characters) and an email (optional), and asks you to invite them. No link is made for the colleague: if you want them in, make them a link of their own in the Links tab and send it.

Ask a question

The viewer writes a question, and it reaches you as their answer, with its text: in their Activity, and on their pipeline card. From a private link it is not a comment, so there is no thread for it in the room. Reply to them directly. A viewer's comments on the demo are where replies in the room happen (Running a pitch).

Not for me

The viewer can say why, from a short list: price, timing, not the right fit, already solved, or "I'd rather not say". A no with a reason is worth more than silence.

Choosing them in the app

Each project's Room tab has a What happens next panel: every answer, in the room's order, with:

  • Offer: whether the room offers it;
  • Button: its words, 1 to 60 characters;
  • Line under it: up to 120 characters, or empty for the room's own wording;
  • Booking page or Proposal link, for a meeting and a yes;
  • Up and Down, to set the order;
  • a bin, to delete it.

Deleting a step asks first: "“Get back to me” leaves the room’s What happens next, and viewers can no longer choose it. Its wording is kept: you can add it back below." A deleted step is never offered and never comes back by itself. It waits under Deleted steps, with its words, until you choose Add back. Unticking Offer hides a step for now; deleting it takes it off the list.

Save next steps saves the lot, and the panel says what the room offers now. The room reads it on the viewer's next page load. With every step deleted, the room offers nothing to answer at the end of a visit.

Choosing them through the API

GET /api/projects/:projectId/next-steps returns every kept answer's setting, the deleted ones under removed, whether the plan lets you choose, and what the room offers now. POST to the same address sets the list as it should be: each step at most once, in the order the room lists them. A step left out is deleted, and keeps its words in removed; sending it again adds it back. A link on an answer other than a meeting or a yes is refused. This one leaves out "Bring in a colleague", which deletes it:

{
  "steps": [
    { "step": "meeting", "offered": true, "label": "Book a call", "sub": "Thirty minutes with Priya's team", "url": "https://cal.com/northwind/intro" },
    { "step": "yes", "offered": true, "label": "Send the proposal", "sub": "", "url": null },
    { "step": "question", "offered": true, "label": "Ask a question", "sub": "", "url": null },
    { "step": "later", "offered": true, "label": "Not yet", "sub": "Remind us later", "url": null },
    { "step": "no", "offered": true, "label": "Not for us", "sub": "", "url": null }
  ]
}
{
  "steps": [ … ],
  "removed": [
    { "step": "colleague", "offered": false, "label": "Bring in a colleague", "sub": "", "url": null }
  ],
  "planAllows": true,
  "offered": ["meeting", "yes", "question", "later", "no"]
}

What a viewer sees

The What happens next? button sits at the foot of the room, one click away whatever the viewer is doing. It is not shown when no answer is offered, nor in "Preview as viewer".

It opens a panel headed What happens next?, with one button per offered answer, each with its line. Choosing one shows what that answer needs (a choice of when, a name, a question) with ← Back to choose again. Once it is sent the panel says Sent to Northwind; if it did not send, That didn't send, and to try again in a moment.

A viewer can answer more than once, and change their mind: each answer is kept, and the latest decision is the one that counts.

What an answer does

Each viewer's stage in the pipeline is worked out from what they did:

  1. The latest answer that is a decision wins: a meeting or a yes is Said yes, get back to me is Later, not for me is Not now.
  2. A question or a colleague is not a decision; it counts as Engaged.
  3. With no answer, two visits or two minutes in the room is Engaged, one visit is Opened, and none is Sent.

You can place a viewer in another stage yourself on the pipeline, and your placement holds. The stage their activity suggests stays beside it ("Their activity says: Said yes", with Use that), and is never applied for you. You can also mark the deal won, lost or later, apart from the stage. Analytics and the pipeline covers the board.

Where you read the answers

  • Home: the latest answer across your projects: "Priya Shah answered “Book a meeting” on Corner for Bullring."
  • Activity: each viewer's visits in order, with Answered, the answer, and what they wrote or picked, at the moment they did.
  • Pipeline: each viewer's card, with their stage and their latest answer.
  • Analytics: Next steps chosen, answers per next step across a date range.
  • Claude: the connector's read_feedback tool reads viewers' answers and their comments.

On Free

Choosing next steps is a paid plan's. On a plan without it:

  • a room offers only Ask a question, and only while it is ticked;
  • the app's panel still takes your choices, says "On Free a room offers only “Ask a question”", and keeps them for when the workspace is on a paid plan.

Free has no private links, so its rooms are an unlisted draft that only your workspace opens, or listed on the community at one public address. At a public address the question is sent as a comment, from someone signed in with GitHub or Google, and reaches you in Feedback with their name, handle and picture, never their email. See Running a pitch.