Changelog

What's new in OLM.

Releases, improvements, fixes, and deprecations. Last update: September 30, 2026.

September 2026

  • ImprovementSeptember 30, 2026

    Every email your gym sends now looks like your gym

    Receipts, invites, reminders, campaigns and every other email now lead with your logo and color, and come from your gym by name.

    • Your logo (or your initials in your color) heads every email, and your color fills the main button
    • Invites, waiver requests, guest passes, review asks, scheduled messages, workflows and journeys now carry your branding and send from your gym
    • Seminar tickets come from your gym, with a check-in QR code that shows up in Gmail
    • Unsubscribe lines now say accurately why each person got the email
  • ReleaseSeptember 23, 2026

    Campaigns: send to exactly the right members, now or later

    Marketing now has Campaigns — pick who gets a message with simple conditions, schedule it in your gym's timezone, and see who opened and clicked.

    • Target by belt, location, plan, subscription state, last check-in, attendance, join date, birthday, waiver, or hand-picked members — with a live count of who matches
    • Save audiences you use often, send yourself a test, then send now or schedule it
    • After it sends: who got it, who opened, who clicked, and which links they clicked
    • Messaging stays for one-to-one conversations; group sends now live under Marketing › Campaigns
  • ImprovementSeptember 22, 2026

    No more $2 minimum on memberships

    A flat 2% now applies to every membership invoice, with no per-invoice minimum.

    • Kids, family, and other plans under $100 now pay exactly 2% — a $60 invoice costs $1.20 instead of $2
    • Seminars, merchandise, and drop-ins remain 3%; in-gym POS remains $0

August 2026

  • ImprovementAugust 10, 2026

    You can now message the OLM team from inside the app

    Messages from OLM arrive in your Messages tab instead of only as a notification, and you can reply to them.

    • A conversation with the OLM team sits at the top of your Messages, separate from your gym's threads
    • It works before you've joined a gym too — find it under More › Messages
    • Replies go straight back to the team; nothing you write here is visible to your gym
    • Read receipts are now scoped to the gym you're viewing, so opening one inbox no longer marks another gym's message as read
  • ReleaseAugust 4, 2026

    Follow-up journeys arrive on the Marketing page

    Pre-written follow-up sequences for new leads, trials, and lapsed members — flip one on and it runs itself.

    • Six ready-to-use journeys: one per lead-funnel offer, trial-to-member, and a win-back for members who've been away.
    • Every step's words and timing are editable inside guardrails — steps stay a day apart, sequences end by day 60, and restore-defaults is always one click.
    • Journeys stop themselves the moment someone books, joins, comes back, or opts out.
    • Emails send with your gym's branding, mailing address, and a working unsubscribe link on every message; trial nudges arrive as push notifications right after training.
  • ImprovementAugust 3, 2026

    Two new guides, and free tools linked from every relevant post

    The blog gained guides on the 6-week challenge money model and speed-to-lead for martial arts gyms, and posts now point you to the matching free tool — savings calculator, challenge calculator, or schedule widget — right where it's useful.

    • New guide: The 6-week challenge money model for martial arts gyms
    • New guide: Speed to lead — the first five minutes decide who gets the trial
    • Cost, switching, and check-in guides now end with the matching free tool instead of a generic sign-up link
    Related:/blog/tools

