Concepts
Projects, builds, rooms, links, tours, pages, next steps and the pipeline.
On this page
- Who owns what
- Account
- Workspace
- Project
- Project address
- Builds
- Build
- Container build
- Static build
- Live build
- pitch.json
- Apps and devices
- Controls and scenarios
- Story, or tour
- Pages
- Rooms and viewers
- Room
- Demo copies
- Viewer
- Viewer link
- Unlisted and listed
- Preview as viewer
- Next steps
- Responses
- Comments and replies
- Reactions
- Brand
- What you learn
- Visits
- Room events
- Journeys
- Analytics
- Pipeline and stages
- The community
- Community listing
- Community card
- Public address
- Plans and limits
- Plans
- Viewer-hours
- Capacity bounce
- Deploys a day
- Paused project
This page explains each thing Roomi is made of, in the words the CLI, the app and the room use for it, with a link to the page that covers it in full. Two people meet most of them from different sides: the publisher, who makes the demo, deploys it, sends it to viewers and follows them up, and the viewer, who opens it.
Who owns what
Account
A person. You sign in to the app with GitHub or Google (Google is open to invited testers for now), and can add a passkey in Settings to sign in with it instead. There is no sign-in by email. There is no separate sign-up: your first sign-in makes your account. The CLI signs in as your account too (Install the CLI).
Workspace
What owns projects and has a plan. Your first sign-in makes a workspace of your own, and every project, build, link and viewer record belongs to exactly one workspace. Nobody outside it can read any of them: every request is scoped to the workspace it is made in.
On the Team or Organisation plan a workspace can have other members, invited by a link you copy and send yourself. You can belong to several workspaces and switch between them. The brand the rooms wear is set once per workspace. Teams and invites covers members.
Project
One pitch: a demo, its builds, its pages, its viewer links and its room. It is what the plans count. The first pitch deploy --commit of a demo creates its project, named from name in pitch.json.
Deleting a project, from the Settings tab in the app, takes it out of your workspace and stops every link to it at once. You confirm by typing its address.
Project address
Every project has an address, made from its name when it is created: Harbour Cafe becomes harbour-cafe. Its room is at https://harbour-cafe.getroomi.app, and its demo is served from https://harbour-cafe--demo.getroomi.app, a separate origin, so the demo's code can never reach the room's session.
An address is lower-case letters, digits and single hyphens, 3 to 40 characters, starting and ending with a letter or a digit. A double hyphen is never allowed, because it is how the demo's origin is named. Names the platform uses itself, such as www, app, api, docs and pitch, are reserved, and names that borrow someone else's trust, such as ones containing paypal, bank or login, are refused.
An address is fixed once the project exists, because links already sent point at it; renaming a project changes its name, not its address. A deleted project's address is held for 30 days before anyone can use it again. pitch deploy --project <slug> chooses an address other than the one made from the name.
Builds
Build
One deployed version of a demo: the built files, the pitch.json they were deployed with, who deployed it, and an optional note (pitch deploy --note). A project keeps every build. One of them is live; the app's Builds tab lists them all, with who deployed each and when it was live, and can make any earlier one live again.
Container build
A demo with a server: an API and the apps it serves, built from a Dockerfile at the project's root. pitch deploy builds the image and takes its /app folder and start command, and the platform runs that on its own runner image, one copy for each viewer link. Container demos has the build contract, and Your first container demo walks through one.
Static build
A built folder of HTML, CSS and JavaScript with an index.html at its root: most single-app demos, and anything built with Vite. There is no server and no container, so it opens at once and costs almost nothing to run. It has no demo controls, and its tour's steps run nothing. Static demos covers it.
Live build
The build a project's room shows. pitch deploy --commit makes each new build live as it registers it, and the Builds tab can make an earlier one live again. Viewers get the change on their next page load; nobody's link changes. A container demo's copies are per build, so a viewer starts on a fresh copy of the new build.
pitch.json
The manifest at the root of the demo, which says what the build is: container or static, the apps it holds, its health route, its demo controls, its tour and its pages. The room is drawn from it, and shows a viewer nothing it does not declare. pitch init writes a first one by reading the repository. pitch.json has every field.
Apps and devices
An app is one surface of the build that the room can show: a phone app, a tablet console, a dashboard, a wall screen. A build has between 1 and 12, each served under its own path on the build's one origin. The room gives each app a tab, and draws it in the frame of the device it is for, at that device's real size, scaled to fit.
The devices are phone, tablet, laptop, screen (a wall or a TV) and none, for no frame. A viewer can switch the frame, show the app full screen, open it in a tab of its own, or open it on their phone. The app a build marks as default opens first; the Room tab in the app sets the order of the tabs.
Controls and scenarios
The buttons a publisher's own launcher page used to hold, lifted into the room. A container build can declare a reset, the call that puts the viewer's copy back to its seeded start, and up to 20 scenarios, each a button that makes one call on the viewer's copy. The room lists them beside the demo, under Drive the story, or More to try when there is also a tour. When a call answers JSON with a message, the room shows it to the viewer as done. Container demos covers demo routes.
Story, or tour
The guided tour the room offers each viewer, declared as story in pitch.json: up to 20 steps, each with a title, a line or two saying what to notice and why, the app to show, the page of it to open and the frame to show it in, and, on a container build, up to 8 calls to make on the viewer's copy first. A step can also name a part of the page for the room to ring.
The room offers the tour on arrival and runs nothing until the viewer takes it. They can go back, go on, jump to any step from the outline, or leave to explore on their own. It is how the demo gets told when you are not in the room. Writing the tour covers writing one.
Pages
What a viewer reads beside the demo: the narrative, a briefing, an architecture document. Each page is one Markdown or self-contained HTML file, listed in the room under Read more. Pages named in pitch.json upload with every deploy; more can be added from the CLI, the app or Claude without deploying. Pages covers them.
Rooms and viewers
Room
What a viewer opens: your demo on a stage, in its device frame, with the tour, the controls, your pages and the next steps around it. It wears your name, or your brand on a paid plan, and a notice on every room says the demo runs on mock data. A room opens only for someone it lets in: a viewer with a link, a member of your workspace previewing it, or anyone at a listed project's public address. To everyone else its address answers Not found.
Demo copies
Each link to a container demo gets its own running copy of the build, started when the room is opened and seeded fresh, so nothing one viewer does reaches another. Everyone who comes in through the same link shares that copy. A copy stops after 3 minutes that nobody is using it, and after 2 hours at most; the room then offers to resume it, from the seed. Your first container demo has the timings.
Viewer
A person in a room. Under a private link there are two kinds: the named viewer, the person you made the link for, and forwarded viewers, anyone else who opened the same link and said who they are. At a listed project's public address, visitors are anonymous and counted without being identified, unless they sign in to comment.
Viewer link
A private link to a room for one named person, on Pro and up. It carries a key only its address holds, can be copied again by your workspace if the viewer loses it, can expire after a number of days you choose, and can be revoked at any time. A revoked or expired link answers Not found. Sharing a private link covers them.
Unlisted and listed
Every project starts unlisted: a draft only members of its workspace can open. Listing it on the community, which you choose to do on any plan, gives it one public address anyone can open, as soon as its card and build pass Roomi's checks. On Free, unlisted and listed are the only two ways a room can be seen, because Free has no private links.
Preview as viewer
A button on each project in the app. It opens the room in a new tab exactly as a viewer sees it, marked as a preview. Nothing done there is recorded, and commenting, reacting and answering are off. It works on every plan, and is how you see an unlisted project.
Next steps
What the room asks a viewer at the end: What happens next?. There are six answers, and on a paid plan you choose which to offer, in which order, and in your own words:
| Answer | What the viewer does |
|---|---|
| Book a meeting | Opens your booking page, if you gave one, or asks you for a meeting |
| Yes — send the proposal | Says they want to go ahead, and opens your proposal, if you gave a link to it |
| Get back to me | Chooses in a week, in a month, or next quarter |
| Bring in a colleague | Names someone who should see it, for you to invite |
| Ask a question | Writes to you; you reply in the app, and they read it in the room |
| Not for me | Says why if they like: price, timing, fit, or already solved |
On Free, a room offers only Ask a question. Brand and next steps covers setting them.
Responses
A viewer's answer to the next step, with its detail: when to get back to them, why not, who the colleague is, what the question is. Each shows in the app against the viewer, and moves them in the pipeline.
Comments and replies
In the room, Comment lets a viewer pin a comment to a point on the app, or mark an area of it, and say what they think. Each comment records the app and where on the stage it was left. You read comments in the app's Feedback tab, reply, and resolve them; the viewer reads your latest reply in the room under Replies, and can answer it. A viewer under a private link is asked for an email once, before their first comment or reaction; at a public address, commenting needs a sign-in with GitHub or Google. Running a pitch covers feedback.
Reactions
A heart, a clap and a fire, in the room's header. One of each per person.
Brand
Your name, an accent colour and a logo, set once for the workspace in the app's Settings, which the rooms wear on a paid plan. On Free, rooms carry a small Made with Roomi mark instead; what you set is kept for when the workspace has a paid plan. Brand and next steps covers it.
What you learn
Visits
One viewer's time in the room, from arriving to leaving, with the seconds they spent in each app and on each page. Visits are what viewer-hours and the pipeline are measured from.
Room events
The moments of a visit the room reports as they happen: arriving, switching app, choosing a frame, opening a page, running a scenario or the reset, each step of the tour, opening the next steps, and leaving. They put a visit in order. Room events lists every one.
Journeys
One viewer link's visits in order, in the app's Activity tab: what they opened, ran, read, said and chose, how far they took the tour, where each visit ended, and who else opened the link. Journeys are a paid-plan feature.
Analytics
A project's, or the whole workspace's, visits over a date range: views, viewers, time in the room, viewers turned away, next steps chosen, time per app, page opens, scenario runs, and how far people took the tour. Days are counted in UTC. On Free, analytics are total views only; the rest is shown locked. Analytics and the pipeline covers them.
Pipeline and stages
Every viewer link as a card on a board, in the column for its stage:
| Stage | When |
|---|---|
| Sent | The link has not been opened |
| Opened | One visit |
| Engaged | Two or more visits, two minutes or more in the room, or a question or colleague answered |
| Said yes | Their latest decision was a meeting or a yes |
| Later | Their latest decision was "get back to me" |
| Not now | Their latest decision was "not for me" |
The stage is worked out from what the viewer did. You can move a card to another column, and it stays where you put it, with what the evidence says shown beside it as a suggestion until you put it back. You can also mark a deal won, lost or later, set a date to follow up with a note, and keep notes on the viewer that are never shown in the room. Nothing is sent to anyone from the pipeline. Analytics and the pipeline covers it.
The community
Community listing
Where a project is shown publicly, on getroomi.com's community. Listing is opt-in, on any plan, and needs a live build and a community card. Asking to list checks the card and the build there and then: if they pass, the project is public at its one address at once; if a check fails, it is not listed, and the reason is said beside the card. A quick check for anything that might identify a real business only warns, and never blocks. Roomi may take a listing off later, with a comment saying why. Unlisting takes it off at once. The community covers it.
Community card
What strangers see of a listed project: a title of up to 60 characters, one line of up to 140, and a cover image, PNG, JPEG or WebP, up to 1 MB. It is written apart from the pitch, because strangers see the card and prospects see the pitch. Changing a listed card's words or cover checks it again: it stays listed unless a check fails, and a new cover shows once its own check has passed.
Public address
A listed project's room at its address, with no link: https://<project>.getroomi.app. Everyone there shares one copy of the demo, five people at a time, and is counted anonymously.
Plans and limits
Plans
| Plan | Price, before VAT | Projects | Private links | Viewer-hours a month |
|---|---|---|---|---|
| Free | £0 | 5 | None | None; 100 hours of viewing at public addresses |
| Pro | £4 a month | 5 | A link per viewer | 50 |
| Team | £5 a seat a month, 2 to 5 seats | 7 a seat | A link per viewer | 100 a seat |
| Organisation | Contact sales | 200 | A link per viewer | 10,000 |
A year costs ten months' price. Free runs static demos only; the paid plans run live app (container) demos too. Organisation is a team's plan by arrangement, for more than 5 people, never bought in the app, and its limits are agreed with each team. Every workspace starts on Free: paid plans are defined, but cannot be bought yet, and the app says so wherever one would help. Plans and limits has every limit and what happens at each.
Viewer-hours
The time viewers spend in your rooms, measured by the room per app and per page, and added up over the visits started in a calendar month, in UTC. It is what paid plans meter. Time in a live app counts twice, and at a public address only time in a live app counts. The app warns you from 80% of the allowance. At 100%, rooms take no new visits until the month turns, no live demo starts, anyone already in a room is not cut off, and no new links can be made. Free has none: its public addresses share 100 hours of viewing a month instead, and past them new visitors are turned away until the month turns.
Capacity bounce
A viewer a full room turned away: a public address that already has five people in it, or a container demo already running as many copies as its plan allows. The viewer is told the demo is full and to try again in a few minutes. Each is counted once per viewer per hour, and shown in the app as Turned away; from three in a month, the app says a paid plan would have let them in.
Deploys a day
Free allows two deploys in any 24 hours. Paid plans have no limit.
Paused project
A project whose room admits nobody for now. Nothing is deleted either way, and there are two kinds of pause, kept apart:
- Yours. You pause a room from its Settings, with an optional note, and resume it there. Every working link shows a page saying the room is paused, with your note; deploys and new links still work. Pausing a room has the details.
- The platform's. When a workspace has more projects than its plan allows, for example after moving to a smaller plan, the ones used least recently are paused until the plan allows them again; a suspended workspace or a project taken down is paused too. Such a project takes no deploys or new links, and a viewer sees only "Not found".
Resuming your own pause never lifts the platform's.