Back to projects
lumir-sar-platform
Stage 3+4 integrated (3-layer full-stack)

Lumir SAR Data Platform

Unified search, storage, analysis, and request for Sentinel + LumirX — an internal satellite-data full-stack service (3 layers)

Integrated layers
0 (data & ops · analysis · frontend)
PSI detections
0
Verified subsidence
-0.00 mm/yr (GNSS-verified)
AI-written code
0% (AI native)
Unified architecture
Unified architecture
Forward flowResponse / returnExternal system

A user request flows left→right through frontend → data & ops platform (NestJS) → InSAR analysis platform (FastAPI); the InSAR results return to the data & ops platform to answer the user. The data & ops platform (NestJS) fetches InSAR data from the InSAR analysis platform (FastAPI) over an API, then stores and relays it. Solid (amber) = forward request, dashed = response / data feedback. One person owns all three layers full-stack.

Screens · artifacts
SAR search UI (frontend layer)
Frontend layer — map-based SAR search + AOI + catalog
InSAR time series (InSAR analysis platform)
Analysis platform — control-point time series (65 epochs / 2.30-yr stack)
Problem

There was no integrated service to take Sentinel and LumirX data from search through storage, analysis, and request in one cycle. Storage (NAS + CDSE), InSAR analysis (SNAP · ISCE2 · MintPy), and the user-facing frontend were all separate — making it hard for a user to get from 'I want this location' to a finished result.

System

I'm solo-designing and building the 3-layer integrated service. Data & Ops Platform (sar-data-retrieval, NestJS monorepo + CDSE + NAS PoC + DDD 5-layer) + InSAR Analysis Platform (lumir-linux-snap, 5-tool stack + multi-agent worktrees) + Frontend layer (sar-search-and-analyzer, Next.js + map + AOI + analysis-request UI). All three are 100% AI-native.

Impact

With ISCE2 in place, the InSAR analysis platform is fast enough that weather- and season-independent surface-displacement data as a service is now feasible. The key point: a user picking a location on the map gets either the stored result instantly, or a freshly-processed one — and the whole pipeline is full-stack-owned by a single person.

My contribution

All three layers, solo (sar-data-retrieval's 5 areas in full · lumir-linux-snap tool selection & operation · sar-search-and-analyzer's frontend in full). The integrated vision is also mine.

Honesty note (for interviews)

Some patterns in each layer came from elsewhere — the Plan/Current environment split (from the team lead) and parts of the SAR domain knowledge (AI as a thinking partner).

Interview Q&A prep

Q.How do the three layers come together as one service?+
A.When a user picks a location on sar-search-and-analyzer's map, sar-data-retrieval either returns existing analysis data, or asks lumir-linux-snap for a fresh analysis. New results are written back into sar-data-retrieval so the next identical request is served instantly.
Q.How is one person able to run all three layers at once?+
A.100% AI-native — AI writes the code; I plan the UI, review the code, and keep the integration interfaces consistent.
Q.What's your contribution vs. inherited scope in each layer?+
A.Storage (sar-data-retrieval): all 5 areas mine. Analysis (lumir-linux-snap): the measured quantity (ground/crustal deformation) is my master's field; the SAR processing tools I learned with AI as a thinking partner. Frontend (sar-search-and-analyzer): the frontend all mine; the Plan/Current pattern came from the team lead.
Q.Is any of this exposed externally?+
A.Currently internal-only. The program reports v1–v4 and policy-briefing PDFs may later be used with external program owners.
Keywords
3-layer full-stackSentinel-1 + LumirXNestJS + Next.jsSpeed via ISCE2Multi-agent worktreesMap + AOI100% AI native
📊 Quantitative metrics pending (not yet measured)
  • ·End-to-end completion date (analysis → data & ops → frontend)
  • ·Internal user count
  • ·Number of satellites supported (currently Sentinel-1 + LumirX planned)
Layer-by-layer depth

Each of the 3 layers in detail

Each layer of the integrated box, expanded. These are the deep-link landing points for external search and sharing.

🗄
Data & Ops Platform layer
Stage 3+4 (+5) blend/ sar-data-retrieval

Sentinel SAR search & analysis backend

NestJS monorepo + CDSE + NAS PoC + DDD 5-layer + snap integration (AI native)

DDD layers
0-layer
External systems integrated
CDSE + NAS
Architecture · data flow
Problem

We needed a previously-nonexistent platform for weather- and season-independent surface displacement data, plus a unified backend for Sentinel SAR search, download, and metadata. A service layer that exposes snap-processed results in location-searchable form was also missing.

System

Built a NestJS monorepo (sentinel-retrieval + ai-processing) on top of the CDSE API, ran a NAS PoC (SMB2 vs direct FS), modeled the SLC domain, applied DDD 5-layer, and added an integration layer for the snap separate repo. Done AI-native; the domain structure was only tweaked at the points where predictable boilerplate emerged.

Impact

