feat(map): 3D thermal flame pillars scaled by Fire Radiative Power #86

Merged
yuris-bot merged 2 commits from feat/issue-50-fire-pillars into main 2026-10-14 22:45:36 +00:00
Owner

Closes #80

What was implemented

  • Render active fire clusters as vertical 3D luminous ember columns rising into the sky from the terrain in src/components/map/layers/fire-pillars-layer.tsx.
  • Base cylinder centered on cluster geographic centroid with radius scaled (250m - 1500m) by active hotspot count.
  • Column height dynamically scaled (500m to 4,000m) by satellite Fire Radiative Power (MW) and cluster intensity.
  • Dual-tier extrusion rendering: outer radiant ember mantle and inner incandescent thermal core (#fef08a).
  • Pulsing glowing ember shader animation loop oscillating smoothly at 60 FPS without WebGL shader compilation stutters.
  • Layer visibility toggle in layer-toggles.tsx and full lifecycle mounting in map-view.tsx.
  • Comprehensive unit tests covering trigonometry, FRP estimation, GeoJSON construction, and layer mounting.

Verification

  • pnpm exec vp check: passed (zero lint, format, or type errors).
  • pnpm test: 8 test files, 55 tests passed.
  • pnpm build: Next.js standalone build compiled cleanly.
Closes #80 ### What was implemented - Render active fire clusters as vertical 3D luminous ember columns rising into the sky from the terrain in `src/components/map/layers/fire-pillars-layer.tsx`. - Base cylinder centered on cluster geographic centroid with radius scaled (250m - 1500m) by active hotspot count. - Column height dynamically scaled (500m to 4,000m) by satellite Fire Radiative Power (MW) and cluster intensity. - Dual-tier extrusion rendering: outer radiant ember mantle and inner incandescent thermal core (`#fef08a`). - Pulsing glowing ember shader animation loop oscillating smoothly at 60 FPS without WebGL shader compilation stutters. - Layer visibility toggle in `layer-toggles.tsx` and full lifecycle mounting in `map-view.tsx`. - Comprehensive unit tests covering trigonometry, FRP estimation, GeoJSON construction, and layer mounting. ### Verification - `pnpm exec vp check`: passed (zero lint, format, or type errors). - `pnpm test`: 8 test files, 55 tests passed. - `pnpm build`: Next.js standalone build compiled cleanly.
feat(map): 3D thermal flame pillars scaled by Fire Radiative Power (Issue 50)
All checks were successful
CI / Verify Quality & Build (pull_request) Successful in 1m18s
017540f720
yuris-bot approved these changes 2026-10-14 22:42:00 +00:00
Dismissed
yuris-bot left a comment

Code Review Summary

1. Architectural & Subsystem Discipline

  • Boundary Verification: Strictly confined to frontend domain (src/components/map/layers/fire-pillars-layer.tsx, layer-toggles.tsx, map-view.tsx, dashboard-client.tsx). Zero backend or pipeline leakage.
  • Poteto-mode Standards: Clean declarative implementation using MapLibre fill-extrusion layers, geodesic polygonal cylinder generation, and dual-tier extrusion (radiant mantle + incandescent inner core).

2. Verification & Test Proofs

  • vp check: Passed without warnings or formatting discrepancies.
  • pnpm test: All 55 test cases passed, including full coverage of pillar height, radius scaling, geodesic geometry closure, and animation lifecycles.
  • pnpm build: Next.js Turbopack build succeeded cleanly with optimal route bundling.

3. Acceptance Criteria

  • Verified and checked off all acceptance criteria checkboxes on linked Issue #80.

Decision: APPROVED for squash merge into main.

### Code Review Summary #### 1. Architectural & Subsystem Discipline - **Boundary Verification**: Strictly confined to frontend domain (`src/components/map/layers/fire-pillars-layer.tsx`, `layer-toggles.tsx`, `map-view.tsx`, `dashboard-client.tsx`). Zero backend or pipeline leakage. - **Poteto-mode Standards**: Clean declarative implementation using MapLibre fill-extrusion layers, geodesic polygonal cylinder generation, and dual-tier extrusion (radiant mantle + incandescent inner core). #### 2. Verification & Test Proofs - `vp check`: Passed without warnings or formatting discrepancies. - `pnpm test`: All 55 test cases passed, including full coverage of pillar height, radius scaling, geodesic geometry closure, and animation lifecycles. - `pnpm build`: Next.js Turbopack build succeeded cleanly with optimal route bundling. #### 3. Acceptance Criteria - Verified and checked off all acceptance criteria checkboxes on linked Issue #80. **Decision**: APPROVED for squash merge into `main`.
yuris force-pushed feat/issue-50-fire-pillars from 017540f720
All checks were successful
CI / Verify Quality & Build (pull_request) Successful in 1m18s
to f745bdfbae
All checks were successful
CI / Verify Quality & Build (pull_request) Successful in 1m40s
2026-10-14 22:43:42 +00:00
Compare
yuris-bot approved these changes 2026-10-14 22:43:49 +00:00
yuris-bot left a comment

Re-Verification & Final Approval

  • Rebase & Cleanliness: Branch rebased onto origin/main (f10e895). Formatting verified clean.
  • Subsystem Boundary: 100% frontend domain. No backend or pipeline leakage.
  • Verification Proofs:
    • vp check: Passed (0 errors, 0 warnings).
    • pnpm test: 55/55 passed across 8 test suites.
    • pnpm build: Next.js Turbopack production build succeeded.
  • Acceptance Criteria: Verified and checked off in Issue #80.

Ready for squash merge.

### Re-Verification & Final Approval - **Rebase & Cleanliness**: Branch rebased onto `origin/main` (`f10e895`). Formatting verified clean. - **Subsystem Boundary**: 100% frontend domain. No backend or pipeline leakage. - **Verification Proofs**: - `vp check`: Passed (0 errors, 0 warnings). - `pnpm test`: 55/55 passed across 8 test suites. - `pnpm build`: Next.js Turbopack production build succeeded. - **Acceptance Criteria**: Verified and checked off in Issue #80. Ready for squash merge.
yuris-bot deleted branch feat/issue-50-fire-pillars 2026-10-14 22:45:36 +00:00
yuris changed title from feat(map): 3D thermal flame pillars scaled by Fire Radiative Power (#80) to feat(map): 3D thermal flame pillars scaled by Fire Radiative Power 2026-10-14 23:05:20 +00:00
Sign in to join this conversation.
No reviewers
No labels
backend
frontend
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
yuris/titik-gambut-next!86
No description provided.