Skip to content
d.nikolaev
All projects
FlagshipProduct

Mortgage agency real estate aggregator

A rental and purchase portal built from scratch on Next.js: map, geocoder, booking, mortgage

Role
Frontend engineer: greenfield development and further evolution
Period
Feb 2023 — Jun 2025
Team
4 people
Company
LazurM

The first project I started from a blank page: listings with a map and geo search, booking of agency houses, mortgage programmes, trade-in and a user account. Later — ongoing support and evolution.

What I did

  • Greenfield development: from project structure and routing to production
  • Listing map on Leaflet with address geo search through a geocoder
  • Booking of agency houses with availability checks and request statuses
  • Mortgage programmes and calculators, a trade-in flow
  • Clean Cyrillic URLs via rewrites: /obyavleniya, /moi-obyavleniya and other sections
  • User account: own listings, photo reports, requests, profile

Context

The product

A portal for a regional mortgage agency: rental and sale listings, the agency’s own houses with booking, mortgage programmes, developers and news.

The project started from scratch — I laid out the structure, routing, request layer and store, and then evolved the product alongside new business requirements.

Problem

The problem

The main challenge was geo data. Listings had to be shown both as a list and on a map, searchable by address with suggestions, and their coordinates had to be derived from an address string.

The second was the mix of scenarios inside one product: regular user listings, agency houses with booking, mortgage programmes with their own rules, and trade-in. Each with its own forms and statuses.

Solution

The solution

The map is built on Leaflet: listing points are grouped, and selecting an area loads results for the visible bounds. Address search works through a geocoder with suggestions, and the resolved coordinates are stored with the listing.

Listing, booking and request forms are described with Formik using shared fields and validation: identical steps are reused across scenarios, while the differences stay in the form configuration.

Sections got readable Cyrillic URLs through rewrites — the public URL reads naturally while the internal route stays latin.

Utility logic such as numeral declension was extracted into a separate layer and covered with unit tests: those functions are used in every section, and a regression there is the most expensive kind.

Outcome

The outcome

The portal went live and stayed under my support: programmes, sections and flows were added while the original structure survived two years of change.

For me it was the first full-cycle experience — from an empty repository to release and further evolution, including debugging issues in production.

Outcomes

  • from scratchstructure, routing, store and requests
  • 20+sections in productionListings, map, booking, mortgage, trade-in, photo reports, profile, news.
  • 2 yearsof support after release

Interface

Home page: property search in Sakhalin

Related projects