July 2026

  • FixJuly 31, 2026

    Checking out gives your class-pack credit back

    Undoing a check-in now returns the pack credit you spent instead of losing it, and removing a family profile can no longer leave a membership quietly billing.

    • Check out of a class and the credit comes back with its original expiry — as long as you're before your gym's cancellation cutoff
    • After the cutoff the credit is still spent, the same as a no-show
    • Paid drop-ins can't be checked out by mistake any more — ask the gym for a refund instead, which keeps your payment on record
    • Removing a family profile now asks you to cancel that member's plan first, so a removed profile can't keep being charged
    • Someone who was removed as an admin and later rejoins — or is re-approved — comes back as a regular member, not an admin
  • ImprovementJuly 28, 2026

    Light-first marketing site with a guided product tour

    The public site now defaults to a light theme with a dark-mode toggle, and the homepage walks through six fresh screens of the real product.

    • Every marketing page supports light and dark via the header toggle
    • Homepage product tour auto-advances through dashboard, members, classes, billing, reports, and messaging
    • Contact form rebuilt — same-hour founder reply, no more full-page embed
  • ReleaseJuly 27, 2026

    A simpler, faster homepage

    Homepage redesigned around a single free-trial CTA, real product screenshots, and the savings calculator.

  • ReleaseJuly 24, 2026

    Your training log, rebuilt around your week

    The Log tab now groups your training by week so classes never pile up — clear a whole week in a tap, talk through it out loud, and see your focus as numbers or a chart.

    • Classes you haven't journaled are grouped into one 'this week' card with a calendar of the days you trained — no more endless to-do list
    • 'Mark reviewed' clears a whole week at once; 'Edit each' still lets you tag or voice-journal any class
    • New 'Talk through your week' recap — describe your week out loud and AI pulls out what you drilled
    • Tap the % on your focus breakdown to flip between the numbers and the radar chart
    • Set training reminders right from the Log tab
    • Works even without a gym — log your own open-mat and solo sessions the same way
  • ReleaseJuly 23, 2026

    Follow the greats — get pinged when they post a new system

    On any athlete's page you can now Follow them, and you'll get a notification the moment a new game-plan system attributed to them is published.

    • The 'Follow for new systems' button on a great's page is now live (no more 'soon')
    • When a community system credited to someone you follow is approved, you get a push + in-app notification linking straight to it
    • Each athlete page shows how many people follow them
    • Follows live on your account and travel with you between gyms
    Related:/systems
  • ImprovementJuly 23, 2026

    AI system builder now shows what it understood — and checks itself

    When you describe a game plan and let AI build the tree, it now echoes back what it understood, verifies the tree actually covers what you asked for, and lets you preview before saving.

    • A 'Here's what I understood' summary confirms your position, goals, and techniques before anything is saved
    • The AI grounds every technique against the real library and drops anything it made up
    • If the first draft misses part of your request, it quietly regenerates once to cover it
    • You get a full preview of the tree with Save / Regenerate / Edit before it's committed
  • ImprovementJuly 22, 2026

    Techniques library, redesigned — and you can tell what has video

    The technique library now opens as one fast, scrollable list with one-tap category filters, and every position and move makes clear which ones actually have community footage behind them versus a plain search.

    • One-tap filter chips (All, Guards, Top, Back, Legs…) replace the collapsed drawers — the whole library is one scroll, and the filter stays pinned as you go
    • Favorites and Saved shrink to a slim row with live counts, and search now leads the screen
    • Inside a position, moves with real community footage get a ▶ count badge and stand out; the rest show a quiet 'Search' instead of an identical red button
    • A header count and an 'Only footage' toggle let you collapse a position to just the moves you can actually watch
  • ImprovementJuly 22, 2026

    A sharper home screen — your numbers up top, drills that cycle

    The app's home now leads with your session count and focus map side by side, followed by a 'Drill this' card that cross-fades through the newest technique videos the community has added.

    • Your training charts sit near the top instead of below a tall intro panel
    • A slim 'Work on' line calls out your least-trained area at a glance
    • 'Drill this' auto-cycles through the newest community-uploaded videos — tap any one to watch it in the app
    • Brand-new members see the same layout drawn empty, so logging your first session grows the screen instead of replacing it
  • FixJuly 20, 2026

    Demo links now work for a full week, on every device

    The link we email you when you request a demo academy stays good for seven days and can be opened as many times as you like — reloading it, opening it on a second device, or retrying after a hiccup no longer says 'Magic link already used.'

    • Opening your demo link more than once signs you back into the same demo academy instead of erroring
    • Your demo academy stays alive for the whole life of the link, so a link clicked days later still lands somewhere real
    • If something does go wrong mid-setup, the page now offers a 'Try again' button
    • Requesting a second demo with the same email works again instead of being told you already have an account
    Related:/get-started
  • ImprovementJuly 13, 2026

    Browse featured systems by athlete

    The 'From the greats' section now leads with the athletes themselves — tap a card to see every featured system credited to that grappler, with photos and bios where we have them.

    • Athlete cards up top with a 'See all' view of everyone with a featured system
    • Each athlete page shows their bio, team, and all of their approved systems in one place
    • Your own systems keep their spot right below — nothing about your library changes
    Related:/systems
  • ReleaseJuly 9, 2026

    Featured systems from the greats

    Learn from game plans modeled on elite grapplers — browse community-submitted systems attributed to athletes like Marcelo Garcia, get recommendations matched to what you've actually been logging, and add any featured system straight into your own library.

    • New Systems page layout: recommended and featured systems up top, your own systems below
    • Recommendations are driven by your training log — each suggestion tells you why (e.g. which technique of yours it builds on)
    • Submit your own system for review: credit the athlete it's based on, optionally link a source video
    • Every submission is reviewed before it goes public
    • Adding a featured system makes your own private copy you can edit freely — attribution stays with it
    Related:/systems
  • ImprovementJuly 8, 2026

    Backdate and edit the date on your training journal entries

    Forgot to log a session? Free-form journal entries now default to today but let you set an earlier date, and you can change the date later from the entry's edit screen.

    • New entries default to today's date, with a date picker to move them to the day you actually trained
    • Edit the date on an existing entry any time from its edit screen
    • Future dates are blocked, and your journal list stays sorted by the day each session happened
    • Entries logged at a gym still follow their class date automatically — no change there
  • ImprovementJuly 8, 2026

    A nudge to journal your class while it's still fresh

    About 30 minutes after your class ends, we'll send a friendly reminder to log what you learned — so your training journal captures the details while they're still sharp.

    • Fires automatically off your check-in — no setup needed if you train at a gym on OLM
    • Only nudges once per class, and never if you've already journaled that session or chosen to skip it
    • Tap the notification to jump straight to your journal
  • ReleaseJuly 3, 2026

    Free tools for gym owners, a referral program, and clearer pricing

    A new set of free gym-owner tools (cost calculator, challenge revenue calculator, embeddable schedule widget), a both-sides referral program for gyms on OLM, and a pricing page that spells out exactly what the one-time setup covers.

    • New /tools hub: a software cost calculator you can email to yourself, a 6-week challenge revenue calculator, and a free embeddable class-schedule widget for your website
    • Refer a gym you'd vouch for: share your gym's referral link from Settings — when they go live on OLM, you both get a platform-fee credit
    • Pricing page now itemizes the $499 one-time setup: roster import, hand-held Stripe Connect setup, white-label theming, and a founder onboarding call — migration is on us, not on you
    • Comparison pages add a 'Beyond the invoice' section covering per-location fees, add-on creep, and contract lock-in — and how OLM removes each
    • The savings calculator can email you your breakdown, honestly — including when a flat-fee vendor beats OLM at your numbers

