// Real Estate app UI

Real Estate Booking App UI Design in Expo

This real estate app UI is built around the property visit. Buyers search by location, open a listing, choose a day and time, and see the booking in one place.

Screens
3
Built with
Expo SDK 58
Fonts
DM Sans
License
Free (MIT)
Property detail screen with a villa photo, price and visit scheduling

Nestora Real Estate app screens

Real estate app home with search, category tiles and a featured villa

Property home

A greeting, search, category tiles, a featured villa and popular locations above a floating tab bar.

Property detail screen with a villa photo, price and visit scheduling

Property detail

A hero photo, rating, room facts, price, description and a visit scheduler with a confirm bar.

Real estate bookings screen with an upcoming visit and past bookings

My bookings

An upcoming visit card, past bookings and a support card above the tab bar.

Copy the Nestora Real Estate kit

Use the artifact as a design brief, the skill to generate the UI with an AI agent, or the code to run it right away.

Design artifact

The full design: tokens, screens and source

# Nestora Real Estate: design artifact

This real estate app UI is built around the property visit. Buyers search by location, open a listing, choose a day and time, and see the booking in one place.

- Type: Real Estate mobile app UI
- Screens: 3
- Artboard: 390 × 844
- Target: Expo SDK 58, Expo Router, TypeScript, expo-image, react-native-svg
- Live page: https://developermill.com/app-designs/real-estate-booking-app-ui-design

## Design direction

Warm stone backgrounds with a dark olive accent, rounded white controls and luxury property photography.

- Search with buy, rent, short stay and agent tiles
- Featured property card with key facts
- Visit scheduler with dates and time slots
- Upcoming and past bookings

## Foundations

### Colour

| Token | Hex |
| --- | --- |
| Olive black | `#2E3320` |
| Ink | `#1E1E1C` |
| Stone | `#EFEDE9` |
| Paper | `#F7F6F3` |
| Sand | `#E6E3DD` |
| Honey | `#C98A1B` |

### Typography

- Typefaces: DM Sans
- Common sizes (px): 10, 11, 12, 13, 14, 15, 16, 18

### Shape and depth

- Common corner radii (px): 3, 12, 14, 16, 18, 22
- Shadows: `0 6px 24px rgba(30,30,28,0.08)`, `0 -6px 24px rgba(30,30,28,0.06)`

## Screens

### 1. Property home

A greeting, search, category tiles, a featured villa and popular locations above a floating tab bar.

Preview: https://developermill.com/app-designs/real-estate-booking-app-ui-design/home.webp

Copy on this screen:

- NESTORA
- REAL ESTATE
- Hi, Alex!
- Find your perfect place
- Search
- Buy
- Rent
- Short Stay
- Agents
- Featured
- Modern Villa in Beverly Hills
- Beverly Hills, California, USA
- $2,850,000
- 4 Beds
- 5 Baths
- 3,250 sqft
- Popular Locations
- View all
- Miami
- Florida
- New York
- Los Angeles
- California
- Dubai
- UAE
- Home
- Bookings
- Profile

### 2. Property detail

A hero photo, rating, room facts, price, description and a visit scheduler with a confirm bar.

Preview: https://developermill.com/app-designs/real-estate-booking-app-ui-design/listing.webp

Copy on this screen:

- 1/24
- Modern Villa in Beverly Hills
- Beverly Hills, California, USA
- 4.8
- (128 reviews)
- 4 Beds
- 5 Baths
- 3,250 sqft
- 2 Garage
- Price
- $2,850,000
- Book a Visit
- About Property
- Stunning modern villa with premium amenities, spacious interiors, infinity pool and beautiful city views.
- Read more
- Schedule a Visit
- Mon
- 20 May
- Tue
- 21 May
- Wed
- 22 May
- Thu
- 23 May
- Fri
- 24 May
- 10:00 AM
- 12:00 PM
- 02:00 PM
- 04:00 PM
- Total (Visit)
- $0.00
- Confirm Booking

### 3. My bookings

An upcoming visit card, past bookings and a support card above the tab bar.

Preview: https://developermill.com/app-designs/real-estate-booking-app-ui-design/bookings.webp

Copy on this screen:

- My Bookings
- Upcoming
- Modern Villa in
- Beverly Hills
- 21 May 2024, Tue
- 12:00 PM
- View Details
- Past Bookings
- Skyline Apartment
- Downtown
- 10 May 2024
- 11:00 AM
- Oceanview Condo
- Miami Beach
- 2 May 2024
- 03:30 PM
- Need Help?
- Our support team is here to assist you with your queries.
- Contact Support
- Home
- Search
- Bookings
- Profile

## Full source

The original artboards as HTML. Image URLs point at the hosted demo assets.

### Property home (Main)

