// Social app UI

Social Media Reels App UI Design in Expo

This social media app UI covers the three screens every social product needs: full-screen reels, a home feed with stories, and a creator profile with a video grid.

Screens
3
Built with
Expo SDK 58
Fonts
Urbanist
License
Free (MIT)
Social media reels screen with a forest video, like buttons and glass navigation

Frindly Social app screens

Social media reels screen with a forest video, like buttons and glass navigation

Reels

A full-screen forest road, creator row with a follow button, side action rail and glass navigation.

Social media home feed with stories and a video post

Home feed

A stories row with live and add badges, then post cards with video, captions and engagement counts.

Social media profile screen with follower stats and a reels grid

Creator profile

An avatar, bio, follower stats, content tabs and a three column grid of reels with view counts.

Copy the Frindly Social 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

# Frindly Social: design artifact

This social media app UI covers the three screens every social product needs: full-screen reels, a home feed with stories, and a creator profile with a video grid.

- Type: Social 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/social-media-reels-app-ui-design

## Design direction

Fresh green accents on clean white and full-screen nature video frames, with frosted glass navigation on every screen.

- Full-screen reels with a side action rail
- Stories row with live and add badges
- Feed cards with engagement pills
- Three column reels grid on profiles

## Foundations

### Colour

| Token | Hex |
| --- | --- |
| Frindly green | `#62D61C` |
| Deep green | `#10200A` |
| Off white | `#F1F2EF` |
| Ink | `#161A14` |
| Like red | `#F0384B` |
| Moss grey | `#626860` |

### Typography

- Typefaces: Urbanist
- Common sizes (px): 9, 11, 12, 13, 14, 17, 19, 22

### Shape and depth

- Common corner radii (px): 6, 9, 12, 14, 18, 22

## Screens

### 1. Reels

A full-screen forest road, creator row with a follow button, side action rail and glass navigation.

Preview: https://developermill.com/app-designs/social-media-reels-app-ui-design/reels.webp

Copy on this screen:

- Reels
- Sienna
- Bangladesh’s First Love
- Follow
- 2.6K
- 1,000

### 2. Home feed

A stories row with live and add badges, then post cards with video, captions and engagement counts.

Preview: https://developermill.com/app-designs/social-media-reels-app-ui-design/feed.webp

Copy on this screen:

- Frindly
- LIVE
- Sienna
- 1h ago
- More fresh new travel content inspo for all you travel bloggers or creators working but as …
- More...
- 26K
- 1K
- 381
- Esther Howard
- 4h ago

### 3. Creator profile

An avatar, bio, follower stats, content tabs and a three column grid of reels with view counts.

Preview: https://developermill.com/app-designs/social-media-reels-app-ui-design/profile.webp

Copy on this screen:

- Brooklyn Simmons
- @Broo65dx
- Follow
- Top UI/UX Inspiration
- Best resources and guide
- 400
- Post
- 128.6K
- Followers
- 600
- Following
- 4.8M
- Likes

## Full source

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

### Reels (Main)

