checkout-components
Next.js checkout UI components with Stripe Elements and payment forms. Use when creating checkout pages, payment forms, subscription UIs, customer portals, or when user mentions Stripe Elements, payment UI, checkout flow, subscription management, or payment forms.
What this skill does
# Checkout Components
## Purpose
Production-ready Next.js UI components for Stripe payment integration with TypeScript, Tailwind CSS, and accessibility features. Provides complete checkout flows, subscription management, and payment form components.
## Security Requirements
**CRITICAL: API Key Handling**
When using these components:
- Never hardcode Stripe publishable keys in components
- ALWAYS use environment variables: `NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY`
- Use placeholders in all examples: `pk_test_your_stripe_publishable_key_here`
- Never commit actual API keys to git
- Always add `.env` files to `.gitignore`
**Example .env.local:**
```bash
# NEVER COMMIT THIS FILE
NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY=pk_test_your_stripe_publishable_key_here
STRIPE_SECRET_KEY=sk_test_your_stripe_secret_key_here
STRIPE_WEBHOOK_SECRET=whsec_your_webhook_secret_here
```
## Activation Triggers
- Creating checkout pages
- Implementing payment forms
- Building subscription management UI
- Adding customer portal components
- Integrating Stripe Elements
- Creating payment history displays
- Setting up pricing tables
## Component Overview
### Provider Components
- **StripeProvider.tsx** - Wraps app with Stripe Elements context
### Payment Components
- **CheckoutForm.tsx** - Complete checkout form with card input
- **PaymentMethodForm.tsx** - Standalone payment method input
- **SubscriptionCard.tsx** - Subscription display and management
- **PricingTable.tsx** - Pricing tier comparison table
- **PaymentHistory.tsx** - Transaction history component
## Quick Start
### 1. Install Dependencies
```bash
# Install Stripe React libraries
bash scripts/install-stripe-react.sh
```
**Installs:**
- `@stripe/stripe-js` - Stripe.js loader
- `@stripe/react-stripe-js` - React Elements components
- Type definitions for TypeScript
### 2. Setup Stripe Provider
```bash
# Create provider wrapper in your app
bash scripts/setup-stripe-provider.sh
```
**Creates:**
- `lib/stripe-client.ts` - Stripe client initialization
- `components/providers/stripe-provider.tsx` - Elements provider wrapper
- Environment variable configuration
### 3. Generate Components
```bash
# Generate specific payment component
bash scripts/generate-component.sh checkout-form
bash scripts/generate-component.sh subscription-card
bash scripts/generate-component.sh pricing-table
```
### 4. Validate Setup
```bash
# Validate component structure and configuration
bash scripts/validate-components.sh
```
**Checks:**
- Environment variables configured
- Dependencies installed
- Component structure valid
- TypeScript types correct
- Accessibility compliance
## Component Templates
### StripeProvider Template
Wraps your app with Stripe Elements context:
```typescript
import { StripeProvider } from '@/components/providers/stripe-provider';
export default function RootLayout({ children }) {
return (
<html>
<body>
<StripeProvider>
{children}
</StripeProvider>
</body>
</html>
);
}
```
**Features:**
- Automatic Stripe.js loading
- Error boundary handling
- Loading states
- Theme customization
### CheckoutForm Template
Complete payment form with card input:
```typescript
import { CheckoutForm } from '@/components/payments/checkout-form';
export default function CheckoutPage() {
return (
<div className="max-w-md mx-auto p-6">
<h1 className="text-2xl font-semibold mb-6">Complete Purchase</h1>
<CheckoutForm
amount={4999}
onSuccess={() => router.push('/success')}
onError={(error) => console.error(error)}
/>
</div>
);
}
```
**Features:**
- Card Element with validation
- Real-time error display
- Loading states
- Success/error callbacks
- Responsive design
- ARIA labels
### PaymentMethodForm Template
Standalone payment method collection:
```typescript
import { PaymentMethodForm } from '@/components/payments/payment-method-form';
export default function AddPaymentMethod() {
return (
<PaymentMethodForm
onComplete={(paymentMethodId) => {
console.log('Payment method created:', paymentMethodId);
}}
customerId="cus_xxx"
/>
);
}
```
**Features:**
- Save cards for future use
- Update existing payment methods
- Validation and error handling
- Loading indicators
### SubscriptionCard Template
Display and manage subscriptions:
```typescript
import { SubscriptionCard } from '@/components/payments/subscription-card';
export default function SubscriptionPage() {
return (
<SubscriptionCard
subscription={{
id: 'sub_xxx',
status: 'active',
currentPeriodEnd: new Date('2025-12-01'),
plan: { name: 'Pro Plan', amount: 2999 }
}}
onCancel={() => handleCancellation()}
onUpdate={() => handleUpdate()}
/>
);
}
```
**Features:**
- Status badge display
- Renewal date
- Cancel/upgrade actions
- Usage tracking
- Billing history link
### PricingTable Template
Compare pricing tiers:
```typescript
import { PricingTable } from '@/components/payments/pricing-table';
const plans = [
{
id: 'price_free',
name: 'Free',
price: 0,
features: ['10 API calls/month', 'Basic support']
},
{
id: 'price_pro',
name: 'Pro',
price: 2999,
features: ['1000 API calls/month', 'Priority support', 'Advanced features']
}
];
export default function Pricing() {
return <PricingTable plans={plans} onSelectPlan={(planId) => handleCheckout(planId)} />;
}
```
**Features:**
- Responsive grid layout
- Feature comparison
- Call-to-action buttons
- Highlight recommended plan
- Annual/monthly toggle
### PaymentHistory Template
Display transaction history:
```typescript
import { PaymentHistory } from '@/components/payments/payment-history';
export default function BillingPage() {
return (
<PaymentHistory
customerId="cus_xxx"
limit={10}
onLoadMore={() => loadMorePayments()}
/>
);
}
```
**Features:**
- Paginated transaction list
- Invoice download links
- Status indicators
- Date formatting
- Search and filter
## Styling Customization
All components use Tailwind CSS and support customization:
### Element Styling
Customize Stripe Elements appearance:
```typescript
const appearance = {
theme: 'stripe',
variables: {
colorPrimary: '#0070f3',
colorBackground: '#ffffff',
colorText: '#000000',
colorDanger: '#df1b41',
fontFamily: 'system-ui, sans-serif',
spacingUnit: '4px',
borderRadius: '4px'
}
};
<Elements stripe={stripePromise} options={{ appearance }}>
<CheckoutForm />
</Elements>
```
### Component Classes
Override default Tailwind classes:
```typescript
<CheckoutForm
className="custom-checkout"
buttonClassName="bg-blue-600 hover:bg-blue-700"
errorClassName="text-red-600 text-sm"
/>
```
## TypeScript Types
All components include full TypeScript support:
```typescript
import type {
CheckoutFormProps,
PaymentMethodFormProps,
SubscriptionCardProps,
PricingTableProps,
PaymentHistoryProps
} from '@/types/payments';
```
**Type Definitions:**
- Props interfaces
- Stripe object types
- Event handlers
- Error types
- Response types
## Error Handling
Components provide comprehensive error handling:
```typescript
<CheckoutForm
onError={(error) => {
switch (error.type) {
case 'card_error':
// Show user-friendly message
toast.error(error.message);
break;
case 'validation_error':
// Handle validation errors
break;
default:
// Generic error handling
console.error(error);
}
}}
/>
```
**Error Types:**
- Card validation errors
- Payment processing errors
- Network errors
- Configuration errors
## Accessibility Features
All components follow WCAG 2.1 AA standards:
- Proper ARIA labels
- Keyboard navigation support
- Focus management
- Screen reader friendly
- Error announcements
- Color contrast compliance
**Example:**
```typescript
<button
type="submit"
Related in Design
contribute
IncludedLocal-only OSS contribution command center. Auto-refreshes the user's in-flight PR and issue state on invoke so conversations start with full context — no need to brief Claude on what's in flight. Helps the user find issues to contribute to on GitHub, builds per-repo dossiers of what each upstream expects (CLA, DCO, branch convention, AI policy, draft-first, review bots, issue templates), runs deterministic gates before any external action so AI-assisted contributions don't reach maintainers as slop. State is markdown-only: candidate files at ~/.contribute-system/candidates/, repo dossiers at ~/.contribute-system/research/, append-only event log at ~/.contribute-system/log.jsonl. No database, no cloud calls. Use when the user asks about their PRs / issues / contributions, wants to find new work to take on, claim an issue, build/refresh a repo's dossier, or draft a Design Issue or PR. Trigger with "/contribute", "what's my PR status", "find a contribution", "claim issue X", "draft a Design Issue for Y", "refresh dossier for Z".
architectural-analysis
IncludedUser-triggered deep architectural analysis of a codebase or scoped subtree across eight modes — information architecture, data flow, integration points, UI surfaces, interaction patterns, data model, control flow, and failure modes. This skill should be used when the user asks to "diagram this codebase," "map the architecture," "show the data flow," "give me an ERD," "trace control flow," "find the integration points," "verify the layout pattern," "audit the UX architecture," or any similar request whose primary deliverable is mermaid diagrams plus cited reports under docs/architecture/. Dispatches haiku/sonnet sub-agents in parallel for per-mode exploration, then verifies every citation mechanically before any node lands in a diagram. Not for one-off prose explanations of code (use code-explanation) or for high-level system design from scratch (use system-design).
mcp
IncludedModel Context Protocol (MCP) server development and tool management. Languages: Python, TypeScript. Capabilities: build MCP servers, integrate external APIs, discover/execute MCP tools, manage multi-server configs, design agent-centric tools. Actions: create, build, integrate, discover, execute, configure MCP servers/tools. Keywords: MCP, Model Context Protocol, MCP server, MCP tool, stdio transport, SSE transport, tool discovery, resource provider, prompt template, external API integration, Gemini CLI MCP, Claude MCP, agent tools, tool execution, server config. Use when: building MCP servers, integrating external APIs as MCP tools, discovering available MCP tools, executing MCP capabilities, configuring multi-server setups, designing tools for AI agents.
react-native-skia
IncludedDesign, build, debug, and optimise high-polish animated graphics in React Native or Expo using @shopify/react-native-skia, Reanimated, and Gesture Handler. Use when the user wants canvas-driven UI, shaders, paths, rich text, image filters, sprite fields, Skottie, video frames, snapshots, web CanvasKit setup, or performance tuning for custom motion-heavy elements such as loaders, hero art, cards, charts, progress indicators, particle systems, or gesture-driven surfaces. Also use when the user asks for fluid, glow, glass, blob, parallax, 60fps/120fps, or GPU-friendly animated effects in React Native, even if they do not explicitly say "Skia". Do not use for ordinary form/layout work with standard views.
plaid
IncludedProduct Led AI Development — guides founders from idea to launched product. Six capabilities: Idea (discover a product idea), Validate (pressure-test the idea against fatal flaws, problem reality, competition, and 2-week MVP feasibility), Plan (vision intake + document generation), Design (translate image references into a design.md spec), Launch (go-to-market strategy), and Build (roadmap execution). Use when someone says "PLAID", "plaid idea", "help me find an idea", "product idea", "idea from my business", "idea from my expertise", "plaid validate", "validate my idea", "pressure-test", "is this idea good", "find fatal flaws", "validate the problem", "plan a product", "define my vision", "generate a PRD", "product strategy", "plaid design", "design from image", "translate image to design", "create design.md", "extract design tokens", "plaid launch", "go-to-market", "launch plan", "GTM strategy", "launch playbook", "plaid build", "build the app", "start building", or "execute the roadmap".
nextjs-framer-motion-animations
IncludedAdds production-safe Motion for React or Framer Motion animations to Next.js apps, including reveal, hover and tap micro-interactions, whileInView, stagger, AnimatePresence, layout and layoutId transitions, reorder, scroll-linked UI, and lightweight route-content transitions. Use when the user asks to add, refactor, or debug Motion or Framer Motion in App Router or Pages Router codebases, especially around server/client boundaries, reduced motion, LazyMotion, bundle size, hydration, or route transitions. Avoid for GSAP-style timelines, WebGL or 3D scenes, heavy scroll storytelling, or CSS-only effects unless Motion is explicitly requested.