Personal project, in production · 2026

Mudarg

Search properties by travel time

Browser extension that draws travel time isochrones over a real estate portal's own map and filters the listings to the ones you can actually reach.

Role

Sole Developer

Context

Personal project, in production

Year

2026

Links

Technologies: Next.jsReactSvelteWXTLeafletoRPCDrizzlePostgreSQLbetter-authPolarTailwind

Overview

Mudarg is a browser extension that enriches the ArgenProp real estate portal with travel time data. You pick a point (your office, your university), a maximum time and a transport mode, and the zone you can reach in N minutes walking, cycling, driving or by public transport is drawn over the map you are already using. Then you keep only the properties inside it.

It is the production evolution of relocate-app, the Flask and Leaflet MVP that validated the reachability map idea for Buenos Aires.

Before and after: the portal map with a Mudarg isochrone
Side panel plus overlay on the portal map

The problem

Looking for an apartment should not be a full time job. You lose hours opening every listing in a new tab, copying the address and asking Google Maps how long it takes to get to work.

The technical obstacle was worse: there is no way to touch the portal's map from an extension. Content scripts run in an isolated JavaScript context, so the portal's Leaflet instance, its coordinates and its layers are a black box.

Decisions

  • Mirror the map instead of hacking it: the extension creates a second, fully invisible Leaflet map on top of the portal's one with pointer events disabled. It reads the only thing the DOM does expose, the tile URLs, derives z/x/y from them and, with each tile's screen position, projects any pixel back to latitude and longitude. The mirror stays in sync on every pan and zoom, and the isochrones are drawn on it.
  • Property markers are DOM elements, so they get the same inverse projection: each one is tested against the active zones and hidden or shown with CSS. The portal's map is never modified.
  • The panel lives in a Shadow DOM so the site's styles cannot break it, and API calls go through the extension's background script as an RPC proxy over a message port, which avoids CORS and credential issues.
  • Monorepo with pnpm workspaces and Turborepo: a Next.js 16 web app (landing, auth, dashboard, webhooks) and a WXT plus Svelte 5 extension, sharing typed packages for the oRPC API, Drizzle schema, better-auth and the TravelTime and Nominatim clients.
  • Tokens as a ledger: each calculation costs one token per transport mode, the balance is the sum of the user's rows, and the server checks it before calling TravelTime. No coverage, no charge. Packs are bought through Polar and credited by webhook.
  • Local cache: every GeoJSON result is stored in the browser and can be reloaded without spending tokens.
Zone drawn, all listings still visible
134 properties within 10 minutes by car, the rest greyed out
Only the listings inside the zone

Result

Mudarg is live at mudarg.com with the extension published for free: up to two simultaneous zones to compare modes, 5 to 180 minutes, address search with autocomplete, an account with email or Google, calculation history and token packs from the dashboard.