```html
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Frindly Reels</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=Urbanist:wght@400;500;600;700;800&amp;display=swap" rel="stylesheet">
<style>
body{margin:0}
button{font:inherit;border:0;padding:0;margin:0;cursor:pointer;background:none;color:inherit}
a{color:#237A0A}a:hover{color:#175607}
</style>
</helmet>
<div style="width: 390px; height: 844px; position: relative; overflow: hidden; background: #2F5A2C; font-family: 'Urbanist', system-ui, sans-serif; color: #FFFFFF">

<img src="https://developermill.com/app-designs/social-media-reels-app-ui-design/assets/20eb923053.jpg" alt="Aerial view of a road through misty green forest" style="position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; display: block">

<div style="position: absolute; top: 0; left: 0; right: 0; height: 220px; background: linear-gradient(180deg, rgba(0,0,0,0.38), rgba(0,0,0,0))"></div>
<div style="position: absolute; bottom: 0; left: 0; right: 0; height: 260px; background: linear-gradient(0deg, rgba(0,0,0,0.42), rgba(0,0,0,0))"></div>

<header style="position: absolute; top: 56px; left: 20px; right: 20px; display: flex; align-items: center; justify-content: space-between">
<h1 style="margin: 0; font-size: 22px; font-weight: 700">Reels</h1>
<button aria-label="Open camera" style="width: 40px; height: 40px; border-radius: 999px; background: rgba(255,255,255,0.22); backdrop-filter: blur(10px); display: flex; align-items: center; justify-content: center; color: #FFFFFF">
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 8h3l2-3h6l2 3h3a1 1 0 0 1 1 1v10a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V9a1 1 0 0 1 1-1z"></path><circle cx="12" cy="13.5" r="3.5"></circle></svg>
</button>
</header>

<div style="position: absolute; top: 122px; left: 20px; right: 20px; display: flex; align-items: center; gap: 12px">
<div style="width: 48px; height: 48px; border-radius: 999px; padding: 2px; background: {{accent}}; box-sizing: border-box; flex-shrink: 0">
<img src="https://developermill.com/app-designs/social-media-reels-app-ui-design/assets/8c1946dbf2.jpg" alt="Sienna" style="width: 100%; height: 100%; border-radius: 999px; border: 2px solid #FFFFFF; box-sizing: border-box; object-fit: cover; display: block">
</div>
<div style="flex-grow: 1; display: flex; flex-direction: column; gap: 3px">
<span style="font-size: 17px; font-weight: 700">Sienna</span>
<span style="display: flex; align-items: center; gap: 4px; font-size: 12px; font-weight: 500; color: rgba(255,255,255,0.92)"><svg width="12" height="12" viewBox="0 0 24 24" aria-hidden="true"><path d="M12 21c-4 0-7-2.7-7-6.5 0-3 2-5 3.5-6.5.3 2 1.3 3 2.5 3.5C11 8 12 5 14 3c.5 3 5 5.5 5 11 0 4-3 7-7 7z" fill="#FF8A1F"></path></svg>Bangladesh’s First Love</span>
</div>
<button style="height: 32px; padding: 0 18px; border-radius: 999px; background: {{accent}}; color: #10200A; font-size: 14px; font-weight: 700">Follow</button>
</div>

<button aria-label="Play reel" style="position: absolute; top: 380px; left: 169px; width: 52px; height: 52px; border-radius: 999px; background: rgba(255,255,255,0.3); backdrop-filter: blur(10px); display: flex; align-items: center; justify-content: center; color: #FFFFFF">
<svg width="22" height="22" viewBox="0 0 24 24" aria-hidden="true"><path d="M8 5v14l11-7z" fill="currentColor"></path></svg>
</button>

<div style="position: absolute; right: 16px; bottom: 132px; display: flex; flex-direction: column; align-items: center; gap: 14px">
<div style="display: flex; flex-direction: column; align-items: center; gap: 5px">
<button aria-label="Like" style="width: 44px; height: 44px; border-radius: 999px; background: rgba(255,255,255,0.24); backdrop-filter: blur(10px); display: flex; align-items: center; justify-content: center; color: #F0384B">
<svg width="22" height="22" viewBox="0 0 24 24" aria-hidden="true"><path d="M12 20s-7-4.4-9-9.2C1.8 7.7 3.8 4.5 7 4.5c2 0 3.3 1.1 5 3 1.7-1.9 3-3 5-3 3.2 0 5.2 3.2 4 6.3C19 15.6 12 20 12 20z" fill="currentColor"></path></svg>
</button>
<span style="font-size: 12px; font-weight: 600">2.6K</span>
</div>
<div style="display: flex; flex-direction: column; align-items: center; gap: 5px">
<button aria-label="Comments" style="width: 44px; height: 44px; border-radius: 999px; background: rgba(255,255,255,0.24); backdrop-filter: blur(10px); display: flex; align-items: center; justify-content: center; color: #FFFFFF">
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M21 12a8 8 0 0 1-11.6 7.1L4 20l1-4.6A8 8 0 1 1 21 12z"></path></svg>
</button>
<span style="font-size: 12px; font-weight: 600">1,000</span>
</div>
<button aria-label="Share" style="width: 44px; height: 44px; border-radius: 999px; background: rgba(255,255,255,0.24); backdrop-filter: blur(10px); display: flex; align-items: center; justify-content: center; color: #FFFFFF">
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M21 3 10 14"></path><path d="M21 3 14 21l-4-7-7-4z"></path></svg>
</button>
<button aria-label="More options" style="width: 44px; height: 44px; border-radius: 999px; background: rgba(255,255,255,0.24); backdrop-filter: blur(10px); display: flex; align-items: center; justify-content: center; color: #FFFFFF">
<svg width="20" height="20" viewBox="0 0 24 24" aria-hidden="true"><circle cx="12" cy="5" r="1.8" fill="currentColor"></circle><circle cx="12" cy="12" r="1.8" fill="currentColor"></circle><circle cx="12" cy="19" r="1.8" fill="currentColor"></circle></svg>
</button>
<button aria-label="Original audio" style="width: 40px; height: 40px; border-radius: 12px; border: 2px solid #FFFFFF; box-sizing: border-box; overflow: hidden"><img src="https://developermill.com/app-designs/social-media-reels-app-ui-design/assets/8c1946dbf2.jpg" alt="" style="width: 100%; height: 100%; object-fit: cover; display: block"></button>
</div>

<button aria-label="Mute" style="position: absolute; left: 16px; bottom: 130px; width: 44px; height: 44px; display: flex; align-items: center; justify-content: center; color: #FFFFFF">
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 9h4l5-4v14l-5-4H4z"></path><path d="M17 9a4 4 0 0 1 0 6"></path></svg>
</button>

<nav aria-label="Main" style="position: absolute; left: 0; right: 0; bottom: 30px; display: flex; justify-content: center; align-items: center; gap: 10px">
<div style="display: flex; gap: 8px; padding: 6px; border-radius: 999px; background: rgba(28,36,26,0.42); backdrop-filter: blur(14px)">
<button aria-label="Home" style="width: 44px; height: 44px; border-radius: 999px; background: rgba(255,255,255,0.18); display: flex; align-items: center; justify-content: center; color: #FFFFFF"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M3 10.5 12 3l9 7.5V20a1 1 0 0 1-1 1h-5v-6h-6v6H4a1 1 0 0 1-1-1z"></path></svg></button>
<button aria-label="Gallery" style="width: 44px; height: 44px; border-radius: 999px; background: rgba(255,255,255,0.18); display: flex; align-items: center; justify-content: center; color: #FFFFFF"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3" y="3" width="18" height="18" rx="4"></rect><circle cx="9" cy="9" r="1.6"></circle><path d="m21 15-4.5-4.5L7 20"></path></svg></button>
<button aria-label="Reels" aria-current="page" style="width: 44px; height: 44px; border-radius: 999px; background: {{accent}}; display: flex; align-items: center; justify-content: center; color: #10200A"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3" y="3" width="18" height="18" rx="4"></rect><path d="M3 8h18M8 3l3 5M14 3l3 5"></path><path d="m10 12 5 3-5 3z"></path></svg></button>
<button aria-label="Profile" style="width: 44px; height: 44px; border-radius: 999px; background: rgba(255,255,255,0.18); display: flex; align-items: center; justify-content: center; color: #FFFFFF"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="8" r="4"></circle><path d="M4 21c1.5-4 4.5-6 8-6s6.5 2 8 6"></path></svg></button>
</div>
<button aria-label="Search" style="width: 56px; height: 56px; border-radius: 999px; background: rgba(28,36,26,0.42); backdrop-filter: blur(14px); display: flex; align-items: center; justify-content: center; color: #FFFFFF"><svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="11" cy="11" r="7"></circle><path d="m20 20-3.5-3.5"></path></svg></button>
</nav>

<div style="position: absolute; left: 0; bottom: 0; width: 34%; height: 4px; background: {{accent}}"></div>
</div>
</x-dc>
<script type="text/x-dc" data-dc-script data-props='{"accent":{"editor":"color","default":"#62D61C","options":["#62D61C","#2EC4B6","#FF8A1F"]},"$preview":{"width":390,"height":844}}'>
class Component extends DCLogic {
renderVals() {
return { accent: this.props.accent ?? '#62D61C' };
}
}
</script>
</body>
</html>
```

