System Components
This page lists only components that are verifiable in the repository; it does not include hypothetical or planned components.
Frontend
- A React 18 + TypeScript SPA, bundled with Vite (
dashboard/). - UI library: Ant Design +
@ant-design/pro-components(the main app shell is built onProLayout). - Routing:
react-router-domv6 (dashboard/src/routes/browserRouter.tsx). - PWA support:
enablePWA: true(dashboard/config.ts) — service worker/manifest generation is part of the build process.
Backend / API layer
- Real production backend:
https://platform.iqvizyon.com(PLATFORM_API_BASE_URL,dashboard/src/utils/index.tsx). - In development, requests are routed to the same backend through Vite's local dev-server proxy (the
/iqv-platform-apiprefix) to avoid CORS; this prefix is dev-only and never used in production. - Every real endpoint is defined as an
iqvApiRoutesconstant indashboard/src/routes/api.tsx(see API Documentation for the full list). - Some requests to the backend (e.g. reminder/queue/mail records) carry contract traces of a
Node-RED-based backend flow (visible in file/comment references); this is a backend implementation detail that the frontend only consumes.
Authentication
- A JWT bearer token is automatically attached to every request (except
/login) by the central Axios client's request interceptor (dashboard/src/utils/http.tsx). - Token source, in order: Redux state →
localStorage.token→localStorage.auth_tokens(legacy compatibility). - On a
401/403response, the app automatically logs out, clears legacylocalStoragefields, and notifies the user.
State management
react-redux+@reduxjs/toolkit; a single slice:admin(dashboard/src/store/slices/adminSlice.tsx) — holdstoken,user,username.redux-persist(localStorage-backed) persists theadminstate across browser reloads (under thepersist:IQV Platformkey).- A few other concerns — theme, login lockout, and reminder "already shown" state — are managed directly via
localStorage/sessionStorageoutside Redux (see General Workflow).
Data sources
- Primary data source: the IQVizyon cloud backend (
https://platform.iqvizyon.com) — platform modules, notes, reminders, users, audit log. - File store: a public MinIO object store (
https://minio.iqvizyon.com) — note attachments are served from here; a separate address from the API origin. - Legacy file server: the
termit.iqvizyon.comhost used before the MinIO migration is recognized only for backward compatibility, and incoming legacy absolute URLs are converted to the MinIO address; this represents real historical production data and is deliberately preserved in code.
External services
- ReqRes (
https://reqres.in/api) — a demo/test login flow used only whenVITE_DEMO_MODE=true, unrelated to the real product.
CI/CD
- GitHub Actions (
.github/workflows/ci.yml): Lint, Production TypeScript, Test TypeScript, Tests and Coverage, Production Build, Dependency Audit, and a Quality Report job that summarizes them. - Documentation deployment:
.github/workflows/mkdocs-pages.yml— auto-deploys to GitHub Pages on changes tomkdocs.yml/docs/**.
Test infrastructure
- A Jest-based test suite lives under
dashboard/iqv-platform-test/; coverage thresholds are enforced in CI (see CI Quality Report).
Deployment structure
- Application: a production build is produced via Vite's
npm run build(dashboard/dist/); the hosting/deployment target itself is not defined in this repository. - Documentation: a MkDocs + Material for MkDocs static site, published as a GitHub Pages project site (see Development and
mkdocs.ymlat the repository root).