01
SatCHAT
Conversational AI platform for satellite data
Overview
I owned the frontend of a satellite imagery analysis SaaS for two years and eight months, from the v1 launch through the move to a v2 monorepo.
You draw an area on the map, the product finds imagery for it, and you keep asking — change detection, time series — in chat.
I was the sole frontend engineer on v1 and one of two on v2.
Problem
Analysing satellite imagery meant installing dedicated software, pre-processing the scenes, then computing and reading spectral indices. Without domain training you could not even start.
The product set out to replace all of that with drawing a shape on a map and asking a question.
Constraint
The source scenes do not fit in a browser
A single scene is far past what a browser can download and draw in one piece. Users still expect it to stay smooth while they pan and zoom.
Answers arrive as a stream that can break
Results stream in rather than arriving at once. When the connection drops, the user is left looking at half an answer.
Four locales ship together
The interface ships in English, Korean, Japanese and Indonesian. Not just copy — numbers, dates and line breaking all behave differently per locale.
Decision
Fetch tiles, not scenes
Cloud Optimized GeoTIFF tiles bring down only the area on screen. Spectral indices such as NDVI render through the same path, so switching an index never re-downloads a scene.
Cloud masks arrive coarse first
An empty map while the precise mask computes reads as a broken product. A coarse mask paints first and the detailed one loads in behind it, so the wait still shows something true.
Moved the stream to WebSocket
I moved the streaming transport from EventStream to WebSocket and kept the socket alive with ping-pong. Long conversations stopped losing their answers midway.
Pulled the map logic out of the app
AOI drawing, the comparison view and the spatial file parsers moved into a shared package, removing duplication between apps. That package is now open source.
Interface

- 01Vertices are dragged to adjust. Self-intersecting shapes and areas below the minimum are rejected while you draw.
- 02The area reads back at once, so the user can judge the scope before hitting search.
- 03The conversation continues on the same screen — map and chat never split apart.

- 01Single, comparison and time series split the analysis modes. The mode chosen sets how many scenes the list below requires.
- 02Choosing a spectral index redraws through the same COG tile path — switching an index never re-downloads the scene.
- 03Each scene carries its capture time and ground sample distance. To re-check a result later, its provenance has to stay on screen.

- 01The handle moves the seam. Drag one side and the other follows — if the two dates drift apart, the comparison itself is wrong.
- 02Both sides share one index scale. With different scales, the same colour would mean different values.
Engineering
- AOIThe drawn shape is validated and passed on as coordinates
- SearchImagery covering those coordinates is found
- COG tilesOnly the visible area comes down as tiles
- WebSocketAnalysis streams in without dropping
- CanvasIndices, masks and the comparison view stack on one screen
Three map engines
v1 started on OpenLayers and moved to Mapbox GL; v2 added MapLibre. Map interaction sits behind a shared package so the app code does not move when the engine does.
Validation while you draw
Self-intersection and minimum-area checks run as the shape is drawn. Let a bad polygon through to search and the error only surfaces much later.
Fewer redraws
A throttled resize observer keeps the map from redrawing on every frame while the window is being resized.
Knowing when it breaks
Sentry covers client, edge and server. Lighthouse runs against screens behind the login, and pull requests go through an automated check pipeline.
Result
A closed beta in July 2024 led to the public launch that December, which came with the first paid subscription contract — a public research institute in Korea.
The press reported it as the first commercial chatbot in the satellite field. The shared map package was opened up and is still in use.
Screens are taken from the public product site. No company code or internal material is included.