Podklad started as a desk study for Czech property buyers: flood zones, radon, zoning, the cadastre and a 3D block of terrain, in one report. V2 is a refreshed product. The 3D model now shows how the sun, the wind and the trees behave on your plot and in your apartment, and the heavy maths runs in Rust.

// what changed
In the first version, the 3D view was a nice block of terrain with boxes for buildings. It looked good, but it didn't answer the questions buyers actually ask. Will the living room get sun in winter? Is the garden in the shade of the neighbours' trees? Which way does the wind come from, and does the building block it? V2 is about answering those questions on the model itself.
// sun
The heavy calculations live in one small Rust crate, podklad-calc. It's compiled to a single no_std WebAssembly module with a plain C ABI: no allocator, no wasm-bindgen and not even libm. JavaScript writes the inputs into static buffers, calls a kernel and reads the result back. The same code runs natively under cargo test, and golden tests check that it matches the old TypeScript output exactly.
For sun hours, the kernel builds a height field from ČÚZK's DMR 5G terrain and the building volumes. For every sun position of the day, it ray-marches from each ground cell towards the sun. Terrain and walls block the light. Tree crowns only weaken it, following exp(−k·path): the longer the ray runs through foliage, the less light gets through. The exponential is a small hand-written polynomial, because there's no maths library in a no_std build.
You can play the sun through a day, pick a date, or switch to a yearly average. The yearly average is fast because spring and autumn days mirror each other, so half of them don't need their own run. “Osvit fasád” colours each facade by its yearly sun hours, and it can include the shade from trees.

// trees
Trees aren't placed from a generic list. Podklad subtracts the terrain model (DMR 5G) from ČÚZK's surface model (DMP, 0.5 m, from 2024 onwards, or DMP 1G where that's missing) and removes the building footprints. What's left is a canopy height map. The Rust kernel finds individual tree tops in it, and each one becomes a 3D tree with its real height and crown size.
The same canopy goes into the sun calculation as a semi-transparent layer. A thin birch dims the light. A deep row of limes blocks most of it. That's the difference between “the garden is in shade” and “the garden gets dappled light until 3 pm”.

// wind
The new “Počasí a klima” section builds a wind rose and climate figures for the plot from historical hourly weather data (Open-Meteo archive). In 3D, a quiet wind rose sits on the ground next to the site. You can pick a direction and see the prevailing wind on the model.
“Proudění větru” goes further and draws streamlines that hug the terrain 0.6 to 3 m above the ground. They speed up through gaps and around corners and slow down in the lee of buildings and under trees. The Rust kernel also estimates a wind factor at pedestrian height (about 1.5 m) for each of the 8 sectors. It's honestly labelled as a simplified estimate, not CFD. It's good for spotting a windy corner, not for designing a skyscraper.

// buildings
Buildings are generated from the cadastre (RÚIAN) footprints, the terrain and the surface model. They get pitched roofs with real overhangs and one row of windows per storey, with sills 0.9 m above each floor. Each building sits on the average ground under its footprint. On a slope, a plinth fills the gap, so nothing floats or sinks into the hill. Anything taller than about three storeys, panel blocks included, is now drawn in full colour and detail by default, not as a grey box.
For an apartment study, you enter the floor (“patro bytu”), and an orange band marks it on the building. You don't need the total number of floors: it's estimated from the building's height. If a plot has several buildings, they're numbered and you choose one.



// inside & apart
Where a floor plan has been modelled, the building menu shows “Podívat se dovnitř”. It takes you into the apartment on the right floor and lists the direct sun hours for each room (living room, bedroom, hallway, bathroom) for the chosen day. Interiors are read-only for visitors, and the button only appears where a plan exists.
“Rozložit”, the exploded view, separates the model into stacked slabs: buildings, the parcel and the map terrain, each floating above the next. It's the quickest way to see what each layer contributes. On phones, it frames the stack so it stays visible above the layers sheet.


// editor & first run
The building editor, where volumes and floor plans are modelled, used to be a separate 3D app. It now renders through the same viewer as the study, with only the editing tools added on top. The scene loads in parallel with its data, and the heavy layers (terrain detail, trees, wind, contours) come in afterwards. In my measurements, the time until you can start editing dropped from 10.4 s to 4.4 s on desktop and from 4.7 s to 2.1 s on a phone. The editor is still in closed testing.

After signing in, you now land on your dashboard. New accounts no longer get dropped into an empty form. They see a short explanation, a link to a finished example study and a “Vytvořit první studii” button. The preview stays free, and full studies are paid in credits.

// limits
// stack
TanStack Start and React 19 on Cloudflare Workers, with D1 and R2 for studies and terrain tiles, and React Three Fiber for 3D. The calculations (sun hours, canopy and tree tops, wind sectors, wind flow, height field, parcel averages) are in Rust, compiled to WebAssembly. The same write-once approach is described in Rust + WASM, write once.
Try the Prague apartment example or the Droždín cottage example, and compare it with how Podklad looked before →
Note: this article was written by an AI from my brief and the project's code. Podklad and every feature here are real and live. The prose isn't hand-written.