Kaso Property Management

An enterprise-grade property management platform featuring automated Trade Me listing synchronization, CMS-controlled service pages, and an extensible JSON-LD schema architecture

Kaso Property Management

The Challenge

Property management agencies face unique operational challenges when trying to showcase available rentals online. Non-technical staff must maintain current property listings across multiple portals, often leading to double-entry errors, delayed updates, and high admin overhead. KASO Property Management, a professional agency serving Auckland and Hamilton, New Zealand, needed a unified digital platform that could automate property updates, provide flexible content control for their services, and maintain a premium, high-performance user experience.

The core challenge was listing synchronization. Copying listing details, descriptions, prices, features, and image galleries from major syndication portals like Trade Me was a slow and error-prone process. The team needed a reliable, automated synchronization engine that could crawl their listings in real time, extract rich metadata (including amenities, available dates, and geo-coordinates), download and cache high-resolution media assets, and keep the public facing catalog updated without manual intervention.

At the same time, the website had to deliver a premium front-end experience. Pages had to render clean search filters (bedrooms, bathrooms, and price boundaries via interactive range sliders) and responsive layouts with smooth animations, all while maintaining high core web vitals. Additionally, each distinct service page - such as residential, commercial, and boarding house management - required unique text, layouts, and contact forms that staff could edit directly through a headless CMS without developer dependency.

Our Solution

The solution was architected as a Next.js 15 platform utilizing the App Router, integrated with Sanity v4 headless CMS and powered by a custom Vercel Blob storage engine. The platform is divided into a server-rendered data fetching layer and an interactive client-side layout, balancing fast initial loads with real-time interactivity.

To automate listings, we built a 29KB synchronization cron job route (/api/cron/scrape) that runs on an automated schedule. The scraper accesses the agency's Trade Me active listing index, discovers detail URLs, and fetches hydrated pages via the Browserless headless Chrome API. A resilient DOM fallback parser extracts structured details: property IDs, pricing, beds/baths/garages count, full-size images, and detailed amenities tables. To prevent broken hotlinks, the pipeline downloads all listing assets and uploads them to private directories in Vercel Blob storage, updating the aggregated properties.json database. The engine also compares active listings to mark missing ones as 'unavailable' and purges old entries past their retention period, triggering Next.js cache revalidation.

For content editors, the site leverages Sanity CMS with a document type mapping. Individual services share a reusable ServiceSubTemplate component. Each service page is pre-populated in Sanity using custom initial value templates, letting staff spin up new pages with default blocks, side widgets, and manager contact cards in seconds. If the CMS goes offline, pages fall back to hardcoded defaults so the user experience is never interrupted. Technical SEO is handled through a custom JSON-LD schema builder that dynamically compiles RealEstateListing blocks for property pages, Service schemas for subpages, and a global Organization schema, ensuring high visibility across Auckland and Hamilton search results.

Kaso Property Management

Tech Stack

Frontend
Next.jsTailwind CSS
Backend
Node.js
Animation & UX
GSAP 3Lenis (Smooth Scroll)
Integrations
Browserless APIVercel BlobSanity

Team Composition

Project Manager

Responsible for requirement gathering, timeline scheduling, and ongoing client communication throughout the development cycle.

Tech Lead

Shaped the Next.js and Vercel Blob architecture, designed the scraping synchronization system, and led technical code reviews.

Backend Developer

Built the Trade Me crawler route, Browserless API integration, Vercel Blob file management, and Sanity CMS schemas.

Frontend Developer

Implemented the properties filter interface, RC Range Slider integration, image gallery carousels, and responsive layouts.

UI/UX Designer

Created the clean visual identity, typography scale, custom aside widgets, and mobile-friendly property detail layout.

QA Engineer

Conducted continuous testing of the scraper cron job, verification of the Vercel Blob sync states, and cross-browser responsiveness tests.

Project Duration

16 Weeks Project Lifecycle

M1
M2
M3
M4
Discovery & Requirements
Design & CMS Schema Setup
Core Scraper & Blob Sync Dev
Frontend & Filtering Integration
Testing & Validation
Launch

The Journey

The journey began by diving deep into the day-to-day workflow of property managers and evaluating the existing property feeds in New Zealand. We mapped out how listings were published, what attributes were frequently updated, and why traditional API feeds often failed to capture rich text and multiple high-res photos. This research convinced us that relying on direct, raw DOM scraping using Browserless was the most reliable path to capture listing descriptions, complex amenities, and full-resolution images without waiting on third-party API keys or experiencing sync latency.

Our design team established the visual direction early, creating a clean, modern layout system that prioritizes clarity and details. Property cards and directory listings were structured to showcase essential stats immediately - bedrooms, bathrooms, prices, and locations. For the individual property pages, we created an image-first layout with clean aside widgets for listing metadata, manager forms, and branch office contacts, ensuring that prospective tenants had an intuitive, distraction-free conversion path on any screen size.

Engineering the scraping cron job was the project's most significant technical challenge. Downloading bulk image files, processing them asynchronously, and uploading them to Vercel Blob introduced memory and timeout constraints in edge functions. We resolved this by implementing an incremental batching process, compressing listing images on the fly, and utilizing Vercel Blob's directory deletion helper to cleanly purge orphaned folders when listings went offline. Testing and validating the final schema against multiple search engines completed the project, delivering a fast, automated site ready for launch.

Key Impact

KASO Property Management now has a high-performance digital asset that operates completely on autopilot. The Trade Me scraping system synchronizes active rentals on a scheduled basis, downloading high-res images and metadata directly to Vercel Blob. Double-entry is eliminated, listings are updated within minutes, and the website's public catalog matches active inventory without manual effort from agency staff.

For potential tenants and landlords, the user experience is smooth and fast. The properties page allows users to filter by beds, baths, type, and price range using the RC Range Slider, returning filtered results instantly without loading delays. If a listing is rented and marked as unavailable, the website automatically applies a 'noindex' robot tag and displays a clean PropertyUnavailable card, keeping search engine indexes clean while providing alternative service suggestions to visitors.

For KASO's internal team, the Sanity CMS setup provides complete editorial independence. New service subpages can be created instantly, marketing copy updated, office contacts changed, and team profiles managed without developer intervention. The combination of automated listing sync, flexible content management, and robust lead-capturing forms has transformed their online presence into a powerful tool that drives new property management acquisitions.

Why it Stands Out

This project stands out due to its technical excellence in solving real-world syndication challenges. The 29KB scraping cron job route is a highly optimized backend system. It combines headless Browserless page rendering with Cheerio DOM parsing and Vercel Blob asset caching, ensuring that KASO has a reliable, self-contained property database that is completely independent of external syndication API limitations.

The content architecture is another major highlight. By utilizing Sanity's initial value templates, we built a system where creating a new service page automatically pre-populates all necessary blocks, side navigation lists, and contact widgets. Content editors get a fully structured, ready-to-publish template immediately, ensuring brand consistency and saving hours of manual editing in Sanity Studio.

Finally, the dynamic SEO and JSON-LD schema builder provides search engines with exceptionally rich signals. Real estate listings receive full geo-coordinates, availability timestamps, and provider attributes automatically compiled into structured schemas. Combined with automated page-level metadata generation, the platform ensures that KASO ranks strongly for local property management queries across Auckland and Hamilton, demonstrating the value of professional-grade engineering applied to local business websites.