// Travel app UI

Trip Planner App UI Design in Expo

This trip planner app UI reads like a travel magazine at night. Serif italics and small monospaced labels turn destination cards and itineraries into something worth browsing.

Screens
3
Built with
Expo SDK 58
Fonts
Inter, Instrument Serif, JetBrains Mono
License
Free (MIT)
Dark travel app home with destination search and a featured trip card

Trip Manager app screens

Dark travel app home with destination search and a featured trip card

Discover

A serif welcome, AI search, category chips, a large editor's pack card and trending destinations.

Dark travel map screen with round photo pins and nearby place cards

Map view

A dark map with photo pins and labels, glass search and filter controls, and a nearby places shelf.

Trip details screen with photos, trip status and an itinerary log

Trip details

A photo strip, trip status and duration, a local tip and a day-by-day trip log.

Copy the Trip Manager 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

# Trip Manager: design artifact

This trip planner app UI reads like a travel magazine at night. Serif italics and small monospaced labels turn destination cards and itineraries into something worth browsing.

- Type: Travel mobile app UI
- Screens: 3
- Artboard: 390 × 844
- Target: Expo SDK 58, Expo Router, TypeScript, expo-blur, expo-image, expo-linear-gradient, react-native-svg
- Live page: https://developermill.com/app-designs/trip-planner-app-ui-design

## Design direction

Blue-black night mode with an electric blue accent, editorial serif italics, monospaced labels and glass controls over photography.

- Search bar with an AI mode button
- Dark map with round photo pins
- Nearby place cards in a bottom shelf
- Trip log with status, tips and timeline

## Foundations

### Colour

| Token | Hex |
| --- | --- |
| Night | `#06070A` |
| Carbon | `#101218` |
| Electric blue | `#3D6BFF` |
| Sky | `#7FA2FF` |
| Fog | `#D5D8DE` |
| Pewter | `#9AA0AB` |

### Typography

- Typefaces: Inter, Instrument Serif, JetBrains Mono
- Common sizes (px): 9, 10, 11, 12, 13, 14, 22, 26

### Shape and depth

- Common corner radii (px): 8, 9, 10, 14, 19, 20
- Shadows: `inset 0 1px 0 rgba(255,255,255,.45), inset 0 -3px 8px rgba(10,25,90,.35), 0 6px 18px rgba(61,107,255,.45)`, `0 0 0 2px #3D6BFF, 0 0 0 4px #06070A`, `0 6px 16px rgba(0,0,0,.6)`, `0 0 0 2px #F3F4F6`

## Screens

### 1. Discover

A serif welcome, AI search, category chips, a large editor's pack card and trending destinations.

Preview: https://developermill.com/app-designs/trip-planner-app-ui-design/discover.webp

Copy on this screen:

- My Location
- Munnar, Idukki
- WELCOME BACK
- Where shall we
- wander,
- Aarav?
- AI Mode
- All
- Mountains
- Coastal
- Heritage
- Forest
- EDITOR'S PACK
- FAROE ISLANDS — ATLANTIC
- Saksun Village
- 49.21k
- 3 days
- $ From 1,240
- Trending
- now
- VIEW ALL →
- HERITAGE
- COASTAL
- Discover

### 2. Map view

A dark map with photo pins and labels, glass search and filter controls, and a nearby places shelf.

Preview: https://developermill.com/app-designs/trip-planner-app-ui-design/map.webp

Copy on this screen:

- KYLES ROAD
- Samos
- Naxos
- Paros
- Mykonos
- Rhodes
- Santorini
- Izmir
- Bodrum castle
- Alaçatı Bays
- Çeşme
- AI Mode
- All Places
- Scenic
- Hotels
- Stays
- Nearby
- finds
- 12 PLACES
- CLIFFSIDE
- ★ 4.9
- ◷ 2.4km
- Oia Village
- SUNSET SPOT
- ★ 4.7
- ◷ 6.1km
- Mykonos Town

### 3. Trip details

A photo strip, trip status and duration, a local tip and a day-by-day trip log.

Preview: https://developermill.com/app-designs/trip-planner-app-ui-design/trip.webp

Copy on this screen:

- Greece
- TRIP / AEGEAN COAST
- Map
- 24°C
- Oia Village
- Greece, Santorini
- 26 spots
- 8 types
- Trip Status
- Active
- Duration
- 4 days left
- Accommodation
- [Hotel name]
- More info
- Visit
- Akrotiri
- before 10 AM for a peaceful atmosphere and golden, crowd-free light.
- Trip
- log
- 5 PLACES
- 1
- Blue Dome Church
- 10:30 AM
- DAY 02
- Open Itinerary
- Trip Plan

## Full source

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

### Discover (Main)

