🌐
Next.js 15 Β· ArcGIS SDK 5 Β· Three.js Β· Axum Β· Zustand

The Full Web Stack
for Geospatial AI

GeoQ Web combines a React/Next.js frontend with an Axum REST API and DuckDB engine β€” giving analysts an AI chat panel, an interactive ArcGIS map, and a Three.js 3D point cloud viewer in one app.

Launch Web Platform β†’ AI Chat Details
πŸ’¬ AI Chat
Show population density above 10k/kmΒ² in the current view
Found 8 census tracts. Rendering on map. Densest: Mission District 18,420/kmΒ²
βœ“ 8 features Β· GeoJSON Β· 0.28s
Now filter to neighbourhoods built after 2000
Refined to 3 tracts. Updated map layer.
βœ“ 3 features Β· map updated
Ask a geospatial question…
ArcGIS MapView Β· GeoJSON overlay Β· COG imagery

Four Panels, One Workspace

πŸ’¬
AI Chat Panel
A Material UI chat interface with message history, markdown rendering, and SQL reveal toggle. Sends requests to POST /api/chat and displays map results automatically.
πŸ—ΊοΈ
ArcGIS Map View
ArcGIS JS SDK 5.0 MapView with GeoJSONLayer for vector results, ImageryTileLayer for COG rasters, and a SketchViewModel bbox draw tool that feeds into the AI context.
🌩️
Three.js Point Cloud Viewer
copc.js reads COPC octree nodes; Three.js renders them as a colour-classified point cloud with interactive orbit controls β€” right in the browser, no plugins required.
πŸ“š
Source Manager
Register vector, raster, or point-cloud URIs at runtime. Sources create named DuckDB views and are tracked in Zustand state β€” available immediately to the AI agent and map.

Axum HTTP Server

The Rust Axum backend exposes a clean REST API. The shared geoq-engine handles all DuckDB access β€” CLI and web never duplicate logic.

POST
/api/chat
NL question β†’ SQL β†’ GeoJSON + summary
POST
/api/query
Direct SQL execution β†’ JSON rows
GET Β· POST
/api/sources
List / register data sources (vector, raster, pointcloud)
GET
/api/export/:format
Download results as geojson or csv
# Start the web server export OPENAI_API_KEY="sk-..." export GEOQ_WEB_PORT=8080 export GEOQ_WEB_CORS_ORIGINS=http://localhost:3000 cargo run -p geoq-web # Start the Next.js frontend cd frontend npm install && npm run dev # β†’ http://localhost:3000

Best Tools, No Lock-In

πŸ¦€
Rust + Axum Backend
The geoq-web crate is a thin Axum HTTP server sharing the geoq-engine DuckDB connection pool. Memory-safe, single binary, sub-millisecond routing overhead.
RustAxum 0.8Tokiotower-http
βš›οΈ
Next.js 15 + MUI 6
The frontend is a Next.js 15 app with Material UI 6 components, Zustand for state, and dynamic imports for ArcGIS and Three.js (SSR disabled for browser-only APIs).
Next.js 15MUI 6ZustandTypeScript
πŸ—ΊοΈ
ArcGIS JS SDK 5.0
MapView renders GeoJSON result layers, COG rasters via ImageryTileLayer, and exposes a SketchViewModel for drawing bbox selection rectangles used by the AI agent.
ArcGIS 5.0GeoJSONLayerImageryTileLayer

The Geospatial Web App You've Been Waiting For

AI chat + interactive map + 3D point clouds β€” backed by the fastest in-process analytical engine on the planet.

Get the Code β†’ ← Back to Home