Dillon Haffner — Realtor® & Product Engineer

I don't just sell homes. I build real apps and ship them to real people.

Licensed real estate agent by day. The rest of the time I design and ship software solo — a community app that's live on the App Store and Google Play, a native CRM, and full-stack web platforms — with an AI-assisted build process standing in for a team.

$
Scroll
0platforms — the same community app, native on iOS and Android
0official Canyon Lake amenities, each mapped from a verified address
0community calendar events — searchable by day, updated without a new build
0scraped photos or invented facts — every asset original, licensed, or sourced

Under the hood

What I actually work with

Not a buzzword list — this is the stack behind the work below, plus the process that keeps a solo build honest.

Native Apple Platforms

  • SwiftUI across iPhone, iPad & Mac from one codebase
  • Real Liquid Glass (.glassEffect()), not a web imitation
  • SwiftData + CloudKit sync so a lost device doesn't lose data
  • Adaptive layouts that hold up from phone to iPad to a foldable

Android — the Same App

  • Kotlin + Jetpack Compose, mirroring the iOS app screen for screen
  • Jetpack Compose + Google Maps for the interactive amenity map
  • Window size classes for tablet and foldable layouts
  • Feature parity kept in lockstep with the iOS releases

Web & Backend

  • React + Vite single-page apps, deployed on Netlify
  • Supabase — Postgres, Auth, and Row-Level Security policies
  • Passkeys and TOTP 2FA hardening for real client logins
  • Privacy-consent gates for data multiple users can see

Shipping & Operating

  • Through App Store & Play review — including a rejection and a successful appeal
  • A system I built to push new content and toggle features without an app update
  • Advertising, privacy & impersonation rules handled deliberately
  • Every release verified against real production data first

Selected work

Three things I've shipped

One community app running on two platforms, one CRM rebuilt from scratch, one client platform hardened for launch day.

Canyon Lake Passport on iPad and iPhone — the Field Guide home, the interactive amenity map, and the amenities list
The same Canyon Lake Passport app on a Pixel Android phone, showing an identical Field Guide home screen
Same app, Android — live on Google Play

Live on the App Store · Google Play

Canyon Lake Passport app icon Native iOS + Android · SwiftUI · Kotlin / Compose

Canyon Lake Passport — a whole community's app, on both platforms

A native app for Canyon Lake, a private lake community: an interactive map of all 29 official amenities, a searchable calendar of hundreds of community events, a check-in “passport” you stamp by showing up in person, and a civic-info section for POA and city updates. It's live on the App Store — it went through review, took one rejection, and came back approved on appeal with reviewer notes and a screen recording — and the Android version is a screen-for-screen port, also live on Google Play.

Since launch I've kept operating it like a product: a universal layout that adapts from iPhone to iPad to a foldable, a system I built to push fresh calendar data and flip seasonal features on and off without waiting on an app update, and a paid-placement listings feed for other agents with the advertising disclosures built into every card. Even the lake outline in the icon and splash is the real shoreline, traced from open geographic data rather than drawn by eye.

SwiftUIKotlinJetpack ComposeMapKit / Compose MapsCloudKitCoreLocation
Dashboard
Good afternoon
4 things need your attention
Follow-ups, birthdays & touchpoints
18Contacts
3This week
2Active deals

↑ that's the real Theme Customizer's accent picker — try it

Native · SwiftUI · iOS / iPadOS / macOS

SBH CRM — my own CRM, rebuilt native

My real estate CRM started as a web app with faked, expensive glass effects, so I rebuilt it natively in SwiftUI for real Liquid Glass — one codebase on iPhone, iPad, and Mac. Six tabs, full CRUD across five live Supabase tables, a Google-Maps route planner, and a Theme Customizer with ten wallpapers and the live accent picker on the left. Every screen was clicked through against my real production data — that's how a dashboard contrast bug and a duplicate back-button bug got caught early.

SwiftUISupabaseXcodeGenLiquid GlassCross-platform

New Lead

Initial consultBooked · Thu
Proposal requestAwaiting reply

In Progress

Site visitScheduled tomorrow
Full estimateQuote sent

Complete

Contract signedSigned off
Final walkthroughFollow-up sent
72%Win rate this quarter

Illustrative data — a real client's pipeline runs here

Web · React · Supabase · Netlify

A client web platform — hardened for launch

A web platform for a small sales team — React + Vite, Supabase (Postgres, Auth, Row-Level Security), Netlify, in a warm cream palette by their preference. Before launch I ran a full audit: fixed a foreign-key bug on deal creation, corrected overdue-date math for deals with no due date, resolved a chart overflow, and hardened the passkey and beta-invite paths. Added a timestamped privacy-consent gate, and held passkeys back from the beta on purpose — a passkey's relying-party ID is permanent once enrolled, and the final domain wasn't live yet.

ReactViteSupabase RLSNetlifyPasskeys / TOTP

Process

How it actually gets built

There's no Xcode GUI or dev team here — just a terminal, a simulator and an emulator, and a habit of never shipping a guess.

$

Geocode, don't guess

An early amenity map used hand-estimated coordinates and smeared into lines that didn't match real streets. Every address now runs through a real geocoder before it ships.

Research, don't invent

Hours, phone numbers, event venues, "did you know" facts — all pulled from real sources in parallel research passes, not generated copy dressed up to look sourced.

Ship, then operate

Launch isn't the finish line. New content, remote feature toggles, review appeals, and cross-platform parity are all part of keeping a shipped app healthy.

Build history

What shipped recently

Jul 2026

SBH CRM goes native

The web CRM is rebuilt in SwiftUI for real Liquid Glass and runs on iPhone, iPad, and Mac against live production data.

Jul 2026

First passport app: Temecula Wine Passport

A GPS check-in app for 45 researched, geocoded wineries — the framework Canyon Lake Passport was later built from.

Aug 2026

Canyon Lake Passport submitted

The iPhone and iPad build goes to App Store review, with reviewer notes for its location-gated check-in.

Aug 2026

Rejected, appealed, approved

One rejection answered with review notes and a screen recording. The app is approved and goes live on the App Store.

Aug 2026

Adaptive layout + live community calendar

A universal iPhone-to-iPad layout with foldable readiness, plus a calendar of 500+ events that updates without an app release.

Aug 2026

Seasonal map + Android parity

A holiday map layer that switches on for its dates remotely; the Android port reaches feature parity and enters closed testing.

Aug 2026

Paid listings feed

A redesigned “Moving?” section adds a paid-placement listings feed for other agents, with advertising disclosures built into every card.

Sep 2026

Civic-info section + “happening near you”

A factual, unaffiliated POA/city information corner, and an opt-in card that surfaces an event when you're near the venue.

Sep 2026

Android goes live

Through Play review and out of closed testing — Canyon Lake Passport is live on Google Play, feature-parallel with the App Store build.

Sep 2026

This page

Rebuilt around Canyon Lake Passport — same process as everything above it.

Full circle

Same rigor. Different client.

I hang my license with Coldwell Banker Associated Brokers Realty, a top-producing brokerage serving Temecula Valley and North County San Diego since 1983 — five-star reviews, straight answers, fast replies. The interactive market map and 3D property tour on my main site were built with the exact same care as everything above.

See the real estate side →