```html
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Home</title>
<script src="./support.js"></script>
</head>
<body>
<x-dc>
<helmet>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link href="https://fonts.googleapis.com/css2?family=DM+Sans:opsz,wght@9..40,400;9..40,500;9..40,600;9..40,700&amp;display=swap" rel="stylesheet">
<style>
body{margin:0}
a{color:#2E3320}a:hover{color:#1A1D12}
input::placeholder{color:#7A7972}
</style>
</helmet>
<div style="width: 390px; height: 844px; box-sizing: border-box; position: relative; overflow: hidden; background: #EFEDE9; font-family: 'DM Sans', system-ui, sans-serif; color: #1E1E1C; padding: 24px 20px 0">

  <div style="display: flex; align-items: center; gap: 10px">
    <svg width="34" height="30" viewBox="0 0 34 30" fill="none" stroke="#1E1E1C" stroke-width="2.4" stroke-linejoin="round" aria-hidden="true"><path d="M3 14 L17 3 L31 14"/><path d="M7 11 V27 H27 V11"/><path d="M14 27 V18 H20 V27"/></svg>
    <div style="display: flex; flex-direction: column; gap: 1px">
      <span style="font-size: 15px; font-weight: 700; letter-spacing: 2px">NESTORA</span>
      <span style="font-size: 7px; font-weight: 500; letter-spacing: 1.6px; color: #5E5D57">REAL ESTATE</span>
    </div>
  </div>

  <div style="display: flex; align-items: center; justify-content: space-between; margin-top: 18px">
    <div style="display: flex; flex-direction: column; gap: 4px">
      <span style="font-size: 14px; color: #4A4944">Hi, Alex!</span>
      <h1 style="margin: 0; font-size: 20px; font-weight: 600; letter-spacing: -0.2px">Find your perfect place</h1>
    </div>
    <div style="display: flex; align-items: center; gap: 10px">
      <button aria-label="Notifications" style="position: relative; width: 44px; height: 44px; border-radius: 22px; border: none; background: #FFFFFF; display: flex; align-items: center; justify-content: center; cursor: pointer">
        <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#1E1E1C" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M6 8a6 6 0 0 1 12 0c0 7 3 9 3 9H3s3-2 3-9"/><path d="M10.3 21a1.94 1.94 0 0 0 3.4 0"/></svg>
        <span style="position: absolute; top: 9px; right: 10px; width: 8px; height: 8px; border-radius: 4px; background: #2E3320; border: 2px solid #FFFFFF"></span>
      </button>
      <img src="https://developermill.com/app-designs/real-estate-booking-app-ui-design/assets/2a23d578a0.jpg" alt="Alex's profile photo" style="width: 44px; height: 44px; border-radius: 22px; object-fit: cover; display: block">
    </div>
  </div>

  <div style="display: flex; align-items: center; gap: 10px; margin-top: 18px; height: 52px; background: #FFFFFF; border-radius: 26px; padding: 0 6px 0 18px">
    <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="#1E1E1C" stroke-width="2" stroke-linecap="round" aria-hidden="true"><circle cx="11" cy="11" r="7"/><path d="M20 20l-3.5-3.5"/></svg>
    <label for="home-search" style="position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0)">Search</label>
    <input id="home-search" type="search" placeholder="Search location, property or agent" style="flex: 1; min-width: 0; border: none; outline: none; background: transparent; font-family: inherit; font-size: 13px; color: #1E1E1C">
    <span style="width: 1px; height: 24px; background: #E2DFD9"></span>
    <button aria-label="Filters" style="width: 40px; height: 40px; border: none; background: transparent; display: flex; align-items: center; justify-content: center; cursor: pointer">
      <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#1E1E1C" stroke-width="1.8" stroke-linecap="round" aria-hidden="true"><path d="M4 7h10M18 7h2M4 17h4M12 17h8"/><circle cx="16" cy="7" r="2"/><circle cx="10" cy="17" r="2"/></svg>
    </button>
  </div>

  <div style="display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 10px; margin-top: 16px">
    <button style="height: 74px; border: none; border-radius: 18px; background: #2E3320; color: #FFFFFF; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 8px; font-family: inherit; font-size: 12px; font-weight: 500; cursor: pointer">
      <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="#FFFFFF" stroke-width="1.8" stroke-linejoin="round" aria-hidden="true"><path d="M4 10.5 12 4l8 6.5V20H4z"/><path d="M10 20v-5h4v5"/></svg>
      Buy
    </button>
    <button style="height: 74px; border: none; border-radius: 18px; background: #FFFFFF; color: #1E1E1C; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 8px; font-family: inherit; font-size: 12px; font-weight: 500; cursor: pointer">
      <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="#1E1E1C" stroke-width="1.8" stroke-linecap="round" aria-hidden="true"><circle cx="15.5" cy="8.5" r="4.5"/><path d="M12.3 11.7 4 20M7 17l2 2M5.5 18.5l1.5 1.5"/></svg>
      Rent
    </button>
    <button style="height: 74px; border: none; border-radius: 18px; background: #FFFFFF; color: #1E1E1C; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 8px; font-family: inherit; font-size: 12px; font-weight: 500; cursor: pointer">
      <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="#1E1E1C" stroke-width="1.8" stroke-linecap="round" aria-hidden="true"><rect x="4" y="5" width="16" height="15" rx="2.5"/><path d="M4 10h16M9 3v4M15 3v4"/></svg>
      Short Stay
    </button>
    <button style="height: 74px; border: none; border-radius: 18px; background: #FFFFFF; color: #1E1E1C; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 8px; font-family: inherit; font-size: 12px; font-weight: 500; cursor: pointer">
      <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="#1E1E1C" stroke-width="1.8" stroke-linecap="round" aria-hidden="true"><circle cx="12" cy="8" r="4"/><path d="M4 21c1.5-4 4.5-6 8-6s6.5 2 8 6"/></svg>
      Agents
    </button>
  </div>

  <div style="position: relative; margin-top: 16px; height: 212px; border-radius: 22px; overflow: hidden; background: #4B4F43">
    <img src="https://developermill.com/app-designs/real-estate-booking-app-ui-design/assets/d71e442058.jpg" alt="Modern villa at dusk" style="position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; display: block">
    <span style="position: absolute; top: 14px; left: 14px; background: rgba(255,255,255,0.9); color: #1E1E1C; font-size: 10px; font-weight: 500; padding: 4px 9px; border-radius: 10px">Featured</span>
    <button aria-label="Save to favorites" style="position: absolute; top: 10px; right: 10px; width: 36px; height: 36px; border-radius: 18px; border: none; background: #FFFFFF; display: flex; align-items: center; justify-content: center; cursor: pointer">
      <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="#1E1E1C" stroke-width="1.8" stroke-linejoin="round" aria-hidden="true"><path d="M12 20s-7-4.4-7-10a4 4 0 0 1 7-2.6A4 4 0 0 1 19 10c0 5.6-7 10-7 10z"/></svg>
    </button>
    <div style="position: absolute; left: 0; right: 0; bottom: 0; padding: 0 16px 10px; background: rgba(20,22,16,0.55); display: flex; flex-direction: column; gap: 8px; padding-top: 12px">
      <div style="display: flex; align-items: flex-end; justify-content: space-between">
        <div style="display: flex; flex-direction: column; gap: 3px">
          <span style="color: #FFFFFF; font-size: 14px; font-weight: 600">Modern Villa in Beverly Hills</span>
          <span style="color: #E4E3DD; font-size: 11px">Beverly Hills, California, USA</span>
        </div>
        <span style="color: #FFFFFF; font-size: 16px; font-weight: 600">$2,850,000</span>
      </div>
      <div style="height: 1px; background: rgba(255,255,255,0.18)"></div>
      <div style="display: flex; gap: 22px; color: #E4E3DD; font-size: 11px">
        <span style="display: flex; align-items: center; gap: 6px"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="#E4E3DD" stroke-width="1.8" aria-hidden="true"><path d="M3 18V8M21 18v-5H3M7 13V10h5v3"/></svg>4 Beds</span>
        <span style="display: flex; align-items: center; gap: 6px"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="#E4E3DD" stroke-width="1.8" aria-hidden="true"><path d="M4 12h16v3a4 4 0 0 1-4 4H8a4 4 0 0 1-4-4zM6 12V6a2 2 0 0 1 4 0"/></svg>5 Baths</span>
        <span style="display: flex; align-items: center; gap: 6px"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="#E4E3DD" stroke-width="1.8" aria-hidden="true"><rect x="4" y="4" width="16" height="16" rx="1.5"/><path d="M4 9h5V4"/></svg>3,250 sqft</span>
      </div>
      <div style="display: flex; justify-content: center; gap: 5px">
        <span style="width: 6px; height: 6px; border-radius: 3px; background: #FFFFFF"></span>
        <span style="width: 6px; height: 6px; border-radius: 3px; background: rgba(255,255,255,0.4)"></span>
        <span style="width: 6px; height: 6px; border-radius: 3px; background: rgba(255,255,255,0.4)"></span>
        <span style="width: 6px; height: 6px; border-radius: 3px; background: rgba(255,255,255,0.4)"></span>
      </div>
    </div>
  </div>

  <div style="display: flex; align-items: center; justify-content: space-between; margin-top: 20px">
    <h2 style="margin: 0; font-size: 15px; font-weight: 600">Popular Locations</h2>
    <a href="#" style="font-size: 12px; color: #4A4944; text-decoration: none">View all</a>
  </div>

  <div style="display: flex; gap: 10px; margin-top: 12px; margin-right: -20px">
    <div style="position: relative; flex: 0 0 98px; height: 120px; border-radius: 16px; overflow: hidden; background: #5C6B6E">
      <img src="https://developermill.com/app-designs/real-estate-booking-app-ui-design/assets/33e147f9df.jpg" alt="Miami beach at sunset" style="position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; display: block">
      <div aria-hidden="true" style="position: absolute; left: 0; right: 0; bottom: 0; height: 56px; background: rgba(15,15,12,0.45)"></div>
      <div style="position: absolute; left: 10px; bottom: 10px; display: flex; flex-direction: column; gap: 1px"><span style="color: #FFFFFF; font-size: 12px; font-weight: 600">Miami</span><span style="color: #E8EBEB; font-size: 10px">Florida</span></div>
    </div>
    <div style="position: relative; flex: 0 0 98px; height: 120px; border-radius: 16px; overflow: hidden; background: #56606E">
      <img src="https://developermill.com/app-designs/real-estate-booking-app-ui-design/assets/b1276a3ca6.jpg" alt="New York skyline at sunset" style="position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; display: block">
      <div aria-hidden="true" style="position: absolute; left: 0; right: 0; bottom: 0; height: 56px; background: rgba(15,15,12,0.45)"></div>
      <div style="position: absolute; left: 10px; bottom: 10px; display: flex; flex-direction: column; gap: 1px"><span style="color: #FFFFFF; font-size: 12px; font-weight: 600">New York</span><span style="color: #E8EAEE; font-size: 10px">New York</span></div>
    </div>
    <div style="position: relative; flex: 0 0 98px; height: 120px; border-radius: 16px; overflow: hidden; background: #6E5B52">
      <img src="https://developermill.com/app-designs/real-estate-booking-app-ui-design/assets/6ff08f5b7d.jpg" alt="Los Angeles skyline with palm trees" style="position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; display: block">
      <div aria-hidden="true" style="position: absolute; left: 0; right: 0; bottom: 0; height: 56px; background: rgba(15,15,12,0.45)"></div>
      <div style="position: absolute; left: 10px; bottom: 10px; display: flex; flex-direction: column; gap: 1px"><span style="color: #FFFFFF; font-size: 12px; font-weight: 600">Los Angeles</span><span style="color: #F0E9E5; font-size: 10px">California</span></div>
    </div>
    <div style="position: relative; flex: 0 0 98px; height: 120px; border-radius: 16px; overflow: hidden; background: #5A5E6C">
      <img src="https://developermill.com/app-designs/real-estate-booking-app-ui-design/assets/be769bbfd2.jpg" alt="Dubai skyline at blue hour" style="position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; display: block">
      <div aria-hidden="true" style="position: absolute; left: 0; right: 0; bottom: 0; height: 56px; background: rgba(15,15,12,0.45)"></div>
      <div style="position: absolute; left: 10px; bottom: 10px; display: flex; flex-direction: column; gap: 1px"><span style="color: #FFFFFF; font-size: 12px; font-weight: 600">Dubai</span><span style="color: #E9EAEE; font-size: 10px">UAE</span></div>
    </div>
  </div>

  <nav aria-label="Main" style="position: absolute; left: 16px; right: 16px; bottom: 18px; height: 68px; border-radius: 34px; background: #FFFFFF; display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); align-items: center; padding: 0 8px; box-sizing: border-box; box-shadow: 0 6px 24px rgba(30,30,28,0.08)">
    <a href="Main.dc.html" aria-current="page" style="justify-self: center; width: 70px; height: 52px; border-radius: 26px; background: #2E3320; color: #FFFFFF; text-decoration: none; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 4px; font-size: 10px; font-weight: 500">
      <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#FFFFFF" stroke-width="1.8" stroke-linejoin="round" aria-hidden="true"><path d="M4 10.5 12 4l8 6.5V20H4z"/><path d="M10 20v-5h4v5"/></svg>Home</a>
    <a href="#" style="justify-self: center; color: #1E1E1C; text-decoration: none; display: flex; flex-direction: column; align-items: center; gap: 4px; font-size: 10px; padding: 8px">
      <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#1E1E1C" stroke-width="1.8" stroke-linecap="round" aria-hidden="true"><circle cx="11" cy="11" r="7"/><path d="M20 20l-3.5-3.5"/></svg>Search</a>
    <a href="Bookings.dc.html" style="justify-self: center; color: #1E1E1C; text-decoration: none; display: flex; flex-direction: column; align-items: center; gap: 4px; font-size: 10px; padding: 8px">
      <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#1E1E1C" stroke-width="1.8" stroke-linecap="round" aria-hidden="true"><rect x="4" y="5" width="16" height="15" rx="2.5"/><path d="M4 10h16M9 3v4M15 3v4"/></svg>Bookings</a>
    <a href="#" style="justify-self: center; color: #1E1E1C; text-decoration: none; display: flex; flex-direction: column; align-items: center; gap: 4px; font-size: 10px; padding: 8px">
      <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#1E1E1C" stroke-width="1.8" stroke-linecap="round" aria-hidden="true"><circle cx="12" cy="8" r="4"/><path d="M4 21c1.5-4 4.5-6 8-6s6.5 2 8 6"/></svg>Profile</a>
  </nav>
</div>
</x-dc>
<script type="text/x-dc" data-dc-script data-props='{"$preview":{"width":390,"height":844}}'>
class Component extends DCLogic {
  renderVals() {
    return {};
  }
}
</script>
</body>
</html>
```

