# Add a Block
URL: /docs/add-a-block
Add a block to this project and get your contribution recognized.
***
title: Add a Block
description: Add a block to this project and get your contribution recognized.
icon: Plus
----------
import { File, Folder, Files } from 'fumadocs-ui/components/files';
import { Tab, Tabs } from "fumadocs-ui/components/tabs";
import { Step, Steps } from "fumadocs-ui/components/steps";
We are inviting the community to share your components and blocks with other developers and help build a library of high-quality, reusable components.
We aim to build a collection of **ready-to-use, beautifully animated, and well-styled components** that developers can **copy-paste seamlessly** into their projects. Your contributions help make this project even better!
## Setup your workspace
### Fork the repository
```bash
git clone https://github.com/subhadeeproy3902/mvpblocks.git
```
### Create a new branch
```bash
git checkout -b username/my-new-block
```
### Install dependencies
```bash
npm install
```
```bash
pnpm install
```
```bash
yarn
```
```bash
bun install
```
### Start the dev server
```bash
npm run dev
```
```bash
pnpm run dev
```
```bash
yarn dev
```
```bash
bun run dev
```
## Add a block
A block can be a single component (eg. a variation of a ui component) or a complex component (eg. a dashboard) with multiple components, hooks, and utils.
### Create a new block
1. If you are creating a new block of a new category, create a new folder in `components/mvpblocks` with the name of your `category`. For example, `mainsections`.
2. If you are creating a new block in an existing category, create a new folder in `components/mvpblocks/[category]` with the name of your `block`. For example, `hero-1`.
> **Note:** The build script will take care of building the block for the `default` style.
### Add your block files
Add your files to the block folder. Here is an example of a block.
> **Note:** You can start with one file and add more files later.
## Add your block to the registry
### Add your block definition to `registry-blocks.tsx`
To add your block to the registry, you need to add your block definition to `registry-blocks.ts`.
```tsx title="registry/registry-blocks.tsx"
export const blocks = [
// ...
{
name: "hero-1",
author: "subhadeeproy3902", // Your GitHub username
type: "registry:block",
dependencies: ["lucide-react"], // List of dependencies to install
registryDependencies: [`${siteLink}/r/header.json`], // List of registry dependencies to make your block work
files: [
{
path: "@/components/mvpblocks/mainsections/hero-1.tsx", // Path to your block file
type: "registry:block",
},
],
component: React.lazy(
() => import("../components/mvpblocks/mainsections/hero-1"), // Lazy path to your block component
),
}
];
```
> **Note:** If you are using `ui` or `hooks` or `utils/lib`, make sure to add them in `registry-ui.ts` or `registry-hooks.ts` or `registry-lib.ts` respectively. Main block path should be `@/components/mvpblocks/[category]/[block].tsx`.
Make sure you add a name, description, type, registryDependencies, dependencies, files correctly.
### Run the build script
```bash
npm run build:registry
```
```bash
pnpm run build:registry
```
```bash
yarn build:registry
```
```bash
bun run build:registry
```
> **Note:** you do not need to run this script for every change. You only need to run it when you update the block definition.
### View your block
Once the build script is finished, you can view your block at `http://localhost:3000/docs/[blockpath]` or a full screen preview at `http://localhost:3000/preview/[blockname]`.
### Build your block
You can now build your block by editing the files in the block folder and viewing the changes in the browser.
If you add more files, make sure to add them to the `files` array in the block definition.
## Publish your block
Once you're ready to publish your block, you can submit a pull request to the main repository.
### Run the build script
```bash
npm run build:registry
```
```bash
pnpm run build:registry
```
```bash
yarn build:registry
```
```bash
bun run build:registry
```
### Capture a screenshot
Capture a screenshot of your block in action. You can use any screenshot tool you prefer.
You can use the built-in screenshot tool in your operating system or a third-party tool like Snagit or Greenshot.
### Submit a pull request
Commit your changes and submit a pull request to the main repository.
Your block will be reviewed and merged. Once merged it will be published to the website and available to be installed via the CLI.
## Guidelines
Here are some guidelines to follow when contributing to the blocks library.
* The following properties are required for the block definition: `name`, `description`, `type`, `files`.
* Make sure to list all registry dependencies in `registryDependencies`. A registry dependency is the path of the component in the registry eg. `https://blocks.mvp-subha.me/r/globe.json`.
* Make sure to list all dependencies in `dependencies`. A dependency is the name of the package in the registry eg. `zod`, `sonner`, etc.
# Design Studio
URL: /docs/agno-ai-studio
A modern AI-powered studio template with sleek design and responsive layout. Perfect for AI startups and SaaS products, built and shipped on Lovable.
***
title: Design Studio
description: A modern AI-powered studio template with sleek design and responsive layout. Perfect for AI startups and SaaS products, built and shipped on Lovable.
icon: Lovable
-------------
import { BuyDialog } from '@/components/important/BuyButton';
import { VideoPlayer } from '@/components/important/VideoPlayer';
import LiveDemo from '@/components/important/LiveDemo';
import { Callout } from 'fumadocs-ui/components/callout';
import InternationalBuyButton from '@/components/important/InternationalBuyButton';
## β‘ The Cleanest AI Studio Landing You'll Find
Most AI startup templates feel like they were thrown together over a weekend.\
**Agno AI Studio** is the opposite, sleek, intentional, and built to convert.
It's the kind of landing page that makes your AI product look like it just raised a seed round, even if you're shipping on day one.
## π₯ Why Agno SLAPS
* π€ **AI-Ready Structure**\
Hero, features, model showcase, pricing, and CTA, all dialed in for AI-first products.
* π **Modern, Sleek UI**\
Subtle gradients, glassy cards, smooth motion. No 2015 vibes anywhere.
* π **Dark Mode Native**\
Designed dark-first, because that's where AI products live.
* π± **Fully Responsive**\
Phone, tablet, desktop, pixel-perfect on everything.
* β‘ **Built on Lovable**\
One click to remix, customize, and ship. No setup pain.
Agno AI Studio is part of our **Lovable Templates** lineup, remix it instantly and ship your next AI product in minutes, not weekends.
## π Tech Stack
Next.js Β· TypeScript Β· Tailwind CSS Β· Framer Motion Β· Lovable
## π Perfect For
* π€ AI Startups
* π§ LLM products & playgrounds
* π οΈ Indie hackers shipping AI tools
* πΈ MVPs and Product Hunt launches
* π¨βπ» Anyone who wants a clean AI landing, fast
# AI SaaS Marketing
URL: /docs/ai-saas-marketing
A sleek, high-converting landing page template built for modern AI startups and SaaS businesses. Whether you're launching your next-gen AI tool or marketing a powerful SaaS product, this template gives you everything you need to stand out and convert.
***
title: AI SaaS Marketing
description: A sleek, high-converting landing page template built for modern AI startups and SaaS businesses. Whether you're launching your next-gen AI tool or marketing a powerful SaaS product, this template gives you everything you need to stand out and convert.
icon: Store
new: true
---------
import { BuyDialog } from '@/components/important/BuyButton';
import { VideoPlayer } from '@/components/important/VideoPlayer';
import LiveDemo from '@/components/important/LiveDemo';
import { Callout } from 'fumadocs-ui/components/callout';
import InternationalBuyButton from '@/components/important/InternationalBuyButton';
## π¨ The Best SaaS Marketing Template You'll Ever Touch
Let's keep it real, most templates out there are either:
β Too basic\
β Overdesigned and clunky\
β Or stupidly overpriced πΈ
So we made this:\
A **pixel-perfect**, **blazing-fast**, and **drop-dead gorgeous SaaS landing page** that makes your product look like it just closed a Series A.
## π₯ Why This Template SLAPS
This ain't your average, cookie-cutter junk from overpriced marketplaces.\
This is the **cleanest**, **smoothest**, and **cheapest** SaaS marketing template on the internet, and we mean it.
* π― **Built for High Conversion**\
Every block, every line, every pixel screams *"click that CTA"*.
* π **Modern as Hell**\
From bento-style grids to subtle gradients, it's 2025 design, not 2015 junk.
* β‘ **Super Fast**\
Powered by Next.js 14, TailwindCSS, and Framer Motion. No lag, just vibes.
* π± **Mobile-First**\
Looks π₯ on all screen sizes. Phone, tablet, desktop, all covered.
* π οΈ **Crazy Easy to Customize**\
Clean, modular code. Drag, drop, tweak, done.
* π¬ **Client-Ready Sections**\
Includes About, Services, Testimonials, Features, CTA, everything you need to close leads.
Go compare it with all the other overpriced SaaS templates out there.\
$49? $79? $99? They wish they looked this good.
This one's **cleaner, faster, and insanely cheaper.**\
Designed to make your startup look *legit AF* on day one.
## πΌ Perfect For:
* π AI Startups
* π§ SaaS Tools
* π οΈ Indie Hackers
* πΈ Founders Pre-Launch
* π§ͺ MVPs & Product Hunt Drops
* π¨βπ» Literally anyone building something cool
# AI Chat Platform
URL: /docs/auraclaw-ai-chatbot
A production-ready, multi-model AI chat platform with streaming, persistence, and optional voice mode. Built for developers who want speed, clarity, and full control.
***
title: AI Chat Platform
description: A production-ready, multi-model AI chat platform with streaming, persistence, and optional voice mode. Built for developers who want speed, clarity, and full control.
icon: Bot
new: true
---------
import { VideoPlayer } from '@/components/important/VideoPlayer';
import { Callout } from 'fumadocs-ui/components/callout';
import AuraClawComponents from '@/components/important/AuraClawComponents';
## Stop Reinventing the Wheel - Focus on Building What Matters! π₯
AuraClaw is a production-ready AI chatbot template (with the latest features of ChatGPT, Claude, Gemini and more) powered by the latest Vercel AI SDK. Itβs designed to give you a strong head start, whether you're a student experimenting, building real products, or thinking about building a full AI SaaS platform.
We built AuraClaw so that you can focus on what truly matters, **your models, your agents, and your product**, while we handle the infrastructure, streaming, UI, and integrations. Instead of spending weeks wiring APIs and designing chat systems, you get a clean, fast, and extensible foundation from day one.
***
## Editions
All editions share the same core architecture. The difference is simply which features are enabled.
| Feature | Ultimate | Pro | Starter |
| ------------------------------ | -------- | --- | ------- |
| Multi-model support | Yes | Yes | Yes |
| Streaming responses | Yes | Yes | Yes |
| Markdown + KaTeX rendering | Yes | Yes | Yes |
| Persistent chat history | Yes | Yes | Limited |
| Theming & personalization | Yes | Yes | Limited |
| Database (Neon Postgres) | Yes | Yes | No |
| Authentication (Clerk) | Yes | Yes | No |
| Shareable chats | Yes | Yes | No |
| Advanced sidebar (search, org) | Yes | Yes | No |
| Voice mode | Yes | No | No |
***
### π Ultimate, $149 / βΉ13,999
Everything unlocked. No compromises.
* Best suited for full-scale Agentic AI products and SaaS platforms.
* Real-time, full-duplex voice interaction that feels natural and fluid.
* Includes **live closed captions**, so you can read along in real time.
***
### βοΈ Pro, $99 / βΉ8,999
Core system with all essential features.
* Ideal for serious projects and production-ready applications
* Full multi-model chat with streaming, persistence, and rich rendering
* Clean, scalable foundation without voice features
***
### β‘οΈ Starter, $69 / βΉ5,999
Lightweight version for quick setups and experimentation.
* Minimal, fast, and easy to deploy
* Core multi-model chat with streaming support
* Best for learning, prototyping, and simple use cases
***
## What Makes AuraClaw Different
This is not a thin wrapper.\
Itβs a production-ready system designed for real-world use.
* **Multi-provider model selection** all accessible from a single interface.
* **Streaming markdown rendering** with KaTeX math (*inline and display*), and syntax-highlighted code, streamed in real time.
* **Persistent chat history**: Conversations stored in Neon Postgres and linked to users via Clerk authentication.
* **Automatic chat titles**: Context-aware titles generated from your interaction with the chatbot
* **Optimistic UI updates**: Messages appear instantly without disruptive loading states.
* **Voice interaction (Ultimate)**: Includes Whisper-based transcription, speech playback, and continuous conversation flow.
* **Shareable conversations**: Export and share chats across platforms like X, LinkedIn, WhatsApp, and email.
* **Structured sidebar experience**: Time-based grouping (Today, Yesterday, Last Week, Older), with rename, archive, delete, and fuzzy search.
* **Theming and personalization**: Light, dark, and system themes with customizable accents and preferences.
***
## Built for Builders
AuraClaw fits a wide range of use cases:
* AI SaaS platforms
* Multi-model experimentation
* Indie projects and developer tools
* MVP development and production systems
* Rapid prototyping with full control
***
AuraClaw provides a clean foundation for building AI products with speed and clarity.\
Focus on your ideas, not the setup.
# Categories
URL: /docs/categories
All the components are categorized into different categories. You can add your own category and add blocks to it.
***
title: Categories
description: All the components are categorized into different categories. You can add your own category and add blocks to it.
icon: Blocks
full: true
----------
import SpotlightCard from "@/components/ui/spotlight-cards";
# CLI
URL: /docs/cli
Complete guide to the MVPBlocks CLI - the most intelligent component CLI that auto-initializes projects with themes
***
title: CLI
description: Complete guide to the MVPBlocks CLI - the most intelligent component CLI that auto-initializes projects with themes
new: true
icon: Terminal
--------------
import { Tab, Tabs } from 'fumadocs-ui/components/tabs';
import { Step, Steps } from 'fumadocs-ui/components/steps';
import { Callout } from 'fumadocs-ui/components/callout';
import { File, Folder, Files } from 'fumadocs-ui/components/files';
# π MVPBlocks CLI
The **most intelligent component CLI** that not only adds components but can **automatically initialize entire projects** with your preferred framework, theme, and setup.
**Zero Configuration Required** - MVPBlocks detects empty directories and sets up complete projects automatically!
## β¨ Revolutionary Features
### πͺ **Auto-Project Initialization**
* **Zero Configuration** - Detects if you're in an empty directory and offers to create a project
* **Framework Choice** - Choose between Next.js or Vite + React
* **Official Tools** - Uses `create-next-app` and `create-vite` for rock-solid projects
* **Package Manager Respect** - Automatically detects and uses your preferred package manager
### π¨ **Interactive Theme Selection**
* **8 Beautiful Color Palettes** - Zinc, Red, Rose, Orange, Green, Blue, Yellow, Purple
* **Smart CSS Detection** - Automatically finds and updates your CSS files
* **Instant Preview** - See color swatches before making your choice
* **Tailwind Integration** - Perfect CSS variables setup for light/dark themes
## π οΈ Installation
```bash
# Use directly (recommended)
npx mvpblocks --help
# Or install globally
npm install -g mvpblocks
```
```bash
# Use directly (recommended)
yarn dlx mvpblocks --help
# Or install globally
yarn global add mvpblocks
```
```bash
# Use directly (recommended)
pnpm dlx mvpblocks --help
# Or install globally
pnpm add -g mvpblocks
```
```bash
# Use directly (recommended)
bunx mvpblocks --help
# Or install globally
bun add -g mvpblocks
```
## π Quick Start - The Magic Way
### Auto-Initialization Workflow
**Navigate to your project location**
```bash
mkdir my-awesome-project
cd my-awesome-project
```
**Run ANY component command**
```bash
npx mvpblocks add hero-1 --ts
```
```bash
yarn dlx mvpblocks add hero-1 --ts
```
```bash
pnpm dlx mvpblocks add hero-1 --ts
```
```bash
bunx mvpblocks add hero-1 --ts
```
**Interactive Setup Begins**
1. π **Auto-Detection**: "No package.json found. Let's set up a new project!"
2. π― **Framework Choice**: Choose between Next.js or Vite + React
3. π·οΈ **Project Name**: Enter your project name (or use current directory)
4. π **Project Creation**: Official tools create your project structure
5. π¦ **Dependency Installation**: All dependencies installed automatically
6. π¨ **Theme Selection**: Interactive color palette picker
7. π§ **Theme Application**: CSS variables applied to your theme file
8. π **Component Installation**: Your requested component is added
**π Complete Project Ready!**
Your project is now ready with:
* β Framework setup (Next.js or Vite)
* β TypeScript/JavaScript configuration
* β Tailwind CSS integrated
* β Beautiful theme applied
* β Component installed and ready to use
## π¨ Theme System
Choose from **8 professionally designed color palettes**:
| Theme | Preview | Perfect For |
| ------------- | ----------------------- | -------------------------------------- |
| π **Zinc** | Modern neutral grays | Professional dashboards, SaaS apps |
| π΄ **Red** | Bold and energetic | Marketing sites, calls-to-action |
| πΉ **Rose** | Warm and welcoming | E-commerce, lifestyle brands |
| π **Orange** | Creative and vibrant | Creative agencies, portfolios |
| π’ **Green** | Fresh and natural | Health, finance, eco-friendly |
| π΅ **Blue** | Trust and reliability | Corporate, tech, social platforms |
| π‘ **Yellow** | Bright and optimistic | Education, entertainment, startups |
| π£ **Purple** | Creative and innovative | Design agencies, tech startups, gaming |
**Theme Switching**: Want to change themes later? Re-run any component installation and the theme selector will appear!
## π Commands Reference
### `add` - Add Component (with Auto-Init)
The most powerful command that can both initialize projects and add components.
```bash
# Basic usage
npx mvpblocks add button
# Force TypeScript (triggers auto-init if needed)
npx mvpblocks add hero-1 --ts
# Force JavaScript (triggers auto-init if needed)
npx mvpblocks add features --js
```
```bash
# Basic usage
yarn dlx mvpblocks add button
# Force TypeScript (triggers auto-init if needed)
yarn dlx mvpblocks add hero-1 --ts
# Force JavaScript (triggers auto-init if needed)
yarn dlx mvpblocks add features --js
```
```bash
# Basic usage
pnpm dlx mvpblocks add button
# Force TypeScript (triggers auto-init if needed)
pnpm dlx mvpblocks add hero-1 --ts
# Force JavaScript (triggers auto-init if needed)
pnpm dlx mvpblocks add features --js
```
```bash
# Basic usage
bunx mvpblocks add button
# Force TypeScript (triggers auto-init if needed)
bunx mvpblocks add hero-1 --ts
# Force JavaScript (triggers auto-init if needed)
bunx mvpblocks add features --js
```
**Example**: Adding a hero component to a new project
```bash
mkdir landing-page && cd landing-page
npx mvpblocks add hero-1 --ts
```
```bash
mkdir landing-page && cd landing-page
yarn dlx mvpblocks add hero-1 --ts
```
```bash
mkdir landing-page && cd landing-page
pnpm dlx mvpblocks add hero-1 --ts
```
```bash
mkdir landing-page && cd landing-page
bunx mvpblocks add hero-1 --ts
```
**Result**: Complete Next.js or Vite project with hero component and theme!
### `list` - View All Components
Lists all available components across all categories.
```bash
npx mvpblocks list
```
```bash
yarn dlx mvpblocks list
```
```bash
pnpm dlx mvpblocks list
```
```bash
bunx mvpblocks list
```
**Example Output**:
```
π¦ UI Components:
β’ button - Versatile button component with variants
β’ input - Form input with validation states
β’ card - Flexible card container component
π§± Block Components:
β’ hero-1 - Modern hero section with CTA
β’ features - Feature showcase grid
β’ testimonials - Customer testimonials carousel
```
### `search` - Find Components
Search for components by name, description, or category.
```bash
npx mvpblocks search hero
npx mvpblocks search button
npx mvpblocks search "landing page"
```
```bash
yarn dlx mvpblocks search hero
yarn dlx mvpblocks search button
yarn dlx mvpblocks search "landing page"
```
```bash
pnpm dlx mvpblocks search hero
pnpm dlx mvpblocks search button
pnpm dlx mvpblocks search "landing page"
```
```bash
bunx mvpblocks search hero
bunx mvpblocks search button
bunx mvpblocks search "landing page"
```
**Example**: Searching for hero components
```bash
npx mvpblocks search hero
```
```bash
yarn dlx mvpblocks search hero
```
```bash
pnpm dlx mvpblocks search hero
```
```bash
bunx mvpblocks search hero
```
**Example Output**:
```
π Search Results for "hero":
π§± Block Components:
β’ hero-1 - Modern hero section with CTA button
β’ hero-2 - Hero with background image and overlay
β’ hero-3 - Minimal hero with centered content
```
### `categories` - Browse by Category
View all available component categories.
```bash
npx mvpblocks categories
```
```bash
yarn dlx mvpblocks categories
```
```bash
pnpm dlx mvpblocks categories
```
```bash
bunx mvpblocks categories
```
**Example Output**:
```
π Component Categories:
π¦ UI Components (15 components)
Basic building blocks like buttons, inputs, cards
π§± Block Components (25 components)
Complete sections like heroes, features, testimonials
πͺ Hooks (8 components)
Custom React hooks for enhanced functionality
π Library (5 components)
Utility functions and helpers
```
### `info` - Component Details
Get detailed information about a specific component.
```bash
npx mvpblocks info button
npx mvpblocks info hero-1
```
```bash
yarn dlx mvpblocks info button
yarn dlx mvpblocks info hero-1
```
```bash
pnpm dlx mvpblocks info button
pnpm dlx mvpblocks info hero-1
```
```bash
bunx mvpblocks info button
bunx mvpblocks info hero-1
```
**Example**: Getting button component info
```bash
npx mvpblocks info button
```
```bash
yarn dlx mvpblocks info button
```
```bash
pnpm dlx mvpblocks info button
```
```bash
bunx mvpblocks info button
```
**Example Output**:
```
π¦ Component: button
π Description: Versatile button component with multiple variants and sizes
π Category: UI Components
π Dependencies: class-variance-authority, @radix-ui/react-slot
π·οΈ Registry: registry:ui
π File: components/ui/button.tsx
π¨ Variants:
β’ default, destructive, outline, secondary, ghost, link
β’ Sizes: default, sm, lg, icon
```
### `help` - Show Help
Display help information and available commands.
```bash
npx mvpblocks --help
npx mvpblocks help
```
```bash
yarn dlx mvpblocks --help
yarn dlx mvpblocks help
```
```bash
pnpm dlx mvpblocks --help
pnpm dlx mvpblocks help
```
```bash
bunx mvpblocks --help
bunx mvpblocks help
```
## ποΈ Project Structure
### Next.js Auto-Initialization
When you run MVPBlocks in an empty directory and choose **Next.js**:
π¨ Theme applied hereUtility functionsπ¦ All dependenciesπ¨ Tailwind setupTypeScript config
### Vite Auto-Initialization
When you run MVPBlocks in an empty directory and choose **Vite + React**:
π¨ Theme applied hereUtility functionsπ¦ All dependenciesβ‘ Vite + Tailwind CSS v4TypeScript config
## π― Example Workflows
### Complete Beginner - Landing Page
**Create project directory**
```bash
mkdir my-landing-page
cd my-landing-page
```
**Add hero section with auto-initialization**
```bash
npx mvpblocks add hero-1 --ts
```
```bash
yarn dlx mvpblocks add hero-1 --ts
```
```bash
pnpm dlx mvpblocks add hero-1 --ts
```
```bash
bunx mvpblocks add hero-1 --ts
```
**Interactive flow**: Choose Next.js β Enter project name β Pick Blue theme β Done!
**Add more components**
```bash
npx mvpblocks add features
npx mvpblocks add testimonials
npx mvpblocks add cta-1
```
```bash
yarn dlx mvpblocks add features
yarn dlx mvpblocks add testimonials
yarn dlx mvpblocks add cta-1
```
```bash
pnpm dlx mvpblocks add features
pnpm dlx mvpblocks add testimonials
pnpm dlx mvpblocks add cta-1
```
```bash
bunx mvpblocks add features
bunx mvpblocks add testimonials
bunx mvpblocks add cta-1
```
**π Perfect landing page ready!**
Your complete landing page is now ready with hero, features, testimonials, and CTA sections!
### Experienced Developer - SaaS Dashboard
**Create SaaS project**
```bash
mkdir my-saas-app
cd my-saas-app
```
**Initialize with Vite for speed**
```bash
npx mvpblocks add dashboard --ts
```
```bash
yarn dlx mvpblocks add dashboard --ts
```
```bash
pnpm dlx mvpblocks add dashboard --ts
```
```bash
bunx mvpblocks add dashboard --ts
```
**Interactive flow**: Choose Vite β Modern setup β Zinc theme β Ready!
**Add UI components**
```bash
npx mvpblocks add button
npx mvpblocks add input
npx mvpblocks add modal
npx mvpblocks add data-table
```
```bash
yarn dlx mvpblocks add button
yarn dlx mvpblocks add input
yarn dlx mvpblocks add modal
yarn dlx mvpblocks add data-table
```
```bash
pnpm dlx mvpblocks add button
pnpm dlx mvpblocks add input
pnpm dlx mvpblocks add modal
pnpm dlx mvpblocks add data-table
```
```bash
bunx mvpblocks add button
bunx mvpblocks add input
bunx mvpblocks add modal
bunx mvpblocks add data-table
```
**π Production-ready SaaS dashboard!**
Complete dashboard with all UI components and proper theming ready for development.
### Existing Project - Add Components
**Navigate to existing project**
```bash
cd my-existing-project
```
**Add components directly**
```bash
npx mvpblocks add hero-2
npx mvpblocks add pricing
```
```bash
yarn dlx mvpblocks add hero-2
yarn dlx mvpblocks add pricing
```
```bash
pnpm dlx mvpblocks add hero-2
pnpm dlx mvpblocks add pricing
```
```bash
bunx mvpblocks add hero-2
bunx mvpblocks add pricing
```
**β Components added to existing structure**
No initialization needed - components are added directly to your existing project!
## π‘ Pro Tips
**Package Manager Intelligence**: MVPBlocks automatically detects your package manager from lock files and uses it consistently throughout the project.
### Theme Switching Made Easy
Want to change themes later? Simply re-run any component installation:
```bash
npx mvpblocks add button --ts # Theme selector will appear
```
```bash
yarn dlx mvpblocks add button --ts # Theme selector will appear
```
```bash
pnpm dlx mvpblocks add button --ts # Theme selector will appear
```
```bash
bunx mvpblocks add button --ts # Theme selector will appear
```
### Speed Optimization
Install globally for faster access:
```bash
npm install -g mvpblocks
mvpblocks add hero-1 --ts # No npx needed!
```
```bash
yarn global add mvpblocks
mvpblocks add hero-1 --ts # No yarn dlx needed!
```
```bash
pnpm add -g mvpblocks
mvpblocks add hero-1 --ts # No pnpm dlx needed!
```
```bash
bun add -g mvpblocks
mvpblocks add hero-1 --ts # No bunx needed!
```
## π§ Options & Flags
| Flag | Description | Example |
| ---------------------- | ------------------------------------------------------ | -------- |
| `--ts`, `--typescript` | Force TypeScript output (triggers auto-init if needed) | `--ts` |
| `--js`, `--javascript` | Force JavaScript output (triggers auto-init if needed) | `--js` |
| `--help`, `-h` | Show help message | `--help` |
## π Requirements
* **Node.js** 18 or higher
* **Package Manager**: npm, yarn, pnpm, or bun (auto-detected)
* **No existing setup needed** - MVPBlocks creates everything for you!
## π¨ Supported Frameworks
### **Next.js (Auto-Initialized)**
* β App Router with TypeScript
* β Tailwind CSS v3
* β ESLint configuration
* β Automatic `globals.css` theme integration
* β Optional `src/` directory support
### **Vite + React (Auto-Initialized)**
* β React with TypeScript/JavaScript
* β Tailwind CSS v4 with `@tailwindcss/vite`
* β Automatic `index.css` theme integration
* β Lightning-fast development server
### **Existing Projects (Manual)**
* β Any React/Next.js project with Tailwind CSS
* β Components added to existing structure
* β Dependencies auto-installed
**Important**: For auto-initialization to trigger, the directory must not contain a `package.json` file. If you want to initialize in a directory with existing files, temporarily move or rename the `package.json`.
## π What Makes MVPBlocks Special?
### **πͺ Zero Configuration Magic**
Other CLIs require you to set up projects manually. MVPBlocks creates **production-ready projects** with a single command.
### **π¨ Professional Theme System**
No more tweaking CSS variables manually. Choose from expertly crafted color palettes and get perfect theming instantly.
### **π Official Tools Integration**
Uses `create-next-app` and `create-vite` under the hood, ensuring you get the same quality setup as manual creation.
### **π¦ Package Manager Intelligence**
Automatically detects and respects your preferred package manager. No configuration needed.
***
**π From zero to production-ready in seconds. That's the MVPBlocks promise.**
# Designer Portfolio
URL: /docs/designer-portfolio
A stunning, high-end portfolio template crafted for designers, artists, and creatives. Built with Next.js, Framer Motion, and Tailwind CSS, Fionaβs Portfolio turns your personal website into an immersive visual experience that feels like a $300+ custom build.
***
title: Designer Portfolio
description: A stunning, high-end portfolio template crafted for designers, artists, and creatives. Built with Next.js, Framer Motion, and Tailwind CSS, Fionaβs Portfolio turns your personal website into an immersive visual experience that feels like a $300+ custom build.
icon: Palette
-------------
import { VideoPlayer } from '@/components/important/VideoPlayer';
import { Callout } from 'fumadocs-ui/components/callout';
import DesignerPortfolioComponents from '@/components/important/DesignerPortfolioComponents';
## π A Designer Portfolio That Speaks Luxury
Let's be honest, most portfolios feel like just another resume on the web.\
**Fionaβs Portfolio** changes that.
Itβs not just a website. Itβs a **visual experience**, designed to make your work *feel expensive*, *intentional*, and *undeniably yours.*
## π¨ Why Creatives Love This Template
* β¨ **Built for Visual Storytelling**\
Every scroll, every hover, every transition, designed to highlight your creativity.
* π **Three Stunning Color Variants**\
Choose from **Rose**, **Lime Green**, or **Blue**, each crafted for unique moods and brands.
* π **Framer Motion Magic**\
Smooth animations, floating shapes, and modern transitions that breathe life into your story.
* π‘ **Designer-Centric Layouts**\
Hero, About, Projects, Process, Testimonials, and Contact, all built to flow naturally and feel intentional.
* π **Theme Toggle Included**\
Switch between light and dark effortlessly, your work shines in both.
* π± **Responsive & Refined**\
Looks flawless on phones, tablets, and desktops. No compromises.
* π¬ **Bonus Touches**\
Custom 404 page, thank-you page, error page, and smooth scroll effects for an ultra-polished finish.
A top-tier portfolio experience that **feels premium** but costs just **$39**.\
Built with **Next.js, TailwindCSS, and Framer Motion**, modern, fast, and aesthetic AF.\
Perfect for freelancers, designers, and creatives who want their site to look like it was *custom-coded by an agency*.
## π Perfect For
* π¨ UI/UX Designers
* πΈ Creative Artists
* ποΈ Illustrators
* πΉ Video Editors & Visual Storytellers
* π§βπ» Freelancers & Personal Brands
* β¨ Anyone who wants a portfolio that *feels like art*
***
# Developer Portfolio
URL: /docs/developer-portfolio
A stunning, blazing-fast Next.js portfolio template to showcase your work, skills, and personality, completely free.
***
title: Developer Portfolio
description: A stunning, blazing-fast Next.js portfolio template to showcase your work, skills, and personality, completely free.
icon: Code
----------
import { VideoPlayer } from '@/components/important/VideoPlayer';
import LiveDemo from '@/components/important/LiveDemo';
import { Callout } from 'fumadocs-ui/components/callout';
import { Button } from '@/components/ui/button';
## π₯ The Most Stunning Next.js Portfolio Template, Free
Why burn hours building a portfolio from scratch, or spend $$$ on bloated templates,\
when you can grab this **premium-quality, blazing-fast template** for **$0**?
This template looks and performs like it cost hundreds.\
Clean UI, fast load times, and fully responsive, it's the real deal for devs, designers, and creatives.
Free? Yep. **Completely free.** πΈπ₯
## π What Makes It So Good?
This isn't just another template sitting on the internet,\
it's your **shortcut to looking like a total pro**, minus the stress.
### β¨ Features That Actually Matter:
* π¨ **Stunning Design**\
Modern, clean, smooth, your work will *shine*.
* π± **Responsive AF**\
Desktop, mobile, tablet, it's flawless everywhere.
* π οΈ **Easy to Customize**\
No spaghetti code. Tweak it in minutes.
* β‘ **Performance-Optimized**\
Loads fast. Runs smooth. Looks slick.
* π **SEO-Ready**\
Google and clients? Both will find you.
## π Who's This For?
Perfect for anyone looking to leave a mark online:
* π¨ Designers
* π¨βπ» Developers
* πΈ Photographers
* βοΈ Writers
* πΌ Freelancers
* Or literally *anyone* building a personal brand πͺ
Your portfolio is more than a website, it's your story, your brand, your
future. **Start strong with a template built to impress, and free to use.**
# Installation
URL: /docs/get-started
How to install and set up Mvpblocks in your project.
***
title: Installation
description: How to install and set up Mvpblocks in your project.
icon: Package
-------------
import { DocsInstallationCard } from '@/components/important/DocInstall.tsx';
# Introduction
URL: /docs/introduction
Learn about Mvpblocks, a collection of trending UI components for your website.
***
title: Introduction
description: Learn about Mvpblocks, a collection of trending UI components for your website.
icon: Book
----------
import { OpenInV0Button } from '@/components/important/v0'
MVPBlocks is an open-source, developer-focused UI component library. It's specifically designed to accelerate the development and launch of Minimum Viable Products (MVPs). It provides a curated collection of pre-built, responsive, and modern UI components and sections. It is built with Next.js, TailwindCSS, shadcn/ui, and Framer Motion. The library aims to streamline frontend development. It enables developers to quickly integrate high-quality, pre-styled UI elements into their projects. This is done without complex styling or animations.
## Key features and benefits
* **Extensive Component Library:** MVPBlocks offers a wide range of professionally designed UI elements for various use cases. These include SaaS dashboards, landing pages, e-commerce storefronts, authentication systems, and portfolio websites.
* **Pre-styled and Responsive:** All components are optimized for different screen sizes and modern design standards. This ensures a consistent and visually appealing user experience across devices.
* **Seamless Animations:** The components are designed with built-in animations. This eliminates the need for additional configuration or coding.
* **Multiple Integration Methods:** MVPBlocks supports various integration methods. These include CLI installation, manual copy-pasting, and direct editing within the development environment.
* **Customizable and Extendable:** Developers can easily modify the components' styling, functionality, and structure. They can do this to meet their project-specific requirements.
* **Developer-Friendly Architecture:** The library is tailored for developers. It offers minimal overhead and maximum flexibility, [according to GitHub](https://github.com/subhadeeproy3902/mvpblocks).
* **CLI Support:** MVPBlocks offers command-line interface (CLI) support. This streamlines development workflows.
* **v0 Support:** It provides initial version support. This is ideal for quickly launching MVPs, prototypes, and other early-stage projects.
* **Comprehensive Documentation:** MVPBlocks includes fully functional documentation and inline guides. This assists developers in understanding and utilizing the library effectively.
## Installation and Usage
### Install via CLI
```sh
# Add a single component
npx mvpblocks add component-name
```
### Manual Copy-Paste
Visit the website, select a component, and paste it directly into your project.
### Open in V0
Edit and customize components visually using .
## Target Audience
MVPBlocks is built for:
* **Developers** - Speed up frontend development by utilizing pre-built UI components.
* **Designers** - Experiment with visually appealing UI elements without writing extensive CSS.
* **Startups & Agencies** - Build high-quality user interfaces quickly without compromising design consistency.
## Why Use MVPBlocks?
* **Saves Time** - No need to build UI components from scratch.
* **Ensures Consistency** - Use standardized, high-quality designs.
* **Flexible Integration** - Supports multiple usage methods for different workflows.
* **Regular Updates** - Stay ahead with the latest UI trends and enhancements.
***
For feedback or contributions, reach out to us to help improve MVPBlocks.
# DevOps Tools
URL: /docs/opus-devops
A clean, technical template for DevOps platforms, infrastructure monitoring, CI/CD tools, log viewers, and dev-tool dashboards. Built on Lovable.
***
title: DevOps Tools
description: A clean, technical template for DevOps platforms, infrastructure monitoring, CI/CD tools, log viewers, and dev-tool dashboards. Built on Lovable.
icon: Lovable
new: true
---------
import { BuyDialog } from '@/components/important/BuyButton';
import { VideoPlayer } from '@/components/important/VideoPlayer';
import LiveDemo from '@/components/important/LiveDemo';
import { Callout } from 'fumadocs-ui/components/callout';
import InternationalBuyButton from '@/components/important/InternationalBuyButton';
## βοΈ A DevOps Template Built Like Real Infrastructure
Most "dev tool" templates are just dressed-up landing pages.\
**Opus DevOps** is built for the actual product, dashboards, metrics, server status, logs, alerts.
It's the kind of template engineers don't roll their eyes at.
## π₯ Why Opus SLAPS
* π **Real Dashboards**\
Metrics tiles, time-series charts, status grids, all wired up cleanly.
* π₯οΈ **Server Status Views**\
Up/down indicators, health pills, region/cluster breakdowns.
* π **Log Viewer Layouts**\
Dense, readable, monospace-friendly UI for log streams and trace output.
* βοΈ **CI/CD Ready**\
Pipeline stages, build statuses, deploy timelines, all designed for ops flows.
* β‘ **Built on Lovable**\
One-click remix, fast customization, zero setup pain.
* π **Dark-Mode Native**\
Designed dark-first, exactly where DevOps tools live.
Opus DevOps is part of our **Lovable Templates** lineup, remix instantly and ship the dev-tool platform you've been sketching for months.
## π Tech Stack
Next.js Β· TypeScript Β· Tailwind CSS Β· Recharts Β· Lucide Icons Β· Lovable
## π Perfect For
* βοΈ Infrastructure monitoring tools
* π οΈ CI/CD platforms
* π Observability dashboards
* π Log & trace viewers
* π Alerting & status products
* π¨βπ» Indie dev-tool builders shipping something serious
# Fintech Template
URL: /docs/paymintx
A premium, payment-focused fintech template for modern financial products. Banking dashboards, wallet apps, payment processors, all production-ready and built on Lovable.
***
title: Fintech Template
description: A premium, payment-focused fintech template for modern financial products. Banking dashboards, wallet apps, payment processors, all production-ready and built on Lovable.
icon: Lovable
-------------
import { BuyDialog } from '@/components/important/BuyButton';
import { VideoPlayer } from '@/components/important/VideoPlayer';
import LiveDemo from '@/components/important/LiveDemo';
import { Callout } from 'fumadocs-ui/components/callout';
import InternationalBuyButton from '@/components/important/InternationalBuyButton';
## πΈ A Fintech Template That Actually Looks Like Money
Most fintech templates feel like glorified admin dashboards.\
**PayMintX** isn't one of them.
It's a **clean, confident, payment-first design system**, built for products people trust with their money. Banking apps, wallets, payment processors, finance SaaS, all of it ships better with PayMintX.
## π₯ Why PayMintX Hits Different
* π³ **Payment-Native UI**\
Cards, transaction lists, balances, KPIs, and dashboards, all designed for finance flows.
* π **Polished Dashboards**\
Charts, metrics, and analytics blocks that actually look like a real product.
* π§Ύ **Transaction History**\
Clean rows, statuses, filters, the boring stuff done beautifully.
* π **Trust-First Design**\
Subtle, premium, zero-noise UI. Money apps live or die on trust.
* β‘ **Built on Lovable**\
One-click remix. Customize, brand, and ship in minutes.
* π± **Fully Responsive**\
Looks π₯ on phones, tablets, and desktops.
PayMintX is part of our **Lovable Templates** lineup, remix instantly, customize fast, and ship a finance product that *feels real* on day one.
## π Tech Stack
Next.js Β· React Β· TypeScript Β· Shadcn UI Β· Tailwind CSS Β· Lovable
## π Perfect For
* π³ Payment processors
* π¦ Neobanks & wallet apps
* π Finance SaaS dashboards
* π§Ύ Invoicing & billing tools
* π οΈ Indie fintech builders
* π¨βπ» Anyone shipping a money product
# Skeletons
URL: /docs/skeletons
Skeletons are placeholder elements that can be used to indicate loading states in your application. They provide a visual cue to users that content is being loaded.
***
title: Skeletons
description: Skeletons are placeholder elements that can be used to indicate loading states in your application. They provide a visual cue to users that content is being loaded.
new: true
---------
import { ComponentPreview } from '@/components/preview/component-preview';
import { extractSourceCode } from '@/lib/code';
## Shimmer Card
## Shimmer Table Type One
## Shimmer Table Type Two
# Gradient Bars
URL: /docs/backgrounds/gradient-bars
Animated background with vertical gradient bars that pulse in a wave-like motion.
***
title: Gradient Bars
description: Animated background with vertical gradient bars that pulse in a wave-like motion.
----------------------------------------------------------------------------------------------
import { Tab, Tabs } from "fumadocs-ui/components/tabs";
import { Step, Steps } from "fumadocs-ui/components/steps";
import { TypeTable } from "fumadocs-ui/components/type-table";
import {ComponentPreview} from "@/components/preview/component-preview";
import {extractSourceCode} from "@/lib/code";
import {ComponentSource} from "@/components/preview/component-source";
## Installation
```bash
npm install motion react
```
```bash
pnpm install motion react
```
```bash
yarn add motion react
```
```bash
bun add motion react
```
Gradient Bars
## Props
# Buttons
URL: /docs/basic/buttons
Creative Buttons with built-in styling, offering flexibility for custom designs and responsive layouts
***
title: Buttons
description: Creative Buttons with built-in styling, offering flexibility for custom designs and responsive layouts
full: true
----------
import { DrawerCodePreview } from "@/components/preview/drawer-preview";
import { extractSourceCode } from "@/lib/code";
# Loaders
URL: /docs/basic/loaders
Beautiful loaders to keep users engaged while waiting for content to load
***
title: Loaders
description: Beautiful loaders to keep users engaged while waiting for content to load
full: true
----------
import { DrawerCodePreview } from "@/components/preview/drawer-preview";
import { extractSourceCode } from "@/lib/code";
# Modals
URL: /docs/basic/modals
Modals are overlay elements that display content on top of the main interface. They are commonly used for alerts, confirmations, and additional information without navigating away from the current page.
***
title: Modals
description: Modals are overlay elements that display content on top of the main interface. They are commonly used for alerts, confirmations, and additional information without navigating away from the current page.
full: true
----------
import { DrawerCodePreview } from "@/components/preview/drawer-preview";
import { extractSourceCode } from "@/lib/code";
# Pagination
URL: /docs/basic/pagination
Pagination is a navigation technique that divides content into separate pages, allowing users to browse through large sets of data without overwhelming them. It helps improve performance and user experience by loading only a portion of the content at a time.
***
title: Pagination
description: Pagination is a navigation technique that divides content into separate pages, allowing users to browse through large sets of data without overwhelming them. It helps improve performance and user experience by loading only a portion of the content at a time.
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
import { Tab, Tabs } from "fumadocs-ui/components/tabs";
import { Step, Steps } from "fumadocs-ui/components/steps";
import { TypeTable } from "fumadocs-ui/components/type-table";
import {ComponentPreview} from "@/components/preview/component-preview";
import {extractSourceCode} from "@/lib/code";
## Pagination Component
# Progress
URL: /docs/basic/progress
Progress indicators are essential for providing feedback to users about the status of their actions. They help manage user expectations and improve the overall user experience.
***
title: Progress
description: Progress indicators are essential for providing feedback to users about the status of their actions. They help manage user expectations and improve the overall user experience.
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
import { Button } from "@/components/ui/button";
import { Github } from "lucide-react";
import Link from "next/link";
Component In Development
We're currently working on creating beautiful, responsive pagination components for MVPBlocks.
Want to contribute?
We welcome contributions from the community! If you have ideas or
implementations for pagination components, consider contributing to
MVPBlocks.
# Basic Cards
URL: /docs/cards/basic-cards
A collection of basic card designs, featuring various layouts for showcasing content
***
title: Basic Cards
description: A collection of basic card designs, featuring various layouts for showcasing content
-------------------------------------------------------------------------------------------------
import RetroCard from "@/components/mvpblocks/cards/basic/retro-card";
import {ComponentPreview} from "@/components/preview/component-preview";
import {extractSourceCode} from "@/lib/code";
## Dot Card
## Meshy Cards
## Retro Card
# Flip Card
URL: /docs/cards/card-flip
An interactive 3D flip card component with hover animations. Perfect for showcasing MVP features with engaging visual effects and smooth transitions.
***
title: Flip Card
description: An interactive 3D flip card component with hover animations. Perfect for showcasing MVP features with engaging visual effects and smooth transitions.
root: cards
new: true
---------
import { ComponentPreview } from "@/components/preview/component-preview";
import { extractSourceCode } from "@/lib/code";
import { ComponentSource } from "@/components/preview/component-source";
import { Tab, Tabs } from "fumadocs-ui/components/tabs";
import { Step, Steps } from "fumadocs-ui/components/steps";
import { TypeTable } from "fumadocs-ui/components/type-table";
## Installation
```bash
npm install lucide-react react
```
```bash
pnpm install lucide-react react
```
```bash
yarn add lucide-react react
```
```bash
bun add lucide-react react
```
## Usage
```tsx
import CardFlip from "@/components/mvpblocks/cards/basic/card-flip";
export default function MyComponent() {
return (
);
}
```
## API
## Features
* π **3D Flip Animation**: Smooth card flip effect with CSS 3D transforms
* π― **Hover Triggered**: Flips on mouse enter/leave for intuitive interaction
* π **MVP Themed**: Perfect for showcasing development speed and efficiency
* π± **Responsive**: Adapts to different screen sizes beautifully
* π¨ **Dark Mode**: Seamlessly works with light and dark themes
* β‘ **Performance**: Optimized animations with CSS transitions
## Examples
### Custom MVP Card
```tsx
```
### Development Tools Card
```tsx
```
### Startup Features Card
```tsx
```
## Styling
The component uses Tailwind CSS classes and can be customized by modifying the source code. Key styling features:
* **Gradient Backgrounds**: Subtle gradients for modern look
* **Border Effects**: Dynamic borders that change on hover
* **Shadow Effects**: Layered shadows for depth
* **Icon Integration**: Lucide React icons with smooth animations
* **Typography**: Carefully balanced text hierarchy
## Animation Details
* **Flip Duration**: 700ms smooth transition
* **Perspective**: 2000px for realistic 3D effect
* **Backface Visibility**: Hidden to prevent flickering
* **Transform Origin**: Center-based rotation
* **Staggered Animations**: Features appear with sequential delays
# Codes
URL: /docs/cards/code-blocks
A collection of code blocks showcasing various designs and functionalities
***
title: Codes
description: A collection of code blocks showcasing various designs and functionalities
new: true
---------
import RetroCard from "@/components/mvpblocks/cards/basic/retro-card";
import {ComponentPreview} from "@/components/preview/component-preview";
import {extractSourceCode} from "@/lib/code";
## Code Block 1
## Ellipsis Block
# Expandable Cards
URL: /docs/cards/expandable-cards
Interactive cards that expand to reveal detailed information with smooth animations. Available in multiple variants including product, weather, and meeting cards.
***
title: Expandable Cards
description: Interactive cards that expand to reveal detailed information with smooth animations. Available in multiple variants including product, weather, and meeting cards.
root: cards
-----------
import { ComponentPreview } from "@/components/preview/component-preview";
import { extractSourceCode } from "@/lib/code";
import { ComponentSource } from "@/components/preview/component-source";
import { Tab, Tabs } from "fumadocs-ui/components/tabs";
import { Step, Steps } from "fumadocs-ui/components/steps";
## Product Card
A product card that expands to reveal detailed features, specifications, and purchase options with smooth animations.
## Installation
```bash
npm install motion/react lucide-react react
```
```bash
pnpm install motion/react lucide-react react
```
```bash
yarn add motion/react lucide-react react
```
```bash
bun add motion/react lucide-react react
```
### Copy the Product Card Component
## Usage
```tsx
import ExpandableProductCard from "@/components/mvpblocks/cards/expandable-product-card";
export default function MyComponent() {
return (
);
}
```
## Features
* π― **Interactive Card**: Click to expand and collapse with smooth animations
* π¨ **Fade Animations**: Smooth fade effects for content reveal
* β **Rating Display**: Dynamic star rating with review count
* ποΈ **Product Features**: Displays key product features with icons
* π± **Responsive**: Adapts beautifully to different screen sizes
* π **Dark Mode**: Seamlessly works with light and dark themes
* β‘ **Smooth Animations**: Powered by motion/react for fluid transitions
* πΌοΈ **Dynamic Image**: Image resizes smoothly on expand/collapse
## Customization
The component uses the `Expandable` UI component which provides:
* **Presets**: `fade`, `slide-up` for different animation effects
* **Delays**: Custom expand/collapse delays (500ms expand, 700ms collapse)
* **Sizes**: Collapsed (330x220) and expanded (500x520) sizes
* **Spring Animations**: Custom spring animations for smooth transitions
## Examples
### Weather Card
A weather card that expands to show detailed weather information and 5-day forecast with smooth blur animations.
#### Copy the Weather Card Component
#### Usage
```tsx
import ExpandableWeatherCard from "@/components/mvpblocks/cards/expandable-weather-card";
export default function MyComponent() {
return (
);
}
```
#### Key Features
* π€οΈ **Weather Details**: Shows temperature, humidity, wind, and precipitation
* π **5-Day Forecast**: Displays upcoming weather forecast
* π¨ **Blur Animations**: Smooth blur effects for content reveal
* π **Staggered Animations**: Staggered reveal of weather details
### Meeting Card
An interactive meeting card that expands to show attendees, location, and meeting details with smooth blur animations.
#### Copy the Meeting Card Component
#### Usage
```tsx
import ExpandableMeetingCard from "@/components/mvpblocks/cards/expandable-meeting-card";
export default function MyComponent() {
return (
);
}
```
#### Key Features
* π₯ **Attendees Display**: Shows meeting attendees with avatars
* π **Calendar Integration**: Quick add to calendar button
* π¨ **Blur Animations**: Smooth blur effects for content reveal
# Glow Cards
URL: /docs/cards/glow-cards
A collection of glow card designs, featuring various layouts for showcasing content
***
title: Glow Cards
description: A collection of glow card designs, featuring various layouts for showcasing content
root: cards
new: true
---------
import { ComponentPreview } from "@/components/preview/component-preview";
import { extractSourceCode } from "@/lib/code";
# Product Cards
URL: /docs/cards/product-cards
A collection of product card designs, featuring various layouts for showcasing products
***
title: Product Cards
description: A collection of product card designs, featuring various layouts for showcasing products
----------------------------------------------------------------------------------------------------
import { Button } from "@/components/ui/button";
import { Github } from "lucide-react";
import Link from "next/link";
Component In Development
We're currently working on creating beautiful, responsive pagination components for MVPBlocks.
Want to contribute?
We welcome contributions from the community! If you have ideas or
implementations for pagination components, consider contributing to
MVPBlocks.
# Spotlight Cards
URL: /docs/cards/spotlight-cards
Unique card designs with spotlight effects, perfect for showcasing featured content
***
title: Spotlight Cards
description: Unique card designs with spotlight effects, perfect for showcasing featured content
------------------------------------------------------------------------------------------------
import { Button } from "@/components/ui/button";
import { Github } from "lucide-react";
import Link from "next/link";
Component In Development
We're currently working on creating beautiful, responsive pagination components for MVPBlocks.
Want to contribute?
We welcome contributions from the community! If you have ideas or
implementations for pagination components, consider contributing to
MVPBlocks.
# X (Twitter) Cards
URL: /docs/cards/x-cards
A collection of X (Twitter) card designs, featuring various layouts for showcasing content
***
title: X (Twitter) Cards
description: A collection of X (Twitter) card designs, featuring various layouts for showcasing content
-------------------------------------------------------------------------------------------------------
import {ComponentPreview} from "@/components/preview/component-preview";
import {extractSourceCode} from "@/lib/code";
## Basic Twitter Card
# Chatbot UI
URL: /docs/chatbot/chatbot-ui
A great chatbot UI design can make a huge difference in user engagement and satisfaction. Here are some of the best chatbot UI designs to inspire you.
***
title: Chatbot UI
description: A great chatbot UI design can make a huge difference in user engagement and satisfaction. Here are some of the best chatbot UI designs to inspire you.
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
import {ComponentPreview} from "@/components/preview/component-preview";
import {extractSourceCode} from "@/lib/code";
## v0 Chat
## Bolt.New
## Animated AI Chat
# Conversation
URL: /docs/chatbot/conversation
Production-ready chatbot UI built on the AI SDK v6 + ai-elements, with Streamdown markdown, reasoning, tool calls, and a shimmer "Thinking..." state
***
title: Conversation
description: Production-ready chatbot UI built on the AI SDK v6 + ai-elements, with Streamdown markdown, reasoning, tool calls, and a shimmer "Thinking..." state
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
import {ComponentPreview} from "@/components/preview/component-preview";
import {extractSourceCode} from "@/lib/code";
import { Tab, Tabs } from "fumadocs-ui/components/tabs";
import { Step, Steps } from "fumadocs-ui/components/steps";
import { Callout } from "fumadocs-ui/components/callout";
## Working Chatbot
Uses the **AI SDK v6** (`ai@^6`, `@ai-sdk/react@^3`) with **ai-elements** for
the conversation shell + **Streamdown** for streaming markdown. Tool calls
render as collapsible cards, reasoning appears in a "Thinking..." panel that
auto-closes when done, and a shimmer indicates inflight requests.
### Installation
#### Install the SDK + provider packages
```bash
npm install ai @ai-sdk/react @ai-sdk/groq streamdown sonner zod
```
```bash
pnpm add ai @ai-sdk/react @ai-sdk/groq streamdown sonner zod
```
```bash
yarn add ai @ai-sdk/react @ai-sdk/groq streamdown sonner zod
```
```bash
bun add ai @ai-sdk/react @ai-sdk/groq streamdown sonner zod
```
#### Install the ai-elements components
Conversation pulls in everything you need: message bubbles, response (Streamdown),
reasoning panel, tool-call cards, and the shimmer indicator.
```bash
npx ai-elements@latest add conversation message response reasoning tool shimmer prompt-input
```
#### Create the API route
Make an `app/api/chat/route.ts` (App Router):
```ts title="app/api/chat/route.ts"
import { groq } from '@ai-sdk/groq';
import {
convertToModelMessages,
smoothStream,
stepCountIs,
streamText,
type UIMessage,
} from 'ai';
export const maxDuration = 30;
export async function POST(req: Request) {
const { messages }: { messages: UIMessage[] } = await req.json();
const result = streamText({
model: groq('openai/gpt-oss-120b'), // good function-calling on Groq
messages: await convertToModelMessages(messages),
stopWhen: stepCountIs(6),
maxOutputTokens: 8192,
experimental_transform: smoothStream({ chunking: 'word' }),
});
return result.toUIMessageStreamResponse({
sendReasoning: true, // enables rendering on the client
});
}
```
v6 changes from v5:
* `convertToModelMessages` is **async** β always `await` it.
* `maxSteps` β `stopWhen: stepCountIs(n)`
* `maxTokens` β `maxOutputTokens`
* `toDataStreamResponse()` β `toUIMessageStreamResponse()`
* Tool definitions use `inputSchema` (not `parameters`) and the `tool({...})` helper.
#### Add your API key
```txt title=".env.local"
GROQ_API_KEY=your-groq-api-key
```
#### Hook it up on the client
`useChat` in v6 no longer manages input state β own it with `useState` and
submit via `sendMessage({ parts: [{ type: 'text', text }] })`:
```tsx title="components/working-chatbot.tsx"
'use client';
import { useChat } from '@ai-sdk/react';
import { useState } from 'react';
import { isToolUIPart, getToolName } from 'ai';
import {
Conversation,
ConversationContent,
ConversationEmptyState,
ConversationScrollButton,
} from '@/components/ai-elements/conversation';
import { Message, MessageContent } from '@/components/ai-elements/message';
import { Response } from '@/components/ai-elements/response';
import {
Reasoning,
ReasoningContent,
ReasoningTrigger,
} from '@/components/ai-elements/reasoning';
import {
Tool,
ToolContent,
ToolHeader,
ToolInput,
ToolOutput,
} from '@/components/ai-elements/tool';
import { Shimmer } from '@/components/ai-elements/shimmer';
import {
PromptInput,
PromptInputSubmit,
PromptInputTextarea,
} from '@/components/ai-elements/prompt-input';
export default function WorkingChatbot() {
const [input, setInput] = useState('');
const { messages, status, sendMessage } = useChat();
const isLoading = status === 'submitted' || status === 'streaming';
const handleSubmit = (e: React.FormEvent) => {
e.preventDefault();
if (!input.trim()) return;
sendMessage({ parts: [{ type: 'text', text: input.trim() }] });
setInput('');
};
return (
);
}
```
#### Point the demo at your route
The bundled `working-chatbot` defaults to `/api/demo-chat`. Switch it to your route
by passing a custom transport:
```diff
+ import { DefaultChatTransport } from 'ai';
const { messages, status, sendMessage } = useChat({
+ transport: new DefaultChatTransport({ api: '/api/chat' }),
});
```
## What each piece does
| Piece | Why it's here |
| --------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **`Conversation` / `ConversationContent`** | Sticky-bottom scroll container + content slot. Auto-scrolls as new tokens stream in. |
| **`ConversationEmptyState`** | Renders icon/title/description placeholder when `messages.length === 0`. |
| **`ConversationScrollButton`** | Floating "scroll to bottom" pill that appears when the user scrolls up. |
| **`ConversationDownload`** | Optional. Floating button that exports the chat as a `.md` file via the bundled `messagesToMarkdown` helper. |
| **`Message` / `MessageContent`** | Per-bubble role-aware styling (`is-user` / `is-assistant`). |
| **`Response`** | The Streamdown-powered markdown renderer. Handles incomplete code fences, GFM tables, math, and live re-flow during streaming. |
| **`Reasoning` / `ReasoningTrigger` / `ReasoningContent`** | Collapsible "Thinking..." panel that auto-opens while the model streams `reasoning` parts and auto-closes 1s after they finish. |
| **`Tool` / `ToolHeader` / `ToolInput` / `ToolOutput`** | Collapsible tool-call card showing input JSON + output + status badge (`input-streaming` / `input-available` / `output-available` / `output-error`). |
| **`Shimmer`** | Animated gradient text. Use for the "Thinking..." / "Generating..." indicator in the assistant bubble between the user's send and the first streamed token. |
| **`PromptInput` family** | Textarea + submit button wired for `submitted`/`streaming` status. |
## Conversation Example
# Bubble Board
URL: /docs/creative/bubble-board
A draggable animated bubble grid powered by Framer Motion.
***
title: Bubble Board
description: A draggable animated bubble grid powered by Framer Motion.
root: creative
new: true
---------
import { ComponentPreview } from "@/components/preview/component-preview";
import { extractSourceCode } from "@/lib/code";
## Behavior
* Drag the board in any direction.
* Bubbles react to the cursor by scaling smoothly based on distance.
* Includes staggered grid alignment for a dimensional feel.
# Floating Dock
URL: /docs/creative/floating-dock
A floating dock navigation component with smooth hover animations. Features desktop and mobile variants with interactive icon scaling.
***
title: Floating Dock
description: A floating dock navigation component with smooth hover animations. Features desktop and mobile variants with interactive icon scaling.
root: basic
-----------
import { ComponentPreview } from "@/components/preview/component-preview";
import { extractSourceCode } from "@/lib/code";
import { ComponentSource } from "@/components/preview/component-source";
import { Tab, Tabs } from "fumadocs-ui/components/tabs";
import { Step, Steps } from "fumadocs-ui/components/steps";
## Installation
```bash
npm install motion/react lucide-react react
```
```bash
pnpm install motion/react lucide-react react
```
```bash
yarn add motion/react lucide-react react
```
```bash
bun add motion/react lucide-react react
```
## Usage
```tsx
import { FloatingDock } from "@/components/ui/floating-dock";
import { Home, Github, Twitter } from "lucide-react";
export default function MyComponent() {
const links = [
{
title: "Home",
icon: ,
href: "/",
},
{
title: "GitHub",
icon: ,
href: "https://github.com",
},
{
title: "Twitter",
icon: ,
href: "https://twitter.com",
},
];
return (
);
}
```
## Features
* π― **Interactive Icons**: Icons scale smoothly on hover with spring animations
* π± **Responsive**: Separate desktop and mobile layouts
* π¨ **Smooth Animations**: Powered by motion/react for fluid transitions
* π **Dark Mode**: Seamlessly works with light and dark themes
* π±οΈ **Hover Effects**: Icons expand based on mouse position
* π± **Mobile Menu**: Collapsible menu for mobile devices
## Positioning
The component supports custom positioning via className props:
```tsx
```
**Note**:
* Desktop navbar is better positioned at the bottom
* Mobile navbar is better positioned at bottom right
## Customization
You can customize the dock by:
* **Icons**: Use any React node as icons (lucide-react, custom SVGs, images)
* **Colors**: Modify Tailwind classes for background and text colors
* **Sizes**: Adjust the dock height and icon sizes via className
* **Animations**: The spring animations are configurable in the component
## Examples
### Custom Icons with Images
```tsx
const links = [
{
title: "Logo",
icon: (
),
href: "/",
},
];
```
### Fixed Position Dock
```tsx
```
# Globe
URL: /docs/creative/globe
Globe is a component that displays a 3D globe with a variety of features and customizations.
***
title: Globe
description: Globe is a component that displays a 3D globe with a variety of features and customizations.
root: creative
--------------
import { Tab, Tabs } from "fumadocs-ui/components/tabs";
import { Step, Steps } from "fumadocs-ui/components/steps";
import { TypeTable } from "fumadocs-ui/components/type-table";
import {ComponentPreview} from "@/components/preview/component-preview";
import {extractSourceCode} from "@/lib/code";
## Basic
## Installation
```bash
npm install cobe
```
```bash
pnpm install cobe
```
```bash
yarn add cobe
```
```bash
bun add cobe
```
```tsx title="globe.tsx"
'use client';
import React, { useEffect, useRef } from 'react';
import createGlobe from 'cobe';
import { cn } from '@/lib/utils';
interface EarthProps {
className?: string;
theta?: number;
dark?: number;
scale?: number;
diffuse?: number;
mapSamples?: number;
mapBrightness?: number;
baseColor?: [number, number, number];
markerColor?: [number, number, number];
glowColor?: [number, number, number];
}
const Earth: React.FC = ({
className,
theta = 0.25,
dark = 1,
scale = 1.1,
diffuse = 1.2,
mapSamples = 40000,
mapBrightness = 6,
baseColor = [0.4, 0.6509, 1],
markerColor = [1, 0, 0],
glowColor = [0.2745, 0.5765, 0.898],
}) => {
const canvasRef = useRef(null);
useEffect(() => {
let width = 0;
const onResize = () =>
canvasRef.current && (width = canvasRef.current.offsetWidth);
window.addEventListener('resize', onResize);
onResize();
let phi = 0;
onResize();
const globe = createGlobe(canvasRef.current!, {
devicePixelRatio: 2,
width: width * 2,
height: width * 2,
phi: 0,
theta: theta,
dark: dark,
scale: scale,
diffuse: diffuse,
mapSamples: mapSamples,
mapBrightness: mapBrightness,
baseColor: baseColor,
markerColor: markerColor,
glowColor: glowColor,
opacity: 1,
offset: [0, 0],
markers: [
// longitude latitude
],
onRender: (state: Record) => {
// Called on every animation frame.
// `state` will be an empty object, return updated params.\
state.phi = phi;
phi += 0.003;
},
});
return () => {
globe.destroy();
};
}, []);
return (
);
};
export default Earth;
```
## Props
## Examples
### Globe Card
# Interactive Tooltip
URL: /docs/creative/interactive-tooltip
A dynamic tooltip component with mouse-following animations and spring physics. Perfect for displaying user profiles or team member information with engaging hover effects.
***
title: Interactive Tooltip
description: A dynamic tooltip component with mouse-following animations and spring physics. Perfect for displaying user profiles or team member information with engaging hover effects.
root: creative
--------------
import { ComponentPreview } from "@/components/preview/component-preview";
import { extractSourceCode } from "@/lib/code";
import { ComponentSource } from "@/components/preview/component-source";
import { Tab, Tabs } from "fumadocs-ui/components/tabs";
import { Step, Steps } from "fumadocs-ui/components/steps";
import { TypeTable } from "fumadocs-ui/components/type-table";
## Installation
```bash
npm install motion react
```
```bash
pnpm install motion react
```
```bash
yarn add motion react
```
```bash
bun add motion react
```
## Usage
```tsx
import InteractiveTooltip from "@/components/mvpblocks/creative/interactive-tooltip";
const teamMembers = [
{
id: 1,
name: "John Doe",
designation: "Senior Developer",
image: "https://images.unsplash.com/photo-1472099645785-5658abf4ff4e?w=100&h=100&fit=crop&crop=face"
},
{
id: 2,
name: "Jane Smith",
designation: "UI/UX Designer",
image: "https://images.unsplash.com/photo-1494790108755-2616b612b786?w=100&h=100&fit=crop&crop=face"
},
{
id: 3,
name: "Mike Johnson",
designation: "Product Manager",
image: "https://images.unsplash.com/photo-1507003211169-0a1dd7228f2d?w=100&h=100&fit=crop&crop=face"
}
];
export default function MyComponent() {
return (
);
}
```
## API
",
description: "Array of items to display with tooltips. Each item should have id, name, designation, and image properties.",
default: "[]"
}
}}
/>
### Item Properties
## Features
* π― **Mouse Following**: Tooltip follows mouse movement with smooth spring physics
* π **Dynamic Rotation**: Tooltip rotates based on mouse position for natural feel
* β‘ **Spring Animations**: Smooth enter/exit animations with configurable spring physics
* π¨ **Gradient Effects**: Beautiful gradient borders for visual appeal
* π± **Responsive Design**: Works seamlessly on different screen sizes
* πΌοΈ **Image Hover Effects**: Scale and z-index changes on hover
* πͺ **Stacked Layout**: Overlapping avatars with proper z-index management
## Examples
### Development Team
```tsx
const devTeam = [
{
id: 1,
name: "Alex Rivera",
designation: "Lead Frontend Developer",
image: "/team/alex.jpg"
},
{
id: 2,
name: "Sarah Chen",
designation: "Backend Engineer",
image: "/team/sarah.jpg"
},
{
id: 3,
name: "Marcus Williams",
designation: "DevOps Engineer",
image: "/team/marcus.jpg"
}
];
```
### Customer Success Team
```tsx
const customerTeam = [
{
id: 1,
name: "Emma Thompson",
designation: "Customer Success Manager",
image: "/team/emma.jpg"
},
{
id: 2,
name: "David Park",
designation: "Support Specialist",
image: "/team/david.jpg"
},
{
id: 3,
name: "Lisa Rodriguez",
designation: "Account Manager",
image: "/team/lisa.jpg"
}
];
```
### Executive Team
```tsx
const executives = [
{
id: 1,
name: "Michael Johnson",
designation: "Chief Executive Officer",
image: "/executives/ceo.jpg"
},
{
id: 2,
name: "Jennifer Davis",
designation: "Chief Technology Officer",
image: "/executives/cto.jpg"
},
{
id: 3,
name: "Robert Kim",
designation: "Chief Marketing Officer",
image: "/executives/cmo.jpg"
}
];
```
## Animation Details
### Spring Configuration
The component uses carefully tuned spring physics:
* **Stiffness**: 100 (smooth but responsive)
* **Damping**: 5 (minimal bouncing)
* **Rotation Range**: -45Β° to +45Β° based on mouse position
* **Translation Range**: -50px to +50px horizontal offset
### Hover Effects
* **Scale**: Images scale to 105% on hover
* **Z-Index**: Hovered image moves to front layer (z-30)
* **Transition**: 500ms duration for smooth scaling
### Tooltip Animation
* **Enter**: Opacity 0β1, Y 20β0, Scale 0.6β1
* **Exit**: Opacity 1β0, Y 0β20, Scale 1β0.6
* **Spring Type**: High stiffness (260) with controlled damping (10)
## Styling Customization
The component uses Tailwind classes and can be customized:
### Avatar Styling
```css
.avatar-custom {
@apply h-16 w-16 border-2 border-background rounded-full ring-2 ring-primary/20;
}
```
### Tooltip Styling
```css
.tooltip-custom {
@apply bg-background/95 backdrop-blur-sm border border-border text-foreground px-4 py-2 rounded-lg shadow-xl;
}
```
### Theme Colors
The component uses semantic theme colors for consistency:
* **Background**: `bg-background/95` with blur for modern glass effect
* **Border**: `border-border` for subtle outlines
* **Text**: `text-foreground` for primary text, `text-muted-foreground` for secondary
* **Ring Effect**: `ring-primary/20` with hover state `ring-primary/40`
* **Gradients**: `from-primary/5 via-transparent to-primary/5` for subtle depth
### Gradient Effects
The tooltip includes multiple gradient layers using theme colors:
* **Background gradient**: Subtle vertical gradient with `primary/5`
* **Primary gradient**: 20% width, `via-primary`
* **Secondary gradient**: 40% width, `via-primary/60`
## Best Practices
1. **Image Optimization**: Use optimized images (WebP format recommended)
2. **Responsive Images**: Provide appropriate sizes for different screen densities
3. **Accessibility**: Include proper alt text for profile images
4. **Performance**: Limit the number of items to avoid performance issues
5. **Spacing**: Allow adequate spacing between avatars for comfortable interaction
# Motion Number
URL: /docs/creative/motion-number
Motion Number is a component that displays a number with a motion effect.
***
title: Motion Number
description: Motion Number is a component that displays a number with a motion effect.
--------------------------------------------------------------------------------------
import { Button } from "@/components/ui/button";
import { Github } from "lucide-react";
import Link from "next/link";
Component In Development
We're currently working on creating beautiful, responsive pagination components for MVPBlocks.
Want to contribute?
We welcome contributions from the community! If you have ideas or
implementations for pagination components, consider contributing to
MVPBlocks.
# Pointer Highlight
URL: /docs/creative/pointer-highlight
A pointer highlight component that animates a border and pointer around text or content. Perfect for highlighting important text with smooth animations.
***
title: Pointer Highlight
description: A pointer highlight component that animates a border and pointer around text or content. Perfect for highlighting important text with smooth animations.
root: creative
--------------
import { ComponentPreview } from "@/components/preview/component-preview";
import { extractSourceCode } from "@/lib/code";
import { ComponentSource } from "@/components/preview/component-source";
import { Tab, Tabs } from "fumadocs-ui/components/tabs";
import { Step, Steps } from "fumadocs-ui/components/steps";
## Installation
```bash
npm install motion/react react
```
```bash
pnpm install motion/react react
```
```bash
yarn add motion/react react
```
```bash
bun add motion/react react
```
## Usage
```tsx
import { PointerHighlight } from "@/components/ui/pointer-highlight";
export default function MyComponent() {
return (
The best way to grow is to{' '}
collaborate
);
}
```
## Features
* π― **Animated Border**: Smooth border animation that expands around content
* π **Pointer Indicator**: Animated pointer icon that appears at the corner
* π± **Responsive**: Automatically adjusts to content size changes
* π¨ **Customizable**: Customize colors, borders, and pointer styles
* π **Dark Mode**: Works seamlessly with light and dark themes
* β‘ **Smooth Animations**: Powered by motion/react for fluid transitions
## Customization
### Custom Colors
```tsx
Highlighted text
```
### Custom Container
```tsx
Custom styled
```
## Examples
### Highlighting Multiple Words
```tsx
Build{' '}
faster
{' '}with MVPBlocks
```
### With Custom Styling
```tsx
Important Text
```
### In Headings
```tsx
Welcome to{' '}
MVPBlocks
```
# Scroll Animation
URL: /docs/creative/scroll
Motion Number is a component that displays a number with a motion effect.
***
title: Scroll Animation
description: Motion Number is a component that displays a number with a motion effect.
--------------------------------------------------------------------------------------
import { Button } from "@/components/ui/button";
import { Github } from "lucide-react";
import Link from "next/link";
Component In Development
We're currently working on creating beautiful, responsive pagination components for MVPBlocks.
Want to contribute?
We welcome contributions from the community! If you have ideas or
implementations for pagination components, consider contributing to
MVPBlocks.
# Target Cursor
URL: /docs/creative/target-cursor
A custom animated cursor component with GSAP. Features spinning animation, corner tracking on hover, and parallax effects. Perfect for interactive websites.
***
title: Target Cursor
description: A custom animated cursor component with GSAP. Features spinning animation, corner tracking on hover, and parallax effects. Perfect for interactive websites.
root: creative
new: true
---------
import { ComponentPreview } from "@/components/preview/component-preview";
import { extractSourceCode } from "@/lib/code";
import { ComponentSource } from "@/components/preview/component-source";
import { Tab, Tabs } from "fumadocs-ui/components/tabs";
import { Step, Steps } from "fumadocs-ui/components/steps";
## Installation
```bash
npm install gsap react
```
```bash
pnpm install gsap react
```
```bash
yarn add gsap react
```
```bash
bun add gsap react
```
## Usage
```tsx
import { TargetCursor } from "@/components/ui/target-cursor";
export default function MyComponent() {
return (
Another target
);
}
```
## Features
* π― **Custom Cursor**: Replaces default cursor with animated custom cursor
* π **Spinning Animation**: Continuous rotation animation when idle
* π **Corner Tracking**: Corners expand to frame hovered elements
* π¨ **Parallax Effect**: Smooth parallax movement of corners
* π± **Mobile Detection**: Automatically disabled on mobile devices
* β‘ **GSAP Powered**: Smooth animations powered by GSAP
* π **Click Animation**: Scale animation on mouse down/up
## Props
| Prop | Type | Default | Description |
| ------------------- | --------- | ------------------ | ------------------------------------- |
| `targetSelector` | `string` | `".cursor-target"` | CSS selector for target elements |
| `spinDuration` | `number` | `2` | Duration of spin animation in seconds |
| `hideDefaultCursor` | `boolean` | `true` | Hide the default browser cursor |
| `hoverDuration` | `number` | `0.2` | Duration of hover animation |
| `parallaxOn` | `boolean` | `true` | Enable parallax effect on corners |
## Examples
### Basic Usage
```tsx
```
### Custom Selector
```tsx
Custom target
```
### Faster Spin
```tsx
```
### Without Parallax
```tsx
```
### Keep Default Cursor
```tsx
```
## Styling Targets
Add the `cursor-target` class (or your custom selector) to any element you want the cursor to interact with:
```tsx
Div
Link
```
## Mobile Support
The component automatically detects mobile devices and returns `null` to avoid conflicts with touch interactions. It checks for:
* Touch screen capability
* Screen size (β€768px)
* User agent string
# Admin Dashboard
URL: /docs/dashboards/admin
A comprehensive admin dashboard with real-time analytics, user management, and system monitoring. Features custom components with minimal shadcn usage.
***
title: Admin Dashboard
description: A comprehensive admin dashboard with real-time analytics, user management, and system monitoring. Features custom components with minimal shadcn usage.
root: dashboards
full: true
new: true
---------
import { ComponentPreview } from '@/components/preview/component-preview';
import { extractSourceCode } from '@/lib/code';
import { ComponentSource } from '@/components/preview/component-source';
import { Tab, Tabs } from 'fumadocs-ui/components/tabs';
import { Step, Steps } from 'fumadocs-ui/components/steps';
import { TypeTable } from 'fumadocs-ui/components/type-table';
import { File, Folder, Files } from 'fumadocs-ui/components/files';
## Folder structure
## Installation and setup
To set up the Admin Dashboard, follow these steps:
Add admin-sidebar, dashboard-card, dashboard-header, quick-actions, recent-activity, revenue-chart, system-status, and user-table components to your project.
Run the following command to install the necessary components:
```bash
npx mvpblocks add admin-sidebar dashboard-card dashboard-header quick-actions recent-activity revenue-chart system-status users-table
```
Copy the code from the following files and paste it into your project:
Add admin-sidebar.tsx:
Add dashboard-card.tsx:
Add dashboard-header.tsx:
Add quick-actions.tsx:
Add recent-activity.tsx:
Add revenue-chart.tsx:
Add system-status.tsx:
Add user-table.tsx:
# Personal Finance
URL: /docs/dashboards/personal-finance
Personal Finance Dashboard with budget tracking, expense analytics, savings goals, and transaction management micro UI components.
***
title: Personal Finance
description: Personal Finance Dashboard with budget tracking, expense analytics, savings goals, and transaction management micro UI components.
root: dashboards
full: true
new: true
---------
import { ComponentPreview } from '@/components/preview/component-preview';
import { extractSourceCode } from '@/lib/code';
import { ComponentSource } from '@/components/preview/component-source';
import { Tab, Tabs } from 'fumadocs-ui/components/tabs';
import { Step, Steps } from 'fumadocs-ui/components/steps';
import { TypeTable } from 'fumadocs-ui/components/type-table';
import { File, Folder, Files } from 'fumadocs-ui/components/files';
## Folder Structure
## Installation and Setup
To set up the Personal Finance Dashboard, follow these steps
Install the necessary components for the dashboard
Run the following command to install all finance dashboard components
```bash
npx mvpblocks add personal-finance-dashboard-1
```
{/* 1οΈβ£ Basic setup */}
Install required dependencies
```bash
npm install recharts lucide-react next-theme
```
or
```bash
yarn add recharts lucide-react next-theme
```
{/* 2οΈβ£ Base structure setup */}
Copy the following components and paste them into your project
Add index.tsx => Copy the code from the above on clicking the "Code" tab which is present corresponding to "Preview tab" after the component title.
Add dashboard-layout.tsx
Add personal-sidebar.tsx
Add personal-header.tsx
Add personal-footer.tsx
{/* 3οΈβ£ Dashboard content components */}
Add stats-cards.tsx
Add budget-progress.tsx
Add income-expense-chart.tsx
Add monthly-spending-chart.tsx
Add recent-transactions.tsx
Add savings-goals.tsx
Import and use the dashboard in your application
```tsx
import PersonalFinanceDashboard from '@/components/dashboards/personal-finance-dashboard-1/index';
export default function FinancePage() {
return ;
}
```
## Customization
### Adding New Categories
Update the categories array in `BudgetProgress.tsx`:
```tsx
const categories = [
{
name: 'Food & Dining',
spent: 320,
budget: 500,
color: 'bg-blue-500',
icon: 'π',
},
// ...add more like this
];
```
### Adding New Monthly Spending Data
Update the data array in `MonthlySpendingChart.tsx`:
```tsx
const data = [
{ name: 'Food & Dining', value: 320, color: '#3b82f6' },
{ name: 'Transportation', value: 180, color: '#10b981' },
{ name: 'Entertainment', value: 120, color: '#8b5cf6' },
// ...add more like this
];
```
Like this do changes in the data or add new data in particular files.
# User Dashboard
URL: /docs/dashboards/user
User dashboards provide insights into user activity, preferences, and interactions. They help users manage their profiles, settings, and other personal information.
***
title: User Dashboard
description: User dashboards provide insights into user activity, preferences, and interactions. They help users manage their profiles, settings, and other personal information.
root: forms
-----------
import { Button } from "@/components/ui/button";
import { Github } from "lucide-react";
import Link from "next/link";
Component In Development
We're currently working on creating beautiful, responsive pagination components for MVPBlocks.
Want to contribute?
We welcome contributions from the community! If you have ideas or
implementations for pagination components, consider contributing to
MVPBlocks.
# Authentication
URL: /docs/forms/loginforms
Authentication forms are essential for user registration and login. They help secure your application and manage user access.
***
title: Authentication
description: Authentication forms are essential for user registration and login. They help secure your application and manage user access.
root: forms
-----------
import {ComponentPreview} from "@/components/preview/component-preview";
import {extractSourceCode} from "@/lib/code";
## Sign-In Page
## Login Page
## Login Form
# Multi Step Forms
URL: /docs/forms/multistep
Multi-step forms are used to break down long forms into smaller, manageable sections. They improve user experience by guiding users through the form completion process step by step.
***
title: Multi Step Forms
description: Multi-step forms are used to break down long forms into smaller, manageable sections. They improve user experience by guiding users through the form completion process step by step.
root: forms
-----------
import {ComponentPreview} from "@/components/preview/component-preview";
import {extractSourceCode} from "@/lib/code";
import { Tab, Tabs } from "fumadocs-ui/components/tabs";
import { Step, Steps } from "fumadocs-ui/components/steps";
import { TypeTable } from "fumadocs-ui/components/type-table";
## Features
* **Step-by-Step Progress**: Visual indicators show users their progress through the form
* **Form Validation**: Built-in validation using React Hook Form and Zod
* **Smooth Animations**: Transitions between steps with Framer Motion
* **Responsive Design**: Works on all screen sizes
* **Customizable**: Easily modify steps, fields, and validation rules
## Preview
### Installation
```bash
npm install framer-motion react-hook-form zod @hookform/resolvers
```
```bash
pnpm install framer-motion react-hook-form zod @hookform/resolvers
```
```bash
yarn add framer-motion react-hook-form zod @hookform/resolvers
```
```bash
bun add framer-motion react-hook-form zod @hookform/resolvers
```
#### Copy and paste the following code into your project.
`components/ui/multi-step-form.tsx`
```tsx title="multi-step-form.tsx"
"use client";
import React, { useState } from "react";
import { motion, AnimatePresence } from "framer-motion";
import { z } from "zod";
import { useForm } from "react-hook-form";
import { zodResolver } from "@hookform/resolvers/zod";
import { cn } from "@/lib/utils";
import { Button } from "@/components/ui/button";
import { Input } from "@/components/ui/input";
import { Label } from "@/components/ui/label";
import { Progress } from "@/components/ui/progress";
import { CheckCircle2, ArrowRight, ArrowLeft } from "lucide-react";
// Define the form schema for each step
const personalInfoSchema = z.object({
firstName: z.string().min(2, "First name must be at least 2 characters"),
lastName: z.string().min(2, "Last name must be at least 2 characters"),
email: z.string().email("Please enter a valid email address"),
});
const addressSchema = z.object({
address: z.string().min(5, "Address must be at least 5 characters"),
city: z.string().min(2, "City must be at least 2 characters"),
zipCode: z.string().min(5, "Zip code must be at least 5 characters"),
});
const accountSchema = z.object({
username: z.string().min(3, "Username must be at least 3 characters"),
password: z
.string()
.min(8, "Password must be at least 8 characters")
.regex(/[A-Z]/, "Password must contain at least one uppercase letter")
.regex(/[0-9]/, "Password must contain at least one number"),
confirmPassword: z.string(),
}).refine(data => data.password === data.confirmPassword, {
message: "Passwords do not match",
path: ["confirmPassword"],
});
// Combine all schemas for the final form data
const formSchema = z.object({
...personalInfoSchema.shape,
...addressSchema.shape,
...accountSchema._def.schema.shape,
});
type FormData = z.infer;
interface MultiStepFormProps {
className?: string;
onSubmit?: (data: FormData) => void;
}
export default function MultiStepForm({ className, onSubmit }: MultiStepFormProps) {
const [step, setStep] = useState(0);
const [formData, setFormData] = useState>({});
const [isSubmitting, setIsSubmitting] = useState(false);
const [isComplete, setIsComplete] = useState(false);
// Define the steps
const steps = [
{
id: "personal",
title: "Personal Information",
description: "Tell us about yourself",
schema: personalInfoSchema,
fields: [
{ name: "firstName", label: "First Name", type: "text", placeholder: "John" },
{ name: "lastName", label: "Last Name", type: "text", placeholder: "Doe" },
{ name: "email", label: "Email", type: "email", placeholder: "john.doe@example.com" },
],
},
{
id: "address",
title: "Address Information",
description: "Where do you live?",
schema: addressSchema,
fields: [
{ name: "address", label: "Address", type: "text", placeholder: "123 Main St" },
{ name: "city", label: "City", type: "text", placeholder: "New York" },
{ name: "zipCode", label: "Zip Code", type: "text", placeholder: "10001" },
],
},
{
id: "account",
title: "Account Setup",
description: "Create your account",
schema: accountSchema,
fields: [
{ name: "username", label: "Username", type: "text", placeholder: "johndoe" },
{ name: "password", label: "Password", type: "password", placeholder: "β’β’β’β’β’β’β’β’" },
{ name: "confirmPassword", label: "Confirm Password", type: "password", placeholder: "β’β’β’β’β’β’β’β’" },
],
},
];
// Get the current step schema
const currentStepSchema = steps[step].schema;
// Setup form with the current step schema
const {
register,
handleSubmit,
formState: { errors },
reset,
} = useForm({
resolver: zodResolver(currentStepSchema as z.ZodType),
defaultValues: formData,
});
// Calculate progress percentage
const progress = ((step + 1) / steps.length) * 100;
// Handle next step
const handleNextStep = (data: any) => {
const updatedData = { ...formData, ...data };
setFormData(updatedData);
if (step < steps.length - 1) {
setStep(step + 1);
// Reset form with the updated data for the next step
reset(updatedData);
} else {
// Final step submission
setIsSubmitting(true);
setTimeout(() => {
if (onSubmit) {
onSubmit(updatedData as FormData);
}
setIsComplete(true);
setIsSubmitting(false);
}, 1500);
}
};
// Handle previous step
const handlePrevStep = () => {
if (step > 0) {
setStep(step - 1);
}
};
// Animation variants
const variants = {
hidden: { opacity: 0, x: 50 },
visible: { opacity: 1, x: 0 },
exit: { opacity: 0, x: -50 },
};
return (
{!isComplete ? (
<>
{/* Progress bar */}
Step {step + 1} of {steps.length}{Math.round(progress)}%
{/* Step indicators */}
{steps.map((s, i) => (
{i < step ? : i + 1}
{s.title}
))}
{/* Form */}
{steps[step].title}
{steps[step].description}
>
) : (
Form Submitted!
Thank you for completing the form. We'll be in touch soon.
)}
);
}
```
### Usage
The multi-step form component can be customized to fit your specific needs. Here's how to use it:
```tsx
{
// Handle form submission
console.log("Form data:", data);
}}
/>
```
### Customization
You can customize the form steps, fields, and validation rules by modifying the component code. The form is built using React Hook Form and Zod for validation, making it easy to add or modify fields and validation rules.
#### Adding Custom Steps
To add or modify steps, update the `steps` array in the component:
```tsx
const steps = [
{
id: "personal",
title: "Personal Information",
description: "Tell us about yourself",
schema: personalInfoSchema,
fields: [
{ name: "firstName", label: "First Name", type: "text", placeholder: "John" },
{ name: "lastName", label: "Last Name", type: "text", placeholder: "Doe" },
{ name: "email", label: "Email", type: "email", placeholder: "john.doe@example.com" },
],
},
// Add more steps here
];
```
#### Customizing Validation
The form uses Zod for validation. You can customize the validation rules by modifying the schema for each step:
```tsx
const personalInfoSchema = z.object({
firstName: z.string().min(2, "First name must be at least 2 characters"),
lastName: z.string().min(2, "Last name must be at least 2 characters"),
email: z.string().email("Please enter a valid email address"),
});
```
### Accessibility
The multi-step form is built with accessibility in mind:
* Proper form labels and ARIA attributes
* Keyboard navigation support
* Error messages for form validation
* Focus management between steps
### Props
void",
default: "undefined",
},
}}
/>
# Colors
URL: /docs/foundation/colors
Color palette that is used in Mvpblocks consistently.
***
title: Colors
description: Color palette that is used in Mvpblocks consistently.
icon: Blend
-----------
import ColorPalette from '@/components/important/ColorPalette';
## Base Colors
## Interactive Colors
## Utility Colors
## Form & Layout Colors
## Other Colors
# Contributors
URL: /docs/foundation/contributions
Meet the amazing people who have contributed to MVPBlocks
***
title: Contributors
description: Meet the amazing people who have contributed to MVPBlocks
icon: Users
-----------
import Contributors from '@/components/about/Contributors';
import { Callout } from "fumadocs-ui/components/callout";
MVPBlocks is built by an amazing community of developers from around the world. We appreciate every contribution, whether it's code, documentation, design, or feedback.
Thank you to all the wonderful people who have contributed to this project!
## How to Contribute
We welcome contributions from everyone! Here's how you can get involved:
### 1. Fork the Repository
Start by forking the [MVPBlocks repository](https://github.com/subhadeeproy3902/mvpblocks) on GitHub.
### 2. Clone Your Fork
```bash
git clone https://github.com/YOUR_USERNAME/mvpblocks.git
cd mvpblocks
```
### 3. Create a Branch
```bash
git checkout -b feature/your-feature-name
```
### 4. Make Your Changes
* Add new components
* Fix bugs
* Improve documentation
* Enhance existing features
### 5. Commit Your Changes
```bash
git add .
git commit -m "feat: add your feature description"
```
### 6. Push to Your Fork
```bash
git push origin feature/your-feature-name
```
### 7. Create a Pull Request
Go to the original repository and create a pull request from your fork.
## Contribution Guidelines
* Follow the existing code style and conventions
* Write clear, descriptive commit messages
* Test your changes before submitting
* Update documentation when necessary
* Be respectful and constructive in discussions
## Recognition
All contributors are automatically added to this page once their pull request is merged. Thank you for making MVPBlocks better!
# Bento Grids
URL: /docs/grids/bento
Bento grids are a flexible and responsive layout system that allows you to create complex grid structures with ease. They are designed to adapt to various screen sizes and orientations, making them ideal for modern web applications.
***
title: Bento Grids
description: Bento grids are a flexible and responsive layout system that allows you to create complex grid structures with ease. They are designed to adapt to various screen sizes and orientations, making them ideal for modern web applications.
root: grids
-----------
import { ComponentPreview } from "@/components/preview/component-preview";
import { extractSourceCode } from "@/lib/code";
## Features
* **Responsive Design**: Automatically adapts to different screen sizes
* **Flexible Layout**: Combine different sized grid items for visual interest
* **Customizable**: Easily modify colors, content, and styling to match your brand
* **Interactive Elements**: Includes hover effects and animations for better user engagement
## Basic Bento Grid
### Usage
```jsx
import BentoGrid1 from "@/components/mvpblocks/grids/bento-grid-1";
export default function MyPage() {
return (
);
}
```
### Customization
You can customize the Bento grid by modifying the items array in the component:
```jsx
const items = [
{
title: "Custom Title",
description: "Your custom description here.",
icon: ,
size: "medium", // "small", "medium", or "large"
},
// Add more items as needed
];
```
## Bento with details
# Gallery
URL: /docs/grids/gallery
Gallery grids are used to display a collection of images or media in a visually appealing layout. They are commonly used in portfolios, image galleries, and media libraries.
***
title: Gallery
description: Gallery grids are used to display a collection of images or media in a visually appealing layout. They are commonly used in portfolios, image galleries, and media libraries.
root: grids
-----------
import { Button } from "@/components/ui/button";
import { Github } from "lucide-react";
import Link from "next/link";
Component In Development
We're currently working on creating beautiful, responsive pagination components for MVPBlocks.
Want to contribute?
We welcome contributions from the community! If you have ideas or
implementations for pagination components, consider contributing to
MVPBlocks.
# Masonry Grids
URL: /docs/grids/masonry
Masonry grids are a popular layout style that allows items to be arranged in a way that optimizes space and creates a visually appealing design. They are commonly used in image galleries, portfolios, and other content-heavy applications.
***
title: Masonry Grids
description: Masonry grids are a popular layout style that allows items to be arranged in a way that optimizes space and creates a visually appealing design. They are commonly used in image galleries, portfolios, and other content-heavy applications.
root: grids
-----------
import { ComponentPreview } from "@/components/preview/component-preview";
import { extractSourceCode } from "@/lib/code";
# Astro
URL: /docs/installation/astro
Install and configure shadcn/ui for Astro
***
title: Astro
description: Install and configure shadcn/ui for Astro
------------------------------------------------------
import { Callout } from "fumadocs-ui/components/callout";
### Create project
Start by creating a new Astro project:
```bash
npx create-astro@latest astro-app --template with-tailwindcss --install --add react --git
```
### Edit tsconfig.json file
Add the following code to the `tsconfig.json` file to resolve paths:
```ts title="tsconfig.json" {4-9} showLineNumbers
{
"compilerOptions": {
// ...
"baseUrl": ".",
"paths": {
"@/*": [
"./src/*"
]
}
// ...
}
}
```
### Run the CLI
Run the `shadcn` init command to setup your project:
```bash
npx shadcn@latest init
```
### Add Components
You can now start adding components to your project.
```bash
npx shadcn@latest add button
```
The command above will add the `Button` component to your project. You can then import it like this:
```astro title="src/pages/index.astro" {2,16} showLineNumbers
---
import { Button } from "@/components/ui/button"
---
Astro + TailwindCSS
```
# Gatsby
URL: /docs/installation/gatsby
Install and configure Gatsby.
***
title: Gatsby
description: Install and configure Gatsby.
------------------------------------------
import { Callout } from "fumadocs-ui/components/callout";
**Update:** We have added full support for React 19 and Tailwind v4 in the
`canary` release. See the docs for [Tailwind v4](/docs/tailwind-v4) for more
information.
### Create project
Start by creating a new Gatsby project using `create-gatsby`:
```bash
npm init gatsby
```
### Configure your Gatsby project to use TypeScript and Tailwind CSS
You will be asked a few questions to configure your project:
```txt showLineNumbers
β What would you like to call your site?
Β· your-app-name
β What would you like to name the folder where your site will be created?
Β· your-app-name
β Will you be using JavaScript or TypeScript?
Β· TypeScript
β Will you be using a CMS?
Β· Choose whatever you want
β Would you like to install a styling system?
Β· Tailwind CSS
β Would you like to install additional features with other plugins?
Β· Choose whatever you want
β Shall we do this? (Y/n) Β· Yes
```
### Edit tsconfig.json file
Add the following code to the `tsconfig.json` file to resolve paths:
```ts {4-9} showLineNumbers
{
"compilerOptions": {
// ...
"baseUrl": ".",
"paths": {
"@/*": [
"./src/*"
]
}
// ...
}
}
```
### Create gatsby-node.ts file
Create a `gatsby-node.ts` file at the root of your project if it doesnβt already exist, and add the code below to the `gatsby-node` file so your app can resolve paths:
```ts
import * as path from "path"
export const onCreateWebpackConfig = ({ actions }) => {
actions.setWebpackConfig({
resolve: {
alias: {
"@/components": path.resolve(__dirname, "src/components"),
"@/lib/utils": path.resolve(__dirname, "src/lib/utils"),
},
},
})
}
```
### Run the CLI
Run the `shadcn` init command to setup your project:
```bash
npx shadcn@latest init
```
### Configure components.json
You will be asked a few questions to configure `components.json`:
```txt showLineNumbers
Would you like to use TypeScript (recommended)? no / yes
Which style would you like to use? βΊ Default
Which color would you like to use as base color? βΊ Slate
Where is your global CSS file? βΊ βΊ ./src/styles/globals.css
Do you want to use CSS variables for colors? βΊ no / yes
Where is your tailwind.config.js located? βΊ tailwind.config.js
Configure the import alias for components: βΊ @/components
Configure the import alias for utils: βΊ @/lib/utils
Are you using React Server Components? βΊ no
```
### That's it
You can now start adding components to your project.
```bash
npx shadcn@latest add button
```
The command above will add the `Button` component to your project. You can then import it like this:
```tsx {1,6} showLineNumbers
import { Button } from "@/components/ui/button"
export default function Home() {
return (
)
}
```
# Laravel
URL: /docs/installation/laraval
Install and configure shadcn/ui for Laravel
***
title: Laravel
description: Install and configure shadcn/ui for Laravel
--------------------------------------------------------
import { Callout } from "fumadocs-ui/components/callout";
### Create project
Start by creating a new Laravel project with Inertia and React using the laravel installer `laravel new my-app`:
```bash
laravel new my-app --react
```
### Add Components
You can now start adding components to your project.
```bash
npx shadcn@latest add switch
```
The command above will add the `Switch` component to `resources/js/components/ui/switch.tsx`. You can then import it like this:
```tsx title="resources/js/pages/index.tsx" {1,6} showLineNumbers
import { Switch } from "@/components/ui/switch"
const MyPage = () => {
return (
)
}
export default MyPage
```
# Manual Installation
URL: /docs/installation/manual
Add dependencies to your project manually.
***
title: Manual Installation
description: Add dependencies to your project manually.
-------------------------------------------------------
import { Callout } from "fumadocs-ui/components/callout";
### Add Tailwind CSS
Components are styled using Tailwind CSS. You need to install Tailwind CSS in your project.
[Follow the Tailwind CSS installation instructions to get started.](https://tailwindcss.com/docs/installation)
### Add dependencies
Add the following dependencies to your project:
```bash
npm install class-variance-authority clsx tailwind-merge lucide-react tw-animate-css
```
### Configure path aliases
Configure the path aliases in your `tsconfig.json` file.
```json {3-6} title="tsconfig.json" showLineNumbers
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"@/*": ["./*"]
}
}
}
```
The `@` alias is a preference. You can use other aliases if you want.
### Configure styles
Add the following to your styles/globals.css file. You can learn more about using CSS variables for theming in the [theming section](/docs/theming).
```css showLineNumbers title="src/styles/globals.css"
@import "tailwindcss";
@import "tw-animate-css";
@custom-variant dark (&:is(.dark *));
:root {
--background: oklch(1 0 0);
--foreground: oklch(0.145 0 0);
--card: oklch(1 0 0);
--card-foreground: oklch(0.145 0 0);
--popover: oklch(1 0 0);
--popover-foreground: oklch(0.145 0 0);
--primary: oklch(0.205 0 0);
--primary-foreground: oklch(0.985 0 0);
--secondary: oklch(0.97 0 0);
--secondary-foreground: oklch(0.205 0 0);
--muted: oklch(0.97 0 0);
--muted-foreground: oklch(0.556 0 0);
--accent: oklch(0.97 0 0);
--accent-foreground: oklch(0.205 0 0);
--destructive: oklch(0.577 0.245 27.325);
--destructive-foreground: oklch(0.577 0.245 27.325);
--border: oklch(0.922 0 0);
--input: oklch(0.922 0 0);
--ring: oklch(0.708 0 0);
--chart-1: oklch(0.646 0.222 41.116);
--chart-2: oklch(0.6 0.118 184.704);
--chart-3: oklch(0.398 0.07 227.392);
--chart-4: oklch(0.828 0.189 84.429);
--chart-5: oklch(0.769 0.188 70.08);
--radius: 0.625rem;
--sidebar: oklch(0.985 0 0);
--sidebar-foreground: oklch(0.145 0 0);
--sidebar-primary: oklch(0.205 0 0);
--sidebar-primary-foreground: oklch(0.985 0 0);
--sidebar-accent: oklch(0.97 0 0);
--sidebar-accent-foreground: oklch(0.205 0 0);
--sidebar-border: oklch(0.922 0 0);
--sidebar-ring: oklch(0.708 0 0);
}
.dark {
--background: oklch(0.145 0 0);
--foreground: oklch(0.985 0 0);
--card: oklch(0.145 0 0);
--card-foreground: oklch(0.985 0 0);
--popover: oklch(0.145 0 0);
--popover-foreground: oklch(0.985 0 0);
--primary: oklch(0.985 0 0);
--primary-foreground: oklch(0.205 0 0);
--secondary: oklch(0.269 0 0);
--secondary-foreground: oklch(0.985 0 0);
--muted: oklch(0.269 0 0);
--muted-foreground: oklch(0.708 0 0);
--accent: oklch(0.269 0 0);
--accent-foreground: oklch(0.985 0 0);
--destructive: oklch(0.396 0.141 25.723);
--destructive-foreground: oklch(0.637 0.237 25.331);
--border: oklch(0.269 0 0);
--input: oklch(0.269 0 0);
--ring: oklch(0.439 0 0);
--chart-1: oklch(0.488 0.243 264.376);
--chart-2: oklch(0.696 0.17 162.48);
--chart-3: oklch(0.769 0.188 70.08);
--chart-4: oklch(0.627 0.265 303.9);
--chart-5: oklch(0.645 0.246 16.439);
--sidebar: oklch(0.205 0 0);
--sidebar-foreground: oklch(0.985 0 0);
--sidebar-primary: oklch(0.488 0.243 264.376);
--sidebar-primary-foreground: oklch(0.985 0 0);
--sidebar-accent: oklch(0.269 0 0);
--sidebar-accent-foreground: oklch(0.985 0 0);
--sidebar-border: oklch(0.269 0 0);
--sidebar-ring: oklch(0.439 0 0);
}
@theme inline {
--color-background: var(--background);
--color-foreground: var(--foreground);
--color-card: var(--card);
--color-card-foreground: var(--card-foreground);
--color-popover: var(--popover);
--color-popover-foreground: var(--popover-foreground);
--color-primary: var(--primary);
--color-primary-foreground: var(--primary-foreground);
--color-secondary: var(--secondary);
--color-secondary-foreground: var(--secondary-foreground);
--color-muted: var(--muted);
--color-muted-foreground: var(--muted-foreground);
--color-accent: var(--accent);
--color-accent-foreground: var(--accent-foreground);
--color-destructive: var(--destructive);
--color-destructive-foreground: var(--destructive-foreground);
--color-border: var(--border);
--color-input: var(--input);
--color-ring: var(--ring);
--color-chart-1: var(--chart-1);
--color-chart-2: var(--chart-2);
--color-chart-3: var(--chart-3);
--color-chart-4: var(--chart-4);
--color-chart-5: var(--chart-5);
--radius-sm: calc(var(--radius) - 4px);
--radius-md: calc(var(--radius) - 2px);
--radius-lg: var(--radius);
--radius-xl: calc(var(--radius) + 4px);
--color-sidebar: var(--sidebar);
--color-sidebar-foreground: var(--sidebar-foreground);
--color-sidebar-primary: var(--sidebar-primary);
--color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
--color-sidebar-accent: var(--sidebar-accent);
--color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
--color-sidebar-border: var(--sidebar-border);
--color-sidebar-ring: var(--sidebar-ring);
}
@layer base {
* {
@apply border-border outline-ring/50;
}
body {
@apply bg-background text-foreground;
}
}
```
### Add a cn helper
```ts showLineNumbers title="lib/utils.ts"
import { clsx, type ClassValue } from "clsx"
import { twMerge } from "tailwind-merge"
export function cn(...inputs: ClassValue[]) {
return twMerge(clsx(inputs))
}
```
### Create a `components.json` file
Create a `components.json` file in the root of your project.
```json title="components.json" showLineNumbers
{
"$schema": "https://ui.shadcn.com/schema.json",
"style": "new-york",
"rsc": false,
"tsx": true,
"tailwind": {
"config": "",
"css": "src/styles/globals.css",
"baseColor": "neutral",
"cssVariables": true,
"prefix": ""
},
"aliases": {
"components": "@/components",
"utils": "@/lib/utils",
"ui": "@/components/ui",
"lib": "@/lib",
"hooks": "@/hooks"
},
"iconLibrary": "lucide"
}
```
### That's it
You can now start adding components to your project.
# Next.js
URL: /docs/installation/nextjs
Install and configure shadcn/ui for Next.js.
***
title: Next.js
description: Install and configure shadcn/ui for Next.js.
---------------------------------------------------------
import { Step, Steps } from 'fumadocs-ui/components/steps';
## Install Next Js
### System requirements
* [Node.js 18.18](https://nodejs.org/) or later.
* macOS, Windows (including WSL), and Linux are supported.
### Automatic installation
We recommend starting a new Next.js app using [`create-next-app`](/docs/app/api-reference/cli/create-next-app), which sets up everything automatically for you. To create a project, run:
```bash filename="Terminal"
npx create-next-app@latest
```
On installation, you'll see the following prompts:
```txt filename="Terminal"
What is your project named? my-app
Would you like to use TypeScript? No / Yes
Would you like to use ESLint? No / Yes
Would you like to use Tailwind CSS? No / Yes
Would you like your code inside a `src/` directory? No / Yes
Would you like to use App Router? (recommended) No / Yes
Would you like to use Turbopack for `next dev`? No / Yes
Would you like to customize the import alias (`@/*` by default)? No / Yes
What import alias would you like configured? @/*
```
After the prompts, [`create-next-app`](/docs/app/api-reference/cli/create-next-app) will create a folder with your project name and install the required dependencies.
## Install ShadCN
### For Next Js
### Create project
Run the `init` command to create a new Next.js project or to setup an existing one:
```bash
npx shadcn@latest init
```
You can use the `-d` flag for defaults i.e `new-york`, `zinc` and `yes` for the css variables.
```bash
npx shadcn@latest init -d
```
### Configure components.json
You will be asked a few questions to configure `components.json`:
```txt showLineNumbers
Which style would you like to use? βΊ New York
Which color would you like to use as base color? βΊ Zinc
Do you want to use CSS variables for colors? βΊ no / yes
```
### That's it
You can now start adding components to your project.
```bash
npx shadcn@latest add button
```
The command above will add the `Button` component to your project. You can then import it like this:
```tsx title="index.tsx"
import { Button } from '@/components/ui/button';
export default function Home() {
return (
);
}
```
## Install Framer Motion
Installation
```bash
npm install motion
```
Usage
```tsx title="index.tsx"
import { motion } from "motion/react";
export default function Home() {
return (
Hello World
);
}
```
## Other libraries
React Icons
```bash
npm install react-icons
```
Usage
```tsx title="index.tsx"
import { FaSearch } from "react-icons/fa";
export default function Home() {
return (
;
}
```
# React Router
URL: /docs/installation/react-router
Install and configure shadcn/ui for React Router.
***
title: React Router
description: Install and configure shadcn/ui for React Router.
--------------------------------------------------------------
import { Callout } from "fumadocs-ui/components/callout";
### Create project
```bash
npx create-react-router@latest my-app
```
### Run the CLI
Run the `shadcn` init command to setup your project:
```bash
npx shadcn@latest init
```
### Add Components
You can now start adding components to your project.
```bash
npx shadcn@latest add button
```
The command above will add the `Button` component to your project. You can then import it like this:
```tsx showLineNumbers title="app/routes/home.tsx"
import { Button } from "~/components/ui/button"
import type { Route } from "./+types/home"
export function meta({}: Route.MetaArgs) {
return [
{ title: "New React Router App" },
{ name: "description", content: "Welcome to React Router!" },
]
}
export default function Home() {
return (
)
}
```
# Remix
URL: /docs/installation/remix
Install and configure shadcn/ui for Remix.
***
title: Remix
description: Install and configure shadcn/ui for Remix.
-------------------------------------------------------
import { Callout } from "fumadocs-ui/components/callout";
**Note:** This guide is for Remix. For React Router, see the [React Router](/docs/installation/react-router) guide.
### Create project
Start by creating a new Remix project using `create-remix`:
```bash
npx create-remix@latest my-app
```
### Run the CLI
Run the `shadcn` init command to setup your project:
```bash
npx shadcn@latest init
```
### Configure components.json
You will be asked a few questions to configure `components.json`:
```bash
Which color would you like to use as base color? βΊ Neutral
```
### App structure
**Note**: This app structure is only a suggestion. You can place the files wherever you want.
* Place the UI components in the `app/components/ui` folder.
* Your own components can be placed in the `app/components` folder.
* The `app/lib` folder contains all the utility functions. We have a `utils.ts` where we define the `cn` helper.
* The `app/tailwind.css` file contains the global CSS.
### Install Tailwind CSS
```bash
npm install -D tailwindcss@latest autoprefixer@latest
```
Then we create a `postcss.config.js` file:
```js title="postcss.config.js" showLineNumbers
export default {
plugins: {
tailwindcss: {},
autoprefixer: {},
},
}
```
And finally we add the following to our `remix.config.js` file:
```js title="remix.config.js" {4-5} showLineNumbers
/** @type {import('@remix-run/dev').AppConfig} */
export default {
...
tailwind: true,
postcss: true,
...
};
```
### Add `tailwind.css` to your app
In your `app/root.tsx` file, import the `tailwind.css` file:
```js {1, 4} showLineNumbers title="app/root.tsx"
import styles from "./tailwind.css?url"
export const links: LinksFunction = () => [
{ rel: "stylesheet", href: styles },
...(cssBundleHref ? [{ rel: "stylesheet", href: cssBundleHref }] : []),
]
```
### That's it
You can now start adding components to your project.
```bash
npx shadcn@latest add button
```
The command above will add the `Button` component to your project. You can then import it like this:
```tsx {1,6} showLineNumbers title="app/routes/index.tsx"
import { Button } from "~/components/ui/button"
export default function Home() {
return (
)
}
```
# TanStack Router
URL: /docs/installation/tanstack-router
Install and configure shadcn/ui for TanStack Router.
***
title: TanStack Router
description: Install and configure shadcn/ui for TanStack Router.
-----------------------------------------------------------------
import { Callout } from "fumadocs-ui/components/callout";
### Create project
Start by creating a new TanStack Router project:
```bash
npx create-tsrouter-app@latest my-app --template file-router --tailwind --add-ons shadcn
```
### Add Components
You can now start adding components to your project.
```bash
npx shadcn@canary add button
```
The command above will add the `Button` component to your project. You can then import it like this:
```tsx title="src/routes/index.tsx" showLineNumbers {3,12}
import { createFileRoute } from "@tanstack/react-router"
import { Button } from "@/components/ui/button"
export const Route = createFileRoute("/")({
component: App,
})
function App() {
return (
)
}
```
# TanStack Start
URL: /docs/installation/tanstack
Install and configure shadcn/ui for TanStack Start.
***
title: TanStack Start
description: Install and configure shadcn/ui for TanStack Start.
----------------------------------------------------------------
import { Callout } from "fumadocs-ui/components/callout";
### Create project
Start by creating a new TanStack Start project by following the [Build a Project from Scratch](https://tanstack.com/start/latest/docs/framework/react/build-from-scratch) guide on the TanStack Start website.
**Do not add Tailwind yet. We'll install Tailwind v4 in the next step.**
### Add Tailwind
Install `tailwindcss` and its dependencies.
```bash
npm install tailwindcss @tailwindcss/postcss postcss
```
### Create postcss.config.ts
Create a `postcss.config.ts` file at the root of your project.
```ts title="postcss.config.ts" showLineNumbers
export default {
plugins: {
"@tailwindcss/postcss": {},
},
}
```
### Create `app/styles/app.css`
Create an `app.css` file in the `app/styles` directory and import `tailwindcss`
```css title="app/styles/app.css"
@import "tailwindcss" source("../");
```
### Import `app.css`
```tsx title="app/routes/__root.tsx" showLineNumbers {5,21-26} showLineNumbers
import type { ReactNode } from "react"
import { createRootRoute, Outlet } from "@tanstack/react-router"
import { Meta, Scripts } from "@tanstack/start"
import appCss from "@/styles/app.css?url"
export const Route = createRootRoute({
head: () => ({
meta: [
{
charSet: "utf-8",
},
{
name: "viewport",
content: "width=device-width, initial-scale=1",
},
{
title: "TanStack Start Starter",
},
],
links: [
{
rel: "stylesheet",
href: appCss,
},
],
}),
component: RootComponent,
})
```
### Edit tsconfig.json file
Add the following code to the `tsconfig.json` file to resolve paths.
```ts title="tsconfig.json" showLineNumbers {9-12}
{
"compilerOptions": {
"jsx": "react-jsx",
"moduleResolution": "Bundler",
"module": "ESNext",
"target": "ES2022",
"skipLibCheck": true,
"strictNullChecks": true,
"baseUrl": ".",
"paths": {
"@/*": ["./app/*"]
}
}
}
```
### Run the CLI
Run the `shadcn` init command to setup your project:
```bash
npx shadcn@canary init
```
This will create a `components.json` file in the root of your project and configure CSS variables inside `app/styles/app.css`.
### That's it
You can now start adding components to your project.
```bash
npx shadcn@canary add button
```
The command above will add the `Button` component to your project. You can then import it like this:
```tsx title="app/routes/index.tsx" showLineNumbers {1,6}
import { Button } from "@/components/ui/button"
function Home() {
const router = useRouter()
const state = Route.useLoaderData()
return (
)
}
```
# Vite
URL: /docs/installation/vite
Install and configure shadcn/ui for Vite.
***
title: Vite
description: Install and configure shadcn/ui for Vite.
------------------------------------------------------
import { Callout } from "fumadocs-ui/components/callout";
### Create project
Start by creating a new React project using `vite`. Select the **React + TypeScript** template:
```bash
npm create vite@latest
```
### Add Tailwind CSS
```bash
npm install tailwindcss@3.4.1 @tailwindcss/vite
```
Replace everything in `src/index.css` with the following:
```css title="src/index.css"
@import "tailwindcss";
```
### Edit tsconfig.json file
The current version of Vite splits TypeScript configuration into three files, two of which need to be edited.
Add the `baseUrl` and `paths` properties to the `compilerOptions` section of the `tsconfig.json` and
`tsconfig.app.json` files:
```ts title="tsconfig.json" {11-16} showLineNumbers
{
"files": [],
"references": [
{
"path": "./tsconfig.app.json"
},
{
"path": "./tsconfig.node.json"
}
],
"compilerOptions": {
"baseUrl": ".",
"paths": {
"@/*": ["./src/*"]
}
}
}
```
### Edit tsconfig.app.json file
Add the following code to the `tsconfig.app.json` file to resolve paths, for your IDE:
```ts title="tsconfig.app.json" {4-9} showLineNumbers
{
"compilerOptions": {
// ...
"baseUrl": ".",
"paths": {
"@/*": [
"./src/*"
]
}
// ...
}
}
```
### Update vite.config.ts
Add the following code to the vite.config.ts so your app can resolve paths without error:
```bash
npm install -D @types/node
```
```typescript title="vite.config.ts" showLineNumbers {1,2,8-13}
import path from "path"
import tailwindcss from "@tailwindcss/vite"
import react from "@vitejs/plugin-react"
import { defineConfig } from "vite"
// https://vite.dev/config/
export default defineConfig({
plugins: [react(), tailwindcss()],
resolve: {
alias: {
"@": path.resolve(__dirname, "./src"),
},
},
})
```
### Run the CLI
Run the `shadcn` init command to setup your project:
```bash
npx shadcn@latest init
```
You will be asked a few questions to configure `components.json`.
```txt
Which color would you like to use as base color? βΊ Neutral
```
### Add Components
You can now start adding components to your project.
```bash
npx shadcn@latest add button
```
The command above will add the `Button` component to your project. You can then import it like this:
```tsx showLineNumbers title="src/App.tsx"
import { Button } from "@/components/ui/button"
function App() {
return (
)
}
export default App
```
# About
URL: /docs/mainsections/about
About sections provide a brief overview of your product or service, highlighting its key features and benefits. They help users understand what your product is about and why they should use it.
***
title: About
description: About sections provide a brief overview of your product or service, highlighting its key features and benefits. They help users understand what your product is about and why they should use it.
root: mainsections
updated: true
-------------
import {ComponentPreview} from "@/components/preview/component-preview";
import {extractSourceCode} from "@/lib/code";
import { Tab, Tabs } from "fumadocs-ui/components/tabs";
import { Step, Steps } from "fumadocs-ui/components/steps";
import { ComponentSource } from "@/components/preview/component-source";
## About Us 1
### Installation
```bash
npm install framer-motion
```
```bash
pnpm install framer-motion
```
```bash
yarn add framer-motion
```
```bash
bun add framer-motion
```
#### Spotlight
#### Pulse Card
#### Add this animation to your CSS file
```css
.spin {
animation: spin 5s linear infinite;
}
@keyframes spin {
to {
transform: rotate(360deg);
}
}
```
#### Border Beam
## About Us 2
### Installation
```bash
npm install framer-motion lucide-react next-themes
```
```bash
pnpm install framer-motion lucide-react next-themes
```
```bash
yarn add framer-motion lucide-react next-themes
```
```bash
bun add framer-motion lucide-react next-themes
```
#### Border Beam
#### Counter
#### Spotlight
#### Utils
# Contact
URL: /docs/mainsections/contact
Contact sections allow users to get in touch with you through a form or other contact methods. They are essential for gathering user feedback, inquiries, and support requests.
***
title: Contact
description: Contact sections allow users to get in touch with you through a form or other contact methods. They are essential for gathering user feedback, inquiries, and support requests.
root: mainsections
new: true
---------
import {ComponentPreview} from "@/components/preview/component-preview";
import {extractSourceCode} from "@/lib/code";
## Contact Us 1
## Contact Us 2
# CTA
URL: /docs/mainsections/cta
CTA sections are designed to encourage users to take action, whether it's signing up for a newsletter, downloading a resource, or making a purchase. They help drive conversions and improve user engagement.
***
title: CTA
description: CTA sections are designed to encourage users to take action, whether it's signing up for a newsletter, downloading a resource, or making a purchase. They help drive conversions and improve user engagement.
root: mainsections
------------------
import {ComponentPreview} from "@/components/preview/component-preview";
import {extractSourceCode} from "@/lib/code";
## CTA 1
## CTA 2
## CTA 3
# FAQs
URL: /docs/mainsections/faq
FAQs are essential for addressing common questions and concerns users may have about your product or service. They help improve user experience by providing quick answers and reducing the need for customer support.
***
title: FAQs
description: FAQs are essential for addressing common questions and concerns users may have about your product or service. They help improve user experience by providing quick answers and reducing the need for customer support.
root: mainsections
------------------
import {ComponentPreview} from "@/components/preview/component-preview";
import {extractSourceCode} from "@/lib/code";
## FAQ 1
## FAQ 2
## FAQ 3
## FAQ 4
# Features
URL: /docs/mainsections/features
Feature sections highlight the key features of your product or service, showcasing what makes it unique and valuable. They help users understand the benefits of using your product and encourage them to take action.
***
title: Features
description: Feature sections highlight the key features of your product or service, showcasing what makes it unique and valuable. They help users understand the benefits of using your product and encourage them to take action.
root: mainsections
------------------
import {ComponentPreview} from "@/components/preview/component-preview";
import {extractSourceCode} from "@/lib/code";
## Grid Features
## Steps Animated
## Circulated Features
# Hero
URL: /docs/mainsections/hero
Hero sections are the first thing users see when they visit your site. They are a great way to showcase your product and its features.
***
title: Hero
description: Hero sections are the first thing users see when they visit your site. They are a great way to showcase your product and its features.
root: mainsections
------------------
import { ComponentPreview } from "@/components/preview/component-preview";
import { extractSourceCode } from "@/lib/code";
## App Hero
## Spline Hero
> Apply the below CSS for the above hero:
```css
.neumorphic-button::after {
content: '';
@apply absolute inset-0 opacity-0 transition-opacity duration-300 bg-gradient-to-br from-[#9b87f5]/20 to-transparent rounded-full;
}
.neumorphic-button:hover::after {
@apply opacity-100;
}
```
## Notebook Hero
> Apply the below CSS for the above hero:
```css
@keyframes moveGradientLeft {
0% {
background-position: 0% 0%;
}
100% {
background-position: -200% 0%;
}
}
.animate-gradient-x {
animation: moveGradientLeft 20s linear infinite;
}
```
## Minimal Hero
> Apply the below CSS for the above hero:
```css
@keyframes word-appear {
0% {
opacity: 0;
transform: translateY(30px) scale(0.8);
filter: blur(10px);
}
50% {
opacity: 0.8;
transform: translateY(10px) scale(0.95);
filter: blur(2px);
}
100% {
opacity: 1;
transform: translateY(0) scale(1);
filter: blur(0);
}
}
@keyframes grid-draw {
0% {
stroke-dashoffset: 1000;
opacity: 0;
}
50% {
opacity: 0.3;
}
100% {
stroke-dashoffset: 0;
opacity: 0.15;
}
}
@keyframes pulse-glow {
0%,
100% {
opacity: 0.1;
transform: scale(1);
}
50% {
opacity: 0.3;
transform: scale(1.1);
}
}
.word {
display: inline-block;
opacity: 0;
margin: 0 0.1em;
transition: all 0.3s ease;
}
.word:hover {
color: #c8b4a0;
transform: translateY(-2px);
}
.grid-line {
stroke: #c8b4a0;
stroke-width: 0.5;
opacity: 0;
stroke-dasharray: 5 5;
stroke-dashoffset: 1000;
animation: grid-draw 2s ease-out forwards;
}
.detail-dot {
fill: #c8b4a0;
opacity: 0;
animation: pulse-glow 3s ease-in-out infinite;
}
.corner-element {
position: absolute;
width: 40px;
height: 40px;
border: 1px solid rgba(200, 180, 160, 0.2);
opacity: 0;
animation: word-appear 1s ease-out forwards;
}
.corner-element::before {
content: '';
position: absolute;
width: 8px;
height: 8px;
background: rgba(200, 180, 160, 0.3);
border-radius: 50%;
}
.text-decoration {
position: relative;
}
.text-decoration::after {
content: '';
position: absolute;
bottom: -4px;
left: 0;
width: 0;
height: 1px;
background: linear-gradient(90deg, transparent, #c8b4a0, transparent);
animation: underline-grow 2s ease-out forwards;
animation-delay: 2s;
}
@keyframes underline-grow {
to {
width: 100%;
}
}
.floating-element {
position: absolute;
width: 2px;
height: 2px;
background: #c8b4a0;
border-radius: 50%;
opacity: 0;
animation: float 4s ease-in-out infinite;
}
@keyframes float {
0%,
100% {
transform: translateY(0) translateX(0);
opacity: 0.2;
}
25% {
transform: translateY(-10px) translateX(5px);
opacity: 0.6;
}
50% {
transform: translateY(-5px) translateX(-3px);
opacity: 0.4;
}
75% {
transform: translateY(-15px) translateX(7px);
opacity: 0.8;
}
}
```
## Geometric Hero
## Lucy Hero
## Trading Hero
## Dark modern hero
## Fitness Hero
## Gradient Hero
# Pricing
URL: /docs/mainsections/pricing
Pricing sections provide information about the cost of your product or service. They can include details about different pricing tiers, features included in each tier, and any discounts or promotions available.
***
title: Pricing
description: Pricing sections provide information about the cost of your product or service. They can include details about different pricing tiers, features included in each tier, and any discounts or promotions available.
root: mainsections
updated: true
-------------
import { ComponentPreview } from '@/components/preview/component-preview';
import { extractSourceCode } from '@/lib/code';
## Simple Pricing
## Designer Pricing
## Congested Pricing
## Pricing with Modals
## 4 pricing tiers
## Modern Pricing
## Basic Pricing
## Beautiful Pricing
## Glassmorphism Pricing
# Team
URL: /docs/mainsections/team
Team sections provide information about the people behind your product or service. They can include details about team members, their roles, and their expertise.
***
title: Team
description: Team sections provide information about the people behind your product or service. They can include details about team members, their roles, and their expertise.
root: mainsections
updated: true
-------------
import { ComponentPreview } from '@/components/preview/component-preview';
import { extractSourceCode } from '@/lib/code';
## Detailed Team
## Filterable Team
## Custom social team
## Designer Team Section
## Member Role Teams
## Basic Static Team
## Modern Member Team
## Team Carousel With Roles
## Professional Team Section
## Unique Team Section With Roles
# Testimonials
URL: /docs/mainsections/testimonials
Testimonials sections showcase positive feedback and reviews from customers or users. They help build trust and credibility for your product or service, encouraging potential customers to make a purchase or take action.
***
title: Testimonials
description: Testimonials sections showcase positive feedback and reviews from customers or users. They help build trust and credibility for your product or service, encouraging potential customers to make a purchase or take action.
root: mainsections
------------------
import {ComponentPreview} from "@/components/preview/component-preview";
import {extractSourceCode} from "@/lib/code";
import { Tab, Tabs } from "fumadocs-ui/components/tabs";
import { Step, Steps } from "fumadocs-ui/components/steps";
import { TypeTable } from "fumadocs-ui/components/type-table";
## Testimonials Marquee
### Installation
```bash
npm install framer-motion lucide-react
```
```bash
pnpm install framer-motion lucide-react
```
```bash
yarn add framer-motion lucide-react
```
```bash
bun add framer-motion lucide-react
```
#### Copy and paste the following code into your project.
`components/ui/marquee.tsx`
```tsx title="marquee.tsx"
import { cn } from "@/lib/utils";
import { ComponentPropsWithoutRef } from "react";
interface MarqueeProps extends ComponentPropsWithoutRef<"div"> {
/**
* Optional CSS class name to apply custom styles
*/
className?: string;
/**
* Whether to reverse the animation direction
* @default false
*/
reverse?: boolean;
/**
* Whether to pause the animation on hover
* @default false
*/
pauseOnHover?: boolean;
/**
* Content to be displayed in the marquee
*/
children: React.ReactNode;
/**
* Whether to animate vertically instead of horizontally
* @default false
*/
vertical?: boolean;
/**
* Number of times to repeat the content
* @default 4
*/
repeat?: number;
}
export function Marquee({
className,
reverse = false,
pauseOnHover = false,
children,
vertical = false,
repeat = 4,
...props
}: MarqueeProps) {
return (
{Array(repeat)
.fill(0)
.map((_, i) => (
{children}
))}
);
}
```
#### Update the import paths to match your project setup.
#### Update `tailwind.config.ts`
```ts
/** @type {import('tailwindcss').Config} */
module.exports = {
theme: {
extend: {
animation: {
marquee: "marquee var(--duration) linear infinite", // [!code highlight]
"marquee-vertical": "marquee-vertical var(--duration) linear infinite", // [!code highlight]
}, // [!code highlight]
keyframes: { // [!code highlight]
marquee: { // [!code highlight]
from: { transform: "translateX(0)" }, // [!code highlight]
to: { transform: "translateX(calc(-100% - var(--gap)))" }, // [!code highlight]
}, // [!code highlight]
"marquee-vertical": { // [!code highlight]
from: { transform: "translateY(0)" }, // [!code highlight]
to: { transform: "translateY(calc(-100% - var(--gap)))" }, // [!code highlight]
}, // [!code highlight]
}, // [!code highlight]
},
},
};
```
### Props
#### Highlight Props
#### TestimonialCard Props
## Testimonials Carousel
# Waitlist
URL: /docs/pages/waitlist
These pages are used to collect user emails for a waitlist.
***
title: Waitlist
description: These pages are used to collect user emails for a waitlist.
root: pages
new: true
---------
import {ComponentPreview} from "@/components/preview/component-preview";
import {extractSourceCode} from "@/lib/code";
# Preloaders
URL: /docs/preloaders/preloader-1
A collection of preloaders for smooth page transitions
***
title: Preloaders
description: A collection of preloaders for smooth page transitions
-------------------------------------------------------------------
import { ComponentPreview } from "@/components/preview/component-preview";
import { extractSourceCode } from "@/lib/code";
## Preloader 1
# Footers
URL: /docs/required/footers
Footers are used to provide additional information or context at the end of a document. They can include details such as page numbers, copyright information, or links to related content.
***
title: Footers
description: Footers are used to provide additional information or context at the end of a document. They can include details such as page numbers, copyright information, or links to related content.
root: required
--------------
import { ComponentPreview } from '@/components/preview/component-preview';
import { extractSourceCode } from '@/lib/code';
import { ComponentSource } from '@/components/preview/component-source';
import { Tab, Tabs } from 'fumadocs-ui/components/tabs';
import { Step, Steps } from 'fumadocs-ui/components/steps';
## 4 Column Footer
## Glowing Footer
## Footer with Newsletter
## Animated Footer
## Standard Footer
# Headers
URL: /docs/required/headers
Headers are used to define the structure of your document and provide context for the content that follows. They are essential for creating a well-organized and readable document.
***
title: Headers
description: Headers are used to define the structure of your document and provide context for the content that follows. They are essential for creating a well-organized and readable document.
root: required
--------------
import {ComponentPreview} from "@/components/preview/component-preview";
import {extractSourceCode} from "@/lib/code";
## Header 1
## Header 2
# Logo Cloud
URL: /docs/required/logo-cloud
Logo clouds are used to showcase a collection of logos or brands in a visually appealing way. They can be used to highlight partnerships, sponsors, or featured brands.
***
title: Logo Cloud
description: Logo clouds are used to showcase a collection of logos or brands in a visually appealing way. They can be used to highlight partnerships, sponsors, or featured brands.
root: required
--------------
import {ComponentPreview} from "@/components/preview/component-preview";
import {extractSourceCode} from "@/lib/code";
## Sparkles Logo Cloud
# Blur In Text
URL: /docs/text-animations/blur-in-text
Text emerges from a soft blur into crystal clarity. Perfect for hero headlines and section reveals that demand attention with an elegant, cinematic feel.
***
title: Blur In Text
description: Text emerges from a soft blur into crystal clarity. Perfect for hero headlines and section reveals that demand attention with an elegant, cinematic feel.
root: text-animations
---------------------
import { ComponentPreview } from "@/components/preview/component-preview";
import { extractSourceCode } from "@/lib/code";
import { ComponentSource } from "@/components/preview/component-source";
import { Tab, Tabs } from "fumadocs-ui/components/tabs";
import { Step, Steps } from "fumadocs-ui/components/steps";
import { TypeTable } from "fumadocs-ui/components/type-table";
## Letter by Letter
Each letter emerges from blur individually for a dramatic effect.
## Word by Word
Words reveal one at a time for a more readable, impactful entrance.
## Scroll Triggered
Animation triggers when the text scrolls into view.
## Installation
```bash
npm install framer-motion
```
```bash
pnpm install framer-motion
```
```bash
yarn add framer-motion
```
```bash
bun add framer-motion
```
#### Copy and paste the following code into your project.
## Props
## Examples
```tsx
// Dramatic blur with slow reveal
// Quick word reveal
// Blur out effect
```
# Circular Text
URL: /docs/text-animations/circular-text
Circular text animations create a circular text effect that continuously rotates. This engaging animation can be used to draw attention to important content or add visual interest to your design.
***
title: Circular Text
description: Circular text animations create a circular text effect that continuously rotates. This engaging animation can be used to draw attention to important content or add visual interest to your design.
root: text-animations
***
import { ComponentPreview } from "@/components/preview/component-preview";
import { extractSourceCode } from "@/lib/code";
import { ComponentSource } from "@/components/preview/component-source";
import { Tab, Tabs } from "fumadocs-ui/components/tabs";
import { Step, Steps } from "fumadocs-ui/components/steps";
import { TypeTable } from "fumadocs-ui/components/type-table";
## Installation
```bash
npm install framer-motion
```
```bash
pnpm install framer-motion
```
```bash
yarn add framer-motion
```
```bash
bun add framer-motion
```
## Usage
```tsx
import { CircularText } from "@/components/mvpblocks/text-animations/circular-text";
export default function MyComponent() {
return (
);
}
```
## Pro
## Features
* π― **Smooth Animation**: Continuous rotation with customizable speed
* π¨ **Hover Effects**: Multiple hover behaviors (slowDown, speedUp, pause, goBonkers)
* πͺ **Customizable**: Easy to style with CSS classes
* π± **Responsive**: Works well on different screen sizes
* β‘ **Performance**: Optimized with framer-motion
## Examples
### Speed Up on Hover
```tsx
```
### Pause on Hover
```tsx
```
### Go Bonkers on Hover
```tsx
```
# Fade In Up Text
URL: /docs/text-animations/fade-in-up-text
Elegant text entrance animation that fades in while floating from any direction. Perfect for hero headlines, section titles, and page transitions.
***
title: Fade In Up Text
description: Elegant text entrance animation that fades in while floating from any direction. Perfect for hero headlines, section titles, and page transitions.
root: text-animations
---------------------
import { ComponentPreview } from "@/components/preview/component-preview";
import { extractSourceCode } from "@/lib/code";
import { ComponentSource } from "@/components/preview/component-source";
import { Tab, Tabs } from "fumadocs-ui/components/tabs";
import { Step, Steps } from "fumadocs-ui/components/steps";
import { TypeTable } from "fumadocs-ui/components/type-table";
## Word by Word
Words fade in and float upward one at a time.
## Letter by Letter
Each letter animates individually for a more dramatic effect.
## Slide from Side
Text slides in from the right with word staggering.
## Installation
```bash
npm install framer-motion
```
```bash
pnpm install framer-motion
```
```bash
yarn add framer-motion
```
```bash
bun add framer-motion
```
#### Copy and paste the following code into your project.
## Props
## Examples
```tsx
// Classic fade up
// Dramatic letter animation
// Slide from left
// Scroll triggered
```
# Fuzzy Text
URL: /docs/text-animations/fuzzy-text
CRT television static noise effect with chromatic aberration, scanlines, and jitter. Text appears fuzzy with VHS/old TV static look, clearing on hover.
***
title: Fuzzy Text
description: CRT television static noise effect with chromatic aberration, scanlines, and jitter. Text appears fuzzy with VHS/old TV static look, clearing on hover.
root: text-animations
---------------------
import { ComponentPreview } from "@/components/preview/component-preview";
import { extractSourceCode } from "@/lib/code";
import { ComponentSource } from "@/components/preview/component-source";
import { Tab, Tabs } from "fumadocs-ui/components/tabs";
import { Step, Steps } from "fumadocs-ui/components/steps";
import { TypeTable } from "fumadocs-ui/components/type-table";
## Classic Fuzzy Static
Text with continuous noise/static effect that clears on hover.
## Hover to Clear
Green terminal style - hover to clear the static and reveal clean text.
## 404 Error Style
High intensity noise that never clears - perfect for error pages.
## Installation
```bash
npm install framer-motion
```
```bash
pnpm install framer-motion
```
```bash
yarn add framer-motion
```
```bash
bun add framer-motion
```
#### Copy and paste the following code into your project.
## Props
## Examples
```tsx
// White text on black background
// Green terminal style
// Red error/warning
// Subtle effect
// Fast intense noise
```
# Glitch Text
URL: /docs/text-animations/glitch-text
Cyberpunk-style glitch effect with RGB color splitting, position jittering, and scanlines. Perfect for gaming, tech, and edgy brand aesthetics.
***
title: Glitch Text
description: Cyberpunk-style glitch effect with RGB color splitting, position jittering, and scanlines. Perfect for gaming, tech, and edgy brand aesthetics.
root: text-animations
---------------------
import { ComponentPreview } from "@/components/preview/component-preview";
import { extractSourceCode } from "@/lib/code";
import { ComponentSource } from "@/components/preview/component-source";
import { Tab, Tabs } from "fumadocs-ui/components/tabs";
import { Step, Steps } from "fumadocs-ui/components/steps";
import { TypeTable } from "fumadocs-ui/components/type-table";
## Continuous Glitch
Periodic glitch effect that fires at regular intervals.
## Hover Activated
Intense glitch effect that triggers on hover.
## Subtle Glitch
Softer, more refined glitch for professional designs.
## Installation
```bash
npm install framer-motion
```
```bash
pnpm install framer-motion
```
```bash
yarn add framer-motion
```
```bash
bun add framer-motion
```
#### Copy and paste the following code into your project.
## Props
## Examples
```tsx
// Intense cyberpunk glitch
// Vaporwave aesthetic
// Gaming style
```
# Gradient Flow Text
URL: /docs/text-animations/gradient-flow-text
Mesmerizing animated gradient that flows through text like liquid colors. Perfect for eye-catching headlines, brand names, and call-to-action elements.
***
title: Gradient Flow Text
description: Mesmerizing animated gradient that flows through text like liquid colors. Perfect for eye-catching headlines, brand names, and call-to-action elements.
root: text-animations
---------------------
import { ComponentPreview } from "@/components/preview/component-preview";
import { extractSourceCode } from "@/lib/code";
import { ComponentSource } from "@/components/preview/component-source";
import { Tab, Tabs } from "fumadocs-ui/components/tabs";
import { Step, Steps } from "fumadocs-ui/components/steps";
import { TypeTable } from "fumadocs-ui/components/type-table";
## Continuous Flow
Smooth, endless gradient animation that draws the eye.
## Hover Activated
Gradient starts flowing when user hovers over the text.
## Rainbow Spectrum
Full rainbow color cycle for maximum visual impact.
## Installation
```bash
npm install framer-motion
```
```bash
pnpm install framer-motion
```
```bash
yarn add framer-motion
```
```bash
bun add framer-motion
```
#### Copy and paste the following code into your project.
## Props
## Examples
```tsx
// Brand colors
// Sunset gradient
// Neon party
// Subtle professional
```
# Text Animations
URL: /docs/text-animations
Explore a variety of engaging text animations to enhance your web projects. From fuzzy static effects
***
title: Text Animations
description: Explore a variety of engaging text animations to enhance your web projects. From fuzzy static effects
full: true
new: true
---------
import SpotlightCard from "@/components/ui/spotlight-cards";
# Random Unveil
URL: /docs/text-animations/randomunveil
Random unveil animations create a dynamic and engaging effect as elements appear on the screen. This technique can be used to draw attention to specific content or enhance the overall user experience.
***
title: Random Unveil
description: Random unveil animations create a dynamic and engaging effect as elements appear on the screen. This technique can be used to draw attention to specific content or enhance the overall user experience.
root: text-animations
---------------------
import { Button } from "@/components/ui/button";
import { Github } from "lucide-react";
import Link from "next/link";
Component In Development
We're currently working on creating beautiful, responsive pagination components for MVPBlocks.
Want to contribute?
We welcome contributions from the community! If you have ideas or
implementations for pagination components, consider contributing to
MVPBlocks.
# Scroll Reveal Text
URL: /docs/text-animations/scroll-reveal-text
Text animation tied to scroll position - reveals as you scroll, reverses when scrolling back up. Creates dynamic, interactive text effects perfect for storytelling and hero sections.
***
title: Scroll Reveal Text
description: Text animation tied to scroll position - reveals as you scroll, reverses when scrolling back up. Creates dynamic, interactive text effects perfect for storytelling and hero sections.
root: text-animations
---------------------
import { ComponentPreview } from "@/components/preview/component-preview";
import { extractSourceCode } from "@/lib/code";
import { ComponentSource } from "@/components/preview/component-source";
import { Tab, Tabs } from "fumadocs-ui/components/tabs";
import { Step, Steps } from "fumadocs-ui/components/steps";
import { TypeTable } from "fumadocs-ui/components/type-table";
## Blur Reveal
Text blurs into clarity as you scroll down, and blurs back out when scrolling up.
## Character Reveal
Each character reveals individually based on scroll progress.
## Slide Reveal
Text slides into view tied to scroll position.
## Installation
```bash
npm install framer-motion
```
```bash
pnpm install framer-motion
```
```bash
yarn add framer-motion
```
```bash
bun add framer-motion
```
#### Copy and paste the following code into your project.
## Props
## Examples
```tsx
// Blur reveal (default)
// Character-by-character reveal
// Slide in from below
// Fade in
// Scale in
// Custom scroll trigger points
```
# Scroll Velocity
URL: /docs/text-animations/scroll-velocity
Scroll velocity animations create a dynamic and engaging effect as elements move on the screen. This technique can be used to draw attention to specific content or enhance the overall user experience.
***
title: Scroll Velocity
description: Scroll velocity animations create a dynamic and engaging effect as elements move on the screen. This technique can be used to draw attention to specific content or enhance the overall user experience.
root: text-animations
---------------------
import { ComponentPreview } from "@/components/preview/component-preview";
import { extractSourceCode } from "@/lib/code";
import { ComponentSource } from "@/components/preview/component-source";
import { Tab, Tabs } from "fumadocs-ui/components/tabs";
import { Step, Steps } from "fumadocs-ui/components/steps";
import { TypeTable } from "fumadocs-ui/components/type-table";
## Installation
```bash
npm install framer-motion
```
```bash
pnpm install framer-motion
```
```bash
yarn add framer-motion
```
```bash
bun add framer-motion
```
#### Copy and paste the following code into your project.
`components/ui/scrollbasedvelocity.tsx`
```tsx title="scrollbasedvelocity.tsx"
"use client";
import React, { useEffect, useRef, useState } from "react";
import {
motion,
useAnimationFrame,
useMotionValue,
useScroll,
useSpring,
useTransform,
useVelocity,
} from "framer-motion";
import { cn } from "@/lib/utils";
interface VelocityScrollProps {
text: string;
default_velocity?: number;
className?: string;
}
interface ParallaxProps {
children: string;
baseVelocity: number;
className?: string;
}
export const wrap = (min: number, max: number, v: number) => {
const rangeSize = max - min;
return ((((v - min) % rangeSize) + rangeSize) % rangeSize) + min;
};
export const VelocityScroll: React.FC = ({
text,
default_velocity = 5,
className,
}) => {
const ParallaxText: React.FC = ({
children,
baseVelocity = 100,
className,
}) => {
const baseX = useMotionValue(0);
const { scrollY } = useScroll();
const scrollVelocity = useVelocity(scrollY);
const smoothVelocity = useSpring(scrollVelocity, {
damping: 50,
stiffness: 400,
});
const velocityFactor = useTransform(smoothVelocity, [0, 1000], [0, 5], {
clamp: false,
});
const [repetitions, setRepetitions] = useState(1);
const containerRef = useRef(null);
const textRef = useRef(null);
useEffect(() => {
const calculateRepetitions = () => {
if (containerRef.current && textRef.current) {
const containerWidth = containerRef.current.offsetWidth;
const textWidth = textRef.current.offsetWidth;
const newRepetitions = Math.ceil(containerWidth / textWidth) + 2;
setRepetitions(newRepetitions);
}
};
calculateRepetitions();
window.addEventListener("resize", calculateRepetitions);
return () => window.removeEventListener("resize", calculateRepetitions);
}, [children]);
const x = useTransform(baseX, (v) => `${wrap(-100 / repetitions, 0, v)}%`);
const directionFactor = useRef(1);
useAnimationFrame((t, delta) => {
let moveBy = directionFactor.current * baseVelocity * (delta / 1000);
if (velocityFactor.get() < 0) {
directionFactor.current = -1;
} else if (velocityFactor.get() > 0) {
directionFactor.current = 1;
}
moveBy += directionFactor.current * moveBy * velocityFactor.get();
baseX.set(baseX.get() + moveBy);
});
return (
);
};
return (
{text}
{text}
);
};
```
## Props
# Shiny Text
URL: /docs/text-animations/shiny-text
A premium Apple-style shine effect that sweeps across text like light reflecting off a glossy surface. Features a bright metallic base with multiple shine layers and glow effect.
***
title: Shiny Text
description: A premium Apple-style shine effect that sweeps across text like light reflecting off a glossy surface. Features a bright metallic base with multiple shine layers and glow effect.
root: text-animations
---------------------
import { ComponentPreview } from "@/components/preview/component-preview";
import { extractSourceCode } from "@/lib/code";
import { ComponentSource } from "@/components/preview/component-source";
import { Tab, Tabs } from "fumadocs-ui/components/tabs";
import { Step, Steps } from "fumadocs-ui/components/steps";
import { TypeTable } from "fumadocs-ui/components/type-table";
## Premium Shine
Continuous bright shine animation with glow effect - like Apple product text.
## Hover Trigger
Golden shine activates when user hovers over the text.
## Vision Pro Style
Extra wide shine with slow animation for maximum impact.
## Installation
```bash
npm install framer-motion
```
```bash
pnpm install framer-motion
```
```bash
yarn add framer-motion
```
```bash
bun add framer-motion
```
#### Copy and paste the following code into your project.
## Props
## Examples
```tsx
// Premium white shine (default)
// Gold luxury shine
// Interactive hover shine
// Extra wide slow shine
// Diagonal shine
```
# Shuffle Text
URL: /docs/text-animations/shuffle-text
A text scramble/decode animation that starts with random characters and gradually reveals the actual text letter by letter. Creates a cipher/decode effect perfect for hero sections, headlines, and interactive elements.
***
title: Shuffle Text
description: A text scramble/decode animation that starts with random characters and gradually reveals the actual text letter by letter. Creates a cipher/decode effect perfect for hero sections, headlines, and interactive elements.
root: text-animations
---------------------
import { ComponentPreview } from "@/components/preview/component-preview";
import { extractSourceCode } from "@/lib/code";
import { ComponentSource } from "@/components/preview/component-source";
import { Tab, Tabs } from "fumadocs-ui/components/tabs";
import { Step, Steps } from "fumadocs-ui/components/steps";
import { TypeTable } from "fumadocs-ui/components/type-table";
## Basic Usage
Text automatically scrambles and decodes on mount.
## Hover Trigger
Text scrambles when user hovers over it.
## Scroll Trigger
Text decodes as you scroll - stops when you stop scrolling!
## Installation
```bash
npm install framer-motion
```
```bash
pnpm install framer-motion
```
```bash
yarn add framer-motion
```
```bash
bun add framer-motion
```
#### Copy and paste the following code into your project.
## Props
void",
default: "undefined",
},
}}
/>
## Speed Examples
```tsx
// Slow dramatic decode (good for hero sections)
// Fast decode (good for hover effects)
// Ultra slow cinematic decode
```
# Text Reveal
URL: /docs/text-animations/text-reveal
Text reveal animations create a dynamic and engaging effect as text appears on the screen. This technique can be used to draw attention to specific content or enhance the overall user experience.
***
title: Text Reveal
description: Text reveal animations create a dynamic and engaging effect as text appears on the screen. This technique can be used to draw attention to specific content or enhance the overall user experience.
root: text-animations
---------------------
import { ComponentPreview } from "@/components/preview/component-preview";
import { extractSourceCode } from "@/lib/code";
import { ComponentSource } from "@/components/preview/component-source";
import { Tab, Tabs } from "fumadocs-ui/components/tabs";
import { Step, Steps } from "fumadocs-ui/components/steps";
import { TypeTable } from "fumadocs-ui/components/type-table";
## Title Reveal
## With custom props
```bash
npm install motion/react react
```
```bash
pnpm install motion/react react
```
```bash
yarn add motion/react react
```
```bash
bun add motion/react react
```
Text Reveal Component
## Props
# Text Type
URL: /docs/text-animations/text-type
A text typing animation component with GSAP. Features typing, deleting, looping, and customizable cursor effects. Perfect for hero sections and landing pages.
***
title: Text Type
description: A text typing animation component with GSAP. Features typing, deleting, looping, and customizable cursor effects. Perfect for hero sections and landing pages.
root: text-animations
---------------------
import { ComponentPreview } from "@/components/preview/component-preview";
import { extractSourceCode } from "@/lib/code";
import { ComponentSource } from "@/components/preview/component-source";
import { Tab, Tabs } from "fumadocs-ui/components/tabs";
import { Step, Steps } from "fumadocs-ui/components/steps";
## Installation
```bash
npm install gsap react
```
```bash
pnpm install gsap react
```
```bash
yarn add gsap react
```
```bash
bun add gsap react
```
## Usage
```tsx
import { TextType } from "@/components/ui/text-type";
export default function MyComponent() {
return (
);
}
```
## Features
* β¨οΈ **Typing Animation**: Smooth character-by-character typing effect
* ποΈ **Auto Delete**: Automatically deletes text before typing next phrase
* π **Looping**: Seamlessly loops through multiple text strings
* π¨ **Customizable Cursor**: Custom cursor character and blink animation
* β‘ **GSAP Powered**: Smooth animations powered by GSAP
* π± **Responsive**: Works on all screen sizes
* π― **Intersection Observer**: Start animation when element is visible
* π¨ **Color Support**: Custom colors for each text string
## Props
| Prop | Type | Default | Description |
| --------------------- | ---------------------------- | -------- | --------------------------------- |
| `text` | `string \| string[]` | Required | Text or array of texts to type |
| `typingSpeed` | `number` | `50` | Speed of typing in milliseconds |
| `deletingSpeed` | `number` | `30` | Speed of deleting in milliseconds |
| `pauseDuration` | `number` | `2000` | Pause between typing and deleting |
| `initialDelay` | `number` | `0` | Initial delay before starting |
| `loop` | `boolean` | `true` | Whether to loop through texts |
| `showCursor` | `boolean` | `true` | Show/hide cursor |
| `cursorCharacter` | `string \| ReactNode` | `"\|"` | Cursor character |
| `cursorBlinkDuration` | `number` | `0.5` | Cursor blink speed |
| `startOnVisible` | `boolean` | `false` | Start when element is visible |
| `reverseMode` | `boolean` | `false` | Type text in reverse |
| `textColors` | `string[]` | `[]` | Array of colors for each text |
| `variableSpeed` | `{min: number, max: number}` | - | Random speed range |
| `onSentenceComplete` | `function` | - | Callback when sentence completes |
## Examples
### Basic Usage
```tsx
```
### Multiple Texts
```tsx
```
### Custom Colors
```tsx
```
### Variable Speed
```tsx
```
### Start on Visible
```tsx
```
### Custom Cursor
```tsx
```
# Typewriter
URL: /docs/text-animations/typewriter
Typewriter animations simulate the effect of text being typed out in real-time. This technique can be used to create a sense of anticipation and engagement as users watch the text appear on the screen.
***
title: Typewriter
description: Typewriter animations simulate the effect of text being typed out in real-time. This technique can be used to create a sense of anticipation and engagement as users watch the text appear on the screen.
root: text-animations
---------------------
import { ComponentPreview } from "@/components/preview/component-preview";
import { extractSourceCode } from "@/lib/code";
import { ComponentSource } from "@/components/preview/component-source";
import { Tab, Tabs } from "fumadocs-ui/components/tabs";
import { Step, Steps } from "fumadocs-ui/components/steps";
import { TypeTable } from "fumadocs-ui/components/type-table";
## Installation
```bash
npm install framer-motion
```
```bash
pnpm install framer-motion
```
```bash
yarn add framer-motion
```
```bash
bun add framer-motion
```
#### Copy and paste the following code into your project.
`components/ui/typewriter.tsx`
```tsx title="typewriter.tsx"
"use client";
import { useEffect } from "react";
import { motion, useMotionValue, useTransform, animate } from "framer-motion";
export default function TextGenerateEffect({
words,
className = "",
}: {
words: string;
className?: string;
}) {
const count = useMotionValue(0);
const rounded = useTransform(count, (latest) => Math.round(latest));
const displayText = useTransform(rounded, (latest) =>
words.slice(0, latest)
);
useEffect(() => {
const controls = animate(count, words.length, {
type: "tween",
duration: 2.5, // Increased from 1 to 2.5 seconds
ease: "easeInOut",
});
return controls.stop;
}, [words]);
return (
{displayText}
);
};
```
## Props
## Gradient Typewriter
# Variable Proximity Text
URL: /docs/text-animations/variable-proximity-text
Interactive text where font weight and optical size change based on mouse proximity to each letter. Uses variable fonts for smooth, fluid transitions.
***
title: Variable Proximity Text
description: Interactive text where font weight and optical size change based on mouse proximity to each letter. Uses variable fonts for smooth, fluid transitions.
root: text-animations
---------------------
import { ComponentPreview } from "@/components/preview/component-preview";
import { extractSourceCode } from "@/lib/code";
import { ComponentSource } from "@/components/preview/component-source";
import { Tab, Tabs } from "fumadocs-ui/components/tabs";
import { Step, Steps } from "fumadocs-ui/components/steps";
import { TypeTable } from "fumadocs-ui/components/type-table";
## Linear Falloff
Font weight increases linearly as the cursor approaches each letter.
## Gaussian Falloff
Smooth gaussian distribution creates a softer, more natural effect.
## Exponential Falloff
Sharp exponential falloff for more dramatic proximity effect.
## Installation
```bash
npm install framer-motion
```
```bash
pnpm install framer-motion
```
```bash
yarn add framer-motion
```
```bash
bun add framer-motion
```
#### Add the Google Font
Add the Roboto Flex variable font to your layout or CSS:
```css
@import url('https://fonts.googleapis.com/css2?family=Roboto+Flex:opsz,wght@8..144,100..1000&display=swap');
```
#### Copy and paste the following code into your project.
## Props
",
default: "required",
},
fromFontVariationSettings: {
description: "Font variation settings when mouse is far away.",
type: "string",
default: "'wght' 400, 'opsz' 9",
},
toFontVariationSettings: {
description: "Font variation settings when mouse is closest.",
type: "string",
default: "'wght' 900, 'opsz' 40",
},
radius: {
description: "Radius of influence in pixels.",
type: "number",
default: "100",
},
falloff: {
description: "Type of distance falloff function.",
type: "'linear' | 'exponential' | 'gaussian'",
default: "'linear'",
},
className: {
description: "Additional CSS classes.",
type: "string",
default: "''",
},
}}
/>
## Examples
```tsx
'use client';
import { useRef } from 'react';
import { VariableProximityText } from '@/components/ui/variable-proximity-text';
// Basic usage
function Example() {
const containerRef = useRef(null);
return (
);
}
// With custom font variation settings
// Gaussian falloff for smoother effect
// Exponential falloff for sharp effect
```
## Variable Font Requirements
This component requires a **variable font** that supports the `wght` (weight) and optionally `opsz` (optical size) axes. The default font is [Roboto Flex](https://fonts.google.com/specimen/Roboto+Flex).
Other compatible variable fonts:
* [Inter](https://fonts.google.com/specimen/Inter)
* [Source Sans Pro](https://fonts.google.com/specimen/Source+Sans+Pro)
* [Montserrat](https://fonts.google.com/specimen/Montserrat)
# Wave Text
URL: /docs/text-animations/wave-text
Letters dance in a smooth sine wave pattern, creating a playful, ocean-like motion. Perfect for adding life to headers and interactive elements.
***
title: Wave Text
description: Letters dance in a smooth sine wave pattern, creating a playful, ocean-like motion. Perfect for adding life to headers and interactive elements.
root: text-animations
---------------------
import { ComponentPreview } from "@/components/preview/component-preview";
import { extractSourceCode } from "@/lib/code";
import { ComponentSource } from "@/components/preview/component-source";
import { Tab, Tabs } from "fumadocs-ui/components/tabs";
import { Step, Steps } from "fumadocs-ui/components/steps";
import { TypeTable } from "fumadocs-ui/components/type-table";
## Continuous Wave
Letters continuously wave up and down in a mesmerizing pattern.
## Hover Activated
Wave animation triggers on hover for interactive elements.
## Subtle Motion
Gentle, barely-there motion for elegant, professional designs.
## Installation
```bash
npm install framer-motion
```
```bash
pnpm install framer-motion
```
```bash
yarn add framer-motion
```
```bash
bun add framer-motion
```
#### Copy and paste the following code into your project.
## Props
## Examples
```tsx
// Energetic wave
// Calm ocean wave
// Interactive hover wave
```