Catomni
User guides

The keys to the whole building

The studio owner guide

You are the owner. That means every permission in the product, plus a short list of things nobody else at your studio can do — including your admins. This guide walks the setup in the order it actually works: get the studio created, dress it up, bring in staff, build the timetable, then connect Stripe.

What this role can do

You can

  • Everything an admin can do — all 18 permissions in the product are yours by default.
  • Manage staff: invite people, create accounts for them, change roles, and deactivate or restore access.
  • Hand any non-owner a custom access set that overrides their role, module by module.
  • Set up Stripe Connect and take card payments. This is owner-only; an admin cannot start, resume, or re-check it.
  • Delete the studio, from the Danger Zone in Studio Settings.
  • Approve or reject your own timesheet — everyone else is blocked from reviewing their own.
  • Assign the Admin role. It does not appear in the role picker for anyone else.

You cannot

  • Make a second owner. The invite and role forms offer only Admin, Instructor and Front Desk — there is no tenant-side path to grant the owner role. Ask Catomni support.
  • Step down, hand over, or remove yourself while you are the only active owner. Both demoting and deactivating the last owner are refused with "Cannot remove the last owner."
  • Restrict an owner. The access editor refuses with "An owner’s permissions cannot be restricted."
  • Edit your own permissions — "You cannot change your own permissions."
  • Undo a studio deletion from inside the app.

Create your studio

Any signed-in account can create a studio, and whoever creates it becomes its owner.

Create the studio

Sidebar → Studios · /studios

  1. Open Studios in the sidebar and click Create Studio. If this is your first, the empty state calls the button Create Your First Studio.
  2. The dialog is titled "Create New Studio". Fill in the required fields: Studio Name, URL Slug, Street Address, City, State, ZIP Code, Phone and Timezone.
  3. Watch the URL Slug label as you type. It appends "Available" in green or "Already taken" in red. The field force-lowercases your typing and strips anything that is not a letter, number or hyphen.
  4. Fill in the optional fields if you have them: Description, "Apt, Suite, Unit", Email and Website.
  5. Click Create Studio.
  • Create Studio stays disabled while the slug reads "Already taken". Pick another.
  • The slug is what every public URL is built from — your studio’s public page is /contact/your-slug — so choose one you are happy to print.
  • There is a rate limit: 3 studios per account per 24 hours, and 5 per IP address. Going over returns a message, not a crash.

Settings, branding and your public page

Studio Settings is a seven-tab page: General, Classrooms, Classes, Branding, Landing Page, Payments and Emails. It needs the Manage studio settings permission — owners and admins hold it by default. Without it, opening the page quietly returns you to the studio dashboard rather than showing a refusal.

Fill in your studio details

Sidebar → Administration → Studio Settings · /studios/{studioId}/settings

  1. Open the General tab. The card is called "Studio Information".
  2. Update Studio Name, URL Slug, Description, Street Address, "Apt, Suite, Unit", City, State, ZIP Code, Phone, Email, Website and Timezone.
  3. Click Save Changes.
  • Phone is US-only: the help text reads "US numbers only. Saved as +1XXXXXXXXXX."
  • If details are missing you get a red alert above the card headed "Finish setting up your studio", listing what is absent. It is a prompt, not a block — the save still goes through. Owners often assume it is stopping them. It is not.

Control your listing in the Catomni Studio Directory

Studio Settings → General

You are listed by default. This is an opt-OUT, not an opt-in — there is nothing to do here unless you want to be hidden.

  1. On the General tab, find the "Catomni Studio Directory" card.
  2. The "Show my studio in the Catomni Studio Directory" switch is already on. Turn it off to be hidden.
  • There is no Save button on this card. The switch writes immediately and confirms with "Your studio is hidden from the directory", or "Your studio is listed in the directory" when you turn it back on. If the write fails the switch flips back on its own.
  • The directory is visible to signed-in Catomni account holders only, not to the open web. Your Contact Now inquiry page stays public either way, so a link you have already shared keeps working for anyone.
  • A newly created studio is not directory-approved when it is created, so the switch is your half of the decision rather than the whole of it. Both must hold: a platform admin approves that you may be listed, and this switch says whether you want to be.

Put your logo and colours on it

Studio Settings → Branding

  1. Open the Branding tab. It has three cards: Logo, Brand Colors and Preview.
  2. Upload your logo. The card notes where it shows up: "Appears in the sidebar, studio switcher, and kiosk header."
  3. Set your colours in Brand Colors — the inputs are placeheld with #084054.
  4. Check the Preview card, then click Save Branding.
  • Save Branding is disabled while an upload is still running. Wait for it.