```html
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Discover</title>
<script src="./support.js"></script>
</head>
<body>
<x-dc>
<helmet>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Instrument+Serif:ital@0;1&amp;family=Inter:wght@400;500;600&amp;family=JetBrains+Mono:wght@400;500&amp;display=swap">
<style>
body{margin:0;background:#06070A}
a{color:#7FA2FF}a:hover{color:#A9C0FF}
.ph{background-color:#151821;background-image:repeating-linear-gradient(135deg,rgba(255,255,255,.035) 0 10px,transparent 10px 20px);display:flex;align-items:center;justify-content:center;text-align:center}
.phl{font-family:'JetBrains Mono',monospace;font-size:9px;letter-spacing:.06em;color:#6B7180;text-transform:uppercase;padding:0 12px;line-height:1.5}
.glass{background:rgba(255,255,255,.07);border:1px solid rgba(255,255,255,.12)}
.mono{font-family:'JetBrains Mono',monospace}
.serif{font-family:'Instrument Serif',serif}
button{font:inherit;color:inherit;cursor:pointer}
</style>
</helmet>
<div style="width: 390px; height: 844px; position: relative; overflow: hidden; background: #06070A; color: #F3F4F6; font-family: Inter, system-ui, sans-serif; box-sizing: border-box; padding: 58px 0 0">

<div style="display: flex; align-items: center; justify-content: space-between; padding: 0 22px">
<div style="display: flex; align-items: center; gap: 12px">
<img src="https://developermill.com/app-designs/trip-planner-app-ui-design/assets/f3e802a37f.jpg" alt="Profile photo" style="width: 46px; height: 46px; border-radius: 50%; object-fit: cover; box-shadow: 0 0 0 2px #3D6BFF, 0 0 0 4px #06070A">
<div style="display: flex; flex-direction: column; gap: 3px">
<span style="font-size: 12px; color: #9AA0AB; display: flex; align-items: center; gap: 4px">My Location <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="#9AA0AB" stroke-width="2" aria-hidden="true"><path d="m6 9 6 6 6-6"/></svg></span>
<span style="font-size: 15px; font-weight: 600; display: flex; align-items: center; gap: 6px"><svg width="14" height="14" viewBox="0 0 24 24" fill="#F3F4F6" aria-hidden="true"><path d="M3 11 21 3l-8 18-2-8z"/></svg>Munnar, Idukki</span>
</div>
</div>
<button class="glass" aria-label="Notifications" style="width: 46px; height: 46px; border-radius: 50%; display: flex; align-items: center; justify-content: center; padding: 0; position: relative"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#F3F4F6" stroke-width="1.8" aria-hidden="true"><path d="M6 8a6 6 0 1 1 12 0c0 7 3 9 3 9H3s3-2 3-9"/><path d="M10.3 21a1.9 1.9 0 0 0 3.4 0"/></svg><span style="position: absolute; top: 11px; right: 12px; width: 7px; height: 7px; border-radius: 50%; background: #3D6BFF"></span></button>
</div>

<div style="padding: 26px 22px 0">
<div class="mono" style="font-size: 10px; letter-spacing: .14em; color: #8A909B; display: flex; align-items: center; gap: 8px"><span style="width: 18px; height: 1px; background: #8A909B"></span>WELCOME BACK</div>
<h1 class="serif" style="margin: 8px 0 0; font-weight: 400; font-size: 36px; line-height: 1.08; letter-spacing: -.01em">Where shall we <em style="color: #6F95FF">wander,</em><br>Aarav?</h1>
</div>

<div style="padding: 22px 22px 0">
<label class="glass" style="height: 54px; border-radius: 27px; display: flex; align-items: center; gap: 10px; padding: 0 6px 0 18px; box-sizing: border-box">
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="#9AA0AB" stroke-width="2" aria-hidden="true"><circle cx="11" cy="11" r="7"/><path d="m20 20-3.5-3.5"/></svg>
<input type="text" placeholder="Search destinations, cities…" aria-label="Search destinations" style="flex: 1; min-width: 0; background: transparent; border: 0; outline: none; color: #F3F4F6; font: 14px Inter, sans-serif">
<button style="height: 42px; padding: 0 14px; border-radius: 21px; background: rgba(61,107,255,.14); border: 1px solid rgba(111,149,255,.55); display: flex; align-items: center; gap: 6px; font-size: 13px; font-weight: 500"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="#F3F4F6" stroke-width="1.8" aria-hidden="true"><path d="m4 20 10-10M15 4v3M13.5 5.5h3M19 9v2M18 10h2M9 3v2M8 4h2"/></svg>AI Mode</button>
</label>
</div>

<div style="display: flex; gap: 8px; padding: 18px 22px 0; overflow: hidden">
<button style="height: 38px; padding: 0 20px; border-radius: 19px; background: linear-gradient(180deg, #6E97FF 0%, #3D6BFF 50%, #2449D4 100%); border: 1px solid rgba(160,190,255,.45); box-shadow: inset 0 1px 0 rgba(255,255,255,.45), inset 0 -3px 8px rgba(10,25,90,.35), 0 6px 18px rgba(61,107,255,.45); font-size: 14px; font-weight: 600; flex-shrink: 0">All</button>
<button class="glass" style="height: 38px; padding: 0 16px; border-radius: 19px; font-size: 14px; color: #D5D8DE; flex-shrink: 0">Mountains</button>
<button class="glass" style="height: 38px; padding: 0 16px; border-radius: 19px; font-size: 14px; color: #D5D8DE; flex-shrink: 0">Coastal</button>
<button class="glass" style="height: 38px; padding: 0 16px; border-radius: 19px; font-size: 14px; color: #D5D8DE; flex-shrink: 0">Heritage</button>
<button class="glass" style="height: 38px; padding: 0 16px; border-radius: 19px; font-size: 14px; color: #D5D8DE; flex-shrink: 0">Forest</button>
</div>

<div style="display: flex; gap: 10px; padding: 20px 0 0; margin-left: -6px">
<img src="https://developermill.com/app-designs/trip-planner-app-ui-design/assets/a340ebf012.jpg" alt="" style="width: 22px; height: 278px; border-radius: 0 22px 22px 0; flex-shrink: 0; object-fit: cover; object-position: right">
<div style="width: 334px; height: 278px; border-radius: 26px; position: relative; overflow: hidden; flex-shrink: 0; border: 1px solid rgba(255,255,255,.08)">
<img src="https://developermill.com/app-designs/trip-planner-app-ui-design/assets/410a453287.jpg" alt="Three friends laughing on a Faroe Islands clifftop" style="position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; object-position: center 70%">
<div style="position: absolute; inset: 0; background: linear-gradient(180deg, rgba(6,7,10,0) 45%, rgba(6,7,10,.85) 100%)"></div>
<span class="mono glass" style="position: absolute; top: 14px; left: 14px; font-size: 10px; letter-spacing: .1em; padding: 7px 10px; border-radius: 9px; background: rgba(20,22,28,.55)">EDITOR'S PACK</span>
<button class="glass" aria-label="Save" style="position: absolute; top: 12px; right: 12px; width: 36px; height: 36px; border-radius: 11px; display: flex; align-items: center; justify-content: center; padding: 0; background: rgba(20,22,28,.55)"><svg width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="#F3F4F6" stroke-width="2" aria-hidden="true"><path d="M6 3h12v18l-6-4-6 4z"/></svg></button>
<div style="position: absolute; left: 16px; right: 16px; bottom: 16px">
<div class="mono" style="font-size: 10px; letter-spacing: .12em; color: #C9CDD4">FAROE ISLANDS — ATLANTIC</div>
<div class="serif" style="font-style: italic; font-size: 34px; line-height: 1.1; margin-top: 4px">Saksun Village</div>
<div style="display: flex; gap: 6px; margin-top: 10px">
<span class="glass" style="font-size: 12px; padding: 6px 10px; border-radius: 10px; display: flex; align-items: center; gap: 5px; background: rgba(20,22,28,.6)"><svg width="12" height="12" viewBox="0 0 24 24" fill="#F3F4F6" aria-hidden="true"><path d="m12 3 2.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>49.21k</span>
<span class="glass" style="font-size: 12px; padding: 6px 10px; border-radius: 10px; display: flex; align-items: center; gap: 5px; background: rgba(20,22,28,.6)"><svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="#F3F4F6" stroke-width="2" aria-hidden="true"><circle cx="12" cy="12" r="9"/><path d="M12 7v5l3 2"/></svg>3 days</span>
<span class="glass" style="font-size: 12px; padding: 6px 10px; border-radius: 10px; display: flex; align-items: center; gap: 5px; background: rgba(20,22,28,.6)">$ From 1,240</span>
</div>
</div>
</div>
<img src="https://developermill.com/app-designs/trip-planner-app-ui-design/assets/cfc112b1d2.jpg" alt="" style="width: 40px; height: 278px; border-radius: 22px 0 0 22px; flex-shrink: 0; object-fit: cover; object-position: left">
</div>

<div style="display: flex; align-items: baseline; justify-content: space-between; padding: 26px 22px 0">
<h2 class="serif" style="margin: 0; font-weight: 400; font-size: 26px">Trending <em style="color: #6F95FF">now</em></h2>
<a href="#" class="mono" style="font-size: 11px; letter-spacing: .1em; color: #C9CDD4; text-decoration: none">VIEW ALL →</a>
</div>

<div style="display: flex; gap: 10px; padding: 14px 22px 0">
<div style="width: 150px; height: 190px; border-radius: 20px; position: relative; overflow: hidden; flex-shrink: 0">
<img src="https://developermill.com/app-designs/trip-planner-app-ui-design/assets/de71224bfc.jpg" alt="Neon-lit Tokyo alley at night" style="position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover">
<span class="mono glass" style="position: absolute; top: 10px; left: 10px; font-size: 9px; letter-spacing: .1em; padding: 6px 8px; border-radius: 8px; background: rgba(20,22,28,.6)">HERITAGE</span>
<button class="glass" aria-label="Like" style="position: absolute; top: 8px; right: 8px; width: 30px; height: 30px; border-radius: 9px; padding: 0; display: flex; align-items: center; justify-content: center; background: rgba(20,22,28,.6)"><svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="#F3F4F6" stroke-width="2" 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>
<div style="width: 150px; height: 190px; border-radius: 20px; position: relative; overflow: hidden; flex-shrink: 0">
<img src="https://developermill.com/app-designs/trip-planner-app-ui-design/assets/fe81a6571b.jpg" alt="Turquoise bay framed by palm leaves" style="position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover">
<span class="mono glass" style="position: absolute; top: 10px; left: 10px; font-size: 9px; letter-spacing: .1em; padding: 6px 8px; border-radius: 8px; background: rgba(20,22,28,.6)">COASTAL</span>
<button class="glass" aria-label="Like" style="position: absolute; top: 8px; right: 8px; width: 30px; height: 30px; border-radius: 9px; padding: 0; display: flex; align-items: center; justify-content: center; background: rgba(20,22,28,.6)"><svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="#F3F4F6" stroke-width="2" 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>
<img src="https://developermill.com/app-designs/trip-planner-app-ui-design/assets/9d87548880.jpg" alt="" style="width: 60px; height: 190px; border-radius: 20px; flex-shrink: 0; object-fit: cover">
</div>

<nav class="glass" aria-label="Main" style="position: absolute; left: 50%; bottom: 30px; transform: translateX(-50%); display: flex; align-items: center; gap: 4px; padding: 6px; border-radius: 30px; background: rgba(28,30,38,.82); backdrop-filter: blur(16px)">
<a href="#" style="height: 46px; padding: 0 18px 0 8px; border-radius: 23px; background: linear-gradient(180deg, #6E97FF 0%, #3D6BFF 50%, #2449D4 100%); border: 1px solid rgba(160,190,255,.45); box-shadow: inset 0 1px 0 rgba(255,255,255,.45), inset 0 -3px 8px rgba(10,25,90,.35), 0 6px 18px rgba(61,107,255,.45); box-sizing: border-box; color: #fff; text-decoration: none; display: flex; align-items: center; gap: 8px; font-size: 14px; font-weight: 600"><span style="width: 30px; height: 30px; border-radius: 50%; background: #fff; display: flex; align-items: center; justify-content: center"><svg width="16" height="16" viewBox="0 0 24 24" fill="#3D6BFF" aria-hidden="true"><path d="M5 18V9a7 7 0 0 1 14 0v9l-2.3-1.6L14.4 18 12 16.4 9.6 18l-2.3-1.6z"/></svg></span>Discover</a>
<a href="Map.dc.html" aria-label="Map" style="width: 46px; height: 46px; display: flex; align-items: center; justify-content: center"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#B7BCC6" stroke-width="1.8" aria-hidden="true"><path d="M3 11 21 3l-8 18-2-8z"/></svg></a>
<a href="Trip.dc.html" aria-label="Trips" style="width: 46px; height: 46px; display: flex; align-items: center; justify-content: center"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#B7BCC6" stroke-width="1.8" aria-hidden="true"><rect x="3" y="5" width="18" height="16" rx="3"/><path d="M3 10h18M8 3v4M16 3v4"/></svg></a>
<a href="#" aria-label="Profile" style="width: 46px; height: 46px; display: flex; align-items: center; justify-content: center"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#B7BCC6" stroke-width="1.8" aria-hidden="true"><circle cx="12" cy="8" r="4"/><path d="M4 21a8 8 0 0 1 16 0"/></svg></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>
```

