What “Atlas” means in this repo
In this codebase, Atlas is the “organizations system”:- Public org profile:
/org/:name(frontend route) - Org workspace (club dashboard):
/club-dashboard/:id(frontend route) - Admin/org-management dashboard:
/feature-admin/atlas(frontend route) - Backend surfaces:
- General org routes:
Meridian/backend/routes/orgRoutes.js(mounted at/inMeridian/backend/app.js) - Role + membership API:
Meridian/backend/routes/orgRoleRoutes.js(mounted at/org-roles) - Platform admin (config/verification/analytics):
Meridian/backend/routes/orgManagementRoutes.js(mounted at/org-management) - Org messaging:
Meridian/backend/routes/orgMessageRoutes.js(mounted at/org-messages) - Org event management + analytics:
Meridian/backend/routes/orgEventManagementRoutes.js(mounted at/org-event-management)
- General org routes:
Atlas is not a standalone service; it’s a set of schemas + routes inside the main backend and multiple UIs inside the main React frontend.
Data storage + “multi-tenant” model access
The backend uses Mongoose schemas inMeridian/backend/schemas/ but does not import models globally. Instead, handlers call:
req.db.model(...) to bind models to the per-request connection (req.db). This implies a multi-tenant or multi-db routing layer upstream that sets req.db (outside Atlas itself).
Authentication and authorization layers
Global auth
Most Atlas endpoints require a session cookie / JWT validated via:verifyTokenmiddleware (Meridian/backend/middlewares/verifyToken.js)
withCredentials: true so cookies are sent.
Atlas permission model (org-scoped)
Atlas uses org-scoped permissions enforced by:Meridian/backend/middlewares/orgPermissions.js
Org.hasPermission(roleName, permission)(role permissions stored on the org document)- plus member-level overrides (
customPermissions,deniedPermissions) onOrgMember
Admin surfaces (platform-wide)
The “org-management” API usesauthorizeRoles('admin', 'root') for system administrators.
Frontend surfaces
1) Club dashboard (org workspace)
File:Meridian/frontend/src/pages/ClubDash/ClubDash.jsx
Loads org data via:
- owner check (
org.owner === user._id) - otherwise calls
GET /org-roles/:orgId/membersand cross-references org roles
2) Org management admin dashboard
File:Meridian/frontend/src/pages/FeatureAdmin/OrgManagement/Atlas.jsx
Menu items map directly to backend endpoints:
- verification queue →
/org-management/verification-requests - organizations list →
/org-management/organizations - analytics →
/org-management/analytics - system config →
/org-management/config(+PUT /org-management/config)
3) Org messaging
UI components use/org-messages/:orgId/... endpoints (see OrgMessageFeed usage in club dashboard).
Mental model: key flows (high level)
Role assignment
Org.positions[]defines roles + permissionsOrgMember.rolereferences a rolenameOrgMember.customPermissions/deniedPermissionscan override the org role
Where to go next
- Start with data model:
/atlas/data-model - Then backend endpoints:
/atlas/backend - Then frontend call graph:
/atlas/frontend - Then permissions:
/atlas/permissions