
MapaTrhu · Datový produkt
Nejprve kontext. Potom rozhodnutí.
MapaTrhu spojuje nabídky z více portálů, vývoj cen, kontext lokality a porovnání do jednoho pracovního prostoru pro koupi nemovitosti.

Decision journey
Five steps from the map to fair-price context.
The selected market stays put when a user opens a listing from the map. Price, locality and comparable offers load progressively, each one arriving at the moment it can inform the next decision.

Scroll the diagram horizontally.
- 01
Search the market
Listings from multiple portals share one map. Viewport and filters update the results together, keeping the visible market relevant.
- 02
Open the property
The detail keeps the selected area in context and adds source, price, history, attributes, and photos without returning to a stack of portal tabs.
- 03
Read the price map
The price map compares districts and localities through a consistent price-per-square-metre view, giving one asking price a market frame.
- 04
Understand the locality
Seventeen optional layers add transport, parks, schools, demography, risks, services, and analytical signals directly to the map.
- 05
Check fair-price context
The estimate uses comparable price per square metre, time weighting, and data availability. It communicates context and confidence, not a guaranteed value.
Informace
- Typ projektu
- Vlastní realitní datový produkt
- Platforma
- Veřejná webová aplikace
- Naše role
- Produkt jsme postavili od nuly a stále ho provozujeme, od sběru nabídek až po mapové rozhraní.
- Stav
- Live a zdarma na mapatrhu.sk
Technologie
- React 19
- TypeScript 6
- Vite 8
- MapLibre 5
- TanStack Query
- Zustand
- Tailwind CSS 4
- Paraglide
- FastAPI
- Python 3.14
- PostgreSQL 17
- PostGIS 3.5
- pgvector
- psycopg3
- Redis 8
- aiohttp
- Docker
- Caddy
Co se dozvíte
- 01Jak spojit nabídky z více portálů bez ztráty jejich historie.
- 02Jak udržet mapu čitelnou a rychlou při rostoucím objemu dat.
- 03Jak cena, lokalita a porovnání snižují nejistotu při koupi.
01
Roztříštěný trh
Jedna nemovitost se může objevit na více portálech, s odlišným textem a bez souvislé historie. Kupující pak skládá obraz trhu z otevřených karet, tabulek a dojmů.
“Rozhodnutí o bydlení potřebuje víc než fotografii a cenu.”



02
Mapa jako pracovní prostor
Mapa je hlavní pracovní rozhraní. Při pohybu a filtrování mění body, výsledky i vrstvy lokality společně, aby uživatel neztratil kontext mezi nabídkou a místem.



03
Cena potřebuje kontext
Cenová mapa porovnává okresy a lokality. V detailu přibude vývoj ceny, dostupnost a služby v okolí. Odhad neukazujeme jako jistotu. Ke každému číslu patří zdroj i míra důvěry.



04
Shortlist, který lze porovnat
Zajímavé nabídky lze uložit, sledovat přes upozornění a porovnat vedle sebe. Stejné parametry u každé nemovitosti mění výběr z pocitu na kontrolovatelný shortlist.




05
Živý datový produkt
Sběr a deduplikace nabídek běží na PostgreSQL a FastAPI. Samotná mapa je MapLibre v Reactu. Rise drží produkt, design, vývoj i provoz, takže se rozhraní a datová vrstva vyvíjejí společně.

Design and engineering
The decision journey shaped the system layers.
A listing keeps its origin, its identity and its price context through every movement of the map. Collection, calculation and public reads sit in separate layers so none of them slows the others down.
Rozhodnutí za architekturou
Od filtru k užšímu výběru
Zmapovali jsme rozhodnutí kupujícího a informace, které potřebuje od prvního filtru až po užší výběr.
U každé nabídky zůstává dohledatelný zdroj
Porovnali jsme datová pole portálů a zachovali zdroj každé nabídky i jejích změn.
Stejná nemovitost, jeden záznam
Navrhli jsme společný model nabídky a deterministický klíč pro propojení stejných nemovitostí.
Každá vrstva má jeden úkol
Oddělili jsme surový sběr, identitu, výpočty a veřejné čtení, aby se daly měnit a kontrolovat samostatně.
Výřez mapy určuje dotaz
Profilovali jsme dotazy mapy a kolem skutečného výřezu přidali čtecí model, cache a plánované úlohy.

Scroll the diagram horizontally.
- 01
Client and map
React 19, TypeScript 6, Vite 8, MapLibre 5, TanStack Query, and Zustand keep filters, viewport, detail, and comparison in one state.
- 02
API and services
FastAPI in platform_v2 registers 81 route modules. Seventy-three services and raw psycopg3 separate domain decisions from SQL reads.
- 03
Ingestion and identity
aiohttp collectors read about 26 portals over HTTP, preserve the raw record, and deterministically link the same listings without losing provenance.
- 04
Geo intelligence
PostGIS 3.5 serves spatial selections, 17 layers, and an H3 resolution-7 grid. pgvector adds text retrieval and similarity.
- 05
Data and operations
PostgreSQL 17, Redis 8, materialized views, systemd jobs, Docker, Caddy, and imgproxy support fast reads and regular data refresh.
Listing data pipeline
Every listing passes through five controlled stages.
Raw portal data never reaches the map. A record keeps its source, gets normalized, is linked to the property it duplicates and picks up calculated signals. Only then does it enter the read model.

Scroll the diagram horizontally.
- 01
Capture the source
HTTP collectors for about 26 portals store the raw response and keep downloading separate from later processing.
- 02
Normalize
Parsing and geocoding turn different names, prices, areas, addresses, and coordinates into the shared listings working model.
- 03
Link identity
A SHA-1 key built from country, rounded price and area, city, street, and rooms links sources while preserving their history.
- 04
Calculate signals
A cohort price-per-square-metre z-score and ROI methodology populate property_metrics_current. The output remains an estimate with an explained source.
- 05
Serve the map
FastAPI, read models, and two-tier caching serve the MapLibre map, 17 layers, details, alerts, and saved searches.