### Map view (Map)

```html
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Map explore</title>
<script src="./support.js"></script>
</head>
<body>
<x-dc>
<helmet>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Instrument+Serif:ital@0;1&amp;family=Inter:wght@400;500;600&amp;family=JetBrains+Mono:wght@400;500&amp;display=swap">
<style>
body{margin:0;background:#06070A}
a{color:#7FA2FF}a:hover{color:#A9C0FF}
.ph{background-color:#1B1F29;background-image:repeating-linear-gradient(135deg,rgba(255,255,255,.04) 0 8px,transparent 8px 16px);display:flex;align-items:center;justify-content:center;text-align:center}
.phl{font-family:'JetBrains Mono',monospace;font-size:9px;letter-spacing:.06em;color:#6B7180;text-transform:uppercase;padding:0 12px;line-height:1.5}
.glass{background:rgba(255,255,255,.07);border:1px solid rgba(255,255,255,.12)}
.mono{font-family:'JetBrains Mono',monospace}
.serif{font-family:'Instrument Serif',serif}
.pin{position:absolute;width:46px;height:46px;border-radius:50%;border:2px solid rgba(255,255,255,.9);box-shadow:0 6px 16px rgba(0,0,0,.6);box-sizing:border-box}
.lbl{position:absolute;font-family:'JetBrains Mono',monospace;font-size:12px;color:#E6E8EC;background:rgba(22,24,31,.86);border:1px solid rgba(255,255,255,.1);padding:5px 9px;border-radius:9px;white-space:nowrap}
button{font:inherit;color:inherit;cursor:pointer}
</style>
</helmet>
<div style="width: 390px; height: 844px; position: relative; overflow: hidden; background: #0B0C10; color: #F3F4F6; font-family: Inter, system-ui, sans-serif">

<svg width="390" height="844" viewBox="0 0 390 844" fill="none" stroke="#1E212A" aria-hidden="true" style="position: absolute; inset: 0">
<path d="M-10 230 C80 260 140 210 230 250 S360 300 400 280" stroke-width="10"></path>
<path d="M60 -10 C70 120 40 260 90 420 S120 640 80 860" stroke-width="7"></path>
<path d="M240 140 C230 300 300 420 260 560 S300 760 320 860" stroke-width="6"></path>
<path d="M-10 520 C100 500 200 560 400 500" stroke-width="5"></path>
<path d="M140 180 L180 860 M0 380 L390 420 M330 160 L360 860 M0 640 L390 600" stroke-width="2" stroke="#171920"></path>
<path d="M20 300 L120 330 L150 300 M200 460 L330 480 M100 560 L220 620 M260 330 L380 300" stroke-width="2" stroke="#171920"></path>
</svg>
<div class="mono" style="position: absolute; left: 28px; top: 470px; transform: rotate(-80deg); font-size: 9px; color: #3A3F4B; letter-spacing: .1em">KYLES ROAD</div>

<span class="lbl" style="left: 100px; top: 304px">Samos</span>
<span class="lbl" style="left: 178px; top: 304px">Naxos</span>
<span class="lbl" style="left: 262px; top: 286px">Paros</span>
<span class="lbl" style="left: 300px; top: 338px">Mykonos</span>
<span class="lbl" style="left: 190px; top: 380px">Rhodes</span>
<span class="lbl" style="left: 86px; top: 414px">Santorini</span>
<span class="lbl" style="left: 268px; top: 414px">Izmir</span>
<span class="lbl" style="left: 44px; top: 488px">Bodrum castle</span>
<span class="lbl" style="left: 150px; top: 464px">Alaçatı Bays</span>
<span class="lbl" style="left: 268px; top: 506px">Çeşme</span>

<img class="pin" src="https://developermill.com/app-designs/trip-planner-app-ui-design/assets/318b072146.jpg" alt="" style="left: 196px; top: 236px; object-fit: cover">
<img class="pin" src="https://developermill.com/app-designs/trip-planner-app-ui-design/assets/cfc112b1d2.jpg" alt="" style="left: 276px; top: 226px; object-fit: cover">
<img class="pin" src="https://developermill.com/app-designs/trip-planner-app-ui-design/assets/fe81a6571b.jpg" alt="" style="left: 334px; top: 262px; object-fit: cover">
<img class="pin" src="https://developermill.com/app-designs/trip-planner-app-ui-design/assets/26ea7b4816.jpg" alt="" style="left: 130px; top: 344px; object-fit: cover">
<img class="pin" src="https://developermill.com/app-designs/trip-planner-app-ui-design/assets/94319b63ac.jpg" alt="" style="left: 206px; top: 334px; object-fit: cover">
<img class="pin" src="https://developermill.com/app-designs/trip-planner-app-ui-design/assets/9d87548880.jpg" alt="" style="left: 334px; top: 376px; object-fit: cover">
<img class="pin" src="https://developermill.com/app-designs/trip-planner-app-ui-design/assets/3910a9306f.jpg" alt="" style="left: 168px; top: 418px; object-fit: cover">
<img class="pin" src="https://developermill.com/app-designs/trip-planner-app-ui-design/assets/80d43b8e3e.jpg" alt="" style="left: 222px; top: 412px; object-fit: cover">
<img class="pin" src="https://developermill.com/app-designs/trip-planner-app-ui-design/assets/de71224bfc.jpg" alt="" style="left: 300px; top: 450px; object-fit: cover">
<img class="pin" src="https://developermill.com/app-designs/trip-planner-app-ui-design/assets/a340ebf012.jpg" alt="" style="left: 82px; top: 520px; object-fit: cover">
<img class="pin" src="https://developermill.com/app-designs/trip-planner-app-ui-design/assets/318b072146.jpg" alt="" style="left: 208px; top: 494px; object-fit: cover; object-position: right">
<img class="pin" src="https://developermill.com/app-designs/trip-planner-app-ui-design/assets/80d43b8e3e.jpg" alt="" style="left: 260px; top: 536px; object-fit: cover; object-position: right">

<button class="glass" aria-label="Map layers" style="position: absolute; right: 18px; top: 516px; width: 46px; height: 46px; border-radius: 50%; padding: 0; display: flex; align-items: center; justify-content: center; background: rgba(28,30,38,.9)"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#F3F4F6" stroke-width="1.8" aria-hidden="true"><path d="m12 3 9 5-9 5-9-5z"></path><path d="m3 13 9 5 9-5"></path></svg></button>

<div class="glass" style="position: absolute; left: 10px; right: 10px; top: 50px; border-radius: 30px; padding: 12px 12px 14px; background: rgba(20,22,28,.88); backdrop-filter: blur(18px)">
<div style="display: flex; gap: 8px; align-items: center">
<a href="Main.dc.html" aria-label="Back" style="width: 50px; height: 50px; border-radius: 50%; flex-shrink: 0; background: radial-gradient(circle at 35% 30%, #3E66E8, #13204F); border: 1px solid rgba(111,149,255,.4); display: flex; align-items: center; justify-content: center"><svg width="20" height="20" viewBox="0 0 24 24" fill="#fff" aria-hidden="true"><path d="M15 4 7 12l8 8-2-8z"></path></svg></a>
<label class="glass" style="flex: 1; min-width: 0; height: 50px; border-radius: 25px; display: flex; align-items: center; gap: 8px; padding: 0 5px 0 14px; box-sizing: border-box">
<svg width="17" height="17" viewBox="0 0 24 24" fill="none" stroke="#9AA0AB" stroke-width="2" aria-hidden="true"><circle cx="11" cy="11" r="7"></circle><path d="m20 20-3.5-3.5"></path></svg>
<input type="text" value="Aegean coast" aria-label="Search" style="flex: 1; min-width: 0; background: transparent; border: 0; outline: none; color: #F3F4F6; font: 15px Inter, sans-serif">
<button style="height: 38px; padding: 0 12px; border-radius: 19px; background: rgba(61,107,255,.14); border: 1px solid rgba(111,149,255,.55); display: flex; align-items: center; gap: 6px; font-size: 13px; font-weight: 500; flex-shrink: 0"><svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="#F3F4F6" stroke-width="1.8" aria-hidden="true"><path d="m4 20 10-10M15 4v3M13.5 5.5h3M19 9v2M18 10h2M9 3v2M8 4h2"></path></svg>AI Mode</button>
</label>
</div>
<div style="display: flex; gap: 8px; margin-top: 12px; overflow: hidden">
<button style="height: 38px; padding: 0 14px; border-radius: 19px; background: linear-gradient(180deg, #6E97FF 0%, #3D6BFF 50%, #2449D4 100%); border: 1px solid rgba(160,190,255,.45); box-shadow: inset 0 1px 0 rgba(255,255,255,.45), inset 0 -3px 8px rgba(10,25,90,.35), 0 6px 18px rgba(61,107,255,.45); font-size: 13px; font-weight: 600; display: flex; align-items: center; gap: 6px; flex-shrink: 0"><svg width="13" height="13" viewBox="0 0 24 24" fill="#fff" aria-hidden="true"><path d="M3 11 21 3l-8 18-2-8z"></path></svg><span>All Places</span></button>
<button class="glass" style="height: 38px; padding: 0 12px; border-radius: 19px; font-size: 13px; color: #D5D8DE; display: flex; align-items: center; gap: 6px; flex-shrink: 0"><svg width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="#D5D8DE" stroke-width="1.8" aria-hidden="true"><path d="m2 19 7-11 5 7 3-4 5 8z"></path></svg>Scenic</button>
<button class="glass" style="height: 38px; padding: 0 12px; border-radius: 19px; font-size: 13px; color: #D5D8DE; display: flex; align-items: center; gap: 6px; flex-shrink: 0"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="#D5D8DE" stroke-width="1.8" aria-hidden="true"><rect x="5" y="3" width="14" height="18" rx="2"></rect><path d="M9 7h2M13 7h2M9 11h2M13 11h2M10 21v-4h4v4"></path></svg>Hotels</button>
<button class="glass" style="height: 38px; padding: 0 12px; border-radius: 19px; font-size: 13px; color: #D5D8DE; display: flex; align-items: center; gap: 6px; flex-shrink: 0"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="#D5D8DE" stroke-width="1.8" aria-hidden="true"><path d="M3 11 12 4l9 7v9H3z"></path></svg>Stays</button>
</div>
</div>

<div style="position: absolute; left: 0; right: 0; bottom: 0; height: 270px; border-radius: 30px 30px 0 0; background: #101218; border-top: 1px solid rgba(255,255,255,.1)">
<button aria-label="Expand list" style="position: absolute; left: 50%; top: -22px; transform: translateX(-50%); width: 44px; height: 44px; border: 0; background: transparent; padding: 0; display: flex; align-items: center; justify-content: center"><svg width="34" height="22" viewBox="0 0 34 22" fill="#3D6BFF" aria-hidden="true"><path d="M17 2 32 20c-5-4-10-6-15-6S7 16 2 20z"></path></svg></button>
<div style="display: flex; align-items: baseline; justify-content: space-between; padding: 24px 22px 0">
<h2 class="serif" style="margin: 0; font-weight: 400; font-size: 24px">Nearby <em style="color: #6F95FF">finds</em></h2>
<span class="mono" style="font-size: 11px; letter-spacing: .1em; color: #9AA0AB">12 PLACES</span>
</div>
<div style="display: flex; gap: 10px; padding: 14px 0 0 16px">
<div style="width: 158px; height: 170px; border-radius: 20px; position: relative; overflow: hidden; flex-shrink: 0; border: 1px solid rgba(255,255,255,.08)">
<img src="https://developermill.com/app-designs/trip-planner-app-ui-design/assets/cfc112b1d2.jpg" alt="Oia village at sunset" style="position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover">
<div style="position: absolute; inset: 0; background: linear-gradient(180deg, rgba(6,7,10,0) 45%, rgba(6,7,10,.85))"></div>
<span class="mono" style="position: absolute; top: 10px; left: 10px; font-size: 9px; letter-spacing: .1em; padding: 6px 8px; border-radius: 8px; background: rgba(20,22,28,.65); border: 1px solid rgba(255,255,255,.12)">CLIFFSIDE</span>
<button aria-label="Like" style="position: absolute; top: 8px; right: 8px; width: 30px; height: 30px; border-radius: 9px; padding: 0; display: flex; align-items: center; justify-content: center; background: rgba(20,22,28,.65); border: 1px solid rgba(255,255,255,.12)"><svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="#F3F4F6" stroke-width="2" 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"></path></svg></button>
<div style="position: absolute; left: 12px; bottom: 12px">
<div style="display: flex; gap: 10px; font-size: 11px; color: #E6E8EC"><span>★ 4.9</span><span>◷ 2.4km</span></div>
<div class="serif" style="font-style: italic; font-size: 22px; margin-top: 2px">Oia Village</div>
</div>
</div>
<div style="width: 158px; height: 170px; border-radius: 20px; position: relative; overflow: hidden; flex-shrink: 0; border: 1px solid rgba(255,255,255,.08)">
<img src="https://developermill.com/app-designs/trip-planner-app-ui-design/assets/a340ebf012.jpg" alt="Sunset over Mykonos harbour" style="position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover">
<div style="position: absolute; inset: 0; background: linear-gradient(180deg, rgba(6,7,10,0) 45%, rgba(6,7,10,.85))"></div>
<span class="mono" style="position: absolute; top: 10px; left: 10px; font-size: 9px; letter-spacing: .1em; padding: 6px 8px; border-radius: 8px; background: rgba(20,22,28,.65); border: 1px solid rgba(255,255,255,.12)">SUNSET SPOT</span>
<button aria-label="Like" style="position: absolute; top: 8px; right: 8px; width: 30px; height: 30px; border-radius: 9px; padding: 0; display: flex; align-items: center; justify-content: center; background: rgba(20,22,28,.65); border: 1px solid rgba(255,255,255,.12)"><svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="#F3F4F6" stroke-width="2" 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"></path></svg></button>
<div style="position: absolute; left: 12px; bottom: 12px">
<div style="display: flex; gap: 10px; font-size: 11px; color: #E6E8EC"><span>★ 4.7</span><span>◷ 6.1km</span></div>
<div class="serif" style="font-style: italic; font-size: 22px; margin-top: 2px">Mykonos Town</div>
</div>
</div>
<img src="https://developermill.com/app-designs/trip-planner-app-ui-design/assets/80d43b8e3e.jpg" alt="" style="width: 60px; height: 170px; border-radius: 20px 0 0 20px; flex-shrink: 0; object-fit: cover">
</div>
</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>
```