Publish your landing page

Studio Settings → Landing Page

Every studio gets a public page at /contact/your-slug. The Landing Page tab controls what visitors see there.

  1. Open the Landing Page tab. The "Your landing page" card shows the real public URL in a read-only field.
  2. Click Copy to put the link on your clipboard — it confirms with "Link copied — add it to your website". The icon button beside it opens the page in a new tab.
  3. In the "Sections" card, switch on the blocks you want: "At a glance", "Programs and classes", "Weekly schedule", "Membership pricing", "Belt or rank path" and "Visit us".
  4. In "Words on the page", write any of the Opening line, Headline, Sub-headline, Offer badge, Button label, Form heading, Closing headline and Highlights. Every one is optional.
  5. Add a testimonial in "What people say" — Quote and "Who said it".
  6. Decide whether the "Enquiry form" card should "Require a phone number".
  7. Save at the bottom of the page.
  • Sections only render when you have the data behind them. The card says so: "Each section only appears when you have the data behind it, so turning one on never produces an empty block."
  • "Membership pricing" publishes a rate card, so it is off until you deliberately turn it on. "Belt or rank path" is also off by default and only shows a program with at least three ranks.
  • Turning off "Publish the full landing page" does not take the page down. The link still works — visitors just get a simple contact form instead.
  • Leave any of the "Words on the page" fields blank and a sensible default is used.

Decide what parents may do to their own membership

Studio Settings → Payments

  1. Open the Payments tab.
  2. In "Membership Pauses", decide whether to "Allow parents to pause their own membership", then set "Maximum pause length (days)" and "Pauses per year". Save that card.
  3. In "Membership Cancellations", decide whether to "Allow parents to cancel their own membership". Save that card too.
  • Each card saves separately. Two cards, two save buttons.
  • Despite the name, this tab has no Stripe setup on it at all. Stripe lives on the Billing page — see the payments section below.
  • Leave self-service pausing off and families can still ask: they get a dated request that you approve or decline instead.

Add your classrooms

Studio Settings → Classrooms

A classroom is a prerequisite for creating a class, so this is worth doing before you build the timetable.

  1. Open the Classrooms tab and click Add Classroom.
  2. In the "Add Classroom" dialog fill in Name, Capacity, and optionally Description.
  3. Save. The table lists Name, Description, Capacity and Status (Active or Inactive).
  • The row menu edits a classroom or deactivates it.
  • You can also add one without leaving the class form — see "Create a class" below.

Set the options your class form offers

Studio Settings → Classes

  1. Open the Classes tab.
  2. Edit the lists in "Class Form Options" — these are the categories and skill levels that appear in the class create form.
  3. Set "Age Limit Unit" to Months or Years. This flips the age labels on the class form.
  4. Manage saved class and program templates in "Saved Templates". Deleting one asks "Delete this template?" first.

Build your team

Staff is an owner-only item in the sidebar under Administration. It is gated on Manage staff, which no other role holds by default — an admin only sees it if you grant it to them personally.

Invite a staff member who will make their own account

Sidebar → Administration → Staff · /studios/{studioId}/staff

  1. Open Staff and click Invite Staff.
  2. The dialog is "Invite a Staff Member". Enter their Email address.
  3. Pick a Role. The options carry their own descriptions: Admin — "Full access except owner actions"; Instructor — "Check-in, attendance, milestones"; Front Desk — "Members, check-in, attendance". Instructor is the default.
  4. Click Send Invite. An email goes out automatically.
  • Owner is deliberately not on the list. There is no way to create a second owner from inside a studio.
  • This is also the right path when the person already has a Catomni account — the invite reattaches their existing profile rather than duplicating it.

Create an account for someone who will not check their email

Staff → Create Account

Useful for the front desk hire who is standing in front of you. It produces a temporary password you read out once.

  1. Click Create Account. The dialog is "Create a Staff Account".
  2. Fill in First name, Last name, Email address and Role.
  3. Click Create Account.
  4. The dialog switches to "Account created" and shows a Temporary login block with Email, Password and Role. Use the copy button.
  5. Give it to them, then click Done.
  • The temporary password is shown once and never again. Copy it before you close the dialog.
  • The dialog tells them what to do next: "have them sign in and change it in Account settings."
  • If that email already has an account this refuses and points you at Invite Staff instead.

Chase or revoke an invite

Staff → Pending Invites

