{{ greeting }}, {{ firstName }}

{{ dateLabel }} · {{ today?.organization?.name }} · {{ summary }}

Timetable

Check a member in

Records the visit and checks their membership at the door. Past-due or frozen memberships come back with a warning.

{{ deskMatches.length && deskSearching ? '↑ ↓ to choose · Enter checks in ' + deskMatches[deskActive].name : 'Start typing their first or last name.' }}

{{ deskSearching ? 'No one called “' + deskSearch.trim() + '” yet.' : 'No members yet.' }}

Someone with an HQ account joins with it. Anyone else can set a password with “Forgot password”.

{{ checkinResult.name }} is checked in. {{ checkinResult.name }} is in, with a warning: {{ checkinResult.reason }} {{ checkinResult.name }} was not admitted: {{ checkinResult.reason }} {{ checkinResult.reason }}
{{ error }}

{{ isTrainer ? 'My classes' : 'Classes today' }}

{{ today.classes.length }}

{{ bookedToday }} of {{ capacityToday }} spots booked

Check-ins

{{ today.checkins.total }}

{{ today.checkins.expected }} expected from bookings

Revenue today

{{ money(today.revenue.today_cents) }}

{{ money(today.revenue.month_cents) }} this month · {{ money(today.revenue.mrr_cents) }} MRR

PT sessions

{{ today.appointments.length }}

{{ today.week.appointments }} booked this week

My clients

{{ today.clients.length }}

{{ today.week.classes }} classes on your week

Active members

{{ today.members.active }}

+{{ today.members.joined_this_month }} joined this month

{{ isTrainer ? 'Your day' : "Today's timetable" }}

{{ remaining ? remaining + ' still to come' : (timeline.length ? 'All done for today' : 'Nothing scheduled') }}

Full timetable

No classes or sessions today

Anything later this week is listed below.

  1. {{ item.start }}

    {{ item.end }}

    {{ item.title }}

    On now Up next Done Full

    {{ item.detail }}

Later this week · {{ today.week.classes }} classes, {{ today.week.appointments }} PT

  • {{ shortDate(session.date) }}

    {{ session.name }}

    {{ session.start_time }}

Needs attention

{{ attentionCount ? attentionCount + (attentionCount === 1 ? ' member' : ' members') + ' to follow up with' : 'Nobody needs chasing right now' }}

Members
Payments are up to date and no one is drifting away.

Failed payments {{ money(today.billing.outstanding_cents) }} owed

None — every membership is paid up.

{{ initials(row.name) }}

{{ row.name }}

{{ row.plan }} · past due

{{ money(row.owed_cents) }}

At risk of leaving

No one in the high-risk band.

{{ initials(row.name) }}

{{ row.name }}

{{ row.reasons[0] || 'Attendance dropping' }}

{{ row.score }}

Your clients

{{ today.clients.length }} assigned for personal training

Athletes
{{ initials(client.name) }}

{{ client.name }}

{{ client.next ? 'Next: ' + shortDate(client.next.date) + ' · ' + client.next.start_time : 'No session booked this week' }}