### Property detail (Detail)

```html
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Property Detail</title>
<script src="./support.js"></script>
</head>
<body>
<x-dc>
<helmet>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link href="https://fonts.googleapis.com/css2?family=DM+Sans:opsz,wght@9..40,400;9..40,500;9..40,600;9..40,700&amp;display=swap" rel="stylesheet">
<style>
body{margin:0}
a{color:#2E3320}a:hover{color:#1A1D12}
</style>
</helmet>
<div style="width: 390px; height: 844px; box-sizing: border-box; position: relative; overflow: hidden; background: #F7F6F3; font-family: 'DM Sans', system-ui, sans-serif; color: #1E1E1C">

  <div style="position: relative; height: 290px; background: #8E9488">
    <img src="https://developermill.com/app-designs/real-estate-booking-app-ui-design/assets/d71e442058.jpg" alt="Modern villa in Beverly Hills at dusk" style="position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; display: block">
    <a href="Main.dc.html" aria-label="Back" style="position: absolute; top: 20px; left: 20px; width: 44px; height: 44px; border-radius: 22px; background: #FFFFFF; display: flex; align-items: center; justify-content: center">
      <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="#1E1E1C" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M19 12H5M11 6l-6 6 6 6"/></svg>
    </a>
    <div style="position: absolute; top: 20px; right: 20px; display: flex; gap: 8px">
      <button aria-label="Share" style="width: 44px; height: 44px; border-radius: 22px; border: none; background: #FFFFFF; display: flex; align-items: center; justify-content: center; cursor: pointer">
        <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="#1E1E1C" stroke-width="1.8" aria-hidden="true"><circle cx="17" cy="5.5" r="2.5"/><circle cx="7" cy="12" r="2.5"/><circle cx="17" cy="18.5" r="2.5"/><path d="M9.2 10.8l5.6-3.9M9.2 13.2l5.6 3.9"/></svg>
      </button>
      <button aria-label="Save to favorites" style="width: 44px; height: 44px; border-radius: 22px; border: none; background: #FFFFFF; display: flex; align-items: center; justify-content: center; cursor: pointer">
        <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="#1E1E1C" stroke-width="1.8" stroke-linejoin="round" aria-hidden="true"><path d="M12 20s-7-4.4-7-10a4 4 0 0 1 7-2.6A4 4 0 0 1 19 10c0 5.6-7 10-7 10z"/></svg>
      </button>
    </div>
    <span style="position: absolute; right: 20px; bottom: 42px; background: rgba(20,22,16,0.6); color: #FFFFFF; font-size: 11px; padding: 4px 10px; border-radius: 10px">1/24</span>
  </div>

  <div style="position: relative; margin-top: -26px; background: #F7F6F3; border-radius: 26px 26px 0 0; padding: 18px 20px 0; display: flex; flex-direction: column; gap: 12px">
    <div style="display: flex; align-items: flex-start; justify-content: space-between; gap: 12px">
      <div style="display: flex; flex-direction: column; gap: 6px">
        <h1 style="margin: 0; font-size: 18px; font-weight: 600">Modern Villa in Beverly Hills</h1>
        <span style="display: flex; align-items: center; gap: 5px; font-size: 12px; color: #55544E"><svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="#55544E" stroke-width="2" aria-hidden="true"><path d="M12 21s-7-6-7-11a7 7 0 0 1 14 0c0 5-7 11-7 11z"/><circle cx="12" cy="10" r="2.5"/></svg>Beverly Hills, California, USA</span>
      </div>
      <div style="background: #FFFFFF; border-radius: 14px; padding: 8px 12px; display: flex; flex-direction: column; align-items: center; gap: 2px">
        <span style="display: flex; align-items: center; gap: 4px; font-size: 16px; font-weight: 600">4.8<svg width="13" height="13" viewBox="0 0 24 24" fill="#C98A1B" aria-hidden="true"><path d="M12 3l2.7 5.6 6.1.9-4.4 4.3 1 6.1L12 17l-5.4 2.9 1-6.1-4.4-4.3 6.1-.9z"/></svg></span>
        <span style="font-size: 9px; color: #6B6A64">(128 reviews)</span>
      </div>
    </div>

    <div style="display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); background: #FFFFFF; border-radius: 16px; padding: 12px 0">
      <div style="display: flex; flex-direction: column; align-items: center; gap: 6px; font-size: 11px; color: #3E3D39"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#1E1E1C" stroke-width="1.7" aria-hidden="true"><path d="M3 18V8M21 18v-5H3M7 13V10h5v3"/></svg>4 Beds</div>
      <div style="display: flex; flex-direction: column; align-items: center; gap: 6px; font-size: 11px; color: #3E3D39; border-left: 1px solid #ECEAE5"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#1E1E1C" stroke-width="1.7" aria-hidden="true"><path d="M4 12h16v3a4 4 0 0 1-4 4H8a4 4 0 0 1-4-4zM6 12V6a2 2 0 0 1 4 0"/></svg>5 Baths</div>
      <div style="display: flex; flex-direction: column; align-items: center; gap: 6px; font-size: 11px; color: #3E3D39; border-left: 1px solid #ECEAE5"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#1E1E1C" stroke-width="1.7" aria-hidden="true"><rect x="4" y="4" width="16" height="16" rx="1.5"/><path d="M4 9h5V4"/></svg>3,250 sqft</div>
      <div style="display: flex; flex-direction: column; align-items: center; gap: 6px; font-size: 11px; color: #3E3D39; border-left: 1px solid #ECEAE5"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#1E1E1C" stroke-width="1.7" stroke-linejoin="round" aria-hidden="true"><path d="M5 16V11l2-5h10l2 5v5zM3 11h18M7 16v2M17 16v2"/><circle cx="8" cy="13.5" r="0.8"/><circle cx="16" cy="13.5" r="0.8"/></svg>2 Garage</div>
    </div>

    <div style="display: flex; align-items: center; justify-content: space-between; padding: 2px 0 10px; border-bottom: 1px solid #E6E4DF">
      <div style="display: flex; flex-direction: column; gap: 2px">
        <span style="font-size: 11px; color: #6B6A64">Price</span>
        <span style="font-size: 22px; font-weight: 600">$2,850,000</span>
      </div>
      <button style="height: 46px; padding: 0 26px; border: none; border-radius: 23px; background: #2E3320; color: #FFFFFF; font-family: inherit; font-size: 13px; font-weight: 500; cursor: pointer">Book a Visit</button>
    </div>

    <div style="display: flex; flex-direction: column; gap: 6px">
      <h2 style="margin: 0; font-size: 14px; font-weight: 600">About Property</h2>
      <p style="margin: 0; font-size: 12px; line-height: 1.5; color: #55544E">Stunning modern villa with premium amenities, spacious interiors, infinity pool and beautiful city views.</p>
      <button style="align-self: center; display: flex; align-items: center; gap: 4px; border: none; background: transparent; font-family: inherit; font-size: 12px; color: #3E3D39; cursor: pointer; padding: 2px 8px">Read more<svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="#3E3D39" stroke-width="2" stroke-linecap="round" aria-hidden="true"><path d="M6 9l6 6 6-6"/></svg></button>
    </div>

    <div style="display: flex; flex-direction: column; gap: 10px">
      <h2 style="margin: 0; font-size: 14px; font-weight: 600">Schedule a Visit</h2>
      <div style="display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 8px">
        <button style="height: 50px; border: none; border-radius: 14px; background: #2E3320; color: #FFFFFF; font-family: inherit; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 2px; cursor: pointer"><span style="font-size: 11px">Mon</span><span style="font-size: 10px">20 May</span></button>
        <button style="height: 50px; border: none; border-radius: 14px; background: #FFFFFF; color: #1E1E1C; font-family: inherit; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 2px; cursor: pointer"><span style="font-size: 11px">Tue</span><span style="font-size: 10px; color: #55544E">21 May</span></button>
        <button style="height: 50px; border: none; border-radius: 14px; background: #FFFFFF; color: #1E1E1C; font-family: inherit; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 2px; cursor: pointer"><span style="font-size: 11px">Wed</span><span style="font-size: 10px; color: #55544E">22 May</span></button>
        <button style="height: 50px; border: none; border-radius: 14px; background: #FFFFFF; color: #1E1E1C; font-family: inherit; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 2px; cursor: pointer"><span style="font-size: 11px">Thu</span><span style="font-size: 10px; color: #55544E">23 May</span></button>
        <button style="height: 50px; border: none; border-radius: 14px; background: #FFFFFF; color: #1E1E1C; font-family: inherit; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 2px; cursor: pointer"><span style="font-size: 11px">Fri</span><span style="font-size: 10px; color: #55544E">24 May</span></button>
      </div>
      <div style="display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 8px">
        <button style="height: 36px; border: none; border-radius: 12px; background: #FFFFFF; color: #1E1E1C; font-family: inherit; font-size: 11px; cursor: pointer">10:00 AM</button>
        <button style="height: 36px; border: none; border-radius: 12px; background: #2E3320; color: #FFFFFF; font-family: inherit; font-size: 11px; cursor: pointer">12:00 PM</button>
        <button style="height: 36px; border: none; border-radius: 12px; background: #FFFFFF; color: #1E1E1C; font-family: inherit; font-size: 11px; cursor: pointer">02:00 PM</button>
        <button style="height: 36px; border: none; border-radius: 12px; background: #FFFFFF; color: #1E1E1C; font-family: inherit; font-size: 11px; cursor: pointer">04:00 PM</button>
      </div>
    </div>
  </div>

  <div style="position: absolute; left: 0; right: 0; bottom: 0; height: 78px; background: #FFFFFF; border-radius: 24px 24px 0 0; box-shadow: 0 -6px 24px rgba(30,30,28,0.06); display: flex; align-items: center; justify-content: space-between; padding: 0 20px; box-sizing: border-box">
    <div style="display: flex; flex-direction: column; gap: 2px">
      <span style="font-size: 11px; color: #6B6A64">Total (Visit)</span>
      <span style="font-size: 18px; font-weight: 600">$0.00</span>
    </div>
    <a href="Bookings.dc.html" style="height: 50px; width: 210px; border-radius: 25px; background: #2E3320; color: #FFFFFF; text-decoration: none; display: flex; align-items: center; justify-content: center; gap: 28px; font-size: 13px; font-weight: 500">Confirm Booking<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="#FFFFFF" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12h14M13 6l6 6-6 6"/></svg></a>
  </div>
</div>
</x-dc>
<script type="text/x-dc" data-dc-script data-props='{"$preview":{"width":390,"height":844}}'>
class Component extends DCLogic {
  renderVals() {
    return {};
  }
}
</script>
</body>
</html>
```

