This folder contains the React + Vite frontend for the EVERSE TechRadar. It renders the interactive radar and tool catalog using JSON metadata stored in the repository.
- Node.js 20+
- npm 10+
Run commands from this folder, not from the repository root:
cd web
npm install
npm run devThe app starts with Vite (typically at http://localhost:5173).
npm run dev: Start local dev server with HMRnpm run build: Build production assets intodist/npm run preview: Preview the production build locallynpm run lint: Run ESLint on JS/JSX filesnpm run format-json:check: Check formatting for../quality-tools/*.jsonnpm run format-json:fix: Auto-fix formatting for../quality-tools/*.json
web/
src/
components/ # Reusable UI (layout, radar, filters, forms)
pages/ # Route-level pages (Home, ToolDetail, About)
data/ # Data loading and color helpers
App.jsx # Router and route declarations
main.jsx # React app entry point
index.css # Global styles and Tailwind v4 theme tokens
public/ # Static assets served as-is
vite.config.js # Build config, aliases, dev fs settings, base path
- The app uses
HashRouter(#/...routes), which is GitHub Pages-friendly. - Route mapping is defined in
src/App.jsx:/-> catalog home/tool/:id-> tool detail view/about-> about page
Tool data comes from JSON files in ../quality-tools (outside web/).
- Vite alias:
@software-tools->../quality-tools - Loader file:
src/data/loader.js - Import pattern:
import.meta.glob('@software-tools/*.json', { eager: true })
This means:
- New/updated JSON files in
quality-tools/are available to the UI at build time. - Tool IDs in URLs are based on filenames (stored as
_filenamein loader output).
- Tailwind CSS v4 is enabled via
@import "tailwindcss"insrc/index.css. - Custom theme tokens (colors) are declared in
@themeinsrc/index.css. - Shared visual container style uses the
glass-panelclass.
Note on links:
- Global anchor styling is intentionally limited to anchors without explicit Tailwind text color classes, so component-level classes like
text-whiteare preserved.
- Add or edit JSON in
quality-tools/(repository root folder). - Ensure schema compatibility and consistent fields (
name,description,url, quality dimensions, etc.). - Start the app with
npm run devinweb/and verify:- tool appears in catalog
- filtering and detail page behavior are correct
- Run
npm run lintandnpm run buildbefore opening a PR.
Recommended local checks before committing frontend changes:
cd web
npm run lint
npm run buildIf npm run dev fails from the repository root, switch to web/ and run it there.
Use these checks when contributing catalog entries or repository-level changes.
Run from web/:
cd web
npm run format-json:checkAuto-fix formatting:
cd web
npm run format-json:fixRun from the repository root:
pip install -r tests/requirements.txt
python -m pytest tests/vite.config.jssetsbase: './'for static hosting compatibility (including GitHub Pages).HashRouteravoids server-side rewrite requirements for client routes.
- Dependencies not found:
- Re-run
npm installinweb/
- Re-run
- JSON changes not reflected:
- Restart
npm run dev - Check JSON syntax and file extension (
.json)
- Restart
- Route opens blank page in static hosting:
- Ensure URL includes hash route (for example
#/about)
- Ensure URL includes hash route (for example
- App entry and routes:
src/App.jsx,src/main.jsx - Data loading:
src/data/loader.js - Theme and global styles:
src/index.css - Build and aliases:
vite.config.js