Skip to main content
vibld

Template

Elmgather

A friendly, photo-led landing site for a mobile and desktop app that helps communities, clubs and friend groups discover people nearby, plan events and see what everyone is up to. It alternates light and dark sections, uses phone mockups to show the app, and closes with pricing that scales with community size.

Community-coordination app landing site · Website · SaaS landing page · static site

A mock-up of the homepage, drawn from this design’s layout, palette and typefaces. A build follows the full prompt below.

Add app screens

Pick up to 6 screens, such as a dashboard, settings or an empty state. Each is built in this design’s own palette and typefaces, with its states and guardrails.

Account setup
Add edit
Analytics
Appearance
Calendar
Chat
Checklist
Checkout
Confirmation
Dashboard
Delete account
Details
Discovery questions
Empty state
Flowchart
Import export
Inbox
Integrations
Invite team
Loading
Login
Onboarding
Plans
Playground
Product tour
Referral
Search
Settings
Share
Sign up
Success
Table
Team members
Text editor
Upgrade
Usage
Verification
Welcome

Start from this templateRead the build prompt

Typefaces

Quicksand's rounded geometric forms echo the friendly pill shapes and give the community app a warm, sociable voice at both 78px and 16px.

  • QuicksandHeadings: H1 78px / 44px 500, -0.02em; H2 42px / 30px 500; statement 22px 500
  • QuicksandBody: body 16px/1.5 400-500, card captions 14px

Patterns

  • full-bleed photo hero card with centred headline and scrim
  • logo strip over photo
  • inline highlighted word pill in headings
  • horizontal feature carousel with arrows
  • phone mockups on dark section
  • dark icon feature cards with arrow links
  • desktop app showcase
  • pricing tiers
  • testimonial wall
  • FAQ
  • blog cards
  • repeated closing CTA

States it is designed for

  • photo load failure: solid dark card with headline still readable
  • carousel at first/last card disables the corresponding arrow
  • contact/download form states: validation, sending, success, error
  • reduced motion: no zoom, instant step swaps
  • pricing with a free tier shows 'no card required' note

Who it is for

  • community organisers and club leads
  • friend groups planning activities
  • event hosts
  • campus and hobby communities

Layout

  1. minimal top bar over the hero photo: logo left, 'About' and 'Download' translucent pills right
  2. hero: rounded full-bleed street-style photo card with dark scrim, centred 3-line H1, short lede, white 'Get the app' pill, logo strip along the photo bottom
  3. intro on light grey: large statement with an inline white pill highlighting a phrase, 'About' pill button right
  4. feature carousel: wide white cards (numbered caption, title, stacked profile-card illustration) with round prev/next buttons
  5. dark section: 'everything your community needs' with sticky copy left and scrolling phone mockups right (discover people, profile with featured events)
  6. dark icon cards (always there, native desktop, smart notifications…) with arrow links
  7. desktop showcase, real-time activity section, pricing (3 tiers by community size), testimonials, FAQ, blog teaser, closing CTA, footer

Palette

Social, warm, rounded and modern: candid street photography meets soft greys and friendly pill shapes.

  • light background#f2f2f2
  • surface#ffffff
  • ink#1a1a1a
  • body text#424242
  • muted text#6d6d6d
  • dark section#1a1a1a
  • text on dark#ffffff
  • muted on dark#cccccc
  • coral accent (decorative)#ff5f54
  • input border#8c8c8c

Every checked pair, measured again

SampleWhereRatioNeeds
Aabody text8.98:14.5:1
Aamuted text on white5.17:14.5:1
Aamuted text on grey4.62:14.5:1
Aatext on dark17.40:14.5:1
Aamuted on dark10.84:14.5:1
Aahero text over scrim (worst case)4.54:14.5:1
input border3.36:13:1

As vibld’s tokens

The palette on the fifteen colour tokens vibld styles a project with, each text colour on the fill it is read on. Marked tokens are solved from the palette, because no swatch held that role at 4.5:1.

  • background
  • card
  • muted
  • primary *
  • secondary
  • accent
  • destructive *

Type scale

Display
Quicksand 500, 78px desktop / 44px mobile, line-height 1.3, tracking -0.02em (similar to the observed rounded grotesk)
Body
Quicksand 400/500, 16px, line-height 1.5

H2 42/30px/500; statement text 22px/500 with inline pill; card captions 14px; observed 14px paragraph text raised to 16px.

Spacing and imagery

Density: airy, rounded; 120px sections, cards with 24px padding Grid: 12-column; dark section splits 5/7 with sticky left column Container: 1200px max with 30px padding (16px mobile); hero card inset 6px from viewport edges Radius: hero card 24px, cards 20px, phone frames 40px, pills 9999px Shadows: soft 0 20px 40px rgba(0,0,0,.08) under carousel cards; none on dark

