generated from CubeCraft-Creations/Tracehound
CUB-194: scaffold Vite + React + TypeScript + Tailwind frontend
- Initialize Vite project with React + TypeScript + Tailwind CSS - Dark theme dashboard design (rig-dark palette, rig-accent colors) - Minimal App with RemoteRig header + 'Dashboard coming soon' placeholder - Directory structure: components, hooks, services, types, utils - TypeScript types for Camera, CameraFeed, SystemHealth, StreamConfig - Custom hooks: useCameraStatus, useSystemHealth (with mock data) - API service layer with proxy config for /api → localhost:8080 - eslint, postcss, autoprefixer configured - lucide-react icons integrated (Camera icon) - .env.example, .gitignore, tsconfig basepaths configured - Build + type-check + lint verified clean
This commit is contained in:
@@ -0,0 +1,20 @@
|
||||
const API_BASE = import.meta.env.VITE_API_URL || '/api'
|
||||
|
||||
async function request<T>(endpoint: string, options?: RequestInit): Promise<T> {
|
||||
const response = await fetch(`${API_BASE}${endpoint}`, {
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
...options,
|
||||
})
|
||||
if (!response.ok) {
|
||||
throw new Error(`API error: ${response.status} ${response.statusText}`)
|
||||
}
|
||||
return response.json()
|
||||
}
|
||||
|
||||
export const api = {
|
||||
getCameras: () => request<[]>('/cameras'),
|
||||
getCameraStatus: (id: string) => request<[]>(`/cameras/${id}/status`),
|
||||
getSystemHealth: () => request<[]>('/system/health'),
|
||||
toggleRecording: (cameraId: string) =>
|
||||
request<[]>(`/cameras/${cameraId}/recording`, { method: 'POST' }),
|
||||
}
|
||||
Reference in New Issue
Block a user