@veristone/nuxt-v-cards
v0.1.5
Published
Veristone Capital card component library for Nuxt 4 — green primary, stone neutrals, gold accents, Playfair Display + Work Sans.
Downloads
634
Readme
nuxt-v-cards
A Nuxt 4 layer providing 17 pre-built VCard components for Veristone Capital's website ecosystem. These components implement the Veristone design system and cover every card pattern needed across landing pages, loan program pages, location pages, team directories, and conversion flows.
Installation
1. Add the layer to your Nuxt project
In your consuming app's nuxt.config.ts, extend the layer:
// nuxt.config.ts
export default defineNuxtConfig({
extends: [
'../modules/cards/nuxt-v-cards' // adjust path to your project structure
]
})2. Install required dependencies
npm install @nuxt/ui nuxt3. Configure your app.config.ts (optional)
Override default card settings in your app's app.config.ts:
// app.config.ts
export default defineAppConfig({
v: {
cards: {
// your overrides here
}
}
})4. Use components directly
All 17 VCard components are auto-imported with the VCard prefix. No manual registration required:
<template>
<VCardHero
title="Fast, Flexible Private Lending"
image-url="/images/hero.jpg"
layout="fullscreen"
/>
</template>Quick Reference
When to Use Each Card
| Component | Use When | Typical Placement | |-----------|----------|-------------------| | VCardHero | You need a prominent banner with title, subtitle, and CTAs | Page tops, section headers | | VCardFeature | Presenting product features, benefits, or service highlights | Feature sections, benefit grids | | VCardContent | General-purpose content blocks with flexible layouts | Blog posts, about pages, service descriptions | | VCardCta | Driving conversion with clear call-to-action | Section bottoms, banner areas | | VCardLoan | Displaying loan programs with rates, terms, and details | Loan program pages, product listings | | VCardLoanStats | Showing metrics like LTV, rates, or financial data | Program pages, comparison sections | | VCardTestimonial | Customer quotes, reviews, or endorsements | Social proof sections | | VCardGoogleReview | Displaying Google reviews with ratings | Review sections, trust areas | | VCardEvent | Listing webinars, seminars, or community events | Events pages | | VCardForm | Container for application or contact forms | Application pages, contact sections | | VCardSalesPerson | Team member profiles with photos and contact info | Team pages, branch listings | | VCardRecentlyFunded | Showcasing closed deals or success stories | Portfolio pages, social proof | | VCardLocationsHero | Location-focused hero with regional details | Regional landing pages | | VCardLenderComparison | Side-by-side comparison of lending options | Comparison pages | | VCardSocialProof | Trust indicators, stats, certifications | Trust sections, footers | | VCardCallOut | Highlight boxes, alerts, or featured info | Feature callouts, sidebars | | VCardWrapper | Generic container for custom content | Flexible layouts |
Component API
VCardHero
Full-bleed hero sections with multiple layout options.
<VCardHero
title="Fast, Flexible Private Lending"
subtitle="Get funded in as little as 48 hours"
eyebrow="VERISTONE CAPITAL"
image-url="/images/hero.jpg"
layout="fullscreen"
:primary-cta="{ label: 'Get Pre-Qualified', to: '/apply' }"
:secondary-cta="{ label: 'View Programs', to: '/loans' }"
/>Props:
title(string, required) - Main headlinesubtitle(string) - Supporting texteyebrow(string) - Small uppercase labelimageUrl(string, required) - Background image URLlayout('fullscreen' | 'split' | 'portrait') - Layout variantsplitSide('left-image' | 'right-image') - Image position for split layoutheight('full' | 'tall' | 'medium') - Height for fullscreen layoutprimaryCta({ label: string, to: string }) - Primary CTA buttonsecondaryCta({ label: string, to: string }) - Secondary CTA button
VCardFeature
Product features, program highlights, or service benefits.
<VCardFeature
title="Fast Closings"
description="Close in as little as 48 hours with streamlined underwriting."
icon="i-lucide-zap"
variant="icon"
/>Props:
title(string, required) - Feature titledescription(string) - Supporting texteyebrow(string) - Small uppercase labelicon(string) - Iconify icon nameimageUrl(string) - Feature imagevariant('default' | 'icon' | 'stat' | 'minimal' | 'detailed') - Visual stylestatValue(string) - Numeric value for stat variantstatLabel(string) - Label for stat variantcta({ label: string, to: string }) - Call-to-action
VCardContent
General-purpose content card with flexible layout options.
<VCardContent
title="Flexible Financing Solutions"
description="Tailored loan programs designed for your specific needs."
eyebrow="WHY VERISTONE"
image-url="/images/content.jpg"
image-position="top"
image-aspect="3:2"
:cta="{ label: 'Learn More', to: '/about' }"
/>Props:
title(string) - Card headlinedescription(string) - Body texteyebrow(string) - Small uppercase labelimageUrl(string) - Image URLimageAlt(string) - Image alt textimagePosition('top' | 'left' | 'right' | 'background') - Image placementimageAspect('3:2' | '9:16' | '1:1') - Image aspect ratiocta({ label: string, to: string }) - Call-to-actionvariant('default' | 'dark' | 'outlined') - Visual style
VCardLoan
Loan program card with structured data display.
<VCardLoan
program-name="Fix & Flip"
description="Short-term financing for renovation projects."
rate-range="12-15%"
ltv-max="90%"
term-range="12-18 months"
min-loan="$100K"
max-loan="$5M"
:property-types="['Single Family', 'Multi-Family', 'Condo']"
:highlights="['Cash-out options', 'No prepayment penalty']"
:cta="{ label: 'Apply Now', to: '/apply' }"
/>Props:
programName(string, required) - Loan program namedescription(string) - Short descriptionrateRange(string) - Interest rate range (e.g., "12-15%")ltvMax(string) - Maximum LTV (e.g., "90%")termRange(string) - Loan term (e.g., "12-18 months")minLoan(string) - Minimum loan amountmaxLoan(string) - Maximum loan amountpropertyTypes(string[]) - Accepted property typeshighlights(string[]) - Key features/benefitscta({ label: string, to: string }) - Call-to-actionfeatured(boolean) - Whether to show as featured/dark variant
VCardLoanStats
Display financial metrics in a grid or row layout.
<VCardLoanStats
:stats="[
{ label: 'Max LTV', value: '90%' },
{ label: 'Min Credit', value: '680', description: 'FICO score' },
{ label: 'Funding Time', value: '48', suffix: 'hrs' },
{ label: 'Rates From', value: '12%', suffix: 'APR' }
]"
layout="row"
/>Props:
stats(array, required) - Array of stat objects with label, value, suffix, descriptionlayout('row' | 'grid') - Display layoutvariant('default' | 'dark') - Visual style
VCardTestimonial
Customer quotes and endorsements.
<VCardTestimonial
quote="Veristone closed my loan in 5 days. Incredible service!"
author="John Smith"
title="Real Estate Investor"
company="Smith Properties"
/>Props:
quote(string, required) - Testimonial textauthor(string, required) - Person's nametitle(string) - Person's title/rolecompany(string) - Company nameavatarUrl(string) - Photo URLvariant('default' | 'card' | 'split' | 'minimal') - Visual style
VCardGoogleReview
Display Google reviews with ratings.
<VCardGoogleReview
review-text="Excellent lender! Very professional and fast."
reviewer-name="Jane Doe"
:rating="5"
relative-date="2 weeks ago"
profile-url="https://google.com/maps/..."
/>Props:
reviewText(string, required) - Review contentreviewerName(string, required) - Reviewer namereviewerAvatar(string) - Avatar image URLrating(1-5, required) - Star ratingdate(string) - Review daterelativeDate(string) - Relative time (e.g., "2 weeks ago")reviewUrl(string) - Link to full reviewprofileUrl(string) - Link to reviewer profileimageUrl(string) - Background image for featured variantvariant('default' | 'featured' | 'minimal') - Visual style
VCardCallOut
Highlight boxes, alerts, or featured information.
<VCardCallOut
title="Pre-Qualify in Minutes"
description="Get a preliminary decision without affecting your credit."
icon="i-lucide-clock"
variant="glass"
:cta="{ label: 'Start Application', to: '/apply' }"
/>Props:
title(string, required) - Callout headlinedescription(string) - Supporting texticon(string) - Iconify icon namevariant('default' | 'accent' | 'muted' | 'glass') - Visual styleimageUrl(string) - Background imageimageAlt(string) - Image alt textcta({ label: string, to: string }) - Call-to-action
VCardSalesPerson
Team member profile card.
<VCardSalesPerson
name="Mike Johnson"
title="Senior Loan Officer"
bio="15+ years in private lending..."
email="[email protected]"
phone="(555) 123-4567"
avatar-url="/team/mike.jpg"
nmls="12345"
/>Props:
name(string, required) - Person's nametitle(string) - Job titlebio(string) - Short biographyemail(string) - Email addressphone(string) - Phone numberavatarUrl(string) - Photo URLnmls(string) - NMLS license numbervariant('default' | 'detailed' | 'compact') - Visual style
VCardForm
Container for application or contact forms.
<VCardForm
title="Get Funded Today"
description="Complete the form below and we'll be in touch."
variant="card"
/>Props:
title(string, required) - Form headlinedescription(string) - Supporting textvariant('default' | 'card' | 'landscape') - Visual style
VCardEvent
Event listing card.
<VCardEvent
title="Investor Webinar"
description="Learn about our fix & flip financing options."
date="March 15, 2026"
time="2:00 PM EST"
location="Online"
image-url="/events/webinar.jpg"
:cta="{ label: 'Register', to: '/events/webinar' }"
/>Props:
title(string, required) - Event namedescription(string) - Event descriptiondate(string) - Event datetime(string) - Event timelocation(string) - Venue or "Online"imageUrl(string) - Event imagecta({ label: string, to: string }) - Registration link
VCardSocialProof
Trust indicators, stats, certifications.
<VCardSocialProof
:stats="[
{ value: '$2.1B+', label: 'Total Funded' },
{ value: '1,800+', label: 'Loans Closed' },
{ value: '48 hrs', label: 'Avg Close Time' }
]"
variant="stats"
/>Props:
logos(string[]) - Client/partner logo URLsstats(array) - Statistics arraybadges(array) - Certification/trust badge datavariant('logos' | 'stats' | 'badges') - Display type
VCardRecentlyFunded
Showcase of funded deals or success stories.
<VCardRecentlyFunded
property="The Marina Resort"
location="San Diego, CA"
funded-amount="$2.5M"
loan-type="Bridge Loan"
image-url="/deals/marina.jpg"
/>Props:
property(string, required) - Property namelocation(string, required) - Property locationfundedAmount(string) - Loan amount fundedloanType(string) - Type of loanimageUrl(string) - Property image
VCardLocationsHero
Regional location showcase with location chips.
<VCardLocationsHero
title="Arizona Lending"
subtitle="Serving investors across the Grand Canyon State"
region="ARIZONA"
:locations="['Phoenix', 'Tucson', 'Scottsdale', 'Sedona']"
image-url="/locations/arizona.jpg"
:cta="{ label: 'Find Your Branch', to: '/locations/arizona' }"
/>Props:
title(string, required) - Region titlesubtitle(string) - Subtitle textregion(string, required) - Region labellocations(string[], required) - Array of city/area namesimageUrl(string, required) - Hero imagecta({ label: string, to: string }) - Call-to-action
VCardLenderComparison
Side-by-side comparison table.
<VCardLenderComparison
:lenders="[
{ name: 'Veristone', rate: '12%', ltv: '90%', terms: 'Flexible', highlights: ['48hr close', 'No prepayment'] },
{ name: 'Competitor A', rate: '15%', ltv: '80%', terms: 'Standard', highlights: ['21-day close'] }
]"
highlighted="Veristone"
/>Props:
lenders(array, required) - Array of lender comparison datahighlighted(string) - Name of lender to highlight
VCardWrapper
Generic container for custom slotted content.
<VCardWrapper variant="muted" padding="lg">
<h3>Custom Title</h3>
<p>Your custom content here...</p>
</VCardWrapper>Props:
variant('muted' | 'dark' | 'outline' | 'glass') - Visual styleimageUrl(string) - Background imageimageAlt(string) - Image alt textpadding('sm' | 'md' | 'lg') - Padding level
Page Assembly Patterns
Homepage
┌─────────────────────────────────────┐
│ VCardHero (layout="fullscreen") │ ← Full-bleed hero
├─────────────────────────────────────┤
│ VCardFeature (variant="stat") × 3-4 │ ← Key metrics/features
├─────────────────────────────────────┤
│ VCardSocialProof (variant="stats") │ ← Trust indicators
├─────────────────────────────────────┤
│ VCardLoan (featured=true) × 3 │ ← Featured programs
├─────────────────────────────────────┤
│ VCardTestimonial (variant="split") │ ← Social proof
├─────────────────────────────────────┤
│ VCardRecentlyFunded × 4 (grid) │ ← Deal showcase
├─────────────────────────────────────┤
│ VCardCta (variant="banner") │ ← Final CTA
└─────────────────────────────────────┘Loan Program Page
┌─────────────────────────────────────┐
│ VCardHero (layout="split") │ ← Program intro
├─────────────────────────────────────┤
│ VCardLoanStats (layout="row") │ ← Key metrics
├─────────────────────────────────────┤
│ VCardLoan × 3-5 │ ← Program options
├─────────────────────────────────────┤
│ VCardLenderComparison │ ← Competitive comparison
├─────────────────────────────────────┤
│ VCardCallOut (variant="accent") │ ← Key benefit highlight
├─────────────────────────────────────┤
│ VCardTestimonial (variant="card")×3 │ ← Client stories
├─────────────────────────────────────┤
│ VCardCta (variant="banner") │ ← Apply CTA
└─────────────────────────────────────┘Location/Branch Page
┌─────────────────────────────────────┐
│ VCardLocationsHero │ ← Location hero
├─────────────────────────────────────┤
│ VCardLoanStats │ ← Regional stats
├─────────────────────────────────────┤
│ VCardRecentlyFunded × 4 (grid) │ ← Local deals
├─────────────────────────────────────┤
│ VCardFeature (variant="icon") × 3 │ ← Branch benefits
├─────────────────────────────────────┤
│ VCardGoogleReview × 3 │ ← Local reviews
├─────────────────────────────────────┤
│ VCardSalesPerson × 2-4 │ ← Local team
├─────────────────────────────────────┤
│ VCardForm (variant="landscape") │ ← Contact/deposit form
└─────────────────────────────────────┘Team / About Page
┌─────────────────────────────────────┐
│ VCardHero (layout="portrait") │ ← Team/About hero
├─────────────────────────────────────┤
│ VCardContent │ ← About narrative
├─────────────────────────────────────┤
│ VCardSalesPerson × 6+ (grid) │ ← Team members
├─────────────────────────────────────┤
│ VCardSocialProof (variant="badges") │ ← Certifications
├─────────────────────────────────────┤
│ VCardTestimonial (variant="minimal")│ ← Client quotes
├─────────────────────────────────────┤
│ VCardCta (variant="banner") │ ⟨ Contact CTA
└─────────────────────────────────────┘Contact / Apply Page
┌─────────────────────────────────────┐
│ VCardHero (layout="split", height="medium") │
├─────────────────────────────────────┤
│ VCardForm (variant="landscape") │ ← Application form
├─────────────────────────────────────┤
│ VCardSocialProof (variant="logos") │ ← Trust logos
├─────────────────────────────────────┤
│ VCardCallOut (variant="muted") │ ← What to expect
├─────────────────────────────────────┤
│ VCardSalesPerson × 2 │ ← Assigned officer
└─────────────────────────────────────┘Design System Reference
Color Palette
Brand Green (vgreen-*)
The primary brand color used for CTAs, accents, and positive indicators.
| Token | Value | Usage |
|-------|-------|-------|
| vgreen-50 | #F0F7E6 | Subtle backgrounds |
| vgreen-100 | #DFF0C8 | Light backgrounds |
| vgreen-300 | #9DD162 | Hover states |
| vgreen-500 | #68A519 | Primary brand green |
| vgreen-700 | #527F18 | Dark accents |
| vgreen-900 | #2D4216 | Text on light |
Stone Neutrals (vn-*)
Warm neutral palette for text, backgrounds, and borders.
| Token | Value | Usage |
|-------|-------|-------|
| vn-50 | #FAFAFA | Page backgrounds |
| vn-100 | #F5F5F5 | Card backgrounds |
| vn-200 | #E8E8E8 | Borders, dividers |
| vn-400 | #A3A3A3 | Secondary text |
| vn-500 | #737373 | Placeholders |
| vn-700 | #404040 | Body text |
| vn-900 | #171717 | Headings |
| vn-950 | #0A0A0A | Dark backgrounds |
Accent Colors
| Token | Value | Usage |
|-------|-------|-------|
| vlime | #A3E635 | Vivid accent on dark |
| vaccent | #FFAC00 | Gold for stars, highlights |
Typography Classes
| Class | Size Range | Usage |
|-------|-----------|-------|
| vc-type-display | 3.5rem - 5.5rem | Hero headlines |
| vc-type-stat | 2.5rem - 4rem | Large stat numbers |
| vc-type-h1 | 2.5rem - 4rem | Section headings |
| vc-type-h2 | 2rem - 3rem | Sub-section headings |
| vc-type-h3 | 1.5rem - 1.75rem | Card titles |
| vc-type-body-lg | 1.125rem - 1.25rem | Lead paragraphs |
| vc-type-body | 15px | Default body text |
| vc-eyebrow | 12px uppercase | Section eyebrows |
Button Classes
<!-- Primary (dark) -->
<NuxtLink to="/apply" class="vc-btn-primary">Apply Now</NuxtLink>
<!-- Primary Green (conversion) -->
<NuxtLink to="/apply" class="vc-btn-primary-green">Get Started</NuxtLink>
<!-- Secondary (outlined) -->
<NuxtLink to="/programs" class="vc-btn-secondary">View Programs</NuxtLink>
<!-- Ghost (over images) -->
<NuxtLink to="/learn" class="vc-btn-ghost">Learn More</NuxtLink>
<!-- Text (inline) -->
<NuxtLink to="/details" class="vc-btn-text">See Details →</NuxtLink>Card Base Classes
| Class | Appearance |
|-------|-----------|
| vc-card | White background, rounded corners |
| vc-card-elevated | White, elevated shadow |
| vc-card-dark | Dark background (vn-950) |
| vc-card-muted | Light background (vn-50) |
Utility Classes
Hover Effects:
vc-card-lift- Card lifts on hovervc-img-zoom- Image zooms on hover
Overlays:
vc-overlay-hero- Dark gradient for heroesvc-overlay-bottom- Bottom gradient for portrait cardsvc-overlay-full- Full coverage dark overlay
Scroll Animations:
vc-reveal- Ready for scroll animationvc-reveal-visible- Revealed state (added by composable)
Composables
useVCardsScrollReveal()
Scroll-triggered reveal animation.
const { revealRef } = useVCardsScrollReveal({
threshold: 0.15,
rootMargin: '0px 0px -40px 0px',
once: true
})useVCards()
Access merged VCard configuration.
const config = useVCards()
// Returns: { colors, fonts, radius, spacing, brand }File Structure
nuxt-v-cards/
├── nuxt.config.ts # Layer configuration
├── package.json
├── app.config.ts # Default app configuration
├── app.vue # Layer root app
├── assets/
│ └── css/main.css # Design system styles
├── components/ # 17 VCard components
│ ├── VCardHero.vue
│ ├── VCardFeature.vue
│ ├── VCardContent.vue
│ ├── VCardCta.vue
│ ├── VCardLoan.vue
│ ├── VCardLoanStats.vue
│ ├── VCardTestimonial.vue
│ ├── VCardGoogleReview.vue
│ ├── VCardEvent.vue
│ ├── VCardForm.vue
│ ├── VCardSalesPerson.vue
│ ├── VCardRecentlyFunded.vue
│ ├── VCardLocationsHero.vue
│ ├── VCardLenderComparison.vue
│ ├── VCardSocialProof.vue
│ ├── VCardCallOut.vue
│ └── VCardWrapper.vue
├── composables/
│ ├── useVCardsScrollReveal.ts
│ └── useVCards.ts
├── types/
│ └── v-cards.ts
├── .playground/ # Development environment
└── README.md # This file