KPI tiles β
The Home dashboard shows five tiles in a row across the top. Each tile is a live count that updates whenever the underlying data changes, and each one is a link β clicking a tile deeplinks you into the right page with the right filter pre-applied.

TIP
KPI tiles only appear on /home. The customizable dashboard at /home-v2 replaces them with widgets you place yourself. You can recreate the same numbers as widgets (the Visitor pipeline, Active vs lost, and number widgets all overlap with KPI math).
The five tiles β
| Tile | What it counts | Permission | Deeplink |
|---|---|---|---|
| Active members | Members with no lost_at and not soft-deleted | members.view | /members |
| Lost members | Members with lost_at set | members.view | /members?status=lost |
| Attendance this month | Distinct attendance records from the 1st of this month to today | attendance.view | /attendance?mode=charts |
| New last 30 days | Members whose date_of_registration is within the last 30 days and who are still active | members.view | /members |
| Birthdays this month | Members whose date_of_birth month matches the current month, still active | members.view | /members?birth_month={month} |
The tile only renders if you have the listed permission. A user with attendance-only access sees one tile; a full admin sees all five.
What each tile means β
Active members β
The headline number for your church. Counts everyone with a profile that:
- Has not been soft-deleted (
deleted_at IS NULL) - Has not been marked lost (
lost_at IS NULL)
This is the same number that drives your plan's seat count. If you upgrade or downgrade your plan, your billing is based on the active-members number β see Choose a plan.
Lost members are not deleted
Marking someone lost preserves their full history (attendance, giving, school records) but removes them from active counts. If they come back, you flip the lost flag off and everything reappears. See Active vs lost members.
Lost members β
The flip side of active β people who have stopped attending or moved away but whose records you want to keep around. Clicking the tile takes you straight to the lost-members list pre-filtered.
A healthy church usually has a non-zero lost number. If it's zero you're probably not marking dormant members lost, and your active number is inflated.
Attendance this month β
A distinct count of attendance rows from the 1st of the current month through today. The number is distinct by attendance ID, so a member who attended four times this month counts as four.
The math runs the same regardless of meeting type β Sunday service, midweek prayer, school chapel, all roll up into one number. If you want to slice by meeting, click the tile to go to Attendance β Charts, or use the Attendance by meeting widget on the custom dashboard.
New last 30 days β
Members whose date_of_registration is on or after 30 days ago. This is your "front-door" metric β it tells you whether your invitation and follow-up work is producing new registered members.
Last 30 days, not last calendar month
The label says "new last 30 days" deliberately. Counting "this calendar month" makes the number depend on whether it's the 1st or the 28th. A rolling 30-day window is comparable week to week.
Birthdays this month β
Members whose date of birth falls in the current calendar month. Useful for sending bulk birthday messages or printing a birthday card list.
Clicking the tile deeplinks to /members?birth_month=N with the current month number β that filter is also exposed in the regular member-list filter UI.
Loading and error states β
While the dashboard query runs you see five gray skeleton bars where the numbers will appear. If the query fails β typically a Supabase outage or a permission misconfiguration β a small red line appears above the tiles:
Could not load stats β please refresh.
The tiles themselves render with a 0 placeholder so the layout doesn't jump. Refresh the page once your connectivity is back; the dashboard caches stats for 5 minutes so it won't hammer the database.
Org-unit scope β
When you pick a specific org unit in the scope picker (top right of the Home page), every tile is recomputed against the members assigned to that unit and its descendants. The recompute is cheap β it runs as a single query against the v_members_org view β but it does invalidate the cache, so expect a brief skeleton flash when you change scope.
If your church doesn't use a hierarchy at all the picker is hidden and the tiles always reflect the whole org.
PowerSync fallback β
On growth+ plans with PowerSync enabled, the KPI counts come from your local SQLite copy of the database instead of hitting Supabase. This makes the dashboard usable offline and removes round-trip latency. See Offline mode for a deeper dive.
What's next β
- Today's focus β the three lists below the KPI tiles
- Active vs lost members β what flipping the lost flag actually does
- Attendance reports β drill into the attendance number tile by meeting and date