### My bookings (Bookings)

```html
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>My Bookings</title>
<script src="./support.js"></script>
</head>
<body>
<x-dc>
<helmet>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link href="https://fonts.googleapis.com/css2?family=DM+Sans:opsz,wght@9..40,400;9..40,500;9..40,600;9..40,700&amp;display=swap" rel="stylesheet">
<style>
body{margin:0}
a{color:#2E3320}a:hover{color:#1A1D12}
</style>
</helmet>
<div style="width: 390px; height: 844px; box-sizing: border-box; position: relative; overflow: hidden; background: #EFEDE9; font-family: 'DM Sans', system-ui, sans-serif; color: #1E1E1C; padding: 24px 20px 0">

  <div style="display: flex; align-items: center; justify-content: space-between">
    <a href="Main.dc.html" aria-label="Back" style="width: 44px; height: 44px; border-radius: 22px; background: #FFFFFF; display: flex; align-items: center; justify-content: center">
      <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="#1E1E1C" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M19 12H5M11 6l-6 6 6 6"/></svg>
    </a>
    <div style="display: flex; align-items: center; gap: 10px">
      <button aria-label="More options" style="width: 44px; height: 44px; border-radius: 22px; border: none; background: #FFFFFF; display: flex; align-items: center; justify-content: center; cursor: pointer">
        <svg width="18" height="18" viewBox="0 0 24 24" fill="#1E1E1C" aria-hidden="true"><circle cx="5" cy="12" r="1.8"/><circle cx="12" cy="12" r="1.8"/><circle cx="19" cy="12" r="1.8"/></svg>
      </button>
      <img src="https://developermill.com/app-designs/real-estate-booking-app-ui-design/assets/2a23d578a0.jpg" alt="Alex's profile photo" style="width: 44px; height: 44px; border-radius: 22px; object-fit: cover; display: block">
    </div>
  </div>

  <h1 style="margin: 22px 0 0; font-size: 20px; font-weight: 600">My Bookings</h1>
  <h2 style="margin: 16px 0 10px; font-size: 14px; font-weight: 600">Upcoming</h2>

  <div style="background: #FFFFFF; border-radius: 22px; padding: 10px; display: flex; gap: 14px">
    <img src="https://developermill.com/app-designs/real-estate-booking-app-ui-design/assets/d71e442058.jpg" alt="Modern villa in Beverly Hills" style="flex: 0 0 120px; width: 120px; height: 140px; border-radius: 16px; object-fit: cover; display: block">
    <div style="flex: 1; display: flex; flex-direction: column; padding: 4px 4px 4px 0">
      <span style="align-self: flex-end; background: #F2EBDD; color: #6B4E17; font-size: 10px; font-weight: 500; padding: 4px 9px; border-radius: 10px">Upcoming</span>
      <span style="margin-top: 6px; font-size: 15px; font-weight: 600; line-height: 1.3">Modern Villa in<br>Beverly Hills</span>
      <span style="margin-top: 10px; display: flex; align-items: center; gap: 6px; font-size: 11px; color: #4A4944"><svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="#4A4944" stroke-width="1.8" aria-hidden="true"><rect x="4" y="5" width="16" height="15" rx="2.5"/><path d="M4 10h16M9 3v4M15 3v4"/></svg>21 May 2024, Tue</span>
      <span style="margin-top: 6px; display: flex; align-items: center; gap: 6px; font-size: 11px; color: #4A4944"><svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="#4A4944" stroke-width="1.8" stroke-linecap="round" aria-hidden="true"><circle cx="12" cy="12" r="8"/><path d="M12 8v4l3 2"/></svg>12:00 PM</span>
      <a href="Detail.dc.html" style="margin-top: auto; align-self: flex-end; display: flex; align-items: center; gap: 6px; font-size: 11px; color: #1E1E1C; text-decoration: none; padding: 6px 0">View Details<svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="#1E1E1C" stroke-width="2" stroke-linecap="round" aria-hidden="true"><path d="M9 6l6 6-6 6"/></svg></a>
    </div>
  </div>

  <h2 style="margin: 18px 0 10px; font-size: 14px; font-weight: 600">Past Bookings</h2>

  <div style="background: #FFFFFF; border-radius: 22px; padding: 10px; display: flex; flex-direction: column; gap: 10px">
    <a href="#" style="display: flex; align-items: center; gap: 12px; text-decoration: none; color: #1E1E1C">
      <img src="https://developermill.com/app-designs/real-estate-booking-app-ui-design/assets/5ff587b5b5.jpg" alt="Skyline Apartment living room" style="flex: 0 0 80px; width: 80px; height: 64px; border-radius: 12px; object-fit: cover; display: block">
      <div style="flex: 1; display: flex; flex-direction: column; gap: 4px">
        <span style="font-size: 12px; font-weight: 600; line-height: 1.3">Skyline Apartment<br>Downtown</span>
        <span style="display: flex; align-items: center; gap: 6px; font-size: 10px; color: #4A4944"><svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="#4A4944" stroke-width="1.8" aria-hidden="true"><rect x="4" y="5" width="16" height="15" rx="2.5"/><path d="M4 10h16M9 3v4M15 3v4"/></svg>10 May 2024</span>
        <span style="display: flex; align-items: center; gap: 6px; font-size: 10px; color: #4A4944"><svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="#4A4944" stroke-width="1.8" stroke-linecap="round" aria-hidden="true"><circle cx="12" cy="12" r="8"/><path d="M12 8v4l3 2"/></svg>11:00 AM</span>
      </div>
      <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="#1E1E1C" stroke-width="2" stroke-linecap="round" aria-hidden="true"><path d="M9 6l6 6-6 6"/></svg>
    </a>
    <div style="height: 1px; background: #EFEDE9"></div>
    <a href="#" style="display: flex; align-items: center; gap: 12px; text-decoration: none; color: #1E1E1C">
      <img src="https://developermill.com/app-designs/real-estate-booking-app-ui-design/assets/80d0942b48.jpg" alt="Oceanview Condo pool and beach" style="flex: 0 0 80px; width: 80px; height: 64px; border-radius: 12px; object-fit: cover; display: block">
      <div style="flex: 1; display: flex; flex-direction: column; gap: 4px">
        <span style="font-size: 12px; font-weight: 600; line-height: 1.3">Oceanview Condo<br>Miami Beach</span>
        <span style="display: flex; align-items: center; gap: 6px; font-size: 10px; color: #4A4944"><svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="#4A4944" stroke-width="1.8" aria-hidden="true"><rect x="4" y="5" width="16" height="15" rx="2.5"/><path d="M4 10h16M9 3v4M15 3v4"/></svg>2 May 2024</span>
        <span style="display: flex; align-items: center; gap: 6px; font-size: 10px; color: #4A4944"><svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="#4A4944" stroke-width="1.8" stroke-linecap="round" aria-hidden="true"><circle cx="12" cy="12" r="8"/><path d="M12 8v4l3 2"/></svg>03:30 PM</span>
      </div>
      <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="#1E1E1C" stroke-width="2" stroke-linecap="round" aria-hidden="true"><path d="M9 6l6 6-6 6"/></svg>
    </a>
  </div>

  <div style="margin-top: 14px; background: #E6E3DD; border-radius: 22px; padding: 16px; display: flex; align-items: center; justify-content: space-between; gap: 12px">
    <div style="display: flex; flex-direction: column; gap: 6px">
      <span style="font-size: 13px; font-weight: 600">Need Help?</span>
      <span style="font-size: 10px; line-height: 1.45; color: #4A4944; max-width: 180px">Our support team is here to assist you with your queries.</span>
      <button style="align-self: flex-start; margin-top: 4px; height: 30px; padding: 0 12px; border: 1px solid #CFCBC3; border-radius: 15px; background: #FFFFFF; font-family: inherit; font-size: 10px; color: #1E1E1C; cursor: pointer">Contact Support</button>
    </div>
    <div aria-hidden="true" style="width: 60px; height: 60px; border-radius: 18px; background: #FFFFFF; display: flex; align-items: center; justify-content: center">
      <svg width="26" height="26" viewBox="0 0 24 24" fill="none" stroke="#1E1E1C" stroke-width="1.7" stroke-linecap="round" aria-hidden="true"><path d="M4 14v-2a8 8 0 0 1 16 0v2"/><rect x="3" y="13" width="4" height="6" rx="1.5"/><rect x="17" y="13" width="4" height="6" rx="1.5"/><path d="M19 19c0 1.5-2 2.5-5 2.5"/></svg>
    </div>
  </div>

  <nav aria-label="Main" style="position: absolute; left: 16px; right: 16px; bottom: 18px; height: 68px; border-radius: 34px; background: #FFFFFF; display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); align-items: center; padding: 0 8px; box-sizing: border-box; box-shadow: 0 6px 24px rgba(30,30,28,0.08)">
    <a href="Main.dc.html" style="justify-self: center; color: #1E1E1C; text-decoration: none; display: flex; flex-direction: column; align-items: center; gap: 4px; font-size: 10px; padding: 8px">
      <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#1E1E1C" stroke-width="1.8" stroke-linejoin="round" aria-hidden="true"><path d="M4 10.5 12 4l8 6.5V20H4z"/><path d="M10 20v-5h4v5"/></svg>Home</a>
    <a href="#" style="justify-self: center; color: #1E1E1C; text-decoration: none; display: flex; flex-direction: column; align-items: center; gap: 4px; font-size: 10px; padding: 8px">
      <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#1E1E1C" stroke-width="1.8" stroke-linecap="round" aria-hidden="true"><circle cx="11" cy="11" r="7"/><path d="M20 20l-3.5-3.5"/></svg>Search</a>
    <a href="Bookings.dc.html" aria-current="page" style="justify-self: center; width: 78px; height: 52px; border-radius: 26px; background: #2E3320; color: #FFFFFF; text-decoration: none; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 4px; font-size: 10px; font-weight: 500">
      <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#FFFFFF" stroke-width="1.8" stroke-linecap="round" aria-hidden="true"><rect x="4" y="5" width="16" height="15" rx="2.5"/><path d="M4 10h16M9 3v4M15 3v4"/></svg>Bookings</a>
    <a href="#" style="justify-self: center; color: #1E1E1C; text-decoration: none; display: flex; flex-direction: column; align-items: center; gap: 4px; font-size: 10px; padding: 8px">
      <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#1E1E1C" stroke-width="1.8" stroke-linecap="round" aria-hidden="true"><circle cx="12" cy="8" r="4"/><path d="M4 21c1.5-4 4.5-6 8-6s6.5 2 8 6"/></svg>Profile</a>
  </nav>
</div>
</x-dc>
<script type="text/x-dc" data-dc-script data-props='{"$preview":{"width":390,"height":844}}'>
class Component extends DCLogic {
  renderVals() {
    return {};
  }
}
</script>
</body>
</html>
```

