// Social app UI

Influencer Marketplace App UI Design in Expo

This influencer marketplace app UI helps brands find creators for a campaign. Search and category chips sit above a staggered grid of talent, and each card opens a full creator profile.

Screens
2
Built with
Expo SDK 58
Fonts
Syne, Outfit
License
Free (MIT)
Influencer profile screen with a portrait, social stats and contact button

Influencer Marketplace app screens

Influencer marketing app screen with search, categories and a creator photo grid

Discover creators

A headline for campaigns, search with filters, category chips and a staggered creator grid under a floating tab bar.

Influencer profile screen with a portrait, social stats and contact button

Creator profile

A framed portrait wrapped by a pink ribbon, social reach tiles, a short bio, latest work and a contact button.

Copy the Influencer Marketplace 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

# Influencer Marketplace: design artifact

This influencer marketplace app UI helps brands find creators for a campaign. Search and category chips sit above a staggered grid of talent, and each card opens a full creator profile.

- Type: Social mobile app UI
- Screens: 2
- 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/influencer-marketplace-app-ui-design

## Design direction

Black canvas with looping pink ribbon strokes, a peach display face and glassy stat tiles over neon event photography.

- Hand-drawn ribbon strokes in SVG
- Staggered creator grid with verified badges
- Removable category chips
- Profile with reach by social platform

## Foundations

### Colour

| Token | Hex |
| --- | --- |
| Black | `#111014` |
| Charcoal | `#1D191C` |
| Peach | `#F2A37E` |
| Orchid | `#F0A2E6` |
| Mist | `#F4EEF1` |
| Stone | `#B8AEB4` |

### Typography

- Typefaces: Syne, Outfit
- Common sizes (px): 11, 12, 13, 14, 30

### Shape and depth

- Common corner radii (px): 10, 14, 16, 18, 20, 24
- Shadows: `inset 0 1px 0 rgba(255,255,255,0.16), 0 8px 24px rgba(0,0,0,0.35)`, `0 12px 32px rgba(0,0,0,0.5)`, `0 20px 40px rgba(0,0,0,0.45)`, `inset 0 1px 0 rgba(255,255,255,0.18), 0 8px 24px rgba(0,0,0,0.35)`

## Screens

### 1. Discover creators

A headline for campaigns, search with filters, category chips and a staggered creator grid under a floating tab bar.

Preview: https://developermill.com/app-designs/influencer-marketplace-app-ui-design/discover.webp

Copy on this screen:

- Best Influencers
- for your marketing
- campaigns
- Models
- Lifestyle
- Sports

### 2. Creator profile

A framed portrait wrapped by a pink ribbon, social reach tiles, a short bio, latest work and a contact button.

Preview: https://developermill.com/app-designs/influencer-marketplace-app-ui-design/profile.webp

Copy on this screen:

- Zara Quinn
- Party Influencer
- 11.6M
- 7.3M
- 1.1M
- Hi! I’m ready for collaborations with streetwear and event organizer brands.
- Latest
- Contact Influencer

## Full source

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

### Discover creators (Main)

