Namibia's leading property portal. Thousands of listings from multiple providers, served from the cloud with zero servers to manage. Here's how we built it and why every decision matters.
Property data in Southern Africa doesn't come from one place. Agencies use different platforms — some are on Propdata, others on Entegral, and they all expect their listings to show up correctly, with the right photos, the right agent, and the right contact details.
We built Property News to solve this: a platform that ingests data from multiple providers, normalises it into a single system, and serves it through a fast, searchable website — all without us ever managing a single server.
Traditional web apps sit on a server that's always running, always costing money, whether anyone's using the site or not. At 3am when nobody's browsing? Still paying. Traffic spikes because a listing went viral? Hope the server can handle it.
Property News takes a completely different approach. We use Laravel Vapor to deploy the entire application to AWS Lambda — Amazon's serverless computing platform. Instead of a server waiting for requests, the code only runs when someone actually visits the site. AWS spins up a tiny container, handles the request, and shuts it down. You only pay for what you use.
And here's the best part: if a thousand people hit the site at the same time, AWS just spins up a thousand containers. It scales infinitely, automatically, with zero intervention. No capacity planning, no load balancers to configure, no 2am alerts about CPU usage.
The app runs in AWS's Cape Town region - the closest AWS region to Namibia. This means pages load fast because the data doesn't have to travel halfway around the world.
CloudFront sits in front of everything - images, CSS, JavaScript - cached at edge locations across the globe. When someone loads a property listing, the heavy assets are already waiting nearby.
AWS WAF (Web Application Firewall) blocks malicious traffic before it even reaches the application. Bot detection, rate limiting, and threat mitigation all happen automatically.
Deploying a new version of the site is literally one command: vapor deploy production. Vapor handles building assets, uploading code, swapping the Lambda function, and invalidating caches. Zero downtime, every time.
The Lambda functions run on AWS Graviton (ARM64) processors - they're cheaper and faster than traditional x86 instances. Better performance at lower cost. It's a no-brainer.
When agents upload photos, the files go directly from their browser to AWS S3 using presigned URLs. The Lambda function never touches the file - it just signs a permission slip and gets out of the way.
A property portal serves thousands of images — property photos, agent headshots, agency logos, advert banners. You can't just dump the original 4000x3000 photo from someone's phone and hope for the best. But you also can't manually resize every image for every context — a thumbnail needs different dimensions than a hero image.
So we built something better. When any image is requested, it passes through an edge function sitting on CloudFront. The function reads the dimensions from the URL, resizes the image on the fly using Sharp.js, caches the result, and serves it. First request does the work, every request after that hits the cache. The original image is never modified.
Need a 720x480 thumbnail for a property card? Just add ?w=720&h=480 to the image URL. Need a 1600x900 version for the gallery? Change the parameters. The same source image serves every size you'll ever need.
The Lambda function runs on 1536MB of memory with a 30-second timeout — more than enough to resize even large images. Results are cached in S3 with a one-year TTL, so each unique dimension is only ever generated once.
If anything goes wrong — corrupted image, timeout, anything — the function gracefully falls back to serving the original unresized image. Better a big image than a broken one.
Here's the problem with agent photos: people don't upload perfectly framed headshots. They send full-body shots, group photos cropped badly, or landscape images where they're standing off to the side. A standard center-crop turns those into a photo of someone's chest.
When an agent avatar is requested with ?facedetect=true, the Lambda function sends the image to AWS Rekognition — Amazon's computer vision AI. Rekognition finds the face, returns a bounding box, and the function crops around the face with a 2x buffer zone for natural framing before resizing to the final dimensions.
The result? Every agent photo is perfectly centred on their face, regardless of how badly the original was framed. And it's all automatic — no manual cropping, no intervention needed.
Here's where it gets interesting. Property News doesn't have its own listings — it aggregates data from Propdata and Entegral, two of Southern Africa's biggest property data platforms. Each has their own API, their own data format, their own way of doing things.
We built two custom Laravel packages that talk to these APIs, fetch all the listings, and normalise them into a single unified format. A house listed on Propdata looks exactly like a house listed on Entegral. Same search, same filters, same experience for the user.
When the sync runs, it doesn't just blindly download everything. It hashes each property's data and compares it to what we already have. If nothing changed? Skip it. No wasted processing, no unnecessary database writes.
Properties that have changed get dispatched as individual jobs onto dedicated queues — separate queues for listings, properties, agents, and images. This means photo processing doesn't block property updates, and a slow image download doesn't hold up the entire pipeline.
Each property also has a 5-hour cooldown. If a sync runs every hour, a property that was just updated won't be re-processed unnecessarily. Smart throttling that keeps costs down and performance up.
Auto-creates locations — when a new suburb appears in the feed, the system automatically creates it and links it to the correct town. No manual data entry.
Agent stub linking — when properties come in with agent info, placeholder accounts are created. Agents can later claim their profile and manage their own listings.
Stale listing cleanup — if a property disappears from the provider feed, it gets automatically deactivated. No ghost listings hanging around.
Photo pipeline — images are downloaded from the provider, uploaded to S3, and served through CloudFront. Gallery ordering is preserved so the hero shot is always first.
Laravel isn't just a framework — it's an entire ecosystem. The queue system that powers the data pipeline? Built in. The authentication for agents and admins? Built in. The notification system that emails agents when they get enquiries? Built in. We're not stitching together a dozen different libraries and hoping they play nice — it all works together because it was designed to.
And because we're on the latest Laravel — we get the newest features, the best performance, and long-term support.
The entire frontend is reactive without a single line of React or Vue. Search filters update in real-time, forms validate as you type, admin dashboards refresh without page loads. 63 Livewire components power everything from property search to the full admin panel.
Every pixel is styled with utility classes. No bloated CSS files, no unused styles. The design system uses a custom brand palette and a component library for the admin dashboard — consistent, polished, and fully responsive.
For the interactions that need to feel instant — keyboard-navigable location selectors, price formatting as you type, multi-select dropdowns with search. Small, fast, and designed to make every click feel responsive.
The sync pipeline, image processing, email notifications, cleanup tasks - they all run in the background on dedicated queues. The user never waits for a sync to finish or a photo to upload. Everything is async.
Every change to a property, user, agency, or advert is logged. Who changed what, when, and what the old value was. When you're managing third-party data at scale, accountability isn't optional.
Admins see everything. Agents see their own listings and analytics. The public sees the search. Three different experiences, one codebase, powered by a role-based permission system.
Property News isn't a brochure with a search bar. It's a living platform with advertising, analytics, agent management, a magazine, and a smart search that actually helps people find homes.
Filter by location, price, bedrooms, bathrooms, parking, plot size, property features - and every combination updates instantly without a page reload. URLs update as you filter, so you can share a search with someone and they'll see exactly what you see. It's powered by a single Livewire component that handles all the state, pagination, and query string sync.
Advertisers pay for placement, so we built a rotation system that's actually fair. It tracks when each ad was last shown and distributes impressions evenly. Different placement modes let advertisers pin to specific spots or enter a random rotation. Every impression and click is tracked with full analytics - advertisers can see exactly what they're getting.
When something looks off, users can click a button and report it. The system captures a full DOM snapshot of the page - with all the CSS inlined - plus browser info, screen size, and an optional screenshot. Everything gets uploaded to S3 and errors are piped to Slack in real-time. We often know about issues before users finish typing their description.
Agents aren't just names on a listing. They get their own dashboard where they can manage their properties, view analytics on how their listings perform, and update their profiles. The agent finder lets house-hunters search by location and language. It's a two-sided platform - useful for buyers and agents alike.
Property News publishes a digital magazine - and the entire archive is browsable on the site with view tracking. Pair that with automated newsletter subscriptions, and you've got a content platform built right into the property portal.
We build platforms that scale, integrate with real-world data, and just work. Let's talk about yours.