When you see thisThe Pending Invites card only appears when invites exist.

  1. Find the person in the Pending Invites card.
  2. Click Copy link to send it yourself — over text, or in a message. The card explains: "Invites expire after 7 days. An email was sent automatically — copy the link if you’d like to share it directly too."
  3. To cancel one, click the X on the row to revoke it.
  • Expired invites are marked Expired in red.

Change someone’s role

Staff → Active Staff

  1. Find them in the Active Staff card — "Current team members with access to the studio dashboard."
  2. Use the role dropdown on their row.
  3. Confirm in the "Change role?" dialog.
  • Admin appears in that dropdown only for an owner. Nobody else can promote someone to Admin.
  • Your own row always shows a static badge instead of a dropdown. That is because it is yours, not because of your role — you cannot change your own role here whoever you are.
  • Another owner’s row is a working dropdown when you are an owner yourself, so a studio with two owners can demote one. An admin with Manage staff sees a static badge on any owner row instead — they can manage everyone below owner and no further.
  • If the person’s access has been customised, changing their role does NOT change their permissions. The confirmation dialog says so: their access stays exactly as you set it, and you have to go into "Edit access" to change it or reset them to their new role’s defaults. This surprises people — the role label moves and nothing else does.
  • Rows carry badges: You on your own row, and "Custom access" on anyone whose permissions you have overridden.

Give one person a custom set of permissions

Staff → row menu (⋯) → Edit access

This is the owner’s headline power. Roles are defaults; this replaces them for one person. An instructor can be handed financial visibility, and an admin can be cut back.

When you see thisEdit access is owner-only, and only on active, non-owner members. The row menu is hidden entirely on your own row and on any owner’s row.

  1. Open the row menu (⋯, labelled Actions) and choose Edit access.
  2. The dialog is "Access for {name}". Read its description — it tells you whether this person is still following their role defaults or already has a custom set.
  3. Work down the Module / Read / Write table. There is one row per module: Studio settings, Staff, Classes, Schedule, Members, Billing, Check-in, Attendance, Milestones, Messages, Announcements, Reports, Inquiries, Timesheets, Homework.
  4. Tick what they should have. Only Members, Billing, Attendance and Reports have a Read cell; Reports has no Write cell. Anywhere there is no separate permission you get an em-dash instead of a checkbox.
  5. Click Save access. To put them back on their role, use Reset to role defaults.
  • Saving REPLACES their access — it does not merge with their role. Unticking a box takes that access away. This is the single most misread thing on the page.
  • The dialog spells out the other trap: "Granting write access does not imply read access — tick both where a module offers both."
  • Reset to role defaults is disabled when the person is already following their role.
  • You cannot edit your own access, and you cannot restrict an owner.
  • Every change writes a row to the audit log.

Remove or reactivate someone

Staff → row menu (⋯)

  1. Open the row menu and choose Remove from studio.
  2. Confirm in the "Remove staff member?" dialog.
  3. To bring them back, find them in the Inactive Staff card — "Deactivated accounts — can be reactivated at any time." — and choose Reactivate.
  • The Inactive Staff card only renders when there are inactive members and you hold Manage staff.
  • You cannot remove yourself, and you cannot remove the last active owner.

Classes, programs and the calendar

Create a class

Sidebar → Classes · /studios/{studioId}/classes

  1. Click Create Class. The dialog that opens is headed "Create New Class".
  2. Optionally pick a template in "Start from template" — the placeholder reads "Blank class (optional)".
  3. Fill in Name, Description, Category, Skill Level, Classroom, the age minimum and maximum, and Capacity.
  4. Save.
  • No classrooms yet? The Classroom select shows "No classrooms yet" and offers an inline "Add a classroom" dialog right there — Name (placeholder "e.g. Studio A") and Capacity (placeholder "e.g. 20"). It saves you a trip to Settings.
  • The age fields are labelled in months or years depending on what you set on the Classes tab in Studio Settings.
  • Archiving a class asks "Archive this class?" and is reversible — archived rows offer Reactivate.

Build a program and its milestones

Sidebar → Programs · /studios/{studioId}/programs

Programs are "Structured curricula that group classes and milestones" — your belt or rank ladder, and the classes that lead up to each rung.

  1. Open Programs and click Create Program.
  2. Link classes to it. On a program’s own page, the "Link Classes" button opens a dialog of the same name.
  3. Add milestones and reorder them.
  4. Award a milestone to a student from the program page’s student list.
  • Creating and editing programs and milestones needs Manage classes. Awarding a milestone needs a different permission — Award milestones — which instructors hold and which does not let them create programs. Worth knowing when you decide who does what.
  • A program’s detail page carries a student progress table showing where everyone stands.