```html
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Discover influencers</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=Syne:wght@600;700&amp;family=Outfit:wght@400;500;600&amp;display=swap" rel="stylesheet">
<style>
body{margin:0}
a{color:#F2A37E}a:hover{color:#F7C2A6}
</style>
</helmet>
<div style="width: 390px; height: 844px; position: relative; overflow: hidden; background: #0D0A0C; font-family: Outfit, system-ui, sans-serif; color: #F4EEF1">

  <svg aria-hidden="true" width="390" height="150" viewBox="0 0 390 150" style="position: absolute; left: 0; top: 0">
    <path d="M70 -10 C 60 40, 120 60, 130 30 C 140 0, 90 0, 110 45 C 130 90, 200 60, 215 35 C 230 10, 260 20, 250 55 C 240 90, 300 95, 330 60 C 350 35, 380 30, 400 50" fill="none" stroke="{{accent}}" stroke-width="16" stroke-linecap="round"></path>
  </svg>

  <div style="position: absolute; left: 24px; right: 24px; top: 128px; display: flex; flex-direction: column; gap: 22px">
    <h1 style="margin: 0; font-family: Syne, sans-serif; font-weight: 700; font-size: 30px; line-height: 1.12; letter-spacing: -0.2px; color: #F2A37E">Best Influencers<br>for your marketing<br>campaigns</h1>

    <div style="display: flex; align-items: center; gap: 10px">
      <label style="flex: 1; display: flex; align-items: center; gap: 10px; height: 50px; padding: 0 16px; border-radius: 16px; background: #1D191C; border: 1px solid #2A2529">
        <svg aria-hidden="true" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="#B8AEB4" stroke-width="2" stroke-linecap="round"><circle cx="11" cy="11" r="7"></circle><path d="M20 20l-3.5-3.5"></path></svg>
        <input type="search" placeholder="Search Influencer" aria-label="Search influencer" style="flex: 1; background: transparent; border: 0; outline: none; color: #F4EEF1; font: 400 15px Outfit, sans-serif">
      </label>
      <button aria-label="Filters" style="width: 50px; height: 50px; border-radius: 16px; background: #1D191C; border: 1px solid #2A2529; display: flex; align-items: center; justify-content: center; cursor: pointer">
        <svg aria-hidden="true" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#F4EEF1" stroke-width="1.8" stroke-linecap="round"><path d="M8 4v16M16 4v16"></path><circle cx="8" cy="9" r="2.4" fill="#1D191C"></circle><circle cx="16" cy="15" r="2.4" fill="#1D191C"></circle></svg>
      </button>
    </div>

    <div style="display: flex; gap: 8px; margin-right: -24px; overflow: hidden">
      <button style="display: flex; align-items: center; gap: 10px; height: 40px; padding: 0 6px 0 14px; border-radius: 14px; background: #1D191C; border: 1px solid #2A2529; color: #F4EEF1; font: 500 14px Outfit, sans-serif; white-space: nowrap">Models<span aria-hidden="true" style="width: 28px; height: 28px; border-radius: 10px; background: #2C272B; display: flex; align-items: center; justify-content: center"><svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="#F4EEF1" stroke-width="2.4" stroke-linecap="round"><path d="M6 6l12 12M18 6L6 18"></path></svg></span></button>
      <button style="display: flex; align-items: center; gap: 10px; height: 40px; padding: 0 6px 0 14px; border-radius: 14px; background: #1D191C; border: 1px solid #2A2529; color: #F4EEF1; font: 500 14px Outfit, sans-serif; white-space: nowrap">Lifestyle<span aria-hidden="true" style="width: 28px; height: 28px; border-radius: 10px; background: #2C272B; display: flex; align-items: center; justify-content: center"><svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="#F4EEF1" stroke-width="2.4" stroke-linecap="round"><path d="M6 6l12 12M18 6L6 18"></path></svg></span></button>
      <button style="display: flex; align-items: center; gap: 10px; height: 40px; padding: 0 6px 0 14px; border-radius: 14px; background: #1D191C; border: 1px solid #2A2529; color: #F4EEF1; font: 500 14px Outfit, sans-serif; white-space: nowrap">Sports<span aria-hidden="true" style="width: 28px; height: 28px; border-radius: 10px; background: #2C272B; display: flex; align-items: center; justify-content: center"><svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="#F4EEF1" stroke-width="2.4" stroke-linecap="round"><path d="M6 6l12 12M18 6L6 18"></path></svg></span></button>
    </div>
  </div>

  <div style="position: absolute; left: 16px; right: 16px; top: 432px; display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px">
    <div style="display: flex; flex-direction: column; gap: 8px">
      <sc-for list="{{leftCol}}" as="c" hint-placeholder-count="2">
        <div style="position: relative; height: {{c.h}}; border-radius: 20px; overflow: hidden; background: {{c.photo}}">
          <img src="{{c.src}}" alt="{{c.alt}}" style="position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; object-position: center 25%">
          <div aria-hidden="true" style="position: absolute; inset: 0; background: linear-gradient(to bottom, rgba(0,0,0,0.25), rgba(0,0,0,0) 30%)"></div>
          <button aria-label="Save to favourites" style="position: absolute; right: 10px; top: 10px; width: 32px; height: 32px; border: 0; background: transparent; display: flex; align-items: center; justify-content: center">
            <svg aria-hidden="true" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#FFFFFF" stroke-width="1.8" stroke-linejoin="round"><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: 0; right: 0; bottom: 0; padding: 36px 12px 12px; background: linear-gradient(to top, rgba(0,0,0,0.78), rgba(0,0,0,0))">
            <div style="display: flex; align-items: center; gap: 5px; font: 600 14px Outfit, sans-serif; color: #FFFFFF">{{c.name}}<svg role="img" aria-label="Verified" width="14" height="14" viewBox="0 0 24 24"><circle cx="12" cy="12" r="11" fill="#E68BD6"></circle><path d="M7.5 12.5l3 3 6-6.5" fill="none" stroke="#FFFFFF" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"></path></svg></div>
            <div style="font-size: 12px; color: #CFC6CB; margin-top: 2px">{{c.role}}</div>
          </div>
        </div>
      </sc-for>
    </div>
    <div style="display: flex; flex-direction: column; gap: 8px">
      <sc-for list="{{rightCol}}" as="c" hint-placeholder-count="2">
        <div style="position: relative; height: {{c.h}}; border-radius: 20px; overflow: hidden; background: {{c.photo}}">
          <img src="{{c.src}}" alt="{{c.alt}}" style="position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; object-position: center 25%">
          <div aria-hidden="true" style="position: absolute; inset: 0; background: linear-gradient(to bottom, rgba(0,0,0,0.25), rgba(0,0,0,0) 30%)"></div>
          <button aria-label="Save to favourites" style="position: absolute; right: 10px; top: 10px; width: 32px; height: 32px; border: 0; background: transparent; display: flex; align-items: center; justify-content: center">
            <svg aria-hidden="true" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#FFFFFF" stroke-width="1.8" stroke-linejoin="round"><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: 0; right: 0; bottom: 0; padding: 36px 12px 12px; background: linear-gradient(to top, rgba(0,0,0,0.78), rgba(0,0,0,0))">
            <div style="display: flex; align-items: center; gap: 5px; font: 600 14px Outfit, sans-serif; color: #FFFFFF">{{c.name}}<svg role="img" aria-label="Verified" width="14" height="14" viewBox="0 0 24 24"><circle cx="12" cy="12" r="11" fill="#E68BD6"></circle><path d="M7.5 12.5l3 3 6-6.5" fill="none" stroke="#FFFFFF" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"></path></svg></div>
            <div style="font-size: 12px; color: #CFC6CB; margin-top: 2px">{{c.role}}</div>
          </div>
        </div>
      </sc-for>
    </div>
  </div>

  <nav aria-label="Main" style="position: absolute; left: 50%; bottom: 34px; transform: translateX(-50%); display: flex; gap: 6px; padding: 8px; border-radius: 24px; background: rgba(28,24,27,0.94); border: 1px solid #2E292D; box-shadow: 0 12px 32px rgba(0,0,0,0.5)">
    <a href="#" aria-label="Home" style="width: 48px; height: 44px; border-radius: 16px; background: #2E282C; display: flex; align-items: center; justify-content: center"><svg aria-hidden="true" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="#FFFFFF" stroke-width="1.8" stroke-linejoin="round"><path d="M4 10.5L12 4l8 6.5V20H4z"></path><path d="M10 20v-5h4v5"></path></svg></a>
    <a href="#" aria-label="Messages" style="width: 48px; height: 44px; border-radius: 16px; display: flex; align-items: center; justify-content: center"><svg aria-hidden="true" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="#B8AEB4" stroke-width="1.8" stroke-linejoin="round"><path d="M4 5h16v11H9l-5 4z"></path><path d="M8 10h.01M12 10h.01M16 10h.01" stroke-linecap="round" stroke-width="2.4"></path></svg></a>
    <a href="#" aria-label="Favourites" style="width: 48px; height: 44px; border-radius: 16px; display: flex; align-items: center; justify-content: center"><svg aria-hidden="true" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="#B8AEB4" stroke-width="1.8" stroke-linejoin="round"><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></a>
    <a href="#" aria-label="Profile" style="width: 48px; height: 44px; border-radius: 16px; display: flex; align-items: center; justify-content: center"><svg aria-hidden="true" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="#B8AEB4" stroke-width="1.8"><circle cx="12" cy="12" r="8.5"></circle><circle cx="12" cy="10" r="3"></circle><path d="M6.8 18.2c1.3-2 3.1-3 5.2-3s3.9 1 5.2 3"></path></svg></a>
  </nav>
</div>
</x-dc>
<script type="text/x-dc" data-dc-script data-props='{"accent":{"editor":"color","default":"#F0A2E6","options":["#F0A2E6","#F2A37E","#9EC5FF"]},"$preview":{"width":390,"height":844}}'>
class Component extends DCLogic {
  renderVals() {
    return {
      accent: this.props.accent ?? '#F0A2E6',
      leftCol: [
        { name: 'Leo Carter', role: 'Club DJ', h: '172px', src: 'https://developermill.com/app-designs/influencer-marketplace-app-ui-design/assets/c55cdfc657.jpg', alt: 'Leo Carter DJing under green lasers', photo: '#1B2A14' },
        { name: 'Nina Costa', role: 'Beauty model', h: '220px', src: 'https://developermill.com/app-designs/influencer-marketplace-app-ui-design/assets/69bc7c7ba5.jpg', alt: 'Nina Costa in a sequin jacket on stage', photo: '#1A1530' }
      ],
      rightCol: [
        { name: 'Maya Brooks', role: 'Fashion model', h: '220px', src: 'https://developermill.com/app-designs/influencer-marketplace-app-ui-design/assets/6073575a4b.jpg', alt: 'Maya Brooks in warm club light', photo: '#2A1612' },
        { name: 'Theo Grant', role: 'Sports creator', h: '172px', src: 'https://developermill.com/app-designs/influencer-marketplace-app-ui-design/assets/cb92db0f6a.jpg', alt: 'Theo Grant on a city street at night', photo: '#0F1D1C' }
      ]
    };
  }
}
</script>
</body>
</html>
```

