fix(arch): Config SSOT, reproducible builds, and data pipeline documentation (#41)
ba32591
unverified
| title: Stroke Lesion Viewer | |
| emoji: π§ | |
| colorFrom: blue | |
| colorTo: purple | |
| sdk: static | |
| app_file: dist/index.html | |
| app_build_command: npm run build | |
| # CRITICAL: Vite 7 requires Node.js >= 20. HF Spaces defaults to Node 18. | |
| nodejs_version: "20" | |
| pinned: false | |
| custom_headers: | |
| cross-origin-embedder-policy: require-corp | |
| cross-origin-opener-policy: same-origin | |
| cross-origin-resource-policy: cross-origin | |
| # Stroke Lesion Segmentation Viewer | |
| Interactive 3D viewer for stroke lesion segmentation results using NiiVue. | |
| Built with React, TypeScript, Tailwind CSS, and Vite. | |
| ## Features | |
| - **NiiVue WebGL2 Viewer**: Pan, zoom, and navigate through NIfTI volumes | |
| - **Real-time Segmentation**: Run DeepISLES inference on ISLES24 dataset cases | |
| - **Metrics Display**: Dice score, volume (mL), processing time | |
| ## Browser Requirements | |
| - **WebGL2 Required**: This viewer uses NiiVue which requires WebGL2 support. | |
| - Supported browsers: Chrome 56+, Firefox 51+, Safari 15+, Edge 79+ | |
| - Test your browser: https://get.webgl.org/webgl2/ | |
| - Mobile devices may have limited support | |
| ## Architecture | |
| This is the **frontend Static Space** of a two-Space deployment: | |
| ``` | |
| βββββββββββββββββββββββββββββββββββββββ | |
| β HuggingFace Static Space β β You are here | |
| β stroke-viewer-frontend β | |
| β β | |
| β React 19 + TypeScript + Tailwind β | |
| β @niivue/niivue for 3D viewing β | |
| ββββββββββββββββ¬βββββββββββββββββββββββ | |
| β HTTPS API calls | |
| βΌ | |
| βββββββββββββββββββββββββββββββββββββββ | |
| β HuggingFace Docker Space β | |
| β stroke-viewer-api β | |
| β β | |
| β FastAPI + DeepISLES + PyTorch β | |
| βββββββββββββββββββββββββββββββββββββββ | |
| ``` | |
| ## Local Development | |
| ```bash | |
| npm install | |
| npm run dev # Start dev server at http://localhost:5173 | |
| npm test # Run unit tests | |
| npm run test:e2e # Run E2E tests | |
| npm run build # Production build | |
| ``` | |
| ## Environment Variables | |
| Set `VITE_API_URL` to point to your backend: | |
| ```bash | |
| # Local development (default) | |
| VITE_API_URL=http://localhost:7860 npm run dev | |
| # Production is configured in .env.production | |
| # Points to: https://vibecodermcswaggins-stroke-deepisles-demo.hf.space | |
| ``` | |
| ## Deployment | |
| This frontend deploys as a **HuggingFace Static Space**. The backend API runs on a separate Docker Space with GPU. | |
| ```bash | |
| # Build for production (uses .env.production) | |
| npm run build | |
| # The dist/ folder is deployed to HF Static Space | |
| ``` | |
| ## Fork Deployment | |
| If you fork this repository, update these files before deploying: | |
| 1. **Frontend API URL** (`frontend/.env.production`): | |
| ``` | |
| VITE_API_URL=https://{YOUR_HF_USERNAME}-stroke-deepisles-demo.hf.space | |
| ``` | |
| 2. **Backend CORS** (`src/stroke_deepisles_demo/core/config.py`): | |
| Set `STROKE_DEMO_FRONTEND_ORIGINS` env var (JSON list) on the backend Space: | |
| ```bash | |
| STROKE_DEMO_FRONTEND_ORIGINS='["https://{YOUR_HF_USERNAME}-stroke-viewer-frontend.hf.space"]' | |
| ``` | |
| 3. **Rebuild frontend**: | |
| ```bash | |
| cd frontend && npm run build | |
| ``` | |