Files
InfoGenie/CLAUDE.md
2026-03-28 20:59:52 +08:00

4.3 KiB

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/)

npm install
npm start
npm run dev
npm run build
npm test

Single test file or pattern:

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/)

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.