Building a simple flood‑zone viewer this weekend, and I’m torn between a Python ETL (GeoPandas → PostGIS → tippecanoe) versus pushing more logic client‑side in TypeScript with MapLibre. For about 50k polygons (EPSG:2276 reprojection to 3857), which path has been easier in your experience for clean CRS handling, attribute joins, and incremental updates?
I’d lean Python ETL: do 2276→3857 in PostGIS (ST_Transform + ST_MakeValid, GIST index), tippecanoe to MBTiles, then serve with MapLibre (GitHub - mapbox/tippecanoe: Build vector tilesets from large collections of GeoJSON features.). For “incremental updates”, export only changed features (by updated_at/ids) to a temp MBTiles and merge with tile-join so the browser doesn’t melt. Are your joins many‑to‑one?