Skip to main content
vibld

Template

Hemline

A playful personal fashion blog for a style curator, with a giant uppercase masthead, an underline-style newsletter signup and a stack of candy-colored article cards. It showcases posts on capsule wardrobes, sustainable fashion and styling with a bold, zine-like color system.

Color-blocked fashion blog · Website · Small business site · static site

Who it is for

  • Personal style bloggers
  • Sustainable fashion writers
  • Stylists and wardrobe consultants
  • Vintage and thrift enthusiasts

Layout

  1. Header: italic bold wordmark left, pink outlined 'Subscribe' pill right, thin black rule below
  2. Centered hero on peach: 120px uppercase masthead, serif intro paragraph, underline email field + outlined 'Sign up →' pill
  3. Featured article: wide lavender rounded card split with date + huge uppercase title left and tinted photo right
  4. 3-column grid of solid-color cards (amber, mint, coral, sky, magenta) each with tinted image, date, uppercase title, excerpt, outlined 'Read more →' pill
  5. Footer with Connect / Follow columns
  6. Article page and contact

Palette

Playful, bold, colorful, confident, feminine-leaning, fun. A candy-colored fashion zine with serious typography.

  • background peach#f7e5d2
  • text#000000
  • button pink#f3b1de
  • card lavender#bca8f0
  • card amber#f4be3c
  • card mint#7ee8bc
  • card coral#ec7089
  • card sky#7dd3f0
  • card magenta#c044b0
  • placeholder text#6b5647

Every checked pair, measured again

SampleWhereRatioNeeds
Aabody text on peach background17.09:14.5:1
Aablack text on pink pill12.15:14.5:1
Aablack text on lavender card10.00:14.5:1
Aablack text on amber card12.28:14.5:1
Aablack text on mint card14.16:14.5:1
Aablack text on coral card7.25:14.5:1
Aablack text on sky card12.45:14.5:1
Aablack text on magenta card4.70:14.5:1
Aaplaceholder text in underline input on peach5.61:14.5:1
Aawhite text on black hovered pill21.00:14.5:1
black 2px pill borders / input underline on peach17.09: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

Display
Supreme-style grotesk 800, 120px masthead and ~56px card titles, uppercase, -2px tracking (Supreme is not on Google Fonts; a vibld project loads Manrope)
Body
Lora 400 18px serif body

Heavy uppercase sans for titles against a bookish serif body -- fashion magazine meets zine

Spacing and imagery

1120px container; cards with 24px radius, inset image 16px radius; 3-column grid with ~64px gaps; pill buttons with 2px black borders

Fashion and accessory photography (suits, pearls, clothing racks) duotone-tinted to match each card's color.

Components

  • Italic wordmark
  • Outlined pill buttons
  • Giant uppercase masthead
  • Underline-style email field
  • Featured split card
  • Color-coded article cards
  • Duotone image treatment
  • Read more pill with arrow
  • Footer link columns
  • Article layout with related posts
  • Share buttons
  • Contact form

Interactions

  • Card hover lift and arrow nudge
  • Image duotone fades to full color on hover
  • Newsletter submit states
  • Staggered card reveal
  • Button fill-invert on hover

Data

  • Post{slug, title, date, excerpt, cover, color, body_md, tags[]}
  • Subscriber{email}
  • Socials{instagram, x, pinterest}

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 a template'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 templates)
- 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.
### Goal
Build **Hemline**, a personal fashion blog for a (fictional) style curator writing about capsule wardrobes, thrifting, color and fit. The home page is a giant masthead plus a stack of bright color-blocked article cards. The job: make style writing feel joyful and collectible, and grow a newsletter.

### Stack
React 18 + TypeScript + Vite, Tailwind CSS, shadcn/ui (Radix), lucide-react. MDX posts; Framer Motion for staggered card reveals; react-hook-form + zod for newsletter and contact. Backend only for forms (Edge Function or a newsletter provider).

### Pages & layout
1. **Home** – header with italic heavy wordmark left, pink outlined "Subscribe" pill right, 1px black rule. Hero on peach: 120px uppercase masthead, 3–4 line serif intro, newsletter row (underline-only input with uppercase placeholder, outlined "Sign up →" pill). Featured post: full-width lavender card (24px radius) with date + huge uppercase title + excerpt left, tinted photo right. Then a 3-column grid of solid-color cards, each: inset tinted image, date, 48–56px uppercase title, 3-line excerpt, outlined "Read more →" pill. Footer: Connect (email, contact) and Follow (social) columns.
2. **Post** – colored header band matching the card color, title, date, hero, serif prose, related posts.
3. **Contact** – short form.

### Design system
`--background: #f7e5d2`, `--foreground: #000000`, `--pink: #f3b1de`; card palette `--lavender: #bca8f0`, `--amber: #f4be3c`, `--mint: #7ee8bc`, `--coral: #ec7089`, `--sky: #7dd3f0`, `--magenta: #c044b0`, `--placeholder: #6b5647`. Fonts: a heavy grotesk (e.g. Archivo 800 or Familjen Grotesk, sans-serif fallback) uppercase for display headings only, Lora 400/italic for body. Scale 14/16/18/24/40/56/120 (body Lora 18px/1.7, ~65ch; placeholder label 14px uppercase with 0.08em tracking); display tracking -0.02em. Radius 24px cards, 16px images, 999px pills with 2px black borders. Image duotone via CSS `mix-blend-mode: multiply` over the card color. Motion 300ms ease; stagger 80ms.

### Components & interactions
Header, Masthead, NewsletterRow (idle/loading/success/error), FeaturedCard, ColorCard (hover translateY(-4px), image un-tints on hover/focus), PillButton (hover fills black with white text), PostHeader, Prose, RelatedPosts, FooterColumns, ContactForm.

### Data & state
Frontmatter: title, slug, date, excerpt, cover, color (one of the palette keys), tags. Colors assigned in order or explicitly. Seed 7 original posts with generated fashion imagery of fictional models.

### Accessibility
Every card color must carry black text at ≥ 4.5:1 -- verified for all seven, magenta (#c044b0) is the tightest at 4.7:1, so do not darken it further without switching its text to white. Uppercase titles only for headings; excerpts in sentence case serif. Underline-only input needs a real label and a visible focus state (thicker underline + outline). Cards are single links; "Read more" is not a separate nested link. Reduced motion disables lifts and stagger. Tinted images still get descriptive alt text. Verified contrast: body text #000000 on #f7e5d2 = 17.0:1; black text #000000 on #bca8f0 = 10.0:1; black text #000000 on #ec7089 = 7.2:1; black text #000000 on #c044b0 = 4.7:1; placeholder text in underline input #6b5647 on #f7e5d2 = 5.6:1.

### Security
Proportionate: zod-validated forms client and server, honeypot, rate limiting, double opt-in; no secrets client-side; sanitized MDX; social links `rel="noopener noreferrer"`.

### Performance & SEO
Responsive images with lazy loading; limit heavy display font to needed weights. Pre-render; per-post meta/OG using card color and cover; sitemap and RSS. Lighthouse 95+.

### Guardrails
- Original writing; placeholder or generated imagery; no fashion brand logos or real designer claims.
- No fabricated reader quotes.
- Collect only emails.
- Typed small components, no `any`, visible form errors.
- Done when: each card color passes contrast with its text, the grid collapses to 1 column cleanly, hover/focus un-tints images, newsletter handles all states, and post pages inherit their card color.

Open the builderAll templatesThis palette on its own