### Home feed (Feed)

```html
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Frindly Home Feed</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=Urbanist:wght@400;500;600;700;800&amp;display=swap" rel="stylesheet">
<style>
body{margin:0}
button{font:inherit;border:0;padding:0;margin:0;cursor:pointer;background:none;color:inherit}
a{color:#237A0A;font-weight:600;text-decoration:none}a:hover{color:#175607}
</style>
</helmet>
<div style="width: 390px; height: 844px; position: relative; overflow: hidden; background: #F1F2EF; font-family: 'Urbanist', system-ui, sans-serif; color: #161A14">

<div style="background: #FFFFFF; padding: 56px 16px 16px; display: flex; flex-direction: column; gap: 16px">
<header style="display: flex; align-items: center; justify-content: space-between">
<div style="display: flex; align-items: center; gap: 8px">
<div style="width: 30px; height: 30px; border-radius: 9px; background: {{accent}}; display: flex; align-items: center; justify-content: center">
<svg width="18" height="18" viewBox="0 0 24 24" aria-hidden="true"><path d="M9 3h6v6h6v6h-6v6H9v-6H3V9h6z" fill="#10200A"></path></svg>
</div>
<span style="font-size: 23px; font-weight: 800; letter-spacing: -0.01em">Frindly</span>
</div>
<div style="display: flex; gap: 10px">
<button aria-label="Create post" style="width: 44px; height: 44px; border-radius: 999px; background: #F1F2EF; display: flex; align-items: center; justify-content: center; color: #161A14">
<svg width="18" height="18" viewBox="0 0 24 24" aria-hidden="true"><circle cx="12" cy="12" r="10" fill="#161A14"></circle><path d="M12 7.5v9M7.5 12h9" stroke="#FFFFFF" stroke-width="2" stroke-linecap="round"></path></svg>
</button>
<button aria-label="Notifications" style="width: 44px; height: 44px; border-radius: 999px; background: #F1F2EF; display: flex; align-items: center; justify-content: center; color: #161A14; position: relative">
<svg width="20" height="20" viewBox="0 0 24 24" aria-hidden="true"><path d="M6 16v-5a6 6 0 0 1 12 0v5l2 2H4z" fill="#161A14"></path><path d="M10 20a2 2 0 0 0 4 0" fill="#161A14"></path></svg>
<span style="position: absolute; top: 10px; right: 11px; width: 8px; height: 8px; border-radius: 999px; background: #F0384B; border: 2px solid #F1F2EF"></span>
</button>
</div>
</header>

<div style="display: flex; gap: 14px; overflow: hidden; margin-right: -16px">
<sc-for list="{{stories}}" as="s" hint-placeholder-count="6">
<div style="display: flex; flex-direction: column; align-items: center; gap: 6px; flex-shrink: 0; width: 56px">
<div style="position: relative; width: 56px; height: 56px; border-radius: 999px; padding: 2px; background: {{accent}}; box-sizing: border-box">
<img src="{{s.img}}" alt="{{s.name}}" style="width: 100%; height: 100%; border-radius: 999px; border: 2px solid #FFFFFF; box-sizing: border-box; object-fit: cover; display: block">
<sc-if value="{{s.live}}" hint-placeholder-val="{{ false }}">
<span style="position: absolute; bottom: -4px; left: 50%; transform: translateX(-50%); padding: 1px 6px; border-radius: 6px; background: #F0384B; border: 2px solid #FFFFFF; font-size: 9px; font-weight: 800; color: #FFFFFF; letter-spacing: 0.04em">LIVE</span>
</sc-if>
<sc-if value="{{s.me}}" hint-placeholder-val="{{ false }}">
<span style="position: absolute; bottom: -2px; right: -2px; width: 18px; height: 18px; border-radius: 999px; background: {{accent}}; border: 2px solid #FFFFFF; display: flex; align-items: center; justify-content: center"><svg width="10" height="10" viewBox="0 0 24 24" aria-hidden="true"><path d="M12 5v14M5 12h14" stroke="#10200A" stroke-width="3.5" stroke-linecap="round"></path></svg></span>
</sc-if>
</div>
<span style="font-size: 12px; font-weight: 600; color: #2A2E27">{{s.name}}</span>
</div>
</sc-for>
</div>
</div>

<div style="padding: 12px 12px 0; display: flex; flex-direction: column; gap: 12px">
<article style="background: #FFFFFF; border-radius: 22px; padding: 14px; display: flex; flex-direction: column; gap: 12px">
<div style="display: flex; align-items: center; gap: 10px">
<img src="https://developermill.com/app-designs/social-media-reels-app-ui-design/assets/8c1946dbf2.jpg" alt="Sienna" style="width: 38px; height: 38px; border-radius: 999px; object-fit: cover; display: block">
<div style="flex-grow: 1; display: flex; flex-direction: column; gap: 2px">
<span style="font-size: 14px; font-weight: 700">Sienna</span>
<span style="display: flex; align-items: center; gap: 4px; font-size: 11px; color: #626860">1h ago <svg width="11" height="11" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true"><circle cx="12" cy="12" r="9"></circle><path d="M3 12h18M12 3c3 3.5 3 14.5 0 18M12 3c-3 3.5-3 14.5 0 18"></path></svg></span>
</div>
<button aria-label="Post options" style="width: 32px; height: 32px; display: flex; align-items: center; justify-content: center; color: #626860"><svg width="18" height="18" viewBox="0 0 24 24" aria-hidden="true"><circle cx="12" cy="5" r="1.8" fill="currentColor"></circle><circle cx="12" cy="12" r="1.8" fill="currentColor"></circle><circle cx="12" cy="19" r="1.8" fill="currentColor"></circle></svg></button>
</div>
<p style="margin: 0; font-size: 13px; line-height: 1.45; color: #2A2E27">More fresh new travel content inspo for all you travel bloggers or creators working but as … <a href="#">More...</a></p>
<div style="position: relative; height: 196px; border-radius: 18px; overflow: hidden; background: #6E9A63; display: flex; align-items: center; justify-content: center">
<img src="https://developermill.com/app-designs/social-media-reels-app-ui-design/assets/0791cc21ff.jpg" alt="Road winding along a green ridge into the clouds" style="position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; display: block">
<button aria-label="Play video" style="width: 44px; height: 44px; border-radius: 999px; background: rgba(255,255,255,0.32); backdrop-filter: blur(10px); display: flex; align-items: center; justify-content: center; color: #FFFFFF"><svg width="18" height="18" viewBox="0 0 24 24" aria-hidden="true"><path d="M8 5v14l11-7z" fill="currentColor"></path></svg></button>
<button aria-label="Mute" style="position: absolute; right: 8px; bottom: 8px; width: 32px; height: 32px; display: flex; align-items: center; justify-content: center; color: #FFFFFF"><svg width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 9h4l5-4v14l-5-4H4z"></path><path d="M17 9a4 4 0 0 1 0 6"></path></svg></button>
</div>
<div style="display: flex; align-items: center; gap: 8px">
<button aria-label="Like, 26K likes" style="height: 32px; padding: 0 12px; border-radius: 999px; background: #F1F2EF; display: flex; align-items: center; gap: 6px; font-size: 12px; font-weight: 700; color: #161A14"><svg width="16" height="16" viewBox="0 0 24 24" aria-hidden="true"><path d="M12 20s-7-4.4-9-9.2C1.8 7.7 3.8 4.5 7 4.5c2 0 3.3 1.1 5 3 1.7-1.9 3-3 5-3 3.2 0 5.2 3.2 4 6.3C19 15.6 12 20 12 20z" fill="#F0384B"></path></svg>26K</button>
<button aria-label="Comments, 1K" style="height: 32px; padding: 0 12px; border-radius: 999px; background: #F1F2EF; display: flex; align-items: center; gap: 6px; font-size: 12px; font-weight: 700; color: #161A14"><svg width="15" height="15" viewBox="0 0 24 24" aria-hidden="true"><path d="M21 12a8 8 0 0 1-11.6 7.1L4 20l1-4.6A8 8 0 1 1 21 12z" fill="#161A14"></path></svg>1K</button>
<button aria-label="Share, 381 shares" style="margin-left: auto; height: 32px; padding: 0 4px; display: flex; align-items: center; gap: 6px; font-size: 12px; font-weight: 700; color: #161A14">381<svg width="17" height="17" viewBox="0 0 24 24" aria-hidden="true"><path d="M21 3 3 10l7 4 4 7z" fill="#161A14"></path></svg></button>
</div>
</article>

<article style="background: #FFFFFF; border-radius: 22px; padding: 14px; display: flex; flex-direction: column; gap: 12px">
<div style="display: flex; align-items: center; gap: 10px">
<img src="https://developermill.com/app-designs/social-media-reels-app-ui-design/assets/285c9fc0a5.jpg" alt="Esther Howard" style="width: 38px; height: 38px; border-radius: 999px; object-fit: cover; display: block">
<div style="flex-grow: 1; display: flex; flex-direction: column; gap: 2px">
<span style="font-size: 14px; font-weight: 700">Esther Howard</span>
<span style="display: flex; align-items: center; gap: 4px; font-size: 11px; color: #626860">4h ago <svg width="11" height="11" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true"><circle cx="12" cy="12" r="9"></circle><path d="M3 12h18M12 3c3 3.5 3 14.5 0 18M12 3c-3 3.5-3 14.5 0 18"></path></svg></span>
</div>
<button aria-label="Post options" style="width: 32px; height: 32px; display: flex; align-items: center; justify-content: center; color: #626860"><svg width="18" height="18" viewBox="0 0 24 24" aria-hidden="true"><circle cx="12" cy="5" r="1.8" fill="currentColor"></circle><circle cx="12" cy="12" r="1.8" fill="currentColor"></circle><circle cx="12" cy="19" r="1.8" fill="currentColor"></circle></svg></button>
</div>
<p style="margin: 0; font-size: 13px; line-height: 1.45; color: #2A2E27">More fresh new travel content inspo for all you travel bloggers or creators working but as … <a href="#">More...</a></p>
<div style="position: relative; height: 196px; border-radius: 18px; overflow: hidden; background: #557F4C">
<img src="https://developermill.com/app-designs/social-media-reels-app-ui-design/assets/45a7c42aa5.jpg" alt="Road through rainforest disappearing into clouds" style="width: 100%; height: 100%; object-fit: cover; display: block">
</div>
</article>
</div>

<nav aria-label="Main" style="position: absolute; left: 0; right: 0; bottom: 30px; display: flex; justify-content: center; align-items: center; gap: 10px">
<div style="display: flex; gap: 8px; padding: 6px; border-radius: 999px; background: rgba(28,36,26,0.42); backdrop-filter: blur(14px)">
<button aria-label="Home" aria-current="page" style="width: 44px; height: 44px; border-radius: 999px; background: {{accent}}; display: flex; align-items: center; justify-content: center; color: #10200A"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M3 10.5 12 3l9 7.5V20a1 1 0 0 1-1 1h-5v-6h-6v6H4a1 1 0 0 1-1-1z"></path></svg></button>
<button aria-label="Gallery" style="width: 44px; height: 44px; border-radius: 999px; background: rgba(255,255,255,0.18); display: flex; align-items: center; justify-content: center; color: #FFFFFF"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3" y="3" width="18" height="18" rx="4"></rect><circle cx="9" cy="9" r="1.6"></circle><path d="m21 15-4.5-4.5L7 20"></path></svg></button>
<button aria-label="Reels" style="width: 44px; height: 44px; border-radius: 999px; background: rgba(255,255,255,0.18); display: flex; align-items: center; justify-content: center; color: #FFFFFF"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3" y="3" width="18" height="18" rx="4"></rect><path d="M3 8h18M8 3l3 5M14 3l3 5"></path><path d="m10 12 5 3-5 3z"></path></svg></button>
<button aria-label="Profile" style="width: 44px; height: 44px; border-radius: 999px; background: rgba(255,255,255,0.18); display: flex; align-items: center; justify-content: center; color: #FFFFFF"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="8" r="4"></circle><path d="M4 21c1.5-4 4.5-6 8-6s6.5 2 8 6"></path></svg></button>
</div>
<button aria-label="Search" style="width: 56px; height: 56px; border-radius: 999px; background: rgba(28,36,26,0.42); backdrop-filter: blur(14px); display: flex; align-items: center; justify-content: center; color: #FFFFFF"><svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="11" cy="11" r="7"></circle><path d="m20 20-3.5-3.5"></path></svg></button>
</nav>
</div>
</x-dc>
<script type="text/x-dc" data-dc-script data-props='{"accent":{"editor":"color","default":"#62D61C","options":["#62D61C","#2EC4B6","#FF8A1F"]},"$preview":{"width":390,"height":844}}'>
class Component extends DCLogic {
renderVals() {
return {
accent: this.props.accent ?? '#62D61C',
stories: [
{ name: 'Me', img: 'https://developermill.com/app-designs/social-media-reels-app-ui-design/assets/5e10a900f8.jpg', me: true, live: false },
{ name: 'Haris', img: 'https://developermill.com/app-designs/social-media-reels-app-ui-design/assets/2c59778199.jpg', me: false, live: true },
{ name: 'Abdullah', img: 'https://developermill.com/app-designs/social-media-reels-app-ui-design/assets/8c4d711d8f.jpg', me: false, live: false },
{ name: 'Sienna', img: 'https://developermill.com/app-designs/social-media-reels-app-ui-design/assets/8c1946dbf2.jpg', me: false, live: false },
{ name: 'Alex', img: 'https://developermill.com/app-designs/social-media-reels-app-ui-design/assets/16d174176c.jpg', me: false, live: false },
{ name: 'Joe', img: 'https://developermill.com/app-designs/social-media-reels-app-ui-design/assets/edbf36e0ac.jpg', me: false, live: false }
]
};
}
}
</script>
</body>
</html>
```

