BettahMe Back to Docs
Web App · BettahLife Staff & Coach Admins

Admin Guide

The complete reference for the BettahMe admin panel — all ten sections, every resource, every action, and the business rules behind them. If it can be managed from a browser, it's documented here.

Panel: https://bettahme.com/admin Access: Admin invitation or coach ownership Built with: Filament v5
01

Two kinds of admin

Everyone who can sign into the admin panel falls into one of two tiers. What you see — every navigation item, table row, filter, and dropdown — is shaped entirely by which one you are.

Full access

BettahLife staff

  • Owner or admin of the single coach flagged is_platform = true
  • Sees and manages every coach, user, and business on the platform
  • Not bounded by a coins balance — can award coins, escrow event prizes, or adjust any coach's balance freely
  • The only tier that can reach Coaches, platform config lists, billing, coin/redemption catalogs, notification broadcasts, and system settings
Scoped access

Coach admins

  • Owner or admin of any other coach (individual or organization)
  • Sees only their own coach's users, events, courses, and payments
  • Bounded by their coin balance — must have enough coins to award or fund prizes
  • Cannot reach BettahLife-only sections at all — they simply don't appear in navigation
i

You become an admin either by being the user who created a coach (its owner), or by accepting an admin invitation from an organization coach. Only active users who are an owner or an admin can log into the panel at all — a plain member account is refused at the login screen.

02

The ten sections

The panel's sidebar is organized into ten navigation groups, in this order. Each is covered in its own section below.

#GroupWhat lives thereWho sees it
1Accounts ManagementUsers, CoachesBoth, scoped
2Activity & HealthSteps, Distances (raw logs)Staff only
3Event ManagementEvents, Categories, Types, FrequenciesBoth, scoped
4Course ManagementCoursesBoth, scoped
5Subscriptions & PaymentsPlans, Subscriptions, Payments, Monnify, Apple, Google PlayMostly staff; Monnify scoped
6Coins ManagementBundles, Tiers, Transactions, System Settings, Coach CoinsMostly staff; Coach Coins is coach-only
7Redemption ManagementPartner Businesses, Offers, Redemptions, API Credentials, WebhooksStaff only
8Notifications ManagementPush/SMS/Email campaigns, Notification Center, Automatic DeliveriesMostly staff; Notification Center is shared
9Website ContentTestimonialsStaff only
10System SettingsSystem Settings (timers & coin config), Docs SettingsStaff only

Wherever staff and coach admins share a section, most list pages that mix data across coaches carry a Coach Scope filter — visible to staff only — to toggle between BettahLife Only, a specific other coach, or All Coaches.

03

Accounts Management

The people and businesses on the platform: end users and the coaches they belong to.

Users Scoped

Manages every account — end users, coach admins, and coach owners. Staff see everyone; coach admins see only members and admins tied to their own coach.

Creating & editing Staff-only to edit/delete

