Move With Musto.
From the home search to the first inquiry.
I designed, built, and maintain Move With Musto for real-estate agent Mai Ly Musto. Buyers can search, save, and compare homes, then send an inquiry with the relevant property details.
- Context
- Client delivery
- Role
- End-to-end product, data-pipeline, and production ownership
- State
- Production client experience
- Listing data
- Versioned listing updates with freshness checks
The context
A home search
buyers can rely on.
Mai Ly Musto needed a site where buyers could explore homes and sellers could learn how to get started. Property search also needed dependable listing updates, clear contact paths, and publishing checks for MLS and brokerage requirements.
Real-estate marks, brokerage affiliation, and MLS data have specific usage rules.
Property inventory is a periodically refreshed snapshot, not a real-time or continuously synchronized feed.
Raw MLS PIN exports, quarantined rows, private ingestion settings, credentials, and geocode caches stay out of public listing assets. Required brokerage and legal disclosures remain public.
Production inquiry delivery must preserve consent, unsubscribe, abuse-control, rate-limit, failure, and delivery handling.
My contribution
From the first screen
to the listing pipeline.
I designed, built, deployed, and maintain the product, from buyer and seller journeys to property search, MLS publishing, cloud delivery, inquiries, and release checks.
- 01
Designed and built responsive pages for buyers and sellers, including property discovery, neighborhood guides, and contact paths.
- 02
Built property search with URL-restorable filters, list/gallery/map modes, saved homes, comparisons, and on-demand details.
- 03
Built the private MLS ingestion and immutable publishing pipeline with freshness, schema, and publication gates.
- 04
Implemented live SES inquiry delivery, GitHub Actions and Amplify deployment, browser verification, and brand-compliance checks.
The decisions
Keep search useful.
Keep data current.
01Keep the home search connected
Buyers can filter listings, switch between list, gallery, and map views, save homes, compare options, and inquire. Filters are stored in the URL so a search can be restored.
02Separate private source data from public listings
Raw exports and review material stay private. Only reviewed, sanitized search and detail assets enter the public site.
03Withhold stale or invalid listings
Build and runtime checks withhold inventory when the listing bundle is missing, malformed, or older than the approved freshness window.
04Check domain rules before release
Brand, legal, and publishing checks are part of the release workflow, alongside tests for property search and inquiry delivery.
05 /The experience
Search, save,
and compare.
Buyers can narrow the search, keep a shortlist, and compare properties before reaching out. This local capture uses fictional listings and AI-generated property photos.
Architecture
From a listing upload
to the search results.
Select a layer to see its responsibility and the components involved.
Private Ingestion
Private MLS PIN exports pass schema validation and geocode enrichment before a generation manifest is prepared.
- MLS PIN export
- Schema validation
- Geocode enrichment
- Generation manifest
Immutable Publication
Validated listings are published as immutable S3 generations, with a compact search index and sanitized on-demand details delivered through CloudFront.
- Compact search index
- Listing detail assets
- S3 generations
- CloudFront pointer
Public Experience
Buyers search, map, save, and compare homes in the Next.js interface. Filters can be restored from the URL, and inquiries carry listing or search context. The app withholds invalid or stale inventory.
- Property search
- Interactive map
- Saved homes + compare
- Buyer/seller journeys
Verification
Freshness gates, transactional email checks, brand rules, GitHub Actions, Amplify deployment, and live-route verification complete the production path.
- Freshness gate
- SES inquiries
- GitHub/Amplify deploy
- Playwright checks
Each accepted MLS upload produces an immutable generation, so publication can be validated and traced before the current pointer advances.
Saved homes, comparisons, and inquiry context connect property discovery to contacting the agent.
Verification
Check the listings.
Test the journey.
The checks cover what a buyer sees, which listings can be published, and whether inquiries reach the agent with the right context.
Brand-compliance check script.
MLS publication guard scripts for import-pending and live modes.
SES inquiry delivery checks and saved-search/listing context coverage.
GitHub Actions production workflow with Amplify deployment and live verification.
Playwright smoke tests for key routes, legal pages, unsubscribe behavior, and responsive UX.
Browser verification of the production property-search workspace.
Supporting material
Immutable MLS publishing
Private MLS inputs produce validated immutable generations; the public site consumes the current compact index and on-demand listing assets through the data origin.
Brand guard
The site lint path runs the REALTOR brand-rule checker before TypeScript so obvious mark misuse fails locally.
Open production site (opens in a new tab)Map/search workflow
The property workspace uses reviewed coordinates first, then browser geocoding fallback only when configured, with a private 30-day geocode cache for import-time enrichment.
Open live property search (opens in a new tab)Production operations
Freshness gates protect inventory, SES delivers inquiries with relevant search context, and GitHub Actions deploys the verified build through Amplify.
08 /What this enables
Buyers can find, save, and compare homes, then send an inquiry with their listing or search context. The live site also supports sellers, while publication and freshness checks keep invalid or stale listing data out of the property experience.
Live site and property search, the MLS publication workflow, SES inquiry delivery, and Playwright checks.
Let's discuss the work