### Creator profile (Profile)

```html
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Frindly Profile</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=Urbanist:wght@400;500;600;700;800&amp;display=swap" rel="stylesheet">
<style>
body{margin:0}
button{font:inherit;border:0;padding:0;margin:0;cursor:pointer;background:none;color:inherit}
a{color:#237A0A}a:hover{color:#175607}
</style>
</helmet>
<div style="width: 390px; height: 844px; position: relative; overflow: hidden; background: #F1F2EF; font-family: 'Urbanist', system-ui, sans-serif; color: #161A14">

<div style="background: #FFFFFF; padding: 56px 16px 0; display: flex; flex-direction: column; gap: 14px">
<div style="display: flex; align-items: center; gap: 12px">
<div style="width: 54px; height: 54px; border-radius: 999px; padding: 2px; background: {{accent}}; box-sizing: border-box; flex-shrink: 0">
<img src="https://developermill.com/app-designs/social-media-reels-app-ui-design/assets/1111e64415.jpg" alt="Brooklyn Simmons" style="width: 100%; height: 100%; border-radius: 999px; border: 2px solid #FFFFFF; box-sizing: border-box; object-fit: cover; display: block">
</div>
<div style="flex-grow: 1; display: flex; flex-direction: column; gap: 2px">
<h1 style="margin: 0; font-size: 17px; font-weight: 700">Brooklyn Simmons</h1>
<span style="font-size: 12px; color: #626860">@Broo65dx</span>
</div>
<button style="height: 34px; padding: 0 20px; border-radius: 999px; background: {{accent}}; color: #10200A; font-size: 14px; font-weight: 700">Follow</button>
</div>

<div style="display: flex; flex-direction: column; gap: 4px; font-size: 13px; color: #2A2E27">
<span style="display: flex; align-items: center; gap: 6px"><svg width="13" height="13" viewBox="0 0 24 24" aria-hidden="true"><path d="M12 21c-4 0-7-2.7-7-6.5 0-3 2-5 3.5-6.5.3 2 1.3 3 2.5 3.5C11 8 12 5 14 3c.5 3 5 5.5 5 11 0 4-3 7-7 7z" fill="#FF7A12"></path></svg>Top UI/UX Inspiration</span>
<span style="display: flex; align-items: center; gap: 6px"><svg width="13" height="13" viewBox="0 0 24 24" aria-hidden="true"><path d="M12 21c-4 0-7-2.7-7-6.5 0-3 2-5 3.5-6.5.3 2 1.3 3 2.5 3.5C11 8 12 5 14 3c.5 3 5 5.5 5 11 0 4-3 7-7 7z" fill="#FF7A12"></path></svg>Best resources and guide</span>
</div>

<div style="display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 4px; padding: 4px 0">
<div style="display: flex; flex-direction: column; align-items: center; gap: 2px"><span style="font-size: 19px; font-weight: 800">400</span><span style="font-size: 12px; color: #626860">Post</span></div>
<div style="display: flex; flex-direction: column; align-items: center; gap: 2px"><span style="font-size: 19px; font-weight: 800">128.6K</span><span style="font-size: 12px; color: #626860">Followers</span></div>
<div style="display: flex; flex-direction: column; align-items: center; gap: 2px"><span style="font-size: 19px; font-weight: 800">600</span><span style="font-size: 12px; color: #626860">Following</span></div>
<div style="display: flex; flex-direction: column; align-items: center; gap: 2px"><span style="font-size: 19px; font-weight: 800">4.8M</span><span style="font-size: 12px; color: #626860">Likes</span></div>
</div>

<div role="tablist" aria-label="Profile content" style="display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 0">
<button role="tab" aria-selected="false" aria-label="Posts" style="height: 46px; display: flex; align-items: center; justify-content: center; color: #8A9086; border-bottom: 3px solid transparent"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" aria-hidden="true"><rect x="3" y="3" width="7" height="7" rx="1.5"></rect><rect x="14" y="3" width="7" height="7" rx="1.5"></rect><rect x="3" y="14" width="7" height="7" rx="1.5"></rect><rect x="14" y="14" width="7" height="7" rx="1.5"></rect></svg></button>
<button role="tab" aria-selected="true" aria-label="Reels" style="height: 46px; display: flex; align-items: center; justify-content: center; color: #161A14; border-bottom: 3px solid {{accent}}"><svg width="20" height="20" viewBox="0 0 24 24" aria-hidden="true"><rect x="3" y="3" width="18" height="18" rx="4" fill="#161A14"></rect><path d="M3 8h18M8 3l3 5M14 3l3 5" stroke="#FFFFFF" stroke-width="1.6"></path><path d="m10 12 5 3-5 3z" fill="#FFFFFF"></path></svg></button>
<button role="tab" aria-selected="false" aria-label="Saved" style="height: 46px; display: flex; align-items: center; justify-content: center; color: #8A9086; border-bottom: 3px solid transparent"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" aria-hidden="true"><rect x="4" y="3" width="16" height="18" rx="2"></rect><path d="M8 8h8M8 12h8M8 16h5"></path></svg></button>
</div>
</div>

<div style="padding: 10px 8px; display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 6px">
<sc-for list="{{tiles}}" as="t" hint-placeholder-count="9">
<div style="position: relative; height: 152px; border-radius: 14px; overflow: hidden; background: {{t.tone}}">
<img src="{{t.img}}" alt="{{t.label}}" style="position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; display: block">
<div style="position: absolute; left: 0; right: 0; bottom: 0; height: 44px; background: linear-gradient(0deg, rgba(0,0,0,0.45), rgba(0,0,0,0))"></div>
<span style="position: absolute; left: 6px; bottom: 6px; display: flex; align-items: center; gap: 4px; font-size: 11px; font-weight: 700; color: #FFFFFF"><span style="width: 16px; height: 16px; border-radius: 999px; background: {{accent}}; display: flex; align-items: center; justify-content: center"><svg width="10" height="10" viewBox="0 0 24 24" fill="none" stroke="#10200A" stroke-width="2.6" aria-hidden="true"><path d="M2 12s3.5-7 10-7 10 7 10 7-3.5 7-10 7S2 12 2 12z"></path><circle cx="12" cy="12" r="3"></circle></svg></span>{{t.views}}</span>
</div>
</sc-for>
</div>

<nav aria-label="Main" style="position: absolute; left: 0; right: 0; bottom: 30px; display: flex; justify-content: center; align-items: center; gap: 10px">
<div style="display: flex; gap: 8px; padding: 6px; border-radius: 999px; background: rgba(28,36,26,0.42); backdrop-filter: blur(14px)">
<button aria-label="Home" style="width: 44px; height: 44px; border-radius: 999px; background: rgba(255,255,255,0.18); display: flex; align-items: center; justify-content: center; color: #FFFFFF"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M3 10.5 12 3l9 7.5V20a1 1 0 0 1-1 1h-5v-6h-6v6H4a1 1 0 0 1-1-1z"></path></svg></button>
<button aria-label="Gallery" style="width: 44px; height: 44px; border-radius: 999px; background: rgba(255,255,255,0.18); display: flex; align-items: center; justify-content: center; color: #FFFFFF"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3" y="3" width="18" height="18" rx="4"></rect><circle cx="9" cy="9" r="1.6"></circle><path d="m21 15-4.5-4.5L7 20"></path></svg></button>
<button aria-label="Reels" style="width: 44px; height: 44px; border-radius: 999px; background: rgba(255,255,255,0.18); display: flex; align-items: center; justify-content: center; color: #FFFFFF"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3" y="3" width="18" height="18" rx="4"></rect><path d="M3 8h18M8 3l3 5M14 3l3 5"></path><path d="m10 12 5 3-5 3z"></path></svg></button>
<button aria-label="Profile" aria-current="page" style="width: 44px; height: 44px; border-radius: 999px; background: {{accent}}; display: flex; align-items: center; justify-content: center; color: #10200A"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="8" r="4"></circle><path d="M4 21c1.5-4 4.5-6 8-6s6.5 2 8 6"></path></svg></button>
</div>
<button aria-label="Search" style="width: 56px; height: 56px; border-radius: 999px; background: rgba(28,36,26,0.42); backdrop-filter: blur(14px); display: flex; align-items: center; justify-content: center; color: #FFFFFF"><svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="11" cy="11" r="7"></circle><path d="m20 20-3.5-3.5"></path></svg></button>
</nav>
</div>
</x-dc>
<script type="text/x-dc" data-dc-script data-props='{"accent":{"editor":"color","default":"#62D61C","options":["#62D61C","#2EC4B6","#FF8A1F"]},"$preview":{"width":390,"height":844}}'>
class Component extends DCLogic {
renderVals() {
return {
accent: this.props.accent ?? '#62D61C',
tiles: [
{ label: 'Lakeside alpine village', views: '260K', tone: '#4E6E86', img: 'https://developermill.com/app-designs/social-media-reels-app-ui-design/assets/7d07382419.jpg' },
{ label: 'Forest road, aerial', views: '1.2M', tone: '#4F7A45', img: 'https://developermill.com/app-designs/social-media-reels-app-ui-design/assets/7acbb3bce1.jpg' },
{ label: 'Snowy mountain town', views: '3.2M', tone: '#6F7F8C', img: 'https://developermill.com/app-designs/social-media-reels-app-ui-design/assets/3a97d9868e.jpg' },
{ label: 'Peaks above the clouds', views: '11K', tone: '#5B6E58', img: 'https://developermill.com/app-designs/social-media-reels-app-ui-design/assets/e13755bb9e.jpg' },
{ label: 'Green ridge road', views: '200K', tone: '#6E9A63', img: 'https://developermill.com/app-designs/social-media-reels-app-ui-design/assets/6faec5afbd.jpg' },
{ label: 'Fjord with chapel', views: '232K', tone: '#3F7287', img: 'https://developermill.com/app-designs/social-media-reels-app-ui-design/assets/9acd8c1b02.jpg' },
{ label: 'Misty forest road', views: '98K', tone: '#557F4C', img: 'https://developermill.com/app-designs/social-media-reels-app-ui-design/assets/bed37d7825.jpg' },
{ label: 'Tea hills road in fog', views: '45K', tone: '#628A57', img: 'https://developermill.com/app-designs/social-media-reels-app-ui-design/assets/5d20b6d9d7.jpg' },
{ label: 'Jungle highway', views: '1.1M', tone: '#4A7341', img: 'https://developermill.com/app-designs/social-media-reels-app-ui-design/assets/e6b8997303.jpg' }
]
};
}
}
</script>
</body>
</html>
```