Coach admins can create a user only if their coach is an Organization (individuals can't add admins). Editing and deleting an existing account is restricted to BettahLife staff.

What the form covers

Profile photo, name/nickname, email, gender, date of birth, nationality, national ID, the "Admin For" coach link (staff-only, sets coach_id), occupation, favorite sport, health basics (height, weight, blood type, known ailments, allergies, medical notes), nine notification-preference toggles, and — for staff — a read-only coins balance.

Row actions Mostly staff-only

Delete Password forces a password reset; Activate restores a soft-deleted account; Deactivate revokes API tokens and soft-deletes the account; Award Coins credits coins from the BettahLife platform coach with no balance check. All four are staff-only.

Inviting people

The header carries Invite Admin and Invite Member actions — both send a role-based invitation to an existing user for an organization coach. Staff can invite for any organization; coach admins are locked to their own coach. Candidate lists are scoped so you can never invite — or accidentally poach — a user already tied to another coach.

List tabs: All (includes soft-deleted), Admins, Members, Active, Inactive. A header widget pair — total/active/inactive/verified/new-this-month counts, and a monthly-registrations line chart — sits above the table, scoped the same way as the list.

Open any user and you'll find their full profile behind relation-manager tabs:

TabShowsVisibility
PhonesNumbers, type, default/WhatsApp flags, verificationEveryone views; staff-only to edit
AddressStreet, city, state, postal, countryView-only for everyone
Events / CoursesWhat they've registered for or enrolled inStaff only
Memberships / Followed CoachesCoaches they subscribe to or follow, full CRUDStaff only
Steps, Distance, Water, Weight, Blood Pressure, Heart Rate, TemperatureRead-only health logsStaff only
Health TargetsTheir configured goalsStaff only
MedicationsName, form, schedule summary, 30-day adherence %Staff only
Coin TransactionsFull ledger with running balanceStaff only
Coin RedemptionsRewards claimed, with a Refund Coins action where eligibleStaff only
Automatic Notification DeliveriesSystem-triggered notification log for this userStaff only
i

The Events, Courses, Memberships, and Followed Coaches tabs are staff-only for a specific reason: a user can belong to multiple coaches at once, so there's no safe way to scope those tabs to just the coach admin viewing them without risking a leak of another coach's data.

Coaches Staff-only

The full roster of coaching businesses — individuals, organizations, and BettahLife itself. This resource doesn't appear in navigation at all for coach admins.

Individual vs. organization

Individuals run a solo business and can't send invitations. Organizations (including BettahLife) can invite both admins and members. There should only ever be one coach flagged is_platform.

Status & verification actions

Row and bulk actions: Approve, Reject, Suspend, Verify, and Certify (the last two only appear when the coach is eligible). List tabs mirror these states: All, Individuals, Organizations, Incomplete, Pending, Approved, Rejected, Suspended.

Fees & branding

One-time, monthly, and annual membership fees with currency, logo and cover photo uploads, description, tags, contact details, address, website, and six social links.

A coach's detail page carries seven relation-manager tabs:

TabWhat it does
CoinsThe coach's transaction ledger with a live balance (polls every 5s). Header actions: Adjust Balance (staff-only manual +/− with a required reason) and Purchase Coins (non-staff — picks a bundle, opens a Monnify checkout).
AdminsAssociate/dissociate admin users — restricted to users with no existing coach affiliation, so you can't silently strip another coach's admin.
MembersAttach/detach members, searchable by name or email.
FollowersAttach/detach free followers.
DocumentsKYC uploads (national ID, passport, driver's license) with uploader tracking — full CRUD.
Events / CoursesThe coach's own content, view-only here (links to the full resource for editing).
InvitationsOrganization coaches only — send admin/member invites by email or phone, with a Copy Token action and Cancel for pending ones.
04

Activity & Health

Two staff-only, read-only resources exposing the raw data the mobile app writes automatically. Nothing here is created from the panel — it's a system of record fed entirely by the app.

Steps Read-only

User, step count, unit, source, device, recorded-at. Filterable by user, a quick or custom recorded-date range, step-count range, unit, source, and device.

Distances Read-only

Same shape as Steps, plus activity type and an "is estimated" flag — distance is estimated from step count on devices that don't report it directly.

i

Water, Weight, Blood Pressure, Heart Rate, Temperature, Health Targets, and Medications aren't top-level resources here — they only appear as read-only tabs on a specific User's detail page (see the Accounts section above).

05

Event Management

Time-bounded activities with optional leaderboards and coin prizes, plus the three lookup lists that classify them.

Events Scoped

Staff see every coach's events; coach admins see only their own. The form: title, description, goal, price (blank = free), tags, category/type/frequency, start/end date, online link, expected attendance, address with coordinates, contact phones, a leaderboard toggle with type (steps, distance, or calories), and — at creation only — a coin-rewards repeater for the leaderboard prize table.

Event status lifecycle

Draft Created, not visible to members Published Members can register Canceled Terminal state Publish Cancel Prizes escrow coins from the coach's balance A Draft or Published event can be canceled directly

Coin escrow & balance checks

Adding, editing, or removing a prize on a leaderboard event re-syncs the escrow. BettahLife staff can always proceed; a coach admin is checked against their available balance (balance minus what's already escrowed) first, and blocked with a notification if they'd overcommit.

Row actions

Publish, Unpublish (revert to Draft), and Cancel Event each appear only when valid for the current status.

Relation managers: Registrations (attach/detach attendees, scoped for coach admins to their own members), Files (media uploads with uploader tracking), Prizes (place → coins → label, up to 50 rows, 1–100,000 coins each — creatable only when the leaderboard is on), and Leaderboard (read-only ranking by daily/weekly/overall period).

Categories, Types & Frequencies Staff-only

Three simple lookup tables (a single name field each) that populate the Event form's classification selects. Global, not coach-scoped — there's one shared list for the whole platform.

06

Course Management

Ordered learning content, scoped to the coach that owns it.

Courses Scoped

Title, description, price (blank = free), expected attendance, goal, tags, and cover photo. Row actions Publish, Unpublish, and Archive appear only when valid for the current status (Draft/Published/Archived).

Lessons (Items relation manager)

An ordered, drag-to-reorder list of items — title, type (video, article, image, or quiz), description, media upload, and a "Free Access?" toggle. That toggle is forced on and locked whenever the course itself is free, since a lesson inside a free course is always free.

Enrollments relation manager

Attach/detach enrolled users — for coach admins, the attach picker is scoped to only members of that course's coach.

07

Subscriptions & Payments

Billing infrastructure spanning Monnify (card/bank payments), Apple, and Google Play — mostly staff territory, with one coach-scoped exception.

Plans Staff-only

The catalog of subscribable products: name, unique slug, entitlement type, billing interval, price and currency, Apple/Google product IDs, Monnify product code, an active toggle, and a polymorphic link to whatever the plan actually entitles (a coach's premium content, for example).

Subscriptions Staff-only

Tracks a user's subscription to a Plan — provider, provider subscription ID, status, and starts/renews/expires/grace-ends/cancelled timestamps. Row actions: Cancel at Period End and Expire Now.

Payments Read-only, staff-only

A settled-transaction ledger — user, plan, provider, provider reference, money-formatted amount, status, paid-at. No create or edit; it's a record of completions.

Monnify Transactions Scoped, read-only

The Nigerian payment-gateway log covering coin-bundle purchases and coach subscription payments. Staff see every coach's transactions; coach admins see only their own. Status is color-coded (paid/overpaid = success, pending = warning, else danger), and the view includes the raw webhook payload.

Apple Transactions & Google Play Purchases Read-only, staff-only

Mirror logs fed by Apple and Google server notifications — transaction/order IDs, product IDs, environment, subscription state, expiry. Purely observational; nothing is actioned from these screens.

08

Coins Management

BettahCoins are the platform's reward currency. This section is almost entirely BettahLife-staff territory — coach admins interact with coins only through their own dedicated Coins page.

How coins move through the platform

Member activity signup, steps, subscription payments… Coach purchases a Coin Bundle via Monnify checkout Coach Balance Escrowed for Event Prizes released to leaderboard winners Awarded to a Member directly, or via prize distribution Member Balance Redeemed via a Partner Offer Partner Business fulfills the reward, in person or by code

Coin Bundles Staff-only

The packs coaches purchase to top up their balance — name, coins amount, price and currency, Apple/Google product IDs, active toggle.

Coin Tiers Staff-only

Loyalty tiers by lifetime coins earned — minimum threshold, benefits, an earning multiplier applied to automatic awards, badge color and icon. The default tier can never be deleted, alone or in bulk.

Coin Transactions Read-only, staff-only

The platform-wide ledger — every credit and debit, with type, amount (color-coded), running balance, and description. Filterable by Coach Scope and type.

Coins page Coach-admin-only

The self-service equivalent for a coach admin: their own transaction table with a live balance, plus Purchase Coins (opens Monnify checkout) and Award Coins (balance-checked — unlike the staff Award Coins action on Users, which skips the check entirely).

09

Redemption Management

Everything to do with turning coins into real-world rewards through partner businesses — entirely BettahLife-staff territory.

Partner Businesses

The merchants that fulfill redemptions: name, description, logo, contact details, active toggle, and a Redemption PIN. The PIN is one-way hashed on save and never re-displayed — it's what the partner's own staff enter at the public Redemption Portal to verify and redeem codes.

Redemption Offers

The catalog: linked partner, category, name, stock (blank = unlimited), coins cost, a value description (e.g. "15% off"), optional monetary value, terms, active toggle.

Redemptions Read-only

The full ledger of claims, with a color-coded status (Pending/Issued = warning, Completed/Delivered = success, Rejected = danger, Expired = gray). Two actions live here: Issue Reward — manually issue an offer to any user or an arbitrary recipient by name/email/phone — and Refund Coins, which appears only when a redemption is refundable and credits the coins back after a confirmation and optional reason.

Partner API Credentials & Webhook Configs

Programmatic access for partners: API credentials carry scoped abilities (rewards:issue, rewards:verify, rewards:consume) and an active toggle; webhook configs point to a partner's endpoint with an auto-generated signing secret and a checklist of subscribed event types.

!

A partner business with no PIN set can verify codes publicly but can't redeem or flag them — if a partner reports the Redeem or Flag tiles failing, check whether their PIN has been set on their business record.

10

Notifications Management

The most involved section in the panel — five resources covering three outbound broadcast channels, an in-app notification center, and an audit trail of everything the system sends automatically.

Broadcast campaign pipeline (Push / SMS / Email)

Create campaign pick audience & content Resolve audience snapshot saved as filters Send now queued immediately Scheduled waits for scheduled_at Channel service Push / SMS / Email Retry Failed re-queues against the same audience snapshot Delivery Outcome: queued · sent · failed

Push, SMS & Email campaigns Staff-only

All three work identically and are immutable once created — there's no edit or delete, only Retry Failed. Each has content fields specific to its channel (push: title, body, optional data payload; SMS: body; email: subject, body).

Audience targeting

Choose All users, Members only, Admins only, a specific Coach's users, or a hand-picked list of Users. Whatever you pick is resolved to a concrete filter snapshot and stored with the campaign, so a later retry sends to the exact same audience — not whoever matches the criteria today.

Send now or schedule

Sending now queues messages immediately. Scheduling for a future time dispatches a delayed job that fires the actual send when scheduled_at arrives — nothing goes out before then.

Delivery Outcome panel

Every campaign's detail view shows a live status sentence, progress and failure summaries, a recommended next action, queued/succeeded/failed/still-processing counts, and up to 100 recipients in each bucket with timestamps and error messages. The list table itself polls every 10 seconds so in-flight campaigns update without a refresh.

Status, at a glance

Computed purely from the counts — Scheduled Pending Processing Sent Partial Failed No recipients — there's no separate status column to fall out of sync with reality.

Notification Center Shared

In-app posts that show up in the mobile app's notification inbox — distinct from the three broadcast channels above, though publishing one can also queue a linked push notification. Unusually, this one isn't staff-exclusive: any coach admin can post to their own audience, scoped automatically to their coach. The form adds an image, an optional action label and deep-link URL, and a free-form data payload. The table shows both the in-app read count and the linked push campaign's delivery counts side by side.

Automatic Notifications Read-only, staff-only

The audit trail for everything the system sends on its own — event reminders, medication due/missed alerts, inactivity nudges, weekly digests, coin-award and milestone notices, subscription-at-risk warnings, and failed-payment alerts. Each row shows an intent badge (color-coded by severity), channel, recipient, and the record that triggered it. The timing for most of these is configured in System Settings (see below). The same log, scoped to one person, appears as a tab on their User record.

11

Website Content

Testimonials — the only resource here — manages the public marketing quotes shown on the BettahLife website: name, role, location, headline, quote, photo, a result metric (e.g. "30 lbs" / "Weight Lost"), sort order, and separate "featured" and "published" toggles. Staff-only, full CRUD.

12

System Settings

Two staff-only pages that configure platform behavior live — no code deploy required.

System Settings

A tabbed form (confusingly named CoinSettings in code, but it now covers far more than coins) that reads and writes every runtime timer and coin-award amount the mobile API depends on.

TabControls
PaymentsPlatform subscription price — set to 0 to disable Monnify platform-subscription checkout entirely.
OperationsEvent reminder windows, inactivity nudge and weekly-summary timing, health-data lookback defaults, the full medication reminder/overdue/missed schedule, coach invitation and account-deletion grace periods, payment verification and Monnify reconciliation windows, and file/upload TTLs.
CoinsRedemption minimum balance and unredeemed-coins cap, coin value currency & rate, and every per-activity coin award amount (registration, profile completion, first milestone, first transaction, daily step bonus + threshold, subscription payment).

Every field is a bounded numeric input with sensible min/max limits, and saving writes each one back immediately — changes take effect for the next request, with no deploy or restart.

Docs Settings

Controls the visibility of this documentation site to outsiders: a master switch for the whole docs area, plus one toggle per section (API Docs, Admin Guide, Coach Guide, Member Guide). BettahLife admins always see every page regardless of these toggles — they only affect what unauthenticated visitors and non-staff can reach.

13

Dashboard & widgets

The landing page after login is a completely different dashboard depending on your tier — every widget gates itself on isBettahlifeStaff().

BettahLife staff see

  • Platform stats — total users, coaches, events, courses, revenue, and coins awarded (with sparklines)
  • Monthly user-growth and revenue charts, platform-wide
  • Recent users and recent Monnify transactions, platform-wide

Coach admins see

  • Their own stats — members, followers, active events, courses, coin balance (plus escrowed), and revenue
  • Their own member-growth, revenue, course, and event charts
  • Their own recent members, recent courses, and recent coin activity

One widget is shared by everyone: Upcoming Events — staff see it across all coaches with a Coach column, coach admins see only their own.

14

Rules & limitations worth knowing

A handful of behaviors that show up across multiple sections — understanding these explains a lot of "why can't I do that?" moments.

Coach-scoping is the default, everywhere

Nearly every coach-associated resource — Users, Events, Courses, Monnify Transactions, Notification Center posts, and several relation managers — automatically filters to the logged-in coach admin's own coach. If a "pick any user" dropdown looks like it should be scoped and isn't, that's treated as a bug, not a feature.

Coin escrow protects against overcommitting

Event prizes reserve (escrow) coins from the owning coach's balance the moment they're set. A coach admin can never commit more in prizes than they can afford; BettahLife staff bypass this check entirely.

Broadcast campaigns are immutable

Once a Push, SMS, or Email campaign is created, it can never be edited or deleted — the only remediation for a failed send is Retry Failed, which re-queues against the exact original audience snapshot.

Secrets are never re-displayed

A partner's Redemption PIN is one-way hashed on save; a partner webhook's signing secret is auto-generated on creation. Neither is ever shown again in the panel after the fact — treat the moment of creation as your only chance to copy it.

The default Coin Tier can't be deleted

Whichever tier is flagged as the default is protected from deletion, individually or as part of a bulk action — there must always be a fallback tier for members who haven't reached a higher one.

© 2026 BettahLife Living Benefits Limited. All rights reserved.