SKILL.md

Save as .claude/skills/real-estate-booking-app-ui/SKILL.md

---
name: real-estate-booking-app-ui
description: Build the Nestora Real Estate mobile app UI in Expo React Native. Use when asked to create a real estate app UI or a new screen in this visual style.
---

# Nestora Real Estate app UI

Build this real estate app UI in an Expo Router project with TypeScript.

Reference: https://developermill.com/app-designs/real-estate-booking-app-ui-design

## Visual direction

Warm stone backgrounds with a dark olive accent, rounded white controls and luxury property photography.

Keep these signature details:

- Search with buy, rent, short stay and agent tiles
- Featured property card with key facts
- Visit scheduler with dates and time slots
- Upcoming and past bookings

## Set up

```bash
npx expo install expo-image react-native-svg @expo-google-fonts/dm-sans expo-font
```

## Tokens

| Name | Hex |
| --- | --- |
| Olive black | `#2E3320` |
| Ink | `#1E1E1C` |
| Stone | `#EFEDE9` |
| Paper | `#F7F6F3` |
| Sand | `#E6E3DD` |
| Honey | `#C98A1B` |

- Typefaces: DM Sans
- Text sizes (px): 10, 11, 12, 13, 14, 15, 16, 18
- Corner radii (px): 3, 12, 14, 16, 18, 22