Candid lifestyle photography of groups outdoors (licensed, adults), phone mockups showing profile and event cards, small avatar circles, simple outline icons in circular outlines on dark cards.

Components

  • photo hero card with scrim
  • translucent pill buttons
  • white pill button
  • logo strip
  • inline highlight pill
  • feature carousel card
  • round arrow buttons
  • phone mockup
  • dark icon card with arrow
  • pricing card
  • testimonial card
  • FAQ accordion
  • blog card

Interactions

  • carousel moves by one card with arrows, swipe or keyboard; cards peek from edges
  • phone mockups swap screens as the sticky copy changes step
  • dark icon cards: arrow moves diagonally and border brightens on hover
  • hero photo has a slow 1.05 zoom on load (none under reduced motion)
  • pills lighten on hover

Data

  • Feature{order, title, caption, illustration}
  • Screen{step, title, body, imageUrl, alt}
  • Plan{name, communitySize, price, features[]}
  • Testimonial{quote, name, community}
  • Faq{q, a}
  • Post{slug, title, cover, date}

Guardrails

Experience

  • Headline text on the hero photo always sits on a scrim; test against the brightest crop.
  • Carousel shows partial neighbouring cards so users know it scrolls.
  • Profiles in mockups use invented names, ages and cities.
  • Pricing is framed by community size, with the unit ('members') stated.
  • Keep light and dark sections alternating no more than every two sections to avoid strobing.

Accessibility

  • Muted text uses #6d6d6d to pass on both #f2f2f2 and white.
  • Hero scrim: 45-60% black gradient so white text passes against a #767676 worst case.
  • Carousel is a labelled region; arrows have names and disabled states.
  • Sticky storytelling works without scroll-linked animation (all steps readable as a list).
  • Focus ring: 2px #1a1a1a on light, 2px white on dark, 2px offset.

Security

  • Contact endpoint zod-validated, rate-limited, honeypot; mail via a transactional email service.
  • No location or personal data collected on the marketing site.
  • App-store links are plain outbound links; no tracking redirects.
  • Only licensed photography with releases.

Build prompt

The baseline every prompt in the catalog assumes, then this design’s own ten sections, from goal to guardrails.

The baseline
### How to use these prompts
Paste an entry's build prompt into your coding agent as the first message. Each prompt names its own stack, tokens and acceptance criteria; the rules below apply to all of them and can be prepended once per project.

### Engineering baseline
- TypeScript strict mode, no `any`, small typed components, feature folders, and one source of truth for design tokens (CSS variables consumed by Tailwind).
- Validate every input with a shared zod schema on the client and again on the server or edge function. Never trust client-side checks alone.
- Show loading, empty and error states for every async view. Surface errors in plain language with a retry, and log details to the console in development only.
- Keep secrets out of the bundle. Only publishable keys (for example a Supabase anon key) belong in client code; service-role keys, API keys and webhooks live in server or edge-function environment variables.

### Data and auth baseline (full-stack entries)
- Enable Row Level Security on every table before inserting data. Default-deny, then add owner-scoped policies (`auth.uid() = user_id`) and explicit role checks for admin views.
- Store roles in a separate table checked by a security-definer function, never in a user-editable profile field.
- Upload files to private storage buckets with size and MIME limits, and serve them through signed URLs.
- Rate-limit public endpoints (forms, auth, AI calls) and add a honeypot field or captcha to anonymous forms.
- Take payments through a hosted checkout and verify webhooks by signature. Never handle raw card data.

### Accessibility and UX baseline
- Target WCAG 2.2 AA: 4.5:1 contrast for normal text and 3:1 for large text, input borders, focus rings and meaningful icons or chart lines. Every palette in this catalog lists its verified pairs; re-check with a contrast tool after any colour change.
- Keep body text at 16px or larger with 1.5 line height, nothing below 12px, no light weights under 24px, and uppercase only for short labels.
- Give every interactive element a visible focus ring, full keyboard support, semantic landmarks, labelled form fields, and alt text on meaningful images.
- Respect `prefers-reduced-motion` for every animation. Give drag-and-drop and carousels keyboard and button alternatives.
- Build mobile-first and test at 375px, 768px and 1280px.

### Content guardrails
- Use original copy, fictional sample data and placeholder or licensed imagery. Do not reuse another product's name, logo, screenshots or marketing text.
- Label demo testimonials and metrics as samples. Collect the minimum personal data the feature needs.