### Trip details (Trip)

```html
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Trip plan</title>
<script src="./support.js"></script>
</head>
<body>
<x-dc>
<helmet>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Instrument+Serif:ital@0;1&amp;family=Inter:wght@400;500;600&amp;family=JetBrains+Mono:wght@400;500&amp;display=swap">
<style>
body{margin:0;background:#06070A}
a{color:#7FA2FF}a:hover{color:#A9C0FF}
.ph{background-color:#171A23;background-image:repeating-linear-gradient(135deg,rgba(255,255,255,.04) 0 8px,transparent 8px 16px);display:flex;align-items:center;justify-content:center;text-align:center}
.phl{font-family:'JetBrains Mono',monospace;font-size:8px;letter-spacing:.06em;color:#6B7180;text-transform:uppercase;padding:0 8px;line-height:1.5}
.glass{background:rgba(255,255,255,.07);border:1px solid rgba(255,255,255,.12)}
.mono{font-family:'JetBrains Mono',monospace}
.serif{font-family:'Instrument Serif',serif}
button{font:inherit;color:inherit;cursor:pointer}
</style>
</helmet>
<div style="width: 390px; height: 844px; position: relative; overflow: hidden; background: #06070A; color: #F3F4F6; font-family: Inter, system-ui, sans-serif; box-sizing: border-box; padding: 56px 0 0">

<div style="display: flex; align-items: center; gap: 12px; padding: 0 20px">
<a href="Map.dc.html" aria-label="Back" style="width: 46px; height: 46px; border-radius: 50%; flex-shrink: 0; background: radial-gradient(circle at 35% 30%, #3E66E8, #13204F); border: 1px solid rgba(111,149,255,.4); display: flex; align-items: center; justify-content: center"><svg width="18" height="18" viewBox="0 0 24 24" fill="#fff" aria-hidden="true"><path d="M15 4 7 12l8 8-2-8z"/></svg></a>
<div style="flex: 1">
<div style="font-size: 19px; font-weight: 600">Greece</div>
<div class="mono" style="font-size: 10px; letter-spacing: .1em; color: #9AA0AB; margin-top: 2px">TRIP / AEGEAN COAST</div>
</div>
<a href="Map.dc.html" class="glass" style="height: 36px; padding: 0 14px; border-radius: 18px; display: flex; align-items: center; gap: 6px; color: #F3F4F6; text-decoration: none; font-size: 13px; font-weight: 500"><svg width="14" height="14" viewBox="0 0 24 24" fill="#F3F4F6" aria-hidden="true"><path d="M3 6l6-3 6 3 6-3v15l-6 3-6-3-6 3z"/></svg>Map</a>
</div>

<div style="display: flex; align-items: center; gap: 8px; padding: 22px 0 0 20px">
<img src="https://developermill.com/app-designs/trip-planner-app-ui-design/assets/94319b63ac.jpg" alt="Island gift shop" style="width: 62px; height: 72px; border-radius: 14px; flex-shrink: 0; object-fit: cover">
<img src="https://developermill.com/app-designs/trip-planner-app-ui-design/assets/3910a9306f.jpg" alt="Whitewashed alley" style="width: 62px; height: 72px; border-radius: 14px; flex-shrink: 0; object-fit: cover">
<img src="https://developermill.com/app-designs/trip-planner-app-ui-design/assets/80d43b8e3e.jpg" alt="Oia with bougainvillea" style="width: 80px; height: 92px; border-radius: 18px; flex-shrink: 0; object-fit: cover; box-shadow: 0 0 0 2px #F3F4F6">
<img src="https://developermill.com/app-designs/trip-planner-app-ui-design/assets/318b072146.jpg" alt="Taverna terrace at night" style="width: 62px; height: 72px; border-radius: 14px; flex-shrink: 0; object-fit: cover">
<img src="https://developermill.com/app-designs/trip-planner-app-ui-design/assets/26ea7b4816.jpg" alt="Greek dinner table" style="width: 62px; height: 72px; border-radius: 14px; flex-shrink: 0; object-fit: cover">
</div>

<div style="padding: 18px 20px 0">
<div class="glass" style="border-radius: 22px; padding: 10px; display: flex; gap: 14px; background: rgba(255,255,255,.05)">
<div style="width: 116px; height: 116px; border-radius: 16px; position: relative; flex-shrink: 0; overflow: hidden"><img src="https://developermill.com/app-designs/trip-planner-app-ui-design/assets/80d43b8e3e.jpg" alt="Oia village with pink bougainvillea" style="position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover"><span class="mono" style="position: absolute; left: 8px; bottom: 8px; font-size: 10px; padding: 4px 7px; border-radius: 7px; background: rgba(20,22,28,.75); color: #F3F4F6">24°C</span></div>
<div style="flex: 1; display: flex; flex-direction: column; padding-top: 4px">
<div style="display: flex; justify-content: space-between; align-items: flex-start">
<div class="serif" style="font-style: italic; font-size: 26px; line-height: 1">Oia Village</div>
<div style="display: flex; margin-top: 2px" aria-label="4 travellers">
<img src="https://developermill.com/app-designs/trip-planner-app-ui-design/assets/f3e802a37f.jpg" alt="" style="width: 20px; height: 20px; border-radius: 50%; border: 1.5px solid #101218; object-fit: cover">
<img src="https://developermill.com/app-designs/trip-planner-app-ui-design/assets/410a453287.jpg" alt="" style="width: 20px; height: 20px; border-radius: 50%; border: 1.5px solid #101218; margin-left: -7px; object-fit: cover; object-position: 30% 42%">
<img src="https://developermill.com/app-designs/trip-planner-app-ui-design/assets/410a453287.jpg" alt="" style="width: 20px; height: 20px; border-radius: 50%; border: 1.5px solid #101218; margin-left: -7px; object-fit: cover; object-position: 45% 66%">
<img src="https://developermill.com/app-designs/trip-planner-app-ui-design/assets/410a453287.jpg" alt="" style="width: 20px; height: 20px; border-radius: 50%; border: 1.5px solid #101218; margin-left: -7px; object-fit: cover; object-position: 65% 56%">
</div>
</div>
<div style="font-size: 13px; color: #9AA0AB; margin-top: 6px">Greece, Santorini</div>
<div style="display: flex; flex-direction: column; align-items: flex-start; gap: 6px; margin-top: 12px">
<span class="glass" style="font-size: 12px; padding: 5px 10px; border-radius: 9px; display: flex; align-items: center; gap: 6px"><svg width="12" height="12" viewBox="0 0 24 24" fill="#F3F4F6" aria-hidden="true"><path d="M3 11 21 3l-8 18-2-8z"/></svg>26 spots</span>
<span class="glass" style="font-size: 12px; padding: 5px 10px; border-radius: 9px; display: flex; align-items: center; gap: 6px"><svg width="12" height="12" viewBox="0 0 24 24" fill="#F3F4F6" aria-hidden="true"><path d="M3 6h7l2 2h9v12H3z"/></svg>8 types</span>
</div>
</div>
</div>
</div>

<dl style="margin: 18px 20px 0; font-size: 14px">
<div style="display: flex; justify-content: space-between; padding: 11px 0; border-bottom: 1px solid rgba(255,255,255,.08)"><dt style="color: #9AA0AB">Trip Status</dt><dd style="margin: 0; display: flex; align-items: center; gap: 7px; font-weight: 500"><span style="width: 8px; height: 8px; border-radius: 50%; background: #34D17A"></span>Active</dd></div>
<div style="display: flex; justify-content: space-between; padding: 11px 0; border-bottom: 1px solid rgba(255,255,255,.08)"><dt style="color: #9AA0AB">Duration</dt><dd style="margin: 0; font-weight: 500">4 days left</dd></div>
<div style="display: flex; justify-content: space-between; padding: 11px 0"><dt style="color: #9AA0AB">Accommodation</dt><dd style="margin: 0; font-weight: 500">[Hotel name]</dd></div>
</dl>
<button style="display: flex; align-items: center; gap: 4px; margin: 2px auto 0; background: none; border: 0; color: #B7BCC6; font-size: 13px; padding: 6px 10px">More info <svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="#B7BCC6" stroke-width="2" aria-hidden="true"><path d="m6 9 6 6 6-6"/></svg></button>

<div style="padding: 10px 20px 0">
<div class="glass" style="border-radius: 16px; padding: 12px 14px; display: flex; gap: 12px; background: rgba(255,255,255,.045)">
<span style="width: 3px; border-radius: 2px; background: #3D6BFF; flex-shrink: 0"></span>
<p class="mono" style="margin: 0; font-size: 11.5px; line-height: 1.6; color: #D5D8DE">Visit <span style="color: #7FA2FF">Akrotiri</span> before 10 AM for a peaceful atmosphere and golden, crowd-free light.</p>
</div>
</div>

<div style="display: flex; align-items: baseline; justify-content: space-between; padding: 22px 20px 0">
<h2 class="serif" style="margin: 0; font-weight: 400; font-size: 26px">Trip <em style="color: #6F95FF">log</em></h2>
<span class="mono" style="font-size: 11px; letter-spacing: .1em; color: #9AA0AB">5 PLACES</span>
</div>

<div style="display: flex; gap: 12px; padding: 14px 20px 0">
<div style="display: flex; flex-direction: column; align-items: center; gap: 6px">
<span class="glass mono" style="width: 34px; height: 34px; border-radius: 10px; display: flex; align-items: center; justify-content: center; font-size: 13px">1</span>
<span style="width: 1px; flex: 1; background: rgba(255,255,255,.12)"></span>
</div>
<div class="glass" style="flex: 1; border-radius: 18px; padding: 10px; display: flex; gap: 12px; background: rgba(255,255,255,.045)">
<img src="https://developermill.com/app-designs/trip-planner-app-ui-design/assets/9d87548880.jpg" alt="Blue Dome Church" style="width: 72px; height: 72px; border-radius: 12px; flex-shrink: 0; object-fit: cover">
<div style="flex: 1">
<div class="serif" style="font-style: italic; font-size: 20px">Blue Dome Church</div>
<div style="font-size: 12px; color: #9AA0AB; margin-top: 2px">Greece, Santorini</div>
</div>
<div class="mono" style="text-align: right; font-size: 10px; color: #B7BCC6; align-self: flex-end">10:30 AM<br><span style="color: #7B818D">DAY 02</span></div>
</div>
</div>

<a href="#" style="position: absolute; left: 112px; bottom: 98px; height: 34px; padding: 0 14px; border-radius: 17px; background: rgba(28,30,38,.95); border: 1px solid rgba(255,255,255,.14); color: #F3F4F6; text-decoration: none; font-size: 13px; font-weight: 500; display: flex; align-items: center; gap: 8px; box-shadow: 0 8px 20px rgba(0,0,0,.5)"><span style="width: 8px; height: 8px; border-radius: 50%; background: #34D17A"></span>Open Itinerary</a>

<nav class="glass" aria-label="Main" style="position: absolute; left: 50%; bottom: 30px; transform: translateX(-50%); display: flex; align-items: center; gap: 4px; padding: 6px; border-radius: 30px; background: rgba(28,30,38,.85); backdrop-filter: blur(16px)">
<a href="Main.dc.html" aria-label="Discover" style="width: 46px; height: 46px; display: flex; align-items: center; justify-content: center"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#B7BCC6" stroke-width="1.8" aria-hidden="true"><path d="M5 18V9a7 7 0 0 1 14 0v9l-2.3-1.6L14.4 18 12 16.4 9.6 18l-2.3-1.6z"/></svg></a>
<a href="Map.dc.html" aria-label="Map" style="width: 46px; height: 46px; display: flex; align-items: center; justify-content: center"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#B7BCC6" stroke-width="1.8" aria-hidden="true"><path d="M3 11 21 3l-8 18-2-8z"/></svg></a>
<a href="#" style="height: 46px; padding: 0 18px 0 8px; border-radius: 23px; background: linear-gradient(180deg, #6E97FF 0%, #3D6BFF 50%, #2449D4 100%); border: 1px solid rgba(160,190,255,.45); box-shadow: inset 0 1px 0 rgba(255,255,255,.45), inset 0 -3px 8px rgba(10,25,90,.35), 0 6px 18px rgba(61,107,255,.45); box-sizing: border-box; color: #fff; text-decoration: none; display: flex; align-items: center; gap: 8px; font-size: 14px; font-weight: 600"><span style="width: 30px; height: 30px; border-radius: 50%; background: #fff; display: flex; align-items: center; justify-content: center"><svg width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="#3D6BFF" stroke-width="2.2" aria-hidden="true"><rect x="3" y="5" width="18" height="16" rx="3"/><path d="M3 10h18M8 3v4M16 3v4"/></svg></span>Trip Plan</a>
<a href="#" aria-label="Profile" style="width: 46px; height: 46px; display: flex; align-items: center; justify-content: center"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#B7BCC6" stroke-width="1.8" aria-hidden="true"><circle cx="12" cy="8" r="4"/><path d="M4 21a8 8 0 0 1 16 0"/></svg></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/trip-planner-app-ui/SKILL.md

---
name: trip-planner-app-ui
description: Build the Trip Manager mobile app UI in Expo React Native. Use when asked to create a trip planner app UI or a new screen in this visual style.
---

# Trip Manager app UI

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

Reference: https://developermill.com/app-designs/trip-planner-app-ui-design

## Visual direction

Blue-black night mode with an electric blue accent, editorial serif italics, monospaced labels and glass controls over photography.

Keep these signature details:

- Search bar with an AI mode button
- Dark map with round photo pins
- Nearby place cards in a bottom shelf
- Trip log with status, tips and timeline

## Set up

```bash
npx expo install expo-blur expo-image expo-linear-gradient react-native-svg @expo-google-fonts/instrument-serif @expo-google-fonts/inter @expo-google-fonts/jetbrains-mono expo-font
```

## Tokens

| Name | Hex |
| --- | --- |
| Night | `#06070A` |
| Carbon | `#101218` |
| Electric blue | `#3D6BFF` |
| Sky | `#7FA2FF` |
| Fog | `#D5D8DE` |
| Pewter | `#9AA0AB` |

