Skip to main content

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​

LayerTechnology
FrameworkNext.js App Router
LanguageJavaScript
UIMantine + Radix + Tabler icons
TablesAG Grid
Default branchmain

Next Steps​