June 2026

  • ImprovementJune 29, 2026

    A quick welcome walkthrough for new accounts

    New members are greeted with a short, skippable setup that captures your martial art and current belt up front, so your dashboard is personalized from your very first visit.

    • Pick your main discipline and current belt/rank — beltless arts show experience levels instead, and BJJ adds a stripe picker
    • Your rank is portable: it's saved to your profile and travels with you to any gym on OLM
    • Tell us whether you train at a gym so we can route you to find one or straight into solo tracking
    • Each step now has a Back button, so you can revisit and change an earlier answer
    • Shown once on first sign-in and always skippable; every answer saves as you go
    • When a gym search comes up empty, you can now recommend your gym — or, if you run one, raise your hand to bring it onto OLM
  • ImprovementJune 28, 2026

    Video counts in the technique library + a community Discord

    The technique library now shows how many community videos each position has before you tap in, and you can jump straight into our Discord from your profile.

    • Each position in Techniques shows its community-video count, so you can see where the videos are before drilling in
    • Added a 'Join our Discord' link in the profile menu to connect with other members
  • FixJune 28, 2026

    Child profiles and smarter training analysis

    Child (dependent) profiles now keep their own systems and a true-empty start, and the AI training analysis better understands how athletes actually describe their rolls.

    • Fixed a bug where a child profile showed the parent's saved systems — each profile's systems are now fully separate
    • Brand-new and child profiles now show a clear empty state instead of placeholder charts, so an account with no logged sessions reads as empty
    • Training analysis now recognizes attacking vs. defending, maps loose or misspelled move names (e.g. 'rnc', 'knee slice'), and infers the position even when you don't name it
  • ImprovementJune 27, 2026

    Contact support right from the app

    The Help & support screen now has a Contact support form — describe what you need help with and our team replies to your account email, usually within a business day.

    • Replaces the old email link with an in-app form, so there's nothing to copy or paste
    • Your message arrives with helpful diagnostics attached automatically (app version, device, screen) so we can help faster
    • Support requests are tracked separately from feature requests and bug reports on our side
  • ReleaseJune 26, 2026

    New public pages: Train Hub and The BJJ Meta

    Two new public pages are now live and crawlable — a Train Hub showcase of the portable AI training suite, and The BJJ Meta with trending techniques and training-data insights.

    • The Train Hub page (/train) introduces the portable, AI-assisted training suite that travels with each member across gyms
    • The BJJ Meta page (/meta) surfaces trending techniques and aggregate training-data insights
    • Both pages are reachable without signing in, so prospects and search crawlers can find them, and they're included in the sitemap
    Related:/train/meta
  • ImprovementJune 23, 2026

    Separate brand themes for your app and your admin portal

    In Settings → Theme you now pick a brand theme for your member app and, separately, one for your admin portal — by clicking a preset, no color codes to fiddle with.

    • Choose from nine curated themes for each surface; the app theme is what members see in the mobile app, emails, and the check-in kiosk
    • The web theme recolors just your admin portal, so the two never get confused — set them the same or different
    • Replaces the old primary/secondary hex color inputs with simple click-to-apply swatches
    Related:/settings
  • ImprovementJune 23, 2026

    One click to go live from your demo

    The "Ready to go live?" button on the demo banner now sends your request straight to the OLM team — no email app required — so we can activate your account and get you set up.

    • Tapping the button notifies us instantly with your gym's details; you'll see a confirmation right in the banner
    • We reach out to convert your demo into a real account and walk you through setup
    • Replaces the old email-link CTA that depended on your device having a mail app configured
  • ReleaseJune 20, 2026

    Put your live class schedule on your own website

    A new Embed tab on the Classes page gives you a copy-paste snippet that drops a live, always-up-to-date class schedule onto your own website — themed to your brand color and updated automatically whenever you change a class.

    • Visitors can flip between a weekly schedule grid and an upcoming-7-days view right inside the widget
    • It restyles itself to your gym's brand color (or pick a custom one) and supports light, dark, or automatic themes
    • Fully mobile-responsive — the weekly grid collapses to a clean day-by-day list on phones
    • Live preview and one-click copy in the admin portal; paste it into Squarespace, Wix, WordPress, or your CRM
    • Cancelled classes show struck-through in the upcoming view, so what your site shows always matches reality
    Related:/classes
  • ReleaseJune 19, 2026

    Find upcoming tournaments — automatically kept fresh

    The Competitions tab now fills itself with real upcoming grappling tournaments from IBJJF, NAGA, and AGF, refreshed daily, with a tap-through to register on the organizer's own page.

    • Browse hundreds of upcoming events — IBJJF championships plus NAGA and AGF circuit stops — with dates, city, and gi/no-gi at a glance
    • Every listing links straight to the organizer's official registration page; we send you there to sign up, we don't get in the middle
    • The list keeps itself current on its own: new events appear automatically, and once an event is over (or gets cancelled) it drops off without anyone having to clean it up
    • Hand-picked major events still lead the list, so the marquee championships never get buried under regional stops
    Related:/app
  • ImprovementJune 18, 2026

    Women's classes, easier member management, and a polished portal

    Admins can now schedule women's-only classes, remove (and restore) members in one click, set belts with a sleeker visual picker, and run a curriculum built around their gym's art — all on a refreshed light/dark portal.

    • New "Women's" class category alongside Adult and Kids — filter the schedule by it, and members see a Women's badge on the class in the app
    • Remove a member from your gym with a clear confirm step; their check-in history, journal, and belt rank stay portable on their account, and you can restore them anytime
    • Reworked the belt/rank controls on a member's page into a visual picker — a quick Adult/Kids toggle and tap-to-select belt chips in your gym's colors, replacing the old dropdowns
    • Curriculum now follows your gym's primary discipline: categories, the coverage radar, and starter presets adapt to BJJ, judo, muay thai, wrestling, MMA and more — set the art in Settings
    • Brushed-up admin portal in both light and dark mode — cards, borders, and shadows now have real depth, and buttons, hovers, and highlights track your gym's accent color throughout
    Related:/app
  • ReleaseJune 17, 2026

    Injury tracking, and a clearer way to drill your systems

    The app now tracks the injuries and surgeries you're working around — and your AI training suggestions route around them — plus systems trees got a tap-to-drill view that's far easier to read on a phone.

    • Log injuries or surgeries (More → Injuries) with what to avoid, e.g. "no heavy takedowns"; they follow you across gyms like your journal and rank, and mark them recovered when you're back
    • Your active injuries now flavor the AI: when it drafts or extends a system decision tree, it avoids suggesting movements that load the hurt area — no "work on takedowns" advice when your knee's out
    • Systems trees added a focused drill-down: tap a position to step into just that branch with a breadcrumb back up, on higher-contrast cards that are easy to read at a glance
    • The floating "+" button is now labeled and context-aware — it says "System" and creates one on the Systems tab, "Log" for a journal entry elsewhere
    • Today's "Drill this" technique on your home screen now links straight to its community videos to watch and vote
    Related:/app
  • ImprovementJune 16, 2026

    New check-in guides on the blog — now linked in the top nav

    The blog is now reachable straight from the site navigation, and we've added a set of in-depth, screenshot-driven guides on gym check-in and attendance tracking for martial arts academies.

    • Blog added to the main site navigation so it's no longer buried in the footer
    • Three new guides: how modern gym check-in works (kiosk, QR, and the member app), what check-in data reveals about retention, and a practical attendance-tracking guide for BJJ academies
    • Posts now support product screenshots and related-reading links, so the guides show the real app and cross-link to each other and to features and pricing
    Related:/blog
  • ReleaseJune 11, 2026

    Community-curated videos for every technique

    Every technique now has its own community video shelf: save your favorite YouTube breakdowns, submit the ones you swear by, and upvote the best so the strongest video rises to the top — curated across the whole OLM community, not just your gym.

    • Tap the YouTube button on any technique to open its videos, watch them in-app, upvote the best, and bookmark favorites — your saved videos follow you across gyms, just like your journal and rank
    • Submit a YouTube link for a technique; it's reviewed before it goes public, and you'll see your own submission marked "In review" until then
    • Best videos are ranked by community upvotes with a freshness boost, so newer great breakdowns can climb instead of the first post staying on top forever
    • Approved videos also appear on the public technique pages at /techniques, with structured data so they can show up in Google and AI search
  • ReleaseJune 10, 2026

    A new look for the mobile app — glass chrome, real logo, faster flows

    The mobile app got a full visual refresh: a frosted-glass navigation bar with a dedicated check-in button, a color-banded home header with gym and profile switching in one place, slimmer buttons everywhere, and the official OLM mark on the app icon, splash screen, and boot animation.

    • New bottom navigation: Home · Log · Activity · More in a glass pill, with check-in as its own always-reachable button (your gym's color, not a fixed red) and a floating quick-log button on every tab
    • Home header now carries your color and opens the gym/profile switcher (gyms + kid profiles together) on the left, with notifications and your profile — belt-color ring included — on the right
    • Activity tab: one inbox for notifications and gym messages; your last-used gym is remembered across restarts for multi-gym members
    • Check-in got a celebration moment and a cleaner "who's on the mat" view; the training-log entry flow and profile page were redesigned to match
    • Systems trees now open much larger with pinch-zoom everywhere, bigger touch targets, and a simpler creation flow
    • New app icon, splash screen, and animated boot logo using the official OLM stamp
    Related:/app
  • ImprovementJune 8, 2026

    Make the app yours — pick your own accent color

    You can now choose a personal accent color for the app. By default it follows your gym's brand (or OLM's when you haven't joined one), but you can override it with one of nine presets — your pick follows you across every gym and works before you've joined one.

    • Personal accent picker in mobile settings (Account → Appearance) and the web admin portal (Settings → Theme)
    • Cascade: your chosen color → your gym's white-label color → OLM crimson; "Auto"/"Inherit gym" goes back to following your gym
    • Buttons, links, active states, and charts all follow your accent in both light and dark mode — your gym's outbound branding (emails, member-facing surfaces) is never affected
    Related:/app
  • ImprovementJune 8, 2026

    Control whether teammates can add you to their training notes

    Training notes can reference the people you train with. A new privacy setting lets you opt out of being suggested as a training partner — notes are always private to their author and never shown to the person they describe.

    • "Allow training-partner notes" toggle in mobile settings (Account → Privacy), on by default
    • Suggestions only ever include fellow gym members from classes you both attended — drop-in visitors are never shown or gathered, and anyone who opts out is excluded; if you're dropping in, you just keep a normal private log
    • An acceptable-use clause in the platform terms prohibits harassing or inappropriate notes about other members
    Related:/app

May 2026

  • ReleaseMay 29, 2026

    Systems: AI builds your whole game-plan tree from a prompt (mobile)

    The "new system" flow is no longer a blank canvas. Describe a position and your plan ("Half guard top, I want to pass, react to underhook + knee shield + sit-up") and AI drafts the entire decision tree — root + branches + reactions — in one shot. You land on the populated tree ready to refine.

    • Multi-line "Build with AI" prompt replaces the bare title input on the mobile My Systems screen
    • New system.generateFromPrompt procedure validates the AI response, caps trees at 30 nodes and depth 6, and inserts the whole tree atomically
    • Drafts are seeded by the techniques you've actually worked in your rolls — the tree prioritizes your game, not generic recommendations
    • Empty-state and offline fallback preserved: "or start an empty system" link below the AI prompt creates an unpopulated tree the old way
    Related:/app
  • ImprovementMay 29, 2026

    Systems: AI-suggested branches on every node (mobile)

    Every node in your game-plan tree now has a ✨ Suggest button. Tap it and OLM proposes 2–4 likely opponent reactions and the response for each — seeded by the techniques you've actually been working in your rolls — so you can build a full decision tree without staring at a blank canvas.

    • Per-node ✨ Suggest button on the mobile system editor — calls a coach-style AI that knows the position you're in and the techniques you already train
    • Each suggestion shows the opponent's reaction, your response, an optional technique tag, and a "Stretch" badge when it's outside your usual game
    • One tap inserts the suggestion as a child node — situation auto-derived from the parent move + reaction, so the new branch reads as a story
    Related:/app
  • ReleaseMay 29, 2026

    Train Hub reshape — one Log, an AI Coach, and "You vs the world" on by default

    The mobile training suite got sharper. Rolls and the journal merged into a single Log stream, the Mastery map became a forward-looking Coach that tells you exactly what to drill next, the training journal now works without joining a gym, and "You vs the world" is on by default so you can see how your game stacks up across the sport from day one.

    • Rolls + Training journal are now one Log — a single chronological stream of every session and roll, with filter chips (All / Sessions / Rolls) and one "Log" button that asks whether you're logging a class session or a roll. Partner scouting and the leak finder still live here
    • Mastery map → Coach: instead of just showing where each technique sits, it now leads with "Drill this next" — a prioritized plan built from your own training (situations you keep getting caught in, techniques going stale, and staples you've never logged). Your state-of-game breakdown moved below the fold
    • Training journal no longer requires joining a gym — your focus-area radar is portable and works from your first session, whether or not you're a member anywhere yet
    • "You vs the world" is on by default — your training is anonymized and only ever shown as an aggregate across many athletes (never tied to you), and you can opt out anytime from the You-vs-the-world screen
    Related:/app
  • ReleaseMay 28, 2026

    Frictionless demo claim + demo-to-real promotion + transparent invoicing

    Homepage prospects now go from form submission to a fully-seeded admin dashboard in one click — no Clerk sign-in screen, no re-acceptance of terms, no dead-ends if a stale session is active. Super admins can promote a demo org into a real customer in one move that auto-fires the itemized setup-fee invoice. Member-facing Stripe invoices now carry a per-plan "what's included" line so customers see exactly what they're paying for.

    • Magic-link demo claim is now invisible — server mints the Clerk identity + sign-in ticket, client consumes it via signIn.create({ strategy: "ticket" }), no <SignIn /> UI ever shown. If a stale session is active, the page signs out first then claims, so a single click always works regardless of prior auth state
    • The homepage form's Terms of Service acceptance now carries forward onto the new user's row at claim time (with the original IP + user-agent preserved in terms_acceptances), so prospects don't get re-prompted for an acceptance they already made
    • New superadmin.promoteDemoToReal procedure: wipes seeded @olmdemo.local synthetic members + their check-ins / subscriptions / promotion needs, detaches auto-attached super admins, flips is_demo + demo TTL columns, strips the -demo suffix from the slug (overridable), and audit-logs the transition. Comp orgs keep fees waived; paying customers flip to PENDING
    • Setup-fee invoice now auto-fires during promotion (default ON; comp orgs skip). Stripe failures don't roll back the promote — the demo flip still succeeds and the existing Send invoice button can retry
    • Setup-fee invoice line items now itemize what the $499 covers: Founder-led onboarding & training call · Stripe Connect setup + payouts verification · Member roster import assistance · Theme + branding customization · Going-live launch support
    • Member subscription invoices now carry a per-plan description (Stripe Product.description) so members see what's included on their hosted invoice + emailed receipt. New billing_plans.description column + textarea in the admin plan dialog; updates mirror to Stripe so existing subscriptions get the new copy on their next invoice
    • Demo organizations seed with 16 members spanning every belt color (WHITE 0-4 stripes through BLACK), 4 promotion needs covering the full belt arc (WHITE→BLUE through BROWN→BLACK), a published Lachlan Giles guard-retention seminar with 12 confirmed registrations, and 2 sample broadcasts in /messaging
    • Demo org banner now reads three tiers of urgency: muted amber >7 days, warning amber 3-7 days with "X days left" pill, urgent red <3 days. Readable in both light + dark (no more cream-on-cream), CTA pre-fills a kevin@trainolm.com mailto with the demo slug + expiry baked in
    • Lead notification emails now fan out to multiple inboxes via DEMO_REQUEST_INBOX (comma-separated); transactional emails reference the canonical OLM mark at /api/email-assets/olm-mark instead of an inline-CSS reconstruction
    • FIXED: /demo/claim was being blocked by Clerk middleware (sent to accounts.dev/sign-in); /api/email-assets was 404'ing because Turbopack ignored route.tsx + the route wasn't in the public matcher; demo claim was redirecting to /{slug}/dashboard which doesn't exist (admin layout group, no slug prefix)
    • FIXED: provisioner crashed with "Invalid time value" because demo-seed appended :00 to Postgres time columns that already had seconds; SES rejected magic-link emails because the helper was passing Reply-To as a custom header instead of using the dedicated replyTo field
    • Park City Jiu Jitsu "design partner" framing on /app rewritten — Kevin trains there but PCJJ isn't an OLM customer. New copy: "Built by a practitioner, not a software company — an app for grapplers, built by a grappler." The four phone mockups (Check-in, Journal, Belt, Schedule) are now clickable with hover-lifts and the 8 Edition 06 cards are real Links with hover glows + arrow reveals
    Related:/get-started/super/organizations/billing/manage-seminars/app
  • ImprovementMay 19, 2026

    Per-org auto-grant trial toggle + dismissible dashboard waiver prompt

    Admins can flip auto-grant trials on/off per org from settings (defaults to on). The mobile dashboard's waiver prompt is now dismissible with an X — the soft nudge clears, the check-in hard gate stays. The dismissal is per-doc-id, so a NEW required document the gym adds later re-surfaces the card.

    • New organizations.auto_grant_trial_on_join column (default true) — admins control whether self-service member.join grants the org's default trial automatically
    • Toggle surfaced in Admin → Settings → Membership & Trials next to the trial-value field, with copy explaining the dashboard impact
    • Mobile dashboard waiver prompt now has an X dismiss button; dismissed doc ids are persisted in AsyncStorage per-org and auto-pruned when docs get signed
    • REGRESSION: a freshly-added required doc re-surfaces the prompt even if previous docs were dismissed (1 vitest contract pinning this)
    • Seed file now creates 2 active waivers for Park City BJJ (Liability Waiver + Photo & Media Release) so the multi-doc form of the prompt is visible in dev without manual setup
    Related:/settings
  • ReleaseMay 19, 2026

    Free trial auto-grants on join + dashboard surfaces trial / waiver state

    Members now get their gym's free trial automatically the moment they join — no Skip button required. The mobile dashboard surfaces a free-pass CTA, trial countdown, grace-period nag, and an unsigned-waiver prompt as cards at the top, so members never get surprised at check-in time.

    • member.join now routes through computeMembershipFields just like the admin-invite path — trial-abuse suppression, org defaultTrialValue, and the CLASSES-vs-DAYS trial type are all honored
    • Members with an existing ACTIVE subscription at the joined org skip the trial (they don't need one); reactivating an INACTIVE membership never re-grants
    • member.getMembershipStatus now returns a trialAvailable boolean so the dashboard can show a success-toned "Start free trial" CTA when the member has never had one
    • New dashboard access banner: ACTIVE_TRIAL shows days/classes remaining (warning tone at ≤1 left), GRACE_PERIOD shows update-card CTA, TRIAL_EXPIRED shows pick-a-plan, NO_ACCESS with free trial available shows the success-toned trial CTA
    • New dashboard waiver prompt: lists unsigned required documents with a one-tap CTA to /sign-waiver/[id]; auto-disappears once all required docs are signed
    • Decision logic is pure (apps/expo/src/app/(tabs)/dashboard/_access-banner-logic.ts) and unit-tested — 16 contracts covering every access reason + waiver-count edge case
    Related:/billing
  • ReleaseMay 19, 2026

    Skip-for-now trial + App Store links in invites + Powered-by-OLM signature

    Three onboarding-flow changes ship together: members who hit the billing screen can tap Skip for now to start a free 7-day trial and check in immediately, member invite emails include real App Store + Play Store badges so recipients can download the app from the same email, and a small Powered by OLM signature now sits under the sign-in and pre-org screens so users always see the platform behind their gym.

    • New billing.startSelfServiceTrial mutation: idempotent, grants 7 days, only shown when the member is in NO_ACCESS state (won't appear after a trial expires); audited as MEMBER_TRIAL_UPDATE with method=self_service_skip
    • Member invite emails now include Apple-provided "Download on the App Store" and Google-provided "Get it on Google Play" badges next to the existing Join button; store URLs default to the official OLM listings and can be overridden via IOS_APP_STORE_URL / ANDROID_PLAY_STORE_URL env vars
    • Powered by OLM badge renders on the auth carousel and the pre-org profile screen — single OLM binary, runtime gym rebrand, OLM always visible as the foundation
    • Per-org native binary pipeline (apps/expo/scripts/generate-org-build-config.ts + OLM_ORG_SLUG-aware app.config.ts) is wired and tested but treated as an opt-in premium offering, not the default — the standard path is one OLM binary with runtime theming that switches as members join, leave, and re-join gyms
    • Check-in gating is unchanged — waiver + active subscription / trial / comp / grandfathered is still required
    Related:/billing
  • ImprovementMay 19, 2026

    OLM now lives at trainolm.dev

    All app and email links — terms, privacy, help, support, contact, billing, deep links — now point at trainolm.dev. Existing mobile installs continue to work; the iOS Universal Link and Android App Link configs were updated to the new domain in the same change.

    • User-facing URLs (privacy, terms, help, billing, sign-up, join, check-in) resolve at https://trainolm.dev
    • Contact emails moved to @trainolm.dev (hello@, support@, privacy@, noreply@, unsubscribe@)
    • JSON-LD organization metadata, OpenGraph cards, llms.txt, and middleware allowed-origins updated to the new domain
    • Mobile bundle identifier (com.olm.app) is unchanged, so existing app installs and in-app purchases keep working
  • ImprovementMay 18, 2026

    Mobile dashboard auto-focuses on your home gym

    For members who train at multi-location gyms, the dashboard's Today's Classes now defaults to the location you actually train at — derived from your last 3 check-ins — instead of showing every location at once. The full schedule is still one tap away on the Check In tab.

    • Majority of last 3 check-ins wins; on a 1/1/1 tie the most-recent location wins (so switching gyms shows up within a few sessions)
    • Members with fewer than 3 check-ins still see all locations on the dashboard until a pattern emerges
    • A subtle '<Location> · See all' caption above the list links to the full check-in screen so visiting members can see other locations' classes
  • FixMay 17, 2026

    Mobile check-in works again for classes with a capacity cap

    Checking in to any class that had a capacity set was failing with a database error. The capacity-locking query has been rewritten so members can check in normally.

    • Today's classes also now show on the mobile dashboard reliably — the dashboard and check-in screens share a single timezone-aware "is this session over?" helper so they can no longer disagree
  • ImprovementMay 15, 2026

    Home-page hero: branded iOS home-screen mockup

    The first phone in the white-label hero fan now shows an iOS home screen with the gym's branded app icon installed among muted placeholder apps — re-labeled "01 · installed" — to make the real-download / white-label moment unmistakable.

    • New `home` PhoneFrame variant: brand-color-glowing app icon with a "↓ just installed" badge sits in a 3×4 grid of muted placeholder apps + dock
    • Left and right phones now lock to the same min-height so the side phones in the fan render at equal sizes
    • Homepage wrapper now uses `overflow-x-clip` so the hero phone fan + marquee can't introduce horizontal page scroll
    Related:/
  • ImprovementMay 15, 2026

    Private (invitation-only) billing plans

    Admins can now mark a billing plan as Private when creating it. Private plans are hidden from the member-facing list and can only be subscribed to by members the admin has explicitly invited via the new "Private plan invite" picker on the member detail page. Useful for friends-and-family rates, scholarship tiers, founding-member deals, or any one-off arrangement.

    • New Visibility selector on the create/edit plan dialog (Public — anyone can subscribe / Private — invite-only)
    • Private plans show a Private badge in the Plans & Pricing table
    • Member-facing plan list filters out private plans the member hasn't been invited to
    • Self-serve subscribe endpoints reject private plans unless the member is on the invite list (assigned_plan_id)
    Related:/billing/members
  • ReleaseMay 14, 2026

    Public BJJ knowledge surfaces: /techniques, /creators, /athletes

    Three new DB-backed public pages — a library of 378 Brazilian Jiu-Jitsu techniques across 38 positions, a directory of 20 instructors and channels, and a directory of 211 notable competitors seeded from Wikidata + Wikipedia. Heavily cross-linked, ISR-revalidated daily, with schema.org HowTo / Person / BreadcrumbList markup for AI search and Google.

    • Technique pages grouped by position with type chips (submission / sweep / pass / escape / transition / control / attack)
    • Creator profiles with YouTube / Instagram / website links and the techniques they teach
    • Athlete profiles with bios sourced from Wikipedia under CC BY-SA attribution + Wikidata structured data
    • Sitemap now exposes ~720 URLs total; llms.txt and llms-full.txt advertise the new surfaces to AI crawlers
    • Long-form technique content gated behind an editor-approved flag — drafts stay invisible until reviewed
  • ImprovementMay 9, 2026

    /api/health endpoint for uptime monitors

    Added `GET /api/health` returning DB + Redis probe results, commit SHA, and env. 200 when all deps respond, 503 if any required dep is degraded. Redis probe gracefully passes when Upstash isn't configured (dev / preview). No auth — pingable from UptimeRobot, Better Stack, Pingdom, etc.

  • ImprovementMay 9, 2026

    E2E test coverage: invites, refunds, CSV exports, Stripe Connect entry

    Added Playwright spec files for the invite-member, refund, CSV-export, and Stripe-Connect-onboarding admin flows. Specs are smoke-level (no real Stripe / mailbox dependencies) and skip gracefully when seed data isn't available. Covers OLM-17/18/19/20 manual-test checklist surfaces.

  • FixMay 8, 2026

    Security hardening: drop-in track gate, verified email source, dev bypass double-lock

    Three urgent security fixes — drop-in checkout now enforces the KIDS/ADULTS rank-track gate, ensureUser pulls the verified email from Clerk instead of trusting client input, and the dev OTP bypass requires both NODE_ENV !== production AND an explicit ALLOW_DEV_OTP_BYPASS=1 opt-in.

  • FixMay 8, 2026

    Find-a-gym: hide drop-in price when no class is scheduled

    Find-a-gym list now only advertises a drop-in price for gyms that actually have an upcoming SCHEDULED class. Gyms with drop-ins enabled but no class on the books no longer show a price for a class that doesn't exist.

  • FixMay 7, 2026

    Drop-in availability: late-night classes + transient errors

    Two fixes to the drop-in eligibility logic introduced earlier today, plus removal of the now-unused requiresDropInApproval setting.

    • Fix: classes that cross midnight (e.g. 22:00–01:00) no longer drop out of drop-in eligibility the moment they begin. prepareDropIn now treats endTime ≤ startTime as +1 day in the org's local timezone.
    • Fix: 'No class today' badge on the gym card / map sheet no longer renders during a transient API error or before the query has run — only when the schedule has been confirmed empty.
    • Schema: removed organizations.requiresDropInApproval (column + admin toggle). Drop-ins are pure self-service now; the field had no remaining server-side enforcement after the join-request consolidation.
  • ImprovementMay 7, 2026

    Join requests simplified: drop-ins are now self-service only

    Removed the duplicate 'Drop in for a class' option from the Join Request dialog. Drop-ins are paid self-service via the gym card's Drop-in button; the dialog is now exclusively for full-membership requests. Message field is also now optional.

    • Mobile JoinRequestDialog: dropped the intent picker entirely. The dialog now always sends a FULL_MEMBER request and explains that visitors should use the 'Drop in' button to walk in for one class.
    • Server: joinRequest.request no longer accepts an intent input — always inserts FULL_MEMBER. Existing DROP_IN rows preserved for history.
    • Message field is now optional (no min length). Footer reads 'X/1000 · optional', label is 'Message to the gym (optional)', Send button enables regardless of message length.
  • ImprovementMay 7, 2026

    Drop-in: today-only availability + 'No class today' state

    The Drop-in CTA now surfaces only when there's actually a SCHEDULED class today in the gym's local timezone. When a gym allows drop-ins but has nothing on the schedule, the gym card and join sheet show a clear 'No class today' state instead of a dead-end Drop-in button.

    • API: prepareDropIn filters cs.date == today-in-org-tz and skips sessions whose end time has passed (was returning any future session).
    • Mobile join sheet: 3-state copy — 'Not accepting drop-ins' / 'No class scheduled today — try again tomorrow.' / available with fee.
    • Find-a-gym list + map: 'No class today' badge replaces the Drop-in $X pill when the org allows drop-ins but no session is on.
  • ReleaseMay 6, 2026

    Drop-ins: ticket model + admin payments page + auto-refunds

    Drop-ins now work like event tickets — each paid drop-in is a ticket with three states (Upcoming, Past, Refunded). Admins get a dedicated payments page; members get a 'My visits' screen across both pre-org and in-org contexts.

    • New admin page: /billing/drop-ins. KPI cards (revenue, count, refunded, avg fee), Frequent Droppers panel surfacing 3+ paid visits as sales leads, status + date filters, refund action with internal-note dialog, CSV export.
    • New mobile screen: 'My visits' on the More tab. Segmented Upcoming / Past / Refunded tabs, ticket cards with org logo + class details, tap-through detail view with Get Directions and Cancel & Refund (>24h policy).
    • Server-side webhook finalize: drop-in tickets are now written when Stripe confirms payment, not when the user re-enters the app. Closing the app after checkout no longer loses a paid ticket.
    • Auto-refunds when a session is cancelled or capacity-full at finalize time — Stripe refund + ticket flagged with reason, no manual admin work.
    • Post-class push notifications: journal prompt at +1h, conversion prompt at +24h (suppressed if user has already joined or was refunded).
    • Refund visibility: refunded tickets stay in history with the reason ('Class cancelled', 'Cancelled by you', etc.) instead of vanishing.
    Related:/billing/drop-ins
  • ImprovementMay 4, 2026

    Curriculum: coverage radar + preset library

    Two more layers on /curriculum — a balance-view radar chart (filterable 1/3/6/12 month windows) and a preset library that scaffolds weeks/months from canonical BJJ curricula.

    • Coverage radar: complementary view to the heatmap. One axis per category in your discipline's taxonomy; shape shows balance at a glance — a balanced gym fills the whole web, a guard-heavy gym spikes on one side.
    • Filter window: Last month / Last 3 months / Last 6 months / Last 12 months, defaulting to last month so it's meaningful from week one.
    • Preset picker in the focus dialog: pick from "Fundamentals of Self-Defense (White → Blue)" (81 techniques) or "Blue → Purple (Pedro Sauer)" (88 techniques). Clicking a category fills title + appends technique bullets to the description + auto-tags coverage categories.
    • Renders gracefully for brand-new gyms — no "need 4 weeks" gate; shape stabilizes as data accrues.
    Related:/curriculum
  • ReleaseMay 4, 2026

    Curriculum: weekly calendar + coverage heatmap

    Curriculum got a real spine — a Mon–Sun weekly calendar with drag-to-reschedule, plus a coverage heatmap that tells you what you've been ignoring.

    • Weekly calendar on /curriculum showing the past 4 weeks + this week + next 8 weeks. Click any week to set or edit its focus; drag a filled week onto another to move or swap.
    • Per-discipline category taxonomy (BJJ, judo, striking, wrestling, MMA, generic) lets you tag months and weeks with what you covered.
    • Coverage heatmap: 12-week × N-category grid showing what's been hit and what's been ignored. Pulls from both weekly tags and the parent month's tags.
    • Gap report flags the top 3 categories with zero coverage in the last 12 weeks ('No takedowns since Feb 16').
    • Mobile members get a new 'This Week' card and a 'Coming Up' list of the next 4 weeks on the curriculum screen.
    Related:/curriculum
  • ReleaseMay 4, 2026

    Curriculum: monthly focus for every gym

    A simple, opinionated v1: one paragraph per month telling members what your gym is working on. Available to every org out of the box.

    • Admin portal — new /curriculum page in the sidebar. Set this month's focus, plan next month, see past months.
    • Mobile dashboard — shows a 'Working on…' card with the current month's title + description. Tap through to a dedicated screen with full history.
    • Designed around how gyms actually behave: coaches set an intent and partially adhere. The feature embraces drift instead of nagging coaches with a checklist.
    • Intentionally minimal — no per-class lessons, no technique-library wiring, no coverage heatmap yet. Those land only if real gyms ask for them after using v1.
    Related:/curriculum
  • ImprovementMay 3, 2026

    Compare pages — added 'Demand pipeline' row + sharpened white-label copy

    Every /compare page now calls out the consumer-facing OLM app as a discovery channel for gyms, and clarifies what 'true white-label' actually means (members never see OLM branding).

    • Added a 'Demand pipeline / member discovery' comparison row to all 5 competitor pages.
    • Tightened the white-label rows so it's clear the member-installed app shows your colors and logo only.
    Related:/compare
  • ImprovementMay 3, 2026

    Added /compare pages for Wodify and BJJLink

    Two new competitor breakdowns — Wodify (per-location SaaS with HYROX/Two-Brain co-marketing) and BJJLink (BJJ-only flat-rate, closest philosophical competitor). Honest tradeoffs included.

    • /compare/wodify — leads with per-location pricing + add-on creep critique; acknowledges Wodify wins on programming/WOD tools, reporting depth, and HYROX/Two-Brain ecosystem.
    • /compare/bjjlink — leads with multi-discipline rank portability and Stripe Connect ownership; acknowledges BJJLink CORAL is genuinely cheaper at scale and has a curriculum builder OLM doesn't yet.
    • Both pages auto-flow into the existing /compare index, OG image generator, and 'Other comparisons' carousel — no template changes needed.
    • Background research lives in plan/competitors.md.

April 2026

  • ReleaseApril 29, 2026

    Removed $500/mo platform fee cap

    Platform fees now scale linearly with what your members actually pay. Pricing stays $0/mo subscription, 2% on memberships ($2 min), 3% on add-ons, $0 POS — but with no monthly ceiling.

    • Removed the $500/calendar-month per-org cap on platform fees.
    • applyMonthlyCap and the cap-refund webhook branch were deleted; payments now record the full membership fee.
    • The motivation: a gym hosting a $24K seminar after their members had already renewed shouldn't pay zero on the seminar — that's a feature working, not a tax to refund.
    • Practical impact: a 100-member academy still pays ~$200/mo on memberships; a 300-member academy pays $600 instead of capping at $500. Average gym (~150 members per industry data) pays roughly $300.
  • ReleaseApril 29, 2026

    Public-site SEO overhaul

    Per-competitor compare pages, 30 BJJ city landing pages, llms.txt for AI crawlers, FAQ blocks across discipline / feature / compare pages, and a /blog with 6 launch posts.

    • Per-competitor pages at /compare/[slug] for OLM vs Mindbody, Zen Planner, Kilo, Glofox, PushPress, GymRocket — each with FAQPage JSON-LD and a competitor-specific OG image.
    • 30 BJJ city landing pages at /for/bjj/[city] with substantial unique copy per market (Austin, Boulder, Chicago, Denver, Honolulu, Houston, etc.).
    • /llms.txt and /llms-full.txt route handlers serving the OLM index and full content reference for AI crawlers.
    • FAQ blocks (5-6 questions each) on every discipline, feature, and competitor page with FAQPage JSON-LD.
    • /blog with 6 launch posts: switching guides, AI Monitor explainer, Stripe Connect explainer, training journal deep-dive, portable belt history founder note, drop-in marketplace guide.
    • /about page with Person + AboutPage JSON-LD.
    • Dynamic OG images via next/og for every public route.
  • ReleaseApril 20, 2026

    Pay-as-you-grow pricing model

    Removed the $150/mo SaaS subscription and the /subscribe gate. Platform revenue is now pure per-transaction.

    • Memberships: 2% on each invoice with a $2 minimum (was: 2.9% of revenue tier).
    • Seminars / merchandise / drop-ins: 3% per transaction.
    • In-gym POS (drinks, snacks, retail): $0 platform fee.
    • Removed platform_subscriptions table and /subscribe gate; existing subscriptions grandfathered to $0/mo platform fee forever.
    Related:/pricing
  • ReleaseApril 15, 2026

    Portable belt history + per-discipline ranks

    Belt promotions and rank records are now keyed by (user, discipline) instead of (user, gym), so members carry verified lineage across OLM academies.

    • New user_ranks table — one row per (user, discipline). Disciplines: BJJ, Judo, Muay Thai, Boxing, Kickboxing, Karate, Taekwondo, Wrestling, MMA, Other.
    • New belt_promotions table — append-only lineage with user, issuing org, discipline, from-rank, to-rank, promoter user, free-text note.
    • org_members.rank caches the org's primary-discipline rank for query performance; member.updateRank writes through to user_ranks.
    • Member API exposes getUserRanks, getBeltLineage, and analytics.getMemberLifetimeStats endpoints.
  • ImprovementApril 10, 2026

    Guardian / dependent profiles for kids classes

    Guardian accounts can now manage one or more dependent (kid) profiles — each with their own training data, but billing rolls up to the guardian.

    • users.guardianUserId column links a kid profile to a guardian account.
    • resolveTargetUser helper reads the right user context for journals, check-ins, drop-ins.
    • Guardian can sign waivers on behalf of dependents; second-signer flow for forms requiring two signatures.
    • One Stripe billing relationship per guardian, with line items per dependent membership.
  • ReleaseApril 5, 2026

    AI Monitor — churn prediction with 14-day lead time

    New AI Monitor surface that flags members trending toward cancellation 14 days early based on attendance drop-off relative to baseline.

    • Per-member attendance baseline (rolling 90-day window).
    • At-risk flags fire when recent 14-day attendance drops >50% from baseline.
    • Org-level pattern detection separates seasonal dips from individual churn signals.
    • Each at-risk member surfaces a recommended action (outreach, free private, schedule suggestion, billing pause).
    • Opt-in at the org level; analytics dashboard exposes the same data without the predictive layer if disabled.

March 2026

  • ReleaseMarch 28, 2026

    Training journal with 8-axis chart and voice notes

    Members can log post-class training as tags or voice notes; OLM transcribes and maps to an 8-axis radar chart per discipline.

    • Tag-based and voice-note entry modes (under 30 seconds typical).
    • 8-axis radar chart per discipline (BJJ: Guard, Passing, Subs, Sweeps, Takedowns, Escapes, Pressure, Conditioning).
    • AI coach surfaces suggested drills based on weak axes.
    • Aggregate journal data at the academy level surfaces curriculum gaps.
    • Journal entries are member-portable — they travel across OLM academies.
  • ImprovementMarch 15, 2026

    Stripe Connect Standard onboarding

    Onboarding flow now creates a Stripe Connect Standard account for every gym, replacing the legacy platform-account model.

    • Each gym is the merchant of record for member charges; payouts land directly in the gym's bank account.
    • Platform fee is collected on top of Stripe processing — Stripe charges Stripe, OLM charges its capped fee separately.
    • Refunds automatically reverse the OLM platform fee in proportion to the refund amount.
    • If a gym ever leaves OLM, they keep their Stripe account, customer relationships, and card-on-file vault intact.
  • ReleaseMarch 1, 2026

    Multi-location support

    Organizations can now run multiple physical locations under one Stripe billing setup, each with its own class schedule and instructor pool.

    • locations table with per-location class templates.
    • Member-facing schedule filters by preferred location.
    • Per-location utilization metrics in the admin reports.
    • One Stripe Connect account per organization across all locations.