- Typefaces: Inter, Instrument Serif, JetBrains Mono
- Text sizes (px): 9, 10, 11, 12, 13, 14, 22, 26
- Corner radii (px): 8, 9, 10, 14, 19, 20

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

## Screens

1. **Discover.** A serif welcome, AI search, category chips, a large editor's pack card and trending destinations.
2. **Map view.** A dark map with photo pins and labels, glass search and filter controls, and a nearby places shelf.
3. **Trip details.** A photo strip, trip status and duration, a local tip and a day-by-day trip log.

## 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 trip-planner-app --template default
cd trip-planner-app
rm -rf src
npx expo install expo-blur expo-image expo-linear-gradient react-native-svg @expo-google-fonts/instrument-serif @expo-google-fonts/inter @expo-google-fonts/jetbrains-mono expo-font

src/app/_layout.tsx

import {
  InstrumentSerif_400Regular,
  InstrumentSerif_400Regular_Italic,
} from '@expo-google-fonts/instrument-serif';
import { Inter_400Regular, Inter_500Medium, Inter_600SemiBold } from '@expo-google-fonts/inter';
import { JetBrainsMono_400Regular } from '@expo-google-fonts/jetbrains-mono';
import { useFonts } from 'expo-font';
import { Stack } from 'expo-router';