Add a recurring weekly time slot

Sidebar → Schedule · /studios/{studioId}/schedule

There is no "Add schedule" button. The dialog is opened by dragging out a time range on the calendar itself — this is the least discoverable control in the product, so it gets its own step.

  1. Open Schedule.
  2. Click and drag across the time range you want, directly on the calendar grid.
  3. The "Add Schedule Entry" dialog opens, pre-filled from the range you dragged.
  4. Set Class, Days of Week, Start Time and End Time. Instructor is optional — its placeholder reads "Select instructor (optional)".
  5. Save.
  • The drag handler is gated on Manage schedules. Without that permission, dragging simply does nothing — there is no error to tell you why.
  • Use the header controls to move around: previous and next arrows, Today, a date picker, the Day / Week / Month / List toggle, and the All Classrooms and All Instructors filters.

Put actual sessions on the calendar

Schedule → Generate Sessions

This is the step people miss. A recurring schedule entry is a pattern, not a calendar. Until you generate sessions, the calendar stays empty and nobody can be checked in.

When you see thisThe Generate Sessions button requires Manage schedules.

  1. On the Schedule page, click Generate Sessions.
  2. The dialog explains itself: "Create class sessions based on your recurring schedules. Sessions that already exist will be skipped."
  3. Choose how far ahead to generate: 1 week, 2 weeks, 4 weeks, 8 weeks or 12 weeks.
  4. Confirm. You get back either "Created N sessions" or "All sessions already exist".
  • Running it twice is safe — existing sessions are skipped, not duplicated.
  • Open a session on the calendar to cancel, edit or restore it. All three need Manage schedules.

Connect Stripe and take payments

Billing is gated on View financials. Missing it sends you to a permission-denied page rather than hiding controls. Beyond that, three actions are owner-only — starting or resuming Stripe setup, the embedded onboarding form, and "Re-check with Stripe". The rest of the page works for any staff member who can reach it.

Connect your Stripe account

Sidebar → Billing · /studios/{studioId}/billing

Only the owner can do this. Admins see the buttons, and Connect Stripe Account refuses them with "Only studio owners can set up Stripe". If you are an admin reading this, fetch the owner.

  1. Open Billing. While onboarding is incomplete you get a warning card at the top of the Overview tab.
  2. Read the "Have these ready" panel before you start. It lists what Stripe will ask for, split by business type.
  3. For a sole proprietor or individual: SSN last 4 digits, date of birth, home address, bank routing and account number, phone, and a website URL or a one-line description of the business.
  4. For an LLC or corporation: EIN, legal business name and address, business phone, bank routing and account number, a website or one-line description, and for you and anyone owning 25% or more — name, email, date of birth, SSN last 4 and home address.
  5. Click Connect Stripe Account and complete Stripe’s flow. The panel is honest about the effort: "Stripe collects this, not Catomni. It takes about 10 minutes if you have the numbers to hand."
  6. You land back on Billing, which syncs your status automatically.
  • Interrupted? The button becomes Resume Stripe Setup and picks up the same account — retrying does not create a duplicate.
  • Business type — individual versus company — is chosen inside Stripe’s flow and locks permanently the first time you start it. There is deliberately no selector in Catomni. Getting it wrong means talking to Stripe support, so read the two lists above before you click.
  • Come back from Stripe and navigate elsewhere instead of landing on Billing, and your status can read stale. Open Billing, or use the Refresh Status button beside Connect, to re-sync. Refresh Status is not owner-only — any staff member who can open Billing can click it.

Keep payouts running

Billing → Overview

  1. Once connected, the page shows a single green "Stripe connected" line rather than a banner.
  2. Below it, an account-health card appears whenever a Stripe account exists — before and after onboarding completes — and tells you what, if anything, Stripe still needs from you.
  3. When it reports something outstanding, follow it through to Stripe using "Continue in Stripe" or "Open Stripe dashboard", then click "Re-check with Stripe" on the health card to pull the new state back in.
  • The setup card that carries Connect and Refresh Status disappears once onboarding is complete. After that the health card is the whole of your Stripe surface, and "Re-check with Stripe" is the button that re-syncs.
  • "Re-check with Stripe" is owner-only: an admin sees the button but gets "Only studio owners can check Stripe requirements" on clicking it. The card says so in advance — "Only the studio owner can send these details to Stripe" — but only to a non-owner who can manage billing.
  • "Open Stripe dashboard" is an ordinary external link with no role check on it at all. Anyone who can open Billing can follow it; what they can then do is decided by Stripe, not by Catomni.
  • Billing has four tabs: Overview, Membership Plans, Promo Codes and Pause Requests. Pause Requests shows a pending count in brackets when families are waiting on you.

