PPalladium AI
HomeFeaturesPricingDevelopersBlog
PPalladium AI
Docs
Sign InSign Up
Back to Blog
ProductJune 2, 20264 min read

Real-Time Member Activity Feed on the Overview Dashboard

The "Recent member activity" panel on the overview page now shows a live, merged feed of savings deposits and loan events — replacing the previous static placeholder list with reactive data sourced directly from the Convex backend.


What changed

The overview dashboard previously rendered a hardcoded list of five placeholder rows — fictional members with static action labels and dollar amounts — in the "Recent member activity" card. The card now displays the five most recent real events recorded for the selected team, updating automatically whenever a deposit is recorded or a loan status changes.

How the feed is built

The component fetches two Convex queries in parallel:

Deposits

Each deposit record contributes one activity item. The member name is read from memberName (resolved at write time from the user record), the action label is Savings deposit, and the timestamp is dateDeposited — the user-supplied date of the actual deposit, not the record creation time.

Loans

Each loan record contributes one activity item. The member name is derived from firstName and lastName. The action label reflects the loan's current status:

Loan application— status is pending
Loan approved— status is approved
Loan rejected— status is rejected

The timestamp is taken from updatedAt rather than createdAt, so that an approval or rejection surfaces at the time the decision was made rather than when the application was originally submitted.

The two lists are merged into a single array, sorted by timestamp descending, and the top five items are rendered. Each row displays:

  • An initials avatar generated from the member's name.
  • The member name and an action label.
  • A colour-coded status badge for loan items (primary for approved, destructive for rejected, secondary for pending).
  • The amount formatted as a dollar value.
  • A relative timestamp — "just now", "5m ago", "2h ago", "3d ago" — giving an instant sense of recency without requiring a full date parse.

Loading and empty states

While either query is still resolving, five skeleton rows replace the list — maintaining the card height and preventing layout shift. If the team has no deposits and no loans yet, a short empty-state message is shown instead of a blank card.

No extra queries

The overview page already subscribes to loans.listByTeam and deposits.listByTeam for the metric cards. Convex deduplicates subscriptions with identical arguments within a single page render, so the activity feed reuses those same live result sets without issuing additional requests to the backend.

What's coming next

  • Member join events — surface new team member additions in the feed alongside financial activity.
  • Repayment events — once repayment records are introduced, each payment will appear as a distinct activity item with a running outstanding-balance figure.
  • Pagination / load more — the current cap of five items is intentional for the overview card; a dedicated activity log page will provide a full paginated history.

Back to Blog

Built by Palladium AI. Multi-tenant finance infrastructure with open foundations on GitHub.