
MapaTrhu · Producto de datos
MapaTrhu reúne anuncios de varios portales, evolución de precios, contexto de ubicación y comparación en un único espacio de trabajo para comprar una propiedad.
Decision journey
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.
Listings from multiple portals share one map. Viewport and filters update the results together, keeping the visible market relevant.
The detail keeps the selected area in context and adds source, price, history, attributes, and photos without returning to a stack of portal tabs.
The price map compares districts and localities through a consistent price-per-square-metre view, giving one asking price a market frame.
Seventeen optional layers add transport, parks, schools, demography, risks, services, and analytical signals directly to the map.
The estimate uses comparable price per square metre, time weighting, and data availability. It communicates context and confidence, not a guaranteed value.
Tecnología
01
Una misma propiedad aparece en varios portales, con textos distintos y sin historial continuo. El comprador arma su visión del mercado con pestañas abiertas, hojas de cálculo e impresiones.
“La decisión de comprar una vivienda necesita más que una foto y un precio anunciado.”



02
El mapa es el espacio de trabajo principal. Al desplazarse y filtrar, los puntos, resultados y capas de ubicación cambian juntos para mantener claro el vínculo entre el anuncio y el lugar.



03
El mapa de precios compara distritos y ubicaciones. En el detalle se añaden evolución del precio, accesibilidad y servicios cercanos. Una estimación no es certeza. Cada cifra lleva fuente y confianza.



04
Los anuncios se pueden guardar, seguir mediante alertas y comparar en paralelo. Los mismos campos para cada propiedad convierten una preferencia difusa en una lista que se puede revisar.




05
La recopilación y deduplicación corren sobre PostgreSQL y FastAPI. El mapa es MapLibre en React. Rise lleva producto, diseño, desarrollo y operación, así que interfaz y capa de datos avanzan juntas.

Design and engineering
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.
We mapped buyer decisions and the information needed from the first filter through the shortlist.
We compared portal payloads and preserved the source of every listing and subsequent change.
We designed a shared listing model and a deterministic key for linking the same property across sources.
We separated raw capture, identity, calculations, and public reads so each can change and be checked independently.
We profiled map queries and added a read model, caching, and scheduled jobs around real viewport use.

Scroll the diagram horizontally.
React 19, TypeScript 6, Vite 8, MapLibre 5, TanStack Query, and Zustand keep filters, viewport, detail, and comparison in one state.
FastAPI in platform_v2 registers 81 route modules. Seventy-three services and raw psycopg3 separate domain decisions from SQL reads.
aiohttp collectors read about 26 portals over HTTP, preserve the raw record, and deterministically link the same listings without losing provenance.
PostGIS 3.5 serves spatial selections, 17 layers, and an H3 resolution-7 grid. pgvector adds text retrieval and similarity.
PostgreSQL 17, Redis 8, materialized views, systemd jobs, Docker, Caddy, and imgproxy support fast reads and regular data refresh.
Listing data pipeline
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.
HTTP collectors for about 26 portals store the raw response and keep downloading separate from later processing.
Parsing and geocoding turn different names, prices, areas, addresses, and coordinates into the shared listings working model.
A SHA-1 key built from country, rounded price and area, city, street, and rooms links sources while preserving their history.
A cohort price-per-square-metre z-score and ROI methodology populate property_metrics_current. The output remains an estimate with an explained source.
FastAPI, read models, and two-tier caching serve the MapLibre map, 17 layers, details, alerts, and saved searches.
Un objetivo parecido, adaptado a sus necesidades