### Creator profile (Profile)

```html
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Influencer 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=Syne:wght@600;700&amp;family=Outfit:wght@400;500;600&amp;display=swap" rel="stylesheet">
<style>
body{margin:0}
a{color:#F2A37E}a:hover{color:#F7C2A6}
</style>
</helmet>
<div style="width: 390px; height: 844px; position: relative; overflow: hidden; background: #0D0A0C; font-family: Outfit, system-ui, sans-serif; color: #F4EEF1">

  <svg aria-hidden="true" width="390" height="420" viewBox="0 0 390 420" style="position: absolute; left: 0; top: 0">
    <path d="M150 -10 C 170 30, 250 20, 300 40 C 360 65, 400 40, 420 30" fill="none" stroke="{{accent}}" stroke-width="16" stroke-linecap="round"></path>
    <path d="M-20 150 C 20 120, 60 140, 70 175 C 80 210, 30 230, 60 255" fill="none" stroke="{{accent}}" stroke-width="16" stroke-linecap="round"></path>
    <path d="M330 170 C 380 160, 410 210, 380 250 C 355 285, 300 270, 320 240" fill="none" stroke="{{accent}}" stroke-width="16" stroke-linecap="round"></path>
    <path d="M150 360 C 170 395, 215 390, 240 370" fill="none" stroke="{{accent}}" stroke-width="14" stroke-linecap="round"></path>
  </svg>

  <a href="Main.dc.html" aria-label="Back" style="position: absolute; left: 20px; top: 70px; z-index: 2; width: 44px; height: 44px; border-radius: 50%; background: rgba(40,35,39,0.85); display: flex; align-items: center; justify-content: center"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#FFFFFF" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M15 5l-7 7 7 7"></path></svg></a>

  <div style="position: absolute; left: 66px; top: 66px; width: 258px; height: 300px; border-radius: 24px; overflow: hidden; background: #2A1A28; box-shadow: 0 20px 40px rgba(0,0,0,0.45)">
    <img src="https://developermill.com/app-designs/influencer-marketplace-app-ui-design/assets/9cc208790a.jpg" alt="Zara Quinn seated in a bucket hat between neon lights" style="width: 100%; height: 100%; object-fit: cover; object-position: center 30%; display: block">
  </div>

  <div style="position: absolute; left: 16px; right: 16px; top: 388px; display: flex; gap: 8px">
    <div style="flex: 1; min-width: 0; padding: 14px 14px; border-radius: 18px; background: linear-gradient(135deg, rgba(255,255,255,0.14), rgba(255,255,255,0.04)); border: 1px solid rgba(255,255,255,0.16); box-shadow: inset 0 1px 0 rgba(255,255,255,0.18), 0 8px 24px rgba(0,0,0,0.35); backdrop-filter: blur(20px) saturate(150%); -webkit-backdrop-filter: blur(20px) saturate(150%); display: flex; flex-direction: column; justify-content: center; gap: 4px">
      <div style="display: flex; align-items: center; gap: 6px; font: 600 17px Outfit, sans-serif">Zara Quinn<svg role="img" aria-label="Verified" width="16" height="16" viewBox="0 0 24 24"><circle cx="12" cy="12" r="11" fill="#E68BD6"></circle><path d="M7.5 12.5l3 3 6-6.5" fill="none" stroke="#FFFFFF" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"></path></svg></div>
      <div style="font-size: 13px; color: #BDB3B9">Party Influencer</div>
    </div>
    <a href="#" aria-label="Instagram, 11.6 million followers" style="width: 52px; padding: 12px 0; border-radius: 18px; background: linear-gradient(160deg, rgba(255,255,255,0.12), rgba(255,255,255,0.03)); border: 1px solid rgba(255,255,255,0.14); box-shadow: inset 0 1px 0 rgba(255,255,255,0.16), 0 8px 24px rgba(0,0,0,0.35); backdrop-filter: blur(20px) saturate(150%); -webkit-backdrop-filter: blur(20px) saturate(150%); display: flex; flex-direction: column; align-items: center; gap: 8px; text-decoration: none; color: #F4EEF1">
      <svg aria-hidden="true" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#F4EEF1" stroke-width="1.8"><rect x="4" y="4" width="16" height="16" rx="5"></rect><circle cx="12" cy="12" r="3.6"></circle><circle cx="16.8" cy="7.2" r="0.9" fill="#F4EEF1" stroke="none"></circle></svg>
      <span style="font-size: 11px">11.6M</span>
    </a>
    <a href="#" aria-label="TikTok, 7.3 million followers" style="width: 52px; padding: 12px 0; border-radius: 18px; background: linear-gradient(160deg, rgba(255,255,255,0.12), rgba(255,255,255,0.03)); border: 1px solid rgba(255,255,255,0.14); box-shadow: inset 0 1px 0 rgba(255,255,255,0.16), 0 8px 24px rgba(0,0,0,0.35); backdrop-filter: blur(20px) saturate(150%); -webkit-backdrop-filter: blur(20px) saturate(150%); display: flex; flex-direction: column; align-items: center; gap: 8px; text-decoration: none; color: #F4EEF1">
      <svg aria-hidden="true" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#F4EEF1" stroke-width="1.8" stroke-linecap="round"><path d="M13 4v10.5a3.5 3.5 0 1 1-3.5-3.5"></path><path d="M13 4c.5 2.6 2.4 4.3 5 4.5"></path></svg>
      <span style="font-size: 11px">7.3M</span>
    </a>
    <a href="#" aria-label="Facebook, 1.1 million followers" style="width: 52px; padding: 12px 0; border-radius: 18px; background: linear-gradient(160deg, rgba(255,255,255,0.12), rgba(255,255,255,0.03)); border: 1px solid rgba(255,255,255,0.14); box-shadow: inset 0 1px 0 rgba(255,255,255,0.16), 0 8px 24px rgba(0,0,0,0.35); backdrop-filter: blur(20px) saturate(150%); -webkit-backdrop-filter: blur(20px) saturate(150%); display: flex; flex-direction: column; align-items: center; gap: 8px; text-decoration: none; color: #F4EEF1">
      <svg aria-hidden="true" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#F4EEF1" stroke-width="1.8" stroke-linecap="round"><path d="M14.5 4H13a3 3 0 0 0-3 3v13"></path><path d="M7.5 11h7"></path></svg>
      <span style="font-size: 11px">1.1M</span>
    </a>
  </div>

  <p style="position: absolute; left: 24px; right: 24px; top: 478px; margin: 0; font-size: 14px; line-height: 1.5; color: #DCD3D8">Hi! I’m ready for collaborations with streetwear and event organizer brands.</p>

  <h2 style="position: absolute; left: 24px; top: 540px; margin: 0; font: 600 15px Outfit, sans-serif; color: #F4EEF1">Latest</h2>

  <div style="position: absolute; left: 16px; top: 570px; right: -40px; display: flex; gap: 8px">
    <img src="https://developermill.com/app-designs/influencer-marketplace-app-ui-design/assets/ef32642df8.jpg" alt="Concert crowd under purple stage lights" style="width: 110px; height: 118px; flex: none; border-radius: 16px; object-fit: cover; background: #2A1035">
    <img src="https://developermill.com/app-designs/influencer-marketplace-app-ui-design/assets/9700e726de.jpg" alt="Hands holding a game controller" style="width: 110px; height: 118px; flex: none; border-radius: 16px; object-fit: cover; background: #1E2050">
    <img src="https://developermill.com/app-designs/influencer-marketplace-app-ui-design/assets/b0156366cb.jpg" alt="Dance All Night neon sign" style="width: 110px; height: 118px; flex: none; border-radius: 16px; object-fit: cover; background: #2A0C12">
    <img src="https://developermill.com/app-designs/influencer-marketplace-app-ui-design/assets/f448cc0666.jpg" alt="DJ hands on a mixer" style="width: 110px; height: 118px; flex: none; border-radius: 16px; object-fit: cover; background: #2A1A0A">
  </div>

  <a href="#" style="position: absolute; left: 32px; right: 32px; bottom: 54px; height: 58px; border-radius: 29px; border: 1.5px solid #F2A37E; background: linear-gradient(180deg, rgba(242,163,126,0.10), rgba(242,163,126,0.02)); display: flex; align-items: center; justify-content: center; text-decoration: none; color: #F4EEF1; font: 600 16px Outfit, sans-serif">Contact Influencer</a>
</div>
</x-dc>
<script type="text/x-dc" data-dc-script data-props='{"accent":{"editor":"color","default":"#F0A2E6","options":["#F0A2E6","#F2A37E","#9EC5FF"]},"$preview":{"width":390,"height":844}}'>
class Component extends DCLogic {
  renderVals() {
    return { accent: this.props.accent ?? '#F0A2E6' };
  }
}
</script>
</body>
</html>
```

