114 lines
4.3 KiB
Markdown
114 lines
4.3 KiB
Markdown
# CLAUDE.md
|
|
|
|
This file provides guidance to Claude Code (claude.ai/code) when working in this repository.
|
|
|
|
## Repository layout
|
|
|
|
This repo is a multi-app workspace with the React frontend as the main active surface:
|
|
|
|
- `infogenie-frontend/` — React 18 SPA built with Create React App. This is the primary app.
|
|
- `infogenie-backend-java/` — Spring Boot 3.5 / Java 17 backend skeleton.
|
|
- `InfoGenie-go-backend/` — legacy/alternate backend directory; currently only contains a README.
|
|
|
|
The frontend mixes two layers:
|
|
|
|
- A React shell for navigation, auth, shared layout, and embedded views.
|
|
- A large set of static HTML/JS mini-apps under `public/` and the corresponding built copies under `build/`.
|
|
|
|
## Frontend architecture
|
|
|
|
Key React entry points:
|
|
|
|
- `src/index.js` bootstraps the app and explicitly unregisters service workers / clears caches to avoid stale assets.
|
|
- `src/App.js` owns the top-level layout, router, global toast container, particle effect, and auth provider.
|
|
- `src/contexts/UserContext.js` is the session source of truth. It hydrates from `localStorage`, calls the auth service, and exposes login/logout helpers.
|
|
- `src/utils/api.js` is the shared Axios layer. It injects the bearer token, handles 401 redirects, and defines the separate auth-center client.
|
|
- `src/config/env.js` resolves runtime API endpoints from `REACT_APP_*` env vars or the current origin.
|
|
|
|
The app is route-driven, with major pages for:
|
|
|
|
- home entry / section selection
|
|
- login + auth callback
|
|
- 60s API browser and item detail routes
|
|
- small games
|
|
- toolbox
|
|
- AI app launcher
|
|
- user profile and admin
|
|
|
|
### Config-driven content
|
|
|
|
Most catalog-like UI is data-driven rather than hard-coded in pages:
|
|
|
|
- `src/config/Api60sConfig.js` defines the 60s API categories, toolbox catalogs, and static page path mappings.
|
|
- `src/config/StaticPageConfig.js` defines AI app and small-game launch metadata.
|
|
- `src/utils/site60sVisibility.js` fetches the backend site visibility list and filters the 60s API catalog before rendering.
|
|
|
|
This means many UI changes are done by editing config objects, not component logic.
|
|
|
|
### Static page embedding pattern
|
|
|
|
Several pages open a full-screen embedded static page instead of rendering everything in React:
|
|
|
|
- AI apps use `FullscreenEmbed` with token injection.
|
|
- Toolbox items also launch through `FullscreenEmbed`.
|
|
- 60s API detail pages map `itemId` to a static HTML page path.
|
|
|
|
When changing any mini-app, check both the React catalog entry and the matching file path under `public/`.
|
|
|
|
## Backend architecture
|
|
|
|
`infogenie-backend-java/` is currently a minimal Spring Boot bootstrap:
|
|
|
|
- `src/main/java/.../InfogenieBackendJavaApplication.java` contains only the application entry point.
|
|
- `src/test/java/.../InfogenieBackendJavaApplicationTests.java` contains the default context load test.
|
|
- `src/main/resources/application.yaml` only sets the application name right now.
|
|
|
|
There is no REST controller layer in this Java module yet.
|
|
|
|
## Common commands
|
|
|
|
### Frontend (`infogenie-frontend/`)
|
|
|
|
```bash
|
|
npm install
|
|
npm start
|
|
npm run dev
|
|
npm run build
|
|
npm test
|
|
```
|
|
|
|
Single test file or pattern:
|
|
|
|
```bash
|
|
npm test -- --runInBand --watch=false src/path/to/test-file.test.js
|
|
npm test -- --runInBand --watch=false --testNamePattern="pattern"
|
|
```
|
|
|
|
There is no separate lint script in `package.json`; the project relies on CRA's built-in ESLint checks during `start`, `test`, and `build`.
|
|
|
|
### Java backend (`infogenie-backend-java/`)
|
|
|
|
```bash
|
|
mvn test
|
|
mvn spring-boot:run
|
|
mvn -Dtest=InfogenieBackendJavaApplicationTests test
|
|
```
|
|
|
|
## Environment variables
|
|
|
|
Frontend runtime config comes from:
|
|
|
|
- `REACT_APP_API_URL`
|
|
- `REACT_APP_AUTH_URL`
|
|
- `REACT_APP_AUTH_API_URL`
|
|
- `REACT_APP_DEBUG`
|
|
|
|
If these are unset, the frontend falls back to the current origin for the main API and built-in auth defaults for auth URLs.
|
|
|
|
## Practical notes
|
|
|
|
- The frontend auth flow depends on `localStorage` keys such as `token`, `user`, and `expiresAt`.
|
|
- 401 responses from the shared Axios client clear the session and redirect to `/login`.
|
|
- The 60s API list is filtered by backend visibility data, so a missing/failed visibility fetch intentionally fails open and shows all items.
|
|
- The home page is just a launcher for the main product areas; the detailed behavior lives in the section pages and config files.
|