export default function RootLayout() {
  const [fontsLoaded] = useFonts({
    InstrumentSerif_400Regular,
    InstrumentSerif_400Regular_Italic,
    Inter_400Regular,
    Inter_500Medium,
    Inter_600SemiBold,
    JetBrainsMono_400Regular,
  });

  if (!fontsLoaded) return null;

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

About this design

It covers the whole trip: a discover feed with an AI search mode, a dark map with photo pins, and a trip page with status, tips and a day log. It is a strong base for a planner or a travel guide.

Blue-black night mode with an electric blue accent, editorial serif italics, monospaced labels and glass controls over photography.

  • Search bar with an AI mode button
  • Dark map with round photo pins
  • Nearby place cards in a bottom shelf
  • Trip log with status, tips and timeline

Colour palette

  • Night

    #06070A

  • Carbon

    #101218

  • Electric blue

    #3D6BFF

  • Sky

    #7FA2FF

  • Fog

    #D5D8DE

  • Pewter

    #9AA0AB

How to use this design

  1. 01

    Pick what to copy

    Copy the Trip Manager 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

Is the map a real map?

It is a styled illustration so the design runs anywhere with no API key. Swap it for react-native-maps and reuse the photo pin views as markers.

What does AI Mode do?

It is a UI entry point in the search bar. Connect it to your own assistant or trip planning API.

Why three fonts?

Inter handles interface text, Instrument Serif adds the editorial headlines, and JetBrains Mono sets the small labels. All three load through Expo Google Fonts.

Is the Trip Manager 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