Entry routes
Atlas-related frontend routes are defined in:Meridian/frontend/src/App.js
- Public org profile:
/org/:name - Org workspace (club dashboard):
/club-dashboard/:id - Org management admin:
/feature-admin/atlas(authorized roles:admin,developer,oie) - Org creation:
/create-org(authorized roles:admin,developer)
HTTP client primitives
useFetch(url, options)
File: Meridian/frontend/src/hooks/useFetch.js
- Uses Axios
- Sends cookies (
withCredentials: true) - On 401 with
TOKEN_EXPIRED/NO_TOKEN:- POSTs
/refresh-token - Retries the original request
- If refresh fails: redirects to
/login
- POSTs
When writing new Atlas UI, default to
useFetch for “read” queries and reuse apiRequest for mutations.apiRequest(url, body, options)
File: Meridian/frontend/src/utils/postRequest.js
- Axios wrapper with cookie support
- On 401:
- POSTs
/refresh-token - Retries once
- POSTs
- Returns either
response.dataor{ error, code }objects on failure
Public org profile (/org/:name)
The public org display page loads org detail by name and renders:
- org overview
- members/followers (depending on UI)
- org events (often via
GET /:orgId/events)
GET /get-org-by-name/:name
Club dashboard (org workspace) (/club-dashboard/:id)
File: Meridian/frontend/src/pages/ClubDash/ClubDash.jsx
Primary data fetches
- org data:
useFetch(/get-org-by-name/$?exhaustive=true) - meetings:
useFetch(/get-meetings/$)
Permission gating (client-side)
The dashboard keeps local UI permissions:canManageRolescanManageMemberscanViewAnalytics
- Owner check:
org.owner === user._id→ allow all - Else:
- fetch all members via
GET /org-roles/:orgId/members - find the current user’s
OrgMemberrow - find role object in
org.positions - allow based on booleans or
role.permissions
- fetch all members via
/atlas/permissions).
Tabs and features
The club dashboard includes components that map to backend APIs:- Members (
Members/) →/org-roles/:orgId/members, role changes, application review - Roles & Permissions (
Roles/) →/org-roles/:orgId/rolesand related mutations - Announcements (
OrgMessageFeed) →/org-messages/:orgId/messagesetc. - Events (
EventsManagement) → typically event routes +/org-event-management/:orgId/...for analytics/management - Verification request (
Settings/VerificationRequest) →POST /org-management/verification-requests
Org management admin dashboard (/feature-admin/atlas)
File: Meridian/frontend/src/pages/FeatureAdmin/OrgManagement/Atlas.jsx
This is a structured dashboard wrapper with menu items:
- Overview →
OrgOverview - Verification Requests →
VerificationRequests - Organizations →
OrgList - Analytics →
Analytics - Settings →
Configuration(multiple sub-sections)
Data sources
/org-management/config/org-management/verification-requests/org-management/organizations/org-management/analytics
Notable implementation detail: config editing
Configuration.jsx maintains localConfig state and compares it to an originalDataRef snapshot to power an “unsaved changes” banner.
Backend writes to:
PUT /org-management/config
$set dot-path updates.
Where to add new Atlas UI
Typical mapping:- Org workspace features →
Meridian/frontend/src/pages/ClubDash/... - Platform/admin features →
Meridian/frontend/src/pages/FeatureAdmin/OrgManagement/... - Shared UI building blocks →
Meridian/frontend/src/components/...
- prefer adding them under
/org-rolesor/org-managementdepending on scope - document them in
/atlas/backendand link from overview