SKILL.md

Save as .claude/skills/social-media-reels-app-ui/SKILL.md

---
name: social-media-reels-app-ui
description: Build the Frindly Social mobile app UI in Expo React Native. Use when asked to create a social media app UI or a new screen in this visual style.
---

# Frindly Social app UI

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

Reference: https://developermill.com/app-designs/social-media-reels-app-ui-design

## Visual direction

Fresh green accents on clean white and full-screen nature video frames, with frosted glass navigation on every screen.

Keep these signature details:

- Full-screen reels with a side action rail
- Stories row with live and add badges
- Feed cards with engagement pills
- Three column reels grid on profiles

## Set up

```bash
npx expo install expo-blur expo-image expo-linear-gradient react-native-svg @expo-google-fonts/urbanist expo-font
```

## Tokens

| Name | Hex |
| --- | --- |
| Frindly green | `#62D61C` |
| Deep green | `#10200A` |
| Off white | `#F1F2EF` |
| Ink | `#161A14` |
| Like red | `#F0384B` |
| Moss grey | `#626860` |

- Typefaces: Urbanist
- Text sizes (px): 9, 11, 12, 13, 14, 17, 19, 22
- Corner radii (px): 6, 9, 12, 14, 18, 22

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

## Screens

1. **Reels.** A full-screen forest road, creator row with a follow button, side action rail and glass navigation.
2. **Home feed.** A stories row with live and add badges, then post cards with video, captions and engagement counts.
3. **Creator profile.** An avatar, bio, follower stats, content tabs and a three column grid of reels with view counts.

