Browser scene for Artemis II: orbital trajectory readable in motion, scroll narrative, Moon/Earth/Orion camera locks, atmosphere for dark-space legibility. React, Three.js, R3F, Drei.
100 days complete. The work continues. 🚀
#100DayMapChallenge #3DMaps #Artemis #Geospatial
Browser scene for Artemis II: orbital trajectory readable in motion, scroll narrative, Moon/Earth/Orion camera locks, atmosphere for dark-space legibility. React, Three.js, R3F, Drei.
100 days complete. The work continues. 🚀
#100DayMapChallenge #3DMaps #Artemis #Geospatial
Long-form client project: from reef survey CSVs + bathymetry model to a deployed 3D spatial interface.
QGIS, MapLibre, Three.js, and 3D Tiles → height tiles + pmtiles pivot, with end-to-end delivery from data prep to hosting.
#100DayMapChallenge Day 81/100
Long-form client project: from reef survey CSVs + bathymetry model to a deployed 3D spatial interface.
QGIS, MapLibre, Three.js, and 3D Tiles → height tiles + pmtiles pivot, with end-to-end delivery from data prep to hosting.
#100DayMapChallenge Day 81/100
10+ years: LiDAR → GIS → WebGL → storytelling
Something's shifting. Drawing me toward immersive work.
Feb 9: #100DayMapChallenge
100 days. GIS → interactive 3D viz.
From static maps to immersive environments.
From QGIS to WebGL. 🗺️
#WebMapping #MapTheClouds
10+ years: LiDAR → GIS → WebGL → storytelling
Something's shifting. Drawing me toward immersive work.
Feb 9: #100DayMapChallenge
100 days. GIS → interactive 3D viz.
From static maps to immersive environments.
From QGIS to WebGL. 🗺️
#WebMapping #MapTheClouds
Late-campaign, I wanted something lighter: Hot air balloon glTF over a dense 3D city in Mapbox GL JS, rendered with a custom Three.js layer on the same WebGL canvas.
maptheclouds.com/playground/b...
#100DayMapChallenge Day 97/100
#ThreeJS #WebGL #MapboxGL
Late-campaign, I wanted something lighter: Hot air balloon glTF over a dense 3D city in Mapbox GL JS, rendered with a custom Three.js layer on the same WebGL canvas.
maptheclouds.com/playground/b...
#100DayMapChallenge Day 97/100
#ThreeJS #WebGL #MapboxGL
Yosemite terrain, reimagined through speculative geology.
I used a OpenTopography LiDAR → QGIS → Qgis2threejs → Three.js pipeline.
#100DayMapChallenge Day 52/100
🔗 maptheclouds.com/playground/3...
Yosemite terrain, reimagined through speculative geology.
I used a OpenTopography LiDAR → QGIS → Qgis2threejs → Three.js pipeline.
#100DayMapChallenge Day 52/100
🔗 maptheclouds.com/playground/3...
Open-source pushed me into programming and browser-native maps. 🎮
Next chapter: projects that help people. Mountains and shared time offline still matter. ⛰️
Seven platforms daily - exhausting.Thank you for following along. ❤️
#100DayMapChallenge #Maps #OpenSource
Open-source pushed me into programming and browser-native maps. 🎮
Next chapter: projects that help people. Mountains and shared time offline still matter. ⛰️
Seven platforms daily - exhausting.Thank you for following along. ❤️
#100DayMapChallenge #Maps #OpenSource
#30DayMapChallenge 2023 D11 Retro. ETOPO1 drives bg + reflections; InstancedMesh mirror quads, Three.js/WebGL. Style study, not analytics.
🔗 maptheclouds.com/playground/3...
#100DayMapChallenge Day 66/100 #NOAA #Animation
#30DayMapChallenge 2023 D11 Retro. ETOPO1 drives bg + reflections; InstancedMesh mirror quads, Three.js/WebGL. Style study, not analytics.
🔗 maptheclouds.com/playground/3...
#100DayMapChallenge Day 66/100 #NOAA #Animation
Romania density via Uber H3. QGIS + Qgis2threejs = 3D viz.
Why hexagons: 6 equal neighbors, minimal bias, perfect tessellation, circular distance approximation.
Urban peaks without admin borders. Hierarchical aggregation = smooth zoom.
#100DayMapChallenge
Romania density via Uber H3. QGIS + Qgis2threejs = 3D viz.
Why hexagons: 6 equal neighbors, minimal bias, perfect tessellation, circular distance approximation.
Urban peaks without admin borders. Hierarchical aggregation = smooth zoom.
#100DayMapChallenge
Cluj settlement via World Settlement Footprint 2019. Copernicus Sentinel 10m data, ESA/DLR/GEE.
Local question + global open dataset = independent satellite analysis.
maptheclouds.com/playground/30-day-map-challenge/urbanrural/
#100DayMapChallenge
Cluj settlement via World Settlement Footprint 2019. Copernicus Sentinel 10m data, ESA/DLR/GEE.
Local question + global open dataset = independent satellite analysis.
maptheclouds.com/playground/30-day-map-challenge/urbanrural/
#100DayMapChallenge
A 9-month client delivery focused on reliable geospatial product engineering: Vue/Nuxt + React map workflows, open-source-first stack with MapLibre + PMTiles + OSM/Nextzen tiles via Cloudflare, GraphQL/PostgreSQL.
#100DayMapChallenge Day 88/100
A 9-month client delivery focused on reliable geospatial product engineering: Vue/Nuxt + React map workflows, open-source-first stack with MapLibre + PMTiles + OSM/Nextzen tiles via Cloudflare, GraphQL/PostgreSQL.
#100DayMapChallenge Day 88/100
Recursive subdivision → pure HTML, ~3KB. Grid gaps = black lines, cells = colors. How much randomness before balance breaks?
Generative art = aesthetic principles as code. 🎨
#100DayMapChallenge #GenerativeArt #CSSGrid
Recursive subdivision → pure HTML, ~3KB. Grid gaps = black lines, cells = colors. How much randomness before balance breaks?
Generative art = aesthetic principles as code. 🎨
#100DayMapChallenge #GenerativeArt #CSSGrid
50 of the most valuable vinyl records visualized with a Voronoi layout.
Beatles dominate: White Album ($790k)
D3.js interactive visualization.
#100DayMapChallenge
maptheclouds.com/playground/30-day-chart-challenge/comparisons/experimental/
50 of the most valuable vinyl records visualized with a Voronoi layout.
Beatles dominate: White Album ($790k)
D3.js interactive visualization.
#100DayMapChallenge
maptheclouds.com/playground/30-day-chart-challenge/comparisons/experimental/
Week 14 starts today.
#100DayMapChallenge #Geospatial #GIS #3DMaps #OpenSource
Week 14 starts today.
#100DayMapChallenge #Geospatial #GIS #3DMaps #OpenSource
A calmer climate visualization where monthly land-surface-temperature frames blend so seasonal change flows continuously. Click pauses playback to inspect each stage.
Built with Three.js/WebGL + custom diffuse shader logic.
#100DayMapChallenge Day 76/100
A calmer climate visualization where monthly land-surface-temperature frames blend so seasonal change flows continuously. Click pauses playback to inspect each stage.
Built with Three.js/WebGL + custom diffuse shader logic.
#100DayMapChallenge Day 76/100
Built an interactive SLD for a utility platform: 600+ nodes, voltage filters, Tree and geospatial layouts, sticky HTML popups, and collision handling. Stack: D3.js v7, React, TypeScript, Mapbox GL JS.
#100DayMapChallenge Day 67/100
#NetworkVisualization #Animation
Built an interactive SLD for a utility platform: 600+ nodes, voltage filters, Tree and geospatial layouts, sticky HTML popups, and collision handling. Stack: D3.js v7, React, TypeScript, Mapbox GL JS.
#100DayMapChallenge Day 67/100
#NetworkVisualization #Animation
My first significant freelancing project with Anna Tong.
Challenge: integrating images and text inside the circular DOM nodes while keeping everything readable.
Force simulation positions nodes by relationships, not rigid hierarchy.
#100DayMapChallenge
My first significant freelancing project with Anna Tong.
Challenge: integrating images and text inside the circular DOM nodes while keeping everything readable.
Force simulation positions nodes by relationships, not rigid hierarchy.
#100DayMapChallenge
Not every 3D experiment needs to be serious.
This one takes a familiar planet setup and pushes it into absurd territory: cheese-textured Earth, stylised moon, star-map background.
Silly by concept, careful in execution.
#100DayMapChallenge Day 83/100
Not every 3D experiment needs to be serious.
This one takes a familiar planet setup and pushes it into absurd territory: cheese-textured Earth, stylised moon, star-map background.
Silly by concept, careful in execution.
#100DayMapChallenge Day 83/100
Dense 3D city view, shifted into a quiet snow-dome version.
Inspired by FOSS4G Bucharest 2019. FOSS4G Europe 2026 is coming: 2026.europe.foss4g.org
maptheclouds.com/playground/b...
#100DayMapChallenge Day 91/100 #ThreeJS #MapboxGL #MaplibreGL#FOSS4G
Dense 3D city view, shifted into a quiet snow-dome version.
Inspired by FOSS4G Bucharest 2019. FOSS4G Europe 2026 is coming: 2026.europe.foss4g.org
maptheclouds.com/playground/b...
#100DayMapChallenge Day 91/100 #ThreeJS #MapboxGL #MaplibreGL#FOSS4G
200m elevation data rendered as fluffy clouds in Three.js
QGIS → Three.js fly navigation + transparent texture = cloud-like appearance
Sometimes looking at data in an unfamiliar way reveals patterns you wouldn't notice otherwise.
#100DayMapChallenge
200m elevation data rendered as fluffy clouds in Three.js
QGIS → Three.js fly navigation + transparent texture = cloud-like appearance
Sometimes looking at data in an unfamiliar way reveals patterns you wouldn't notice otherwise.
#100DayMapChallenge
MapLibre over lower Manhattan keeps the OSM extrusions, but they are redrawn in custom WebGL where SunCalc steers the light and dawn or dusk swaps the MapTiler day or dark basemap.
maptheclouds.com/playground/b...
#100DayMapChallenge 90/100
#MapLibre #Geospatial #3DMaps
MapLibre over lower Manhattan keeps the OSM extrusions, but they are redrawn in custom WebGL where SunCalc steers the light and dawn or dusk swaps the MapTiler day or dark basemap.
maptheclouds.com/playground/b...
#100DayMapChallenge 90/100
#MapLibre #Geospatial #3DMaps
Earthquake data treated as visual signal, not just dataset.
Built in the context of the Feb 2023 Turkey/Syria earthquakes, this piece maps the USGS all-month feed on a 3D globe using Three.js/WebGL shaders.
#100DayMapChallenge Day 89/100 #ThreeJS #WebGL #Geospatial
Earthquake data treated as visual signal, not just dataset.
Built in the context of the Feb 2023 Turkey/Syria earthquakes, this piece maps the USGS all-month feed on a 3D globe using Three.js/WebGL shaders.
#100DayMapChallenge Day 89/100 #ThreeJS #WebGL #Geospatial
Height is not hard to render in 3D. It is hard to read.
I mapped building elevation to hue with GLSL over Three.js + MapLibre GL JS, so skyline structure becomes readable at a glance.
#100DayMapChallenge 69/100
🔗 maptheclouds.com/playground/b...
Height is not hard to render in 3D. It is hard to read.
I mapped building elevation to hue with GLSL over Three.js + MapLibre GL JS, so skyline structure becomes readable at a glance.
#100DayMapChallenge 69/100
🔗 maptheclouds.com/playground/b...
100 consecutive days of building in public: GIS, 3D maps, WebGL, client work, experiments, shaders, and spatial storytelling.
maptheclouds.com/100-day-map-challenge/stats/
Big thanks! 🚀
#100DayMapChallenge #GIS #WebGL #ThreeJS #3DMaps
100 consecutive days of building in public: GIS, 3D maps, WebGL, client work, experiments, shaders, and spatial storytelling.
maptheclouds.com/100-day-map-challenge/stats/
Big thanks! 🚀
#100DayMapChallenge #GIS #WebGL #ThreeJS #3DMaps