replicalab / docs /map /frontend.md
maxxie114's picture
Initial HF Spaces deployment
80d8c84

Frontend Map β€” frontend/

React 19 + TypeScript + Vite UI for ReplicaLab.

Tasks implemented: FND 01-10

Stack

Technology Version Purpose
React 19.2.0 UI framework
React Router 7.13.1 Client-side routing
Three.js 0.183.2 3D molecule scene
@react-three/fiber 9.5.0 React Three.js bindings
@react-three/drei 10.7.7 Three.js helpers
Framer Motion 12.35.1 Animations
@xyflow/react 12.10.1 Flow diagrams
Recharts 3.8.0 Charts and graphs
Tailwind CSS 4.2.1 Utility-first styling
Lucide React 0.577.0 Icons

Routes β€” App.tsx

Path Component Purpose
/ DashboardPage Training overview, scenario selection
/episode EpisodePage Live episode viewer (new episode)
/episode/:episodeId EpisodePage Replay of completed episode

Pages

DashboardPage.tsx

  • Scenario selection (family + difficulty)
  • Training metrics display
  • Episode history list
  • Start new episode button

EpisodePage.tsx

  • Live negotiation between Scientist and Lab Manager
  • Protocol display and evolution
  • Score breakdown when episode completes
  • Replay controls for completed episodes

Components (15 files)

Negotiation & Protocol

Component Purpose
NegotiationLog.tsx Scrollable conversation between agents
ProtocolPanel.tsx Current protocol details display
PaperPanel.tsx Paper summary (title, hypothesis, method, finding)
LabInventory.tsx Equipment and reagent availability
Controls.tsx User controls (start, step, auto-play)

Visualization

Component Purpose
ScorePanel.tsx Rigor/feasibility/fidelity score bars
JudgeAuditPanel.tsx Judge reasoning and audit trail
TrainingResults.tsx Training metrics charts
ReplayViewer.tsx Step-through replay of completed episodes

3D & Animation

Component Purpose
CharacterStage.tsx 3D stage for agent characters
CharacterAvatar.tsx Individual agent avatar
AnimatedCharacter.tsx Character with animations
MoleculeScene.tsx 3D molecule visualization
TiltCard.tsx Tilt-on-hover card component

Layout

Component Purpose
Header.tsx Top navigation bar

API Client β€” lib/api.ts

REST Functions

Function Method Endpoint
healthCheck() GET /health
getScenarios() GET /scenarios
resetEpisode(params) POST /reset
stepEpisode(action) POST /step
getReplay(episodeId) GET /replay/{episodeId}

WebSocket

Function Purpose
createWebSocket(onMessage, onOpen, onClose, onError) Connect to /ws
sendWsMessage(ws, msg) Send typed message

Mock Data (for offline development)

Function Returns
createMockConversation() NegotiationMessage[]
createMockScores() ScoreBreakdown
createMockEpisodeState(done) EpisodeState
createMockProtocol() Protocol
createMockJudgeAudit() JudgeAudit

TypeScript Types β€” types/index.ts

Mirrors Python models:

TS Interface Python Model
ScientistAction ScientistAction
LabManagerAction LabManagerAction
Protocol Protocol
EpisodeState EpisodeState
StepResult StepResult
ScoreBreakdown RewardBreakdown
FeasibilityReport FeasibilityCheckResult (partial)
JudgeAudit StepInfo.judge_notes + verdict
NegotiationMessage ConversationEntry

Additional frontend-only types:

  • TrainingMetrics β€” loss, reward curves
  • TrainingComparison β€” baseline vs trained model
  • PaperSummary β€” paper details for display
  • LabConstraints β€” lab resource summary
  • SuggestedChange β€” protocol revision display

Utility Files

lib/utils.ts

Shared helpers (class merging, formatting, etc.)

lib/audio.ts

Audio feedback utilities for UI interactions.

Assets

frontend/public/characters/
    judge.png           (~1.2 MB)
    lab-manager.png     (~900 KB)
    scientist.png       (~900 KB)