### SaaS screen baseline
- Design every screen for its full set of states: first-run empty, loading skeleton, partial data, error with retry, permission-denied, and success feedback. Each entry lists the states its screen needs.
- Keep destructive actions (delete, revoke, downgrade, remove member) behind a confirmation that names the object, and prefer undo over a second dialog where the action is reversible.
- Enforce authorisation on the server for every action a screen exposes. Hiding a button is not access control; check the role again in the API or RLS policy.
- Never show secrets (API keys, tokens) in full after creation. Show them once, then mask them, and offer rotate and revoke.
- Keep the app shell (navigation, workspace switcher, account menu) consistent across screens, and preserve filters, sort and scroll position when the user navigates back.
### Goal
Build **Elmgather**, a friendly landing site for a mobile and desktop app that helps communities discover people nearby, plan events and follow what everyone is doing in real time. The site should feel social and warm, show the app through phone mockups, and drive downloads and paid community plans.

### Stack
Astro + TypeScript, Tailwind CSS, shadcn/ui (Radix Accordion, Sheet), lucide-react, Motion for the carousel and sticky storytelling, zod for the contact form.

### Pages & layout
1. **Home**: top bar over photo → hero card (H1, lede, 'Get the app', logo strip) → intro statement with inline pill → feature carousel (discover nearby, plan events, group chat, shared calendar) → dark sticky storytelling with phone mockups → dark icon cards → desktop showcase → real-time activity → pricing (Small group / Club / Network) → testimonials → FAQ → blog teaser → closing CTA → footer.
2. **About**, **Pricing**, **Blog**, **Contact**, **Download**.
3. Breakpoints: sticky storytelling becomes stacked steps each with its own mockup under 1024px; carousel shows 1.1 cards on mobile; hero headline 44px.

### Design system
- Colors: `--bg: #f2f2f2`, `--surface: #ffffff`, `--ink: #1a1a1a`, `--body: #424242`, `--muted: #6d6d6d`, `--dark: #1a1a1a`, `--on-dark: #ffffff`, `--muted-dark: #cccccc`, `--coral: #ff5f54`, `--border: #8c8c8c`.
- Fonts: Quicksand 500 for H1 78/44px and H2 42/30px (similar to the observed rounded grotesk); 400 body 16px/1.5.
- Spacing: 8px base; 120px sections; 24px card padding.
- Radius: 24px hero, 20px cards, 40px phone frames, pill buttons.
- Scrim: `linear-gradient(180deg, rgba(0,0,0,.45), rgba(0,0,0,.6))`.
- Translucent pills: rgba(116,123,135,.8) with backdrop blur and white text.
- Motion: 300ms eases; carousel 450ms; hero zoom 8s.

### Components & interactions
TopBar (translucent pills; Sheet on mobile), HeroPhotoCard (scrim, logo strip), StatementWithPill, FeatureCarousel (cards, ArrowButton), StickyStory (steps + PhoneMockup), IconCard (dark, arrow link), DesktopShowcase, ActivityFeedMock, PricingCard, TestimonialCard, FaqAccordion, BlogCard, CtaBlock, Footer.

### Data & state
Content collections for features, story steps, plans, testimonials, FAQs and posts. Carousel index and active story step are local state. Contact form → server endpoint → zod → email service.

### Accessibility
One H1. Hero image alt describes the scene generally. Carousel uses aria-roledescription and slide labels. Sticky story steps are headings with text, mockups are images with alt. Reduced motion supported. Touch targets 44px.
Verified contrast: body text: #424242 on #f2f2f2 = 8.98:1; muted text on white: #6d6d6d on #ffffff = 5.17:1; muted text on grey: #6d6d6d on #f2f2f2 = 4.62:1; text on dark: #ffffff on #1a1a1a = 17.4:1; muted on dark: #cccccc on #1a1a1a = 10.84:1; hero text over scrim (worst case): #ffffff on #767676 = 4.54:1; input border: #8c8c8c on #ffffff = 3.36:1.

### Security
Contact form validated and rate-limited with a honeypot; secrets server-side. No cookies before consent. Strict CSP.

### Performance & SEO
Hero photo AVIF with `fetchpriority=high`; phone screens lazy-loaded WebP. Title, description, OG, MobileApplication JSON-LD. LCP < 2.5s.

### Guardrails
- All people, names and events in mockups are invented; photography licensed.
- Logo strip uses placeholder marks, not real companies.
- Write original copy throughout.
- Don't imply real-time location sharing without explaining opt-in.

**Acceptance criteria**
- [ ] Hero text passes contrast over the scrim at every breakpoint
- [ ] Carousel works with arrows, swipe and keyboard
- [ ] Sticky storytelling degrades to stacked steps on mobile
- [ ] Pricing states the member unit clearly
- [ ] Recorded contrast pairs pass

Open the builderAll templatesThis palette on its own