This is the data & ops platform of the 3-layer integrated service — the foundation that lets a user's location query be answered with already-analyzed data instantly, or with newly-processed data on the fly.

InSAR Analysis Platform layer
Stage 3 → 4 + stage-5 signal/ lumir-linux-snap

Sentinel-1 InSAR processing pipeline

5-tool stack + an InSAR-results API delivered to an external platform · joint-gov surface-displacement monitoring

PSI persistent scatterers
0
Sirubong subsidence (GNSS-verified)
-0.00 mm/yr
Tool stack
0 tools, blended
Payload optimization
0MB → 1.1MB (0.56s)
Regions analyzed
Gwanggyo · Jukjeon · Songdo (+Saemangeum)
Ops topology
0 servers (proc · DB · PSI)
Architecture · data flow
Problem

On the joint-gov surface-displacement monitoring program, a SNAP-only pipeline couldn't keep up with real-time service demands. The LOS 1-D limit of ASC-only SBAS, and the minimum 2-year stack required to identify per-building hotspots, also had to be addressed.

System

Ran a 5-tool stack (SNAP 12 + SNAPHU 2.0.3 + MintPy 1.6.2 + StaMPS PSI + ISCE2 2.6.3). Anti-over-engineering as the working principle, tool selection done with AI as a thinking partner, and multi-Claude-Code agent worktrees (agents 1–4 in parallel + a gpt_isolated wrapper + handoff system). I consolidated the PSI path around a self-contained coregistration (-W slc) that bypasses ifg/unwrap, then validated it end-to-end on real data (through velocity.h5) by fixing 7 bugs that passed unit tests yet only surfaced in real runs. On top of that I designed the FastAPI operational layer that delivers results to an external 3D platform (/xyz/* time series · /aoi/assess · /baseline/perp), plus preflight endpoints that diagnose suitability in seconds before any heavy run, and owned the ops hardening — auto-start on reboot (Docker) and automatic disk-full eviction to NAS (systemd timer).

Impact

Introducing ISCE2 unlocked the processing speed needed to make the InSAR analysis platform of the 3-layer service viable. Outputs: Mt. Sirubong −17.30 mm/yr subsidence (GNSS-verified), 5,143,119 PSI persistent scatterers, 5 m DEM TC, and program reports v1–v4 — all AI-native, with near-zero writing time. Coverage then expanded from Gwanggyo to Jukjeon and Songdo (with a Saemangeum AOI staged); on the Songdo reclaimed land, a production PSI run detected 45,081 persistent scatterers (−17.9 to +16.5 mm/yr subsidence), ingested into the dashboard. I also delivered the external platform's required 'XYZ coordinate time series': re-architecting the full-series bulk response (81 MB · 13 s) into a per-epoch snapshot binary + point-click split brought it to 1.1 MB · 0.56 s — done by first measuring that the DB query was only 73 ms, so the bottleneck was serialization and transfer, then changing the payload structure.

Control-point time series (65 epochs / 2.30-yr stack)
Control-point time series — 65 epochs / 2.30-yr stack
5 m DEM hillshade
5 m DEM hillshade — NGII DEM with terrain correction applied
DEM comparison — unwrap result
DEM comparison — phase-unwrap result
Honesty note

The measured quantity — ground/crustal deformation — is my master's field (crustal deformation · GNSS). The SAR processing tools and pipelines (SNAP, MintPy, StaMPS, …), though, I picked up after joining with AI as a thinking partner — a role expansion. Domain judgment from research; processing implementation accelerated by AI.

🖥
Frontend layer
Stage 4 in progress (in-role · UI planning + build)/ sar-search-and-analyzer

Sentinel SAR search & request frontend

Map-driven SAR data search · download · InSAR analysis requests

Current stage
UI planning & build
Team
Solo
AI-written
AI native
Architecture · data flow
Problem

We needed an internal frontend that lets users search satellite data on a map and request InSAR analysis in one place — the entry point that ties the data & ops platform and the InSAR analysis platform together.

System

A Next.js (App Router) frontend: a Plan/Current environment-split pattern, a (sar) domain (user/admin pages), and a Next.js Route-Handler BFF. The BFF calls the data & ops platform (sar-data-retrieval) and the InSAR analysis platform, tying search, download, and analysis requests into a single entry point.

Impact

Map-based AOI polygons + catalog search + InSAR analysis requests — the user UI is being planned and built right now. The core work is keeping the interfaces with the data & ops platform and the InSAR analysis platform consistent.

Recorded with Playwright e2e (Plan mock mode, no backend dependency) — auto-tour through five screens: user search → AOI manager → InSAR request → downloads → admin dashboard.GIF
SAR data search UI — map + AOI + catalog
Search screen — Korea map + AOI polygon + payload/satellite filters + catalog (Hwaseong · Pohang · Ulsan · Seoul)
AOI selection UI
AOI setup — two overlapping polygons + the AOI configuration panel
Honesty note

Currently runs standalone in Plan (mock) mode, with no backend dependency. The Plan/Current environment-split pattern was inherited from the team lead.