Evolve Admin Frontend Architecture
System Overview
The admin app is organized as a small set of top-level management sections (candidates, resources/question bank, test management) inside a shared AdminLayout shell, all backed directly by the same Evolve backend API the candidate frontend uses.
Architecture Diagram
graph TB
subgraph FE["Frontend: evolve-admin-fe"]
Layout["AdminLayout.jsx<br/>shared sidebar/shell"]
Candidates["candidate-management"]
Resources["resource-management<br/>(Question Bank)"]
TestMgmt["test-management<br/>(assign, results, next-round)"]
Dashboard["dashboard"]
end
EvolveAPI["Evolve backend API<br/>(campus-recruitment-2.0-be)"]
Layout --> Candidates
Layout --> Resources
Layout --> TestMgmt
Layout --> Dashboard
Candidates -->|"list/detail"| EvolveAPI
Resources -->|"CRUD questions<br/>incl. prompt questions"| EvolveAPI
TestMgmt -->|"assign/results/advance round"| EvolveAPI
How to read this diagram
Arrows mean flow / dependency / "talks to", not button clicks.
Core Components
AdminLayout.jsx
Shared shell (sidebar + top bar) wrapping every admin section; sidebar counts (e.g. total question-bank items) pull from the same data used by each section's table.
Resource management / Question Bank
Question bank view/edit UI, including a view modal that surfaces prompt-round questions with their acceptance criteria - a question type that was initially missing from the QB table/sidebar total counts and data-transform logic, then fixed to be counted consistently everywhere.
Test management
Screens for filtering candidates, assigning a test/round, viewing round results, and moving a candidate to the next round, with round-dependent conditional options and marks calculation per round.
Tables (AG Grid)
Candidate, resource, and test-management tables use AG Grid; sorting behavior was fixed where it initially disagreed with the underlying data ordering.
Data Flow
sequenceDiagram
participant Admin
participant FE as Admin Frontend
participant API as Evolve Backend
Admin->>FE: Open Resource Management
FE->>API: GET question bank (incl. prompt questions)
API-->>FE: questions + acceptance criteria
FE-->>Admin: Table + sidebar total count
Admin->>FE: Open Test Management, view round results
FE->>API: GET results for round
API-->>FE: candidate scores
Admin->>FE: Move candidate to next round
FE->>API: PUT/POST advance-round
Design Decisions
Count prompt questions everywhere counts are shown
Context: Prompt-round questions were added to the Question Bank after the initial table/sidebar count logic was written, so they were silently excluded from totals.
Decision: Fixed both the sidebar total and the QB table's data-transform to include promptQuestions, rather than adding a separate, inconsistent count just for the sidebar.
AG Grid for admin tables
Context: Candidate/resource/test tables need sorting, filtering, and bulk actions.
Decision: Standardize on AG Grid rather than hand-rolled tables, accepting the extra dependency weight for built-in sorting/filtering correctness.
Technology Stack
| Layer | Technology |
|---|---|
| Framework | Next.js App Router |
| Language | JavaScript |
| UI | Mantine + Radix + Tabler icons |
| Tables | AG Grid |
| Default branch | main |