## 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 social-media-reels-app --template default
cd social-media-reels-app
rm -rf src
npx expo install expo-blur expo-image expo-linear-gradient react-native-svg @expo-google-fonts/urbanist expo-font

src/app/_layout.tsx

import {
  Urbanist_400Regular,
  Urbanist_500Medium,
  Urbanist_600SemiBold,
  Urbanist_700Bold,
  Urbanist_800ExtraBold,
} from '@expo-google-fonts/urbanist';
import { useFonts } from 'expo-font';
import { Stack } from 'expo-router';

export default function RootLayout() {
  const [fontsLoaded] = useFonts({
    Urbanist_400Regular,
    Urbanist_500Medium,
    Urbanist_600SemiBold,
    Urbanist_700Bold,
    Urbanist_800ExtraBold,
  });

  if (!fontsLoaded) return null;

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

About this design

A frosted glass navigation bar floats over each screen and a bright green accent ties them together. Stories and grid tiles come from simple arrays, so it is quick to connect to a real feed.

Fresh green accents on clean white and full-screen nature video frames, with frosted glass navigation on every screen.

  • Full-screen reels with a side action rail
  • Stories row with live and add badges
  • Feed cards with engagement pills
  • Three column reels grid on profiles

Colour palette

  • Frindly green

    #62D61C

  • Deep green

    #10200A

  • Off white

    #F1F2EF

  • Ink

    #161A14

  • Like red

    #F0384B

  • Moss grey

    #626860

How to use this design

  1. 01

    Pick what to copy

    Copy the Frindly Social 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

Do the reels play video?

The reel uses an image frame in this design. Replace it with expo-video and a vertical pager for real playback.

How is the glass navigation built?

The bar uses BlurView from expo-blur with a tinted background, and the active tab uses the green accent.

Can I change the accent colour?

Yes. The accent is one value, so teal or orange themes are a quick change.

Is the Frindly Social 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