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