ignitionstack.pro includes 70+ production-ready components built with React 19, TypeScript, and Tailwind CSS.
Basic building blocks for your application:
| Component | Description | Location |
|---|---|---|
Button | Primary, secondary, and ghost variants | components/ui/button.tsx |
TextInput | Styled text input with validation | components/ui/text-input.tsx |
TextArea | Multi-line text input | components/ui/text-area.tsx |
Modal | Accessible modal dialog | components/ui/modal.tsx |
BottomSheet | Mobile-friendly bottom drawer | components/ui/bottomsheet.tsx |
Skeleton | Loading placeholder | components/ui/skeleton.tsx |
SpotlightSearch | Command palette (Cmd+K) | components/ui/spotlight-search.tsx |
Pre-built form utilities:
| Component | Description |
|---|---|
FormError | Error message display |
FieldError | Field-level validation errors |
SubmitButton | Button with loading state |
CreateButton | Pre-configured create action button |
UpdateButton | Pre-configured update action button |
DeleteButton | Pre-configured delete action button |
Everything you need for a marketing site:
components/landing-page/
├── Hero # Main hero section with CTA
├── FeatureGrid # Feature showcase grid
├── Pricing # Pricing table with plans
├── FAQ # Accordion FAQ section
├── About # About/team section
├── TechStackShowcase # Technology badges
├── ContactSection # Contact form section
├── ContentHighlights # Content showcase
├── StoreCTA # E-commerce CTA
├── Header # Navigation header
└── Footer # Site footerFull AI chatbot UI:
| Component | Description |
|---|---|
ChatContainer | Main chat wrapper |
ChatMessages | Message list |
ChatInput | Message input with file upload |
ChatBubble | Message bubble (user/assistant) |
ProviderSelector | AI provider dropdown |
ModelSelector | Model selection |
ConversationList | Conversation history sidebar |
Dashboard and management UI:
| Component | Description |
|---|---|
AdminHeader | Admin navigation |
AdminSidebar | Admin sidebar menu |
DataTable | Sortable data tables |
StatsCard | Metric display cards |
Charts | Analytics visualizations |
import Button from '@/components/ui/button'
export default function MyComponent() {
return (
<div className="flex gap-4">
<Button variant="primary">Get Started</Button>
<Button variant="secondary">Learn More</Button>
<Button variant="ghost">Cancel</Button>
</div>
)
}'use client'
import { useFormField } from '@/hooks'
import { TextInput } from '@/components/ui/text-input'
import { FormError, SubmitButton } from '@/components/ui/form-error'
export default function ContactForm() {
const email = useFormField('', { validator: 'email' })
const message = useFormField('', { required: true })
const handleSubmit = async (e: React.FormEvent) => {
e.preventDefault()
if (!email.isValid || !message.isValid) return
// Submit form...
}
return (
<form onSubmit={handleSubmit}>
<TextInput
{...email.inputProps}
placeholder="your@email.com"
/>
<FormError error={email.error} />
<TextInput
{...message.inputProps}
placeholder="Your message"
/>
<FormError error={message.error} />
<SubmitButton>Send Message</SubmitButton>
</form>
)
}'use client'
import { useState } from 'react'
import Modal from '@/components/ui/modal'
import Button from '@/components/ui/button'
export default function ConfirmDialog() {
const [isOpen, setIsOpen] = useState(false)
return (
<>
<Button onClick={() => setIsOpen(true)}>
Open Modal
</Button>
<Modal
isOpen={isOpen}
onClose={() => setIsOpen(false)}
title="Confirm Action"
>
<p>Are you sure you want to proceed?</p>
<div className="flex gap-2 mt-4">
<Button onClick={() => setIsOpen(false)}>
Confirm
</Button>
<Button variant="ghost" onClick={() => setIsOpen(false)}>
Cancel
</Button>
</div>
</Modal>
</>
)
}The spotlight search is globally available. Just press Cmd+K (Mac) or Ctrl+K (Windows/Linux).
// Already included in the root layout
import SpotlightSearch from '@/components/ui/spotlight-search'
export default function RootLayout({ children }) {
return (
<html>
<body>
{children}
<SpotlightSearch />
</body>
</html>
)
}All components use CSS custom properties for theming:
/* Dark theme (default) */
--color-bg-primary: 8 9 12;
--color-bg-secondary: 15 17 24;
--color-text-primary: 255 255 255;
--color-accent-orange: 234 88 12;
/* Light theme */
--color-bg-primary: 245 247 250;
--color-text-primary: 15 23 42;// Glass panel effect
<div className="glass-panel">...</div>
// Gradient text
<h1 className="text-gradient">Heading</h1>
// Surface styles
<div className="bg-surface-card">...</div>
<div className="bg-surface-hover">...</div>Components automatically adapt to light/dark mode via CSS variables and Tailwind’s dark mode classes.
// Compose components for complex UIs
import { Card, CardHeader, CardBody, CardFooter } from '@/components/ui/card'
<Card>
<CardHeader>
<h3>Card Title</h3>
</CardHeader>
<CardBody>
Content here
</CardBody>
<CardFooter>
<Button>Action</Button>
</CardFooter>
</Card>Components with interactivity (useState, useEffect, onClick) must be Client Components with 'use client' directive.
// Server Component (default) - for static content
export default function StaticCard({ data }) {
return <div>{data.title}</div>
}
// Client Component - for interactive elements
'use client'
export default function InteractiveCard({ data }) {
const [expanded, setExpanded] = useState(false)
return (
<div onClick={() => setExpanded(!expanded)}>
{data.title}
</div>
)
}