team masonry profiles bio social css-columns no-js people team masonry profiles bio social columns no-javascript people masonry team grid with bios team members with social links masonry layout CSS columns team profiles
Team Masonry Profiles
Fetch pattern JSON:
curl https://webspire.de/patterns/team/masonry-profiles.json masonry-profiles.html
<section class="ws-team bg-[var(--ws-color-bg)] py-20">
<div class="mx-auto max-w-7xl px-6">
<div class="mx-auto max-w-2xl text-center">
<p class="text-sm font-semibold uppercase tracking-[0.18em] text-[var(--ws-color-accent)]">Our team</p>
<h2 class="mt-3 text-balance text-3xl font-bold tracking-tight text-[var(--ws-color-text)] sm:text-4xl">The people behind the product</h2>
</div>
<!-- CSS masonry columns -->
<div class="mt-12 columns-2 gap-4 lg:columns-4">
<!-- Card 1 — short (photo + name + role only) -->
<div class="break-inside-avoid mb-4 overflow-hidden rounded-2xl border border-[var(--ws-color-border)] bg-[var(--ws-color-surface)]">
<div class="aspect-square bg-gradient-to-br from-violet-300 to-violet-500 dark:from-violet-700 dark:to-violet-900"></div>
<div class="p-4">
<p class="font-bold text-[var(--ws-color-text)]">Sarah Klein</p>
<p class="text-sm text-[var(--ws-color-text-soft)]">CEO & Co-Founder</p>
</div>
</div>
<!-- Card 2 — featured (photo + name + role + bio + social) -->
<div class="break-inside-avoid mb-4 overflow-hidden rounded-2xl border border-[var(--ws-color-border)] bg-[var(--ws-color-surface)]">
<div class="aspect-square bg-gradient-to-br from-emerald-300 to-emerald-500 dark:from-emerald-700 dark:to-emerald-900"></div>
<div class="p-4">
<p class="font-bold text-[var(--ws-color-text)]">Marcus Bauer</p>
<p class="text-sm text-[var(--ws-color-text-soft)]">CTO & Co-Founder</p>
<p class="mt-2 text-sm leading-relaxed text-[var(--ws-color-text-soft)]">10 years building developer tools. Previously engineering lead at Vercel and GitHub. Passionate about the intersection of design and code.</p>
<div class="mt-3 flex items-center gap-3">
<a href="#" class="text-[var(--ws-color-text-soft)] hover:text-[var(--ws-color-accent)]" aria-label="Twitter">
<svg class="h-4 w-4" fill="currentColor" viewBox="0 0 24 24"><path d="M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z"/></svg>
</a>
<a href="#" class="text-[var(--ws-color-text-soft)] hover:text-[var(--ws-color-accent)]" aria-label="LinkedIn">
<svg class="h-4 w-4" fill="currentColor" viewBox="0 0 24 24"><path d="M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433a2.062 2.062 0 01-2.063-2.065 2.064 2.064 0 112.063 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z"/></svg>
</a>
<a href="#" class="text-[var(--ws-color-text-soft)] hover:text-[var(--ws-color-accent)]" aria-label="GitHub">
<svg class="h-4 w-4" fill="currentColor" viewBox="0 0 24 24"><path d="M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"/></svg>
</a>
</div>
</div>
</div>
<!-- Card 3 — short -->
<div class="break-inside-avoid mb-4 overflow-hidden rounded-2xl border border-[var(--ws-color-border)] bg-[var(--ws-color-surface)]">
<div class="aspect-square bg-gradient-to-br from-sky-300 to-sky-500 dark:from-sky-700 dark:to-sky-900"></div>
<div class="p-4">
<p class="font-bold text-[var(--ws-color-text)]">Lena Vogel</p>
<p class="text-sm text-[var(--ws-color-text-soft)]">Head of Design</p>
</div>
</div>
<!-- Card 4 — medium (photo + name + role + bio) -->
<div class="break-inside-avoid mb-4 overflow-hidden rounded-2xl border border-[var(--ws-color-border)] bg-[var(--ws-color-surface)]">
<div class="aspect-square bg-gradient-to-br from-rose-300 to-rose-500 dark:from-rose-700 dark:to-rose-900"></div>
<div class="p-4">
<p class="font-bold text-[var(--ws-color-text)]">David Park</p>
<p class="text-sm text-[var(--ws-color-text-soft)]">Engineering Lead</p>
<p class="mt-2 text-sm leading-relaxed text-[var(--ws-color-text-soft)]">Specializes in performance, accessibility, and Tailwind architecture. Built the registry system from the ground up.</p>
</div>
</div>
<!-- Card 5 — short -->
<div class="break-inside-avoid mb-4 overflow-hidden rounded-2xl border border-[var(--ws-color-border)] bg-[var(--ws-color-surface)]">
<div class="aspect-square bg-gradient-to-br from-amber-300 to-amber-500 dark:from-amber-700 dark:to-amber-900"></div>
<div class="p-4">
<p class="font-bold text-[var(--ws-color-text)]">Mia Torres</p>
<p class="text-sm text-[var(--ws-color-text-soft)]">Product Designer</p>
</div>
</div>
<!-- Card 6 — featured (photo + name + role + bio + social) -->
<div class="break-inside-avoid mb-4 overflow-hidden rounded-2xl border border-[var(--ws-color-border)] bg-[var(--ws-color-surface)]">
<div class="aspect-square bg-gradient-to-br from-indigo-300 to-indigo-500 dark:from-indigo-700 dark:to-indigo-900"></div>
<div class="p-4">
<p class="font-bold text-[var(--ws-color-text)]">Jana Müller</p>
<p class="text-sm text-[var(--ws-color-text-soft)]">Developer Experience</p>
<p class="mt-2 text-sm leading-relaxed text-[var(--ws-color-text-soft)]">Makes sure Webspire is a joy to use for developers. Writes docs, builds tooling, and talks to users every week. Former educator, now DevRel.</p>
<div class="mt-3 flex items-center gap-3">
<a href="#" class="text-[var(--ws-color-text-soft)] hover:text-[var(--ws-color-accent)]" aria-label="Twitter">
<svg class="h-4 w-4" fill="currentColor" viewBox="0 0 24 24"><path d="M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z"/></svg>
</a>
<a href="#" class="text-[var(--ws-color-text-soft)] hover:text-[var(--ws-color-accent)]" aria-label="LinkedIn">
<svg class="h-4 w-4" fill="currentColor" viewBox="0 0 24 24"><path d="M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433a2.062 2.062 0 01-2.063-2.065 2.064 2.064 0 112.063 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z"/></svg>
</a>
<a href="#" class="text-[var(--ws-color-text-soft)] hover:text-[var(--ws-color-accent)]" aria-label="GitHub">
<svg class="h-4 w-4" fill="currentColor" viewBox="0 0 24 24"><path d="M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"/></svg>
</a>
</div>
</div>
</div>
<!-- Card 7 — short -->
<div class="break-inside-avoid mb-4 overflow-hidden rounded-2xl border border-[var(--ws-color-border)] bg-[var(--ws-color-surface)]">
<div class="aspect-square bg-gradient-to-br from-teal-300 to-teal-500 dark:from-teal-700 dark:to-teal-900"></div>
<div class="p-4">
<p class="font-bold text-[var(--ws-color-text)]">Felix Braun</p>
<p class="text-sm text-[var(--ws-color-text-soft)]">Frontend Engineer</p>
</div>
</div>
<!-- Card 8 — medium (photo + name + role + bio) -->
<div class="break-inside-avoid mb-4 overflow-hidden rounded-2xl border border-[var(--ws-color-border)] bg-[var(--ws-color-surface)]">
<div class="aspect-square bg-gradient-to-br from-orange-300 to-orange-500 dark:from-orange-700 dark:to-orange-900"></div>
<div class="p-4">
<p class="font-bold text-[var(--ws-color-text)]">Priya Nair</p>
<p class="text-sm text-[var(--ws-color-text-soft)]">Head of Growth</p>
<p class="mt-2 text-sm leading-relaxed text-[var(--ws-color-text-soft)]">Drives acquisition, partnerships, and community. Previously growth at two YC companies.</p>
</div>
</div>
</div>
</div>
</section>
Details
Responsive Dark Mode Tailwind Only SSR Safe Copy & Paste
Stable Published
teammasonryprofilesbiosocialcss-columnsno-jspeople
Slots
| Name | Required | Description |
|---|---|---|
| eyebrow | No | Small label above the heading. |
| heading | No | Section title. |
| team-members | Yes | 8 team cards with varying content depth. |
Eight team member cards arranged in a CSS masonry grid (2 columns on mobile, 4 on desktop). Cards vary in height: short cards show only the photo, name, and role; medium cards add a short bio; featured cards also include social icon links. Height variation is entirely content-driven — no JavaScript needed. Photo areas use gradient placeholders (replace with actual images).