Who can do what

Four staff roles: owner, admin, instructor and front desk. Understanding the model saves you a lot of guessing.

How roles and overrides fit together

  • Owner holds all 18 permissions. Admin holds 17 — everything except Manage staff. That single permission is the only difference between the two roles in the permission system.
  • Everything else that is owner-only — starting or resuming Stripe setup, the embedded onboarding form, re-checking Stripe requirements, deleting the studio, editing another member’s access, assigning the Admin role, reviewing your own timesheet — is hard-wired to the owner role, not to a permission. You cannot grant your way to it. Note that this is a list of specific actions, not of whole pages: Billing itself is reachable by anyone with View financials, and some of what is on it works for them.
  • A per-member override REPLACES a role’s defaults; it does not add to them. So "an admin can do X" is a default, not a guarantee.
  • Owners are exempt from overrides. An owner always has the full set, whatever the access editor says.

What a missing permission looks like

Four different behaviours, and telling them apart will save your staff a support ticket.

  • Redirect to an "Access denied" page: Billing, Reports, Announcements, Inquiries, the Audit Log, and Events actions.
  • Page loads, write controls hidden: Classes, Programs, Schedule, Events and Timesheets. Staff can look but not touch, and nothing they can see will refuse them.
  • Page loads, controls visible, refusal on click: Members and Check-In. Members shows Create Family and Invite Family to everyone and answers with an inline error in the dialog; Check-In shows its buttons and then redirects to Access denied when one is pressed. This is the bucket that generates tickets, because the button looked available.
  • Studio Settings is the odd one out — it sends you back to the studio dashboard with no message at all. The sidebar link is hidden from anyone without Manage studio settings, so the click that triggers this is almost always the Settings button in the top right of the studio dashboard, which is shown to everyone. A staff member who reports "the Settings button does nothing" is telling you they lack Manage studio settings.

When something goes wrong

My calendar is empty even though I set up the weekly schedule.
A recurring schedule entry does not put sessions on the calendar by itself. Open Schedule and run Generate Sessions, choosing how far ahead to go. Running it again later is safe — sessions that already exist are skipped.
I cannot find a button to add a schedule entry.
There is not one. Click and drag a time range directly on the calendar grid and the "Add Schedule Entry" dialog opens, pre-filled. If dragging does nothing, you are missing the Manage schedules permission.
My admin says they cannot set up Stripe.
They cannot. Starting and resuming setup refuse with "Only studio owners can set up Stripe", the embedded onboarding form will not open for them, and "Re-check with Stripe" refuses with "Only studio owners can check Stripe requirements". The owner has to do it. Refresh Status and the "Open Stripe dashboard" link do work for them, which is why an admin can sometimes report that "some of the Stripe buttons work" — those two are not the ones that set anything up.
I picked the wrong business type in Stripe.
It locks permanently at the first Account Link, and there is deliberately no selector in Catomni to change it. Contact Stripe support.
The Payments tab in Studio Settings has no Stripe setup on it.
Correct. That tab is membership pause and cancellation policy only. Stripe lives on the Billing page.
I granted someone write access and they still cannot see the page.
Read and write are separate ticks. The access editor says it outright: "Granting write access does not imply read access — tick both where a module offers both."
I added one permission and the person lost everything else.
A custom access set replaces the role defaults rather than merging with them. Re-open "Access for {name}", tick everything they should have, and save — or click Reset to role defaults to put them back on their role.
I want to hand my studio to someone else.
You cannot do it from inside the app. Neither the invite form nor the role picker offers Owner, and demoting or deactivating the last active owner is refused with "Cannot remove the last owner." Contact Catomni support.
A red "Finish setting up your studio" alert is blocking me.
It is not blocking anything. It lists details you have not filled in, and the server saves regardless.
I turned off the landing page but the link still opens.
By design. Turning off "Publish the full landing page" swaps the full page for a simple contact form. The URL stays live either way.
I deleted my studio by mistake.
There is no undo inside the app. Contact Catomni support, and do not assume either way about recovery until they have told you.
A staff member clicks Studio Settings and lands back on the dashboard.
They are missing the Manage studio settings permission. That page redirects silently instead of showing a refusal, which is why it looks like a broken link.

The other guides

Still stuck on something?

The support portal has the rest, and a real person on the other end of it.