Define these once and reuse them. Do not add new colours.

## Screens

1. **Property home.** A greeting, search, category tiles, a featured villa and popular locations above a floating tab bar.
2. **Property detail.** A hero photo, rating, room facts, price, description and a visit scheduler with a confirm bar.
3. **My bookings.** An upcoming visit card, past bookings and a support card above the tab bar.

## Build rules

- Draw each screen on a 390 × 844 artboard and scale it to the device width.
- Load each custom font weight by family name with expo-font. Do not set fontWeight with custom fonts.
- Draw icons, charts and illustrations with react-native-svg.
- Use Pressable with an accessibilityLabel for controls, with at least a 44px target.
- Navigate with router.navigate and keep sample data as constants at the top of the file.
- Use expo-image with contentFit for photos.

## Done when

- All routes are linked and reachable.
- Colours, type and radii match the tokens above.
- `npx tsc --noEmit` and `npx expo lint` pass.
- The layout holds up on small and large phones.

Set up the project

npx create-expo-app@latest real-estate-booking-app --template default
cd real-estate-booking-app
rm -rf src
npx expo install expo-image react-native-svg @expo-google-fonts/dm-sans expo-font

src/app/_layout.tsx

import {
  DMSans_400Regular,
  DMSans_500Medium,
  DMSans_600SemiBold,
  DMSans_700Bold,
} from '@expo-google-fonts/dm-sans';
import { useFonts } from 'expo-font';
import { Stack } from 'expo-router';

