update: 2026-03-28 20:59
This commit is contained in:
113
CLAUDE.md
Normal file
113
CLAUDE.md
Normal file
@@ -0,0 +1,113 @@
|
||||
# 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.
|
||||
Reference in New Issue
Block a user