The React-based Single-Page Application (SPA) user interface for the iRonoc personal portfolio and web application ecosystem.
The frontend is implemented as a single-page React 19 application. It handles routing locally, renders structured layouts with components from MUI and React-Bootstrap, and integrates both REST APIs (via Axios/Fetch) and GraphQL endpoints (via Apollo Client).
graph TD
App[App.js Entry] -->|Router Engine| AppNavbar[AppNavbar.js Layout]
AppNavbar -->|Static Presentation| Static[Static Views]
AppNavbar -->|State & API Driven| Dynamic[Dynamic Functional Views]
Static --> About[About.js Profile]
Static --> Home[Home.js Landing]
Static --> NotFound[NotFound.js 404]
Dynamic --> Donate[Donate.js Charity Grid]
Dynamic --> CoffeeHome[CoffeeHome.js Brews List]
Dynamic --> RepoDetails[RepoDetails.js Backlog Manager]
Donate -->|GraphQL WebSocket Subscriptions| Apollo[Apollo Client]
CoffeeHome -->|REST HTTP Fetch| Fetch[Fetch API]
RepoDetails -->|REST Axios Client| Axios[Axios API]
To achieve reactive user experiences, the frontend splits its data retrieval strategies cleanly across protocols:
sequenceDiagram
autonumber
actor Client as Client Browser
participant Router as App.js Splitter
participant REST as Axios / Fetch Engine
participant Apollo as Apollo Link (ws/http)
participant WS as WebSocket Connection (graphql-ws)
Client->>Router: Navigates view / triggers action
alt Standard API / Metadata Query
Router->>REST: Dispatch HTTP GET / PUT / POST
REST-->>Client: Return JSON response
else Real-Time Subscription Gateway
Router->>Apollo: Dispatch subscription MySubscription
Apollo->>WS: Route query over ws://localhost:8080/graphql
activate WS
WS-->>Client: Instant push update: donateItemsSubscription (newCharity)
deactivate WS
end
graphql-ws (Secure RFC-compliant WebSocket transport)frontend
โโโ package.json # Package scripts & dependencies
โโโ public/
โ โโโ index.html # HTML5 entry wrapper
โ โโโ camera-roll.yml # Config file for background image rosters
โโโ src/
โโโ App.js # Core Router and Apollo Provider Link setups
โโโ AppNavbar.js # Shared navigation navbar
โโโ Footer.js # Shared page footer
โโโ components/ # View components
โ โโโ Home.js # Landing page (implements Navy theme)
โ โโโ About.js # Technical profile
โ โโโ Donate.js # Charities grid (uses GraphQL WebSocket Subscriptions)
โ โโโ CoffeeHome.js# Brew cards & preparation details
โ โโโ RepoDetails.js# GitHub repo manager (Axios REST fetches)
โ โโโ __tests__/ # Jest & React Testing Library suites
โโโ utils/
โโโ activityTracker.js # Telemetry beacon clicks dispatcher
โโโ cameraRollConfig.js # Loader helper for camera roll images
v24 (LTS) or higher recommendedv11 or higher recommendedcd frontend
rm -rf node_modules package-lock.json
npm cache clean --force
npm install --legacy-peer-deps
npm start
Open http://localhost:3000 to view it in your browser. The page will auto-reload when you modify components.
Our frontend test coverage is thoroughly verified using Jest and React Testing Library (with virtualized JSDOM browser containers).
npm run test
npm run test:coverage
Current overall frontend test coverage remains above 91% statement coverage!
The rotating background image rosters for the Home (Landing) and About pages are dynamically driven by the static asset config file located at public/camera-roll.yml.
Example config:
home:
- navy-bg
about:
- navy-bg
- red-bg
- teal-bg
Supported theme image keys are teal-bg, navy-bg, and red-bg.
To compile and bundle the application into highly optimized, minified, and hash-mapped static assets ready for deployment:
npm run build
The compiled files will be output to the build/ directory. When building via the backend Spring Boot maven plugin, these static resources are automatically packaged into the Tomcat /static/ classpath registry inside the WAR artifact.