export default function RootLayout() {
  const [fontsLoaded] = useFonts({
    DMSans_400Regular,
    DMSans_500Medium,
    DMSans_600SemiBold,
    DMSans_700Bold,
  });

  if (!fontsLoaded) return null;

  return <Stack screenOptions={{ headerShown: false }} />;
}

About this design

Stone and olive tones keep it calm and premium, so the villa photos do the selling. Category tiles for buy, rent, short stay and agents make it suitable for brokers and rental marketplaces.

Warm stone backgrounds with a dark olive accent, rounded white controls and luxury property photography.

  • Search with buy, rent, short stay and agent tiles
  • Featured property card with key facts
  • Visit scheduler with dates and time slots
  • Upcoming and past bookings

Colour palette

  • Olive black

    #2E3320

  • Ink

    #1E1E1C

  • Stone

    #EFEDE9

  • Paper

    #F7F6F3

  • Sand

    #E6E3DD

  • Honey

    #C98A1B

How to use this design

  1. 01

    Pick what to copy

    Copy the Nestora Real Estate artifact, skill or code from this page.

  2. 02

    Run it or generate it

    Paste the code into a new Expo app and start it, or give the skill to your AI coding agent.

  3. 03

    Make it yours

    Replace the demo images and sample content, then connect your own data.

Frequently asked questions

Can I book a visit in the design?

The date and time chips show the scheduling pattern with a selected state in the design. Add state and your booking API to make them live.

Can it be used for rentals?

Yes. The Rent and Short Stay tiles are already part of the home screen, and the price label is plain text.

How do I add a map?

Add react-native-maps to a new tab and reuse the property card as a map preview.

Is the Nestora Real Estate design free to use?

Yes. The design, skill and Expo code are free and MIT licensed, including for commercial apps. Replace the demo images and sample content with your own before you ship.

What is the difference between the artifact, skill and code?

The artifact is the full design: tokens, screens and source. The skill is a SKILL.md that teaches an AI coding agent to build the UI. The code is the finished Expo app you can paste in and run.

Which Expo version does the code use?

It targets Expo SDK 58 with Expo Router and TypeScript. It uses packages installed through npx expo install, with no custom native code.

More app UI designs