Skip to content

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 on ProLayout).
  • Routing: react-router-dom v6 (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-api prefix) to avoid CORS; this prefix is dev-only and never used in production.
  • Every real endpoint is defined as an iqvApiRoutes constant in dashboard/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/403 response, the app automatically logs out, clears legacy localStorage fields, and notifies the user.

State management

  • react-redux + @reduxjs/toolkit; a single slice: admin (dashboard/src/store/slices/adminSlice.tsx) — holds token, user, username.
  • redux-persist (localStorage-backed) persists the admin state across browser reloads (under the persist:IQV Platform key).
  • A few other concerns — theme, login lockout, and reminder "already shown" state — are managed directly via localStorage/sessionStorage outside 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.com host 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 when VITE_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 to mkdocs.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.yml at the repository root).