SKILL.md

Save as .claude/skills/influencer-marketplace-app-ui/SKILL.md

---
name: influencer-marketplace-app-ui
description: Build the Influencer Marketplace mobile app UI in Expo React Native. Use when asked to create a influencer marketing app UI or a new screen in this visual style.
---

# Influencer Marketplace app UI

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

Reference: https://developermill.com/app-designs/influencer-marketplace-app-ui-design

## Visual direction

Black canvas with looping pink ribbon strokes, a peach display face and glassy stat tiles over neon event photography.

Keep these signature details:

- Hand-drawn ribbon strokes in SVG
- Staggered creator grid with verified badges
- Removable category chips
- Profile with reach by social platform

## Set up

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

## Tokens

| Name | Hex |
| --- | --- |
| Black | `#111014` |
| Charcoal | `#1D191C` |
| Peach | `#F2A37E` |
| Orchid | `#F0A2E6` |
| Mist | `#F4EEF1` |
| Stone | `#B8AEB4` |

- Typefaces: Syne, Outfit
- Text sizes (px): 11, 12, 13, 14, 30
- Corner radii (px): 10, 14, 16, 18, 20, 24

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

## Screens

1. **Discover creators.** A headline for campaigns, search with filters, category chips and a staggered creator grid under a floating tab bar.
2. **Creator profile.** A framed portrait wrapped by a pink ribbon, social reach tiles, a short bio, latest work and a contact button.

## 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 influencer-marketplace-app --template default
cd influencer-marketplace-app
rm -rf src
npx expo install expo-blur expo-image expo-linear-gradient react-native-svg @expo-google-fonts/outfit @expo-google-fonts/syne expo-font

src/app/_layout.tsx

import { Outfit_400Regular, Outfit_500Medium, Outfit_600SemiBold } from '@expo-google-fonts/outfit';
import { Syne_700Bold } from '@expo-google-fonts/syne';
import { useFonts } from 'expo-font';
import { Stack } from 'expo-router';

export default function RootLayout() {
  const [fontsLoaded] = useFonts({
    Outfit_400Regular,
    Outfit_500Medium,
    Outfit_600SemiBold,
    Syne_700Bold,
  });

  if (!fontsLoaded) return null;

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

About this design

The neon photos and pink ribbon give the app real attitude. The profile brings social reach, a short bio and recent work into one screen with a single contact action, which also suits model agencies and booking apps.

Black canvas with looping pink ribbon strokes, a peach display face and glassy stat tiles over neon event photography.

  • Hand-drawn ribbon strokes in SVG
  • Staggered creator grid with verified badges
  • Removable category chips
  • Profile with reach by social platform

Colour palette

  • Black

    #111014

  • Charcoal

    #1D191C

  • Peach

    #F2A37E

  • Orchid

    #F0A2E6

  • Mist

    #F4EEF1

  • Stone

    #B8AEB4

How to use this design

  1. 01

    Pick what to copy

    Copy the Influencer Marketplace 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

What is the pink ribbon made from?

It is an SVG path drawn with react-native-svg, so it stays sharp on every screen and can be recoloured from the code.

Can this be used for a model agency?

Yes. The grid and profile are generic talent screens. Change the stats and the contact action to fit bookings.

How does the glass effect work on the stat tiles?

Each tile layers a BlurView from expo-blur, a soft gradient and a thin border, then places the icon and value above them.

Is the Influencer Marketplace 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