Overview
A Croatian property agency needed to replace their outdated property portal. The existing system was built on a PHP framework from 2012, took 8+ seconds to load on mobile, had no proper search, and required agents to call the developer for every content change.
We built a modern portal that agents manage themselves, loads in under 2 seconds, and surfaces the right properties to buyers through a combination of text search, category filtering, and map-based discovery.
Key Features
Property Search and Filtering
The search interface allows buyers to filter by:
- Property type (apartment, house, land, commercial)
- Location (city, neighbourhood, radius from a map point)
- Price range, size range, number of rooms
- Features (sea view, parking, elevator, pet-friendly)
Results update in real time as filters change, using a debounced query approach to avoid excessive database hits.
Map-Based Search
Buyers can switch to a map view (powered by Mapbox GL JS) that shows all matching properties as clusters, expanding to individual pins at higher zoom levels. Clicking a pin shows a property preview card; clicking through goes to the full listing.
This was the feature buyers responded most positively to in user testing — searching "near the sea" or "in this neighborhood" is much more natural with a map than with dropdown filters.
Agent Dashboard
We built a private dashboard where agents can:
- Create and publish property listings (form-based, no code required)
- Upload and manage photos (drag-and-drop, automatic WebP conversion)
- Mark properties as sold/rented
- Export inquiry data to CSV
Authentication uses NextAuth.js with credentials (email + password) since the agency has no identity provider.
Bilingual Content
All listings have Croatian and English fields. The public-facing site detects the user's browser language and defaults accordingly, with a language toggle on every page. The agent dashboard allows agents to fill in both languages simultaneously.
Technical Highlights
Full-text search is implemented via PostgreSQL's built-in tsvector / tsquery with custom dictionaries for Croatian (important since simple prefix matching doesn't work well for inflected languages).
Image optimization uses sharp for server-side processing: incoming agent uploads are converted to WebP, resized to multiple breakpoints, and stored in an S3-compatible bucket. The frontend uses Next.js Image with responsive srcset.
ISR for listing pages: Property detail pages are statically generated with a 10-minute revalidation window. This means pages are served from CDN cache (fast) but update automatically when an agent edits a listing.
Result
Post-launch metrics after 90 days:
- Average mobile load time: 1.7s (down from 8.3s)
- Bounce rate: −34% vs. previous site
- Average session duration: +41%
- Inquiry submissions: +58% vs. same period prior year
The agency's senior agent noted that the map search feature alone had generated several sales from buyers who discovered neighborhoods they wouldn't have thought to search for by name.