Objective
Build interactive React frontend with core visualization components and API integration.
Deliverables
Files to Create
| File |
Description |
frontend/src/components/IsingVisualizer.tsx |
Plotly heatmap component |
frontend/src/components/ControlPanel.tsx |
Parameter controls |
frontend/src/store/simulationStore.ts |
Zustand store |
frontend/src/services/api.ts |
API client |
frontend/src/App.tsx |
Main layout |
Core Implementation
// frontend/src/components/IsingVisualizer.tsx
import Plot from 'react-plotly.js';
interface Props {
spins: number[][];
size: number;
}
export const IsingVisualizer: React.FC<Props> = ({ spins, size }) => (
<Plot
data={[{
z: spins,
type: 'heatmap',
colorscale: [[0, '#3b82f6'], [1, '#ef4444']],
showscale: false,
}]}
layout={{
width: 400, height: 400,
margin: { t: 20, b: 20, l: 20, r: 20 },
xaxis: { visible: false },
yaxis: { visible: false },
}}
config={{ displayModeBar: false }}
/>
);
// frontend/src/store/simulationStore.ts
import { create } from 'zustand';
interface SimulationState {
temperature: number;
latticeSize: number;
spins: number[][] | null;
isRunning: boolean;
samplerType: 'mcmc' | 'diffusion';
setTemperature: (t: number) => void;
setLatticeSize: (s: number) => void;
setSpins: (s: number[][]) => void;
}
export const useSimulationStore = create<SimulationState>((set) => ({
temperature: 2.27,
latticeSize: 32,
spins: null,
isRunning: false,
samplerType: 'diffusion',
setTemperature: (temperature) => set({ temperature }),
setLatticeSize: (latticeSize) => set({ latticeSize }),
setSpins: (spins) => set({ spins }),
}));
Verification
- Render 32x32 lattice in < 100ms
- Temperature slider updates store immediately
- API errors show user-friendly messages
- Layout responsive on mobile
Definition of Done
- All components render without errors
- TypeScript compiles with no errors
- Store state persists across component rerenders
- API calls succeed and update UI
Dependencies
- Phase 0: Foundation
- Phase 1: Backend sampling endpoints
Related
Meta issue: #1
Objective
Build interactive React frontend with core visualization components and API integration.
Deliverables
IsingVisualizer- Heatmap of spin configurationControlPanel- Temperature, size, sampler controlsuseSimulationStore- Zustand state managementFiles to Create
frontend/src/components/IsingVisualizer.tsxfrontend/src/components/ControlPanel.tsxfrontend/src/store/simulationStore.tsfrontend/src/services/api.tsfrontend/src/App.tsxCore Implementation
Verification
Definition of Done
Dependencies
Related
Meta issue: #1