Once UI Handbook
Beginner Guides
What is Once UI?
Install & config
Page skeleton
Your first page
Build And Launch
How to launch a portfolio site that actually gets you hired
How to build a documentation site with MDX and Next.js
How to ship a landing page and dashboard with authentication in Next.js
How to launch a social app with Next.js and Supabase
Vibe Coding
Introduction to vibe coding
Set up your local dev environment
Essential tools for vibe coding
Build your first Once UI app
Common Patterns
Hero section
Static panel
Form layout
Highlighted card
Responsive stacking
Decoration layers
Dialog & modal
Toast & feedback
Tables & lists
Loading states
App shell navigation
Dashboard & charts
Chat & messaging
Auth & verification
Settings & split panels
Data filters & toolbar
Command palette
Pricing & plans
Accordion & FAQ
Media & uploads
Empty & error states
SEO, Open Graph, and structured data
Documentation code blocks with live preview
Carousels, galleries, and before/after comparisons
Date pickers and scheduling
Context menus and dropdown actions
Tags, chips, and multi-value inputs
Roadmap & kanban
Form inputs & controls
Progress, status & badges
Scrolling & feeds
Profile, avatars & identity
Social proof & logo clouds
Masonry & media grids
Table pagination, search & bulk selection
Banners & announcements
Footer layouts
Onboarding & first run
Waitlist & coming soon
Design Tips
Color & surfaces
Harness overview
Row, Column & Grid
Spacing & rhythm
Icons & buttons
Reveal & motion
Theme tokens, FOUC-free init, and runtime style controls
Tooltips and hover cards
Block updates
Block updates changelog
Agent Resources
Column, not Flex
Semantics over CSS
Typography scale
Common gotchas
Block anchors
Validate generated code
Pro block registry
Match task bundles
TrademarkTrademark
Ctrl k
Search...
Sign up
Once UI Handbook
Beginner Guides
What is Once UI?
Install & config
Page skeleton
Your first page
Build And Launch
How to launch a portfolio site that actually gets you hired
How to build a documentation site with MDX and Next.js
How to ship a landing page and dashboard with authentication in Next.js
How to launch a social app with Next.js and Supabase
Vibe Coding
Introduction to vibe coding
Set up your local dev environment
Essential tools for vibe coding
Build your first Once UI app
Common Patterns
Hero section
Static panel
Form layout
Highlighted card
Responsive stacking
Decoration layers
Dialog & modal
Toast & feedback
Tables & lists
Loading states
App shell navigation
Dashboard & charts
Chat & messaging
Auth & verification
Settings & split panels
Data filters & toolbar
Command palette
Pricing & plans
Accordion & FAQ
Media & uploads
Empty & error states
SEO, Open Graph, and structured data
Documentation code blocks with live preview
Carousels, galleries, and before/after comparisons
Date pickers and scheduling
Context menus and dropdown actions
Tags, chips, and multi-value inputs
Roadmap & kanban
Form inputs & controls
Progress, status & badges
Scrolling & feeds
Profile, avatars & identity
Social proof & logo clouds
Masonry & media grids
Table pagination, search & bulk selection
Banners & announcements
Footer layouts
Onboarding & first run
Waitlist & coming soon
Design Tips
Color & surfaces
Harness overview
Row, Column & Grid
Spacing & rhythm
Icons & buttons
Reveal & motion
Theme tokens, FOUC-free init, and runtime style controls
Tooltips and hover cards
Block updates
Block updates changelog
Agent Resources
Column, not Flex
Semantics over CSS
Typography scale
Common gotchas
Block anchors
Validate generated code
Pro block registry
Match task bundles
TrademarkTrademark
Once UIDocumentationBlog
© Once UI. All rights reserved.
Built with Aveiro
Common patterns

Social proof & logo clouds

LogoCloud rotation, static partner grids, testimonial panels, and trust strips under heroes.
Updated 19d ago
Profile, avatars & identity
Masonry & media grids
5 min · Pattern
Logo clouds, partner grids, and trust strips answer “who uses this?” without a wall of screenshots. LogoCloud rotates logos; Grid + Logo works for static grids.

What this pattern covers

Social proof blocks appear on marketing heroes, pricing pages, and signup flows:
  • LogoCloud — animated grid that rotates through a logo set
  • Logo — brand mark with light/dark variants
  • Grid — static partner wall when rotation is unnecessary
  • AutoScroll — horizontal marquee for dense logo strips (describe in prose)
Gold references: packages/core/ai/examples/blocks/Footer3.tsx (footer trust row), marketing hero task packages/core/ai/tasks/marketing-hero.json, and pricing bundle packages/core/ai/tasks/pricing.json.

LogoCloud basics

LogoCloud extends Grid. Pass a logos array of Logo props — each entry is the same shape you would pass to Logo directly. Describe in prose:
  • logos — full partner list
  • limit — how many show at once (default 6)
  • rotationInterval — milliseconds between rotations when logos.length > limit
  • Always set columns on the grid — the catalog warns LogoCloud needs explicit column counts at breakpoints
Typical hero placement: centered Column under the headline, gap="24", with a weak label:
<Column gap="24" horizontal="center" fillWidth>
  <Text variant="label-default-s" onBackground="neutral-weak">
    Trusted by teams at
  </Text>
  {/* LogoCloud — logos prop wired in your app */}
</Column>

Static logo grid

When you have six logos and no animation, use Grid + Logo (pass dark, light, size, and optional href per partner):
<Grid fillWidth columns={6} m={{ columns: 4 }} s={{ columns: 3 }} gap="24">
  {partners.map((partner) => (
    <Column key={partner.id} center padding="12">
      {/* Logo — dark, light, size="m", href */}
    </Column>
  ))}
</Grid>
Use horizontal="center" on the Column so mixed aspect logos align cleanly.

Eyebrow + headline pairing
Social proof should not compete with the hero CTA. Structure:
  • Hero headline and primary Button
  • Optional secondary Button
  • Trust label + logos (smaller, neutral text)
See Hero section for the full hero recipe.

Testimonial row (without Carousel)

Carousels are heavy for a single quote. Use a static panel:
For rotating testimonials, see Carousels & compare media.

Marquee strips

AutoScroll wraps children in a horizontal infinite scroll — useful when logos exceed viewport width.
Describe in prose: wrap a Row of Logo components inside AutoScroll, set speed conservatively, and pause on hover if your UX research says users need to read marks. Prefer LogoCloud rotation when you want discrete swaps instead of continuous motion.

Write this / not this

✅ Once UI way
❌ Common mistake
LogoCloud with `columns` at breakpointsDefault grid with squashed logos
Weak label above logosLogos same size as headline
Logo `dark` + `light` assetsSingle PNG on wrong theme
Static Grid for ≤6 partnersLogoCloud rotation for tiny sets

Check yourself

  • Trust strip sits below primary CTA, not above headline
  • Logo assets include theme variants
  • Grid columns collapse on s / m breakpoints
  • Links use href on Logo when partners should be clickable

Related

→ Hero section → Pricing & plans → Decoration layers → Full reference: docs.once-ui.com — LogoCloud
<Column gap="32" horizontal="center" maxWidth="m">
  <Column gap="16" horizontal="center">
    <Text variant="label-default-s" onBackground="brand-medium">
      Now in public beta
    </Text>
    <Heading variant="display-strong-l" align="center">
      Ship polished UI in hours
    </Heading>
    <Text variant="body-default-m" onBackground="neutral-weak" align="center">
      Semantics, tokens, and patterns agents can follow.
    </Text>
  </Column>
  <Row gap="12" s={{ direction: "column" }}>
    <Button>Start building</Button>
    <Button variant="secondary">View docs</Button>
  </Row>
  {/* trust strip below */}
</Column>
<Column
  fillWidth
  padding="24"
  gap="16"
  background="surface"
  border="neutral-alpha-weak"
  radius="l"
  maxWidth="m"
>
  <Text variant="body-default-m">“We cut our UI polish time in half.”</Text>
  <Row gap="12" vertical="center">
    <Avatar src="/avatars/ceo.jpg" size="s" />
    <Column gap="2">
      <Text variant="body-strong-s">Jane Park</Text>
      <Text variant="body-default-xs" onBackground="neutral-weak">
        CTO, Example Co
      </Text>
    </Column>
  </Row>
</Column>