Dashboard

The home page (/) shows the authenticated user's game dashboard.

Component hierarchy

Welcome → Main → Me
File Role
Welcome.js Home page wrapper
Main.js Layout shell for dashboard
Me.js Dashboard logic and tables

Data loading

Me.js calls fetchDashboard() (me_dashboard auth query) on mount and when refresh increments. Navbar chrome uses fetchProfile() (me_profile) and fetchNotifications() (list_notifications) separately — profile fetches do not load in-app notifications.

The dashboard response drives:

Partial data may already be in Zustand globalMe from navbar login; fetchDashboard merges into globalMe with { ...prev, ...dashboard }. In-app notifications are not part of the dashboard payload — Me.js calls fetchNotifications() in parallel when loading the dashboard.

Backend: Auth queries — Profile and dashboard (me_dashboard, dismiss_notification).

Tables

Component Content
MyTurnTable.js Games where it is the user's turn
TheirTurnTable.js Games waiting on opponent
WatchedGamesTable.js Spectated games (persistent watch list)
StandingChallengeTable.js Active standing challenges

In-app notifications

The dashboard no longer hosts a notifications table. The navbar NotificationBell.js is the sole in-app feed UI. See Notifications (front).

Under Your games, a link downloads all completed game reports from records.abstractplay.com.

Challenges

Modal flows for creating and responding to challenges:

Backend semantics: Challenges.

Profile creation

If the user has no profile, NewProfile.js is shown before the dashboard tables.

WebSocket refresh

Dashboard tables update when WebSocket messages arrive (e.g. opponent moved, new challenge). See WebSockets.

Related