flowglad-setup
Install and configure the Flowglad SDK for Next.js, Express, and React applications. Use this skill when adding billing to an app, setting up Flowglad for the first time, or configuring SDK providers and route handlers.
Install
mkdir -p .claude/skills/flowglad-setup && curl -L -o skill.zip "https://mcp.directory/api/skills/download/6577" && unzip -o skill.zip -d .claude/skills/flowglad-setup && rm skill.zipInstalls to .claude/skills/flowglad-setup
About this skill
Flowglad Setup
Abstract
This skill covers installing and configuring the Flowglad SDK for Next.js, Express, and React applications. It includes framework detection, package installation, environment setup, server factory creation, route handler setup, and provider configuration.
Table of Contents
- Framework Detection — CRITICAL
- Next.js Setup — CRITICAL
- Express Setup — HIGH
- React Setup (Other Frameworks) — HIGH
- Customer ID Mapping — CRITICAL
- getCustomerDetails Callback — HIGH
- 6.1 Required Fields
- 6.2 Database Integration
1. Framework Detection
Impact: CRITICAL
Before beginning setup, detect which framework the user is using to ensure correct package installation and configuration.
1.1 Detecting the Framework
Impact: CRITICAL (incorrect detection leads to wrong SDK usage)
Check for framework-specific configuration files to determine the correct setup path.
Detection Rules:
Next.js: next.config.js OR next.config.ts OR next.config.mjs exists
Express: "express" in package.json dependencies
React (CRA): "react-scripts" in package.json dependencies
Vite React: "vite" in package.json devDependencies AND "react" in dependencies
Incorrect: assuming Next.js without checking
// Don't assume the framework - always verify first
import { FlowgladServer } from '@flowglad/nextjs/server'
// This will fail if the user is using Express or plain React
Correct: check framework before recommending packages
# Check for Next.js
ls next.config.* 2>/dev/null && echo "Next.js detected"
# Check for Express (in package.json)
grep -q '"express"' package.json && echo "Express detected"
After detection, proceed to the appropriate setup section.
2. Next.js Setup
Impact: CRITICAL
Next.js is the primary supported framework with the most streamlined integration.
2.1 Package Installation
Impact: CRITICAL (wrong packages = broken integration)
Incorrect: installing individual packages separately
# Don't install packages piecemeal
npm install @flowglad/server
npm install @flowglad/react
# Missing the unified Next.js package
Correct: install the Next.js package (includes server and react)
bun add @flowglad/nextjs @flowglad/react
The @flowglad/nextjs package re-exports server functionality and is designed for Next.js App Router.
2.2 Environment Variables
Impact: CRITICAL (missing env vars = authentication failures)
Incorrect: hardcoding API key
// SECURITY RISK: Never hardcode secrets
const flowglad = new FlowgladServer({
apiKey: 'sk_live_abc123...',
// ...
})
Correct: use environment variable
# .env.local
FLOWGLAD_SECRET_KEY=sk_live_your_secret_key_here
// The SDK automatically reads FLOWGLAD_SECRET_KEY from process.env
// No need to pass apiKey explicitly
const flowglad = new FlowgladServer({
customerExternalId,
getCustomerDetails,
})
The SDK automatically reads FLOWGLAD_SECRET_KEY from the environment. You only need to pass apiKey explicitly if using a different environment variable name.
2.3 Server Factory Creation
Impact: CRITICAL (incorrect factory = broken billing operations)
Create a factory function that returns a FlowgladServer instance scoped to a specific customer.
Incorrect: creating a single shared instance
// lib/flowglad.ts
// BAD: Single shared instance loses customer context
export const flowglad = new FlowgladServer({
// No customerExternalId - will fail for customer-specific operations
})
Correct: factory function that creates scoped instances
// lib/flowglad.ts
import { FlowgladServer } from '@flowglad/nextjs/server'
import { db } from '@/db'
export const flowglad = (customerExternalId: string) => {
return new FlowgladServer({
customerExternalId,
getCustomerDetails: async (externalId: string) => {
const user = await db.users.findUnique({
where: { id: externalId },
})
if (!user) {
throw new Error(`User not found: ${externalId}`)
}
return {
email: user.email,
name: user.name || user.email,
}
},
})
}
The factory pattern ensures each request gets a properly scoped server instance.
2.4 API Route Handler
Impact: CRITICAL (missing route = SDK cannot communicate with Flowglad)
Create a catch-all API route to handle Flowglad SDK requests from the frontend.
Incorrect: manual route implementation
// app/api/flowglad/route.ts
// BAD: Manual implementation misses many endpoints
export async function POST(req: Request) {
const body = await req.json()
// Incomplete - missing proper routing, validation, etc.
return Response.json({ error: 'Not implemented' })
}
Correct: use nextRouteHandler with catch-all route
// app/api/flowglad/[...path]/route.ts
import { nextRouteHandler } from '@flowglad/nextjs/server'
import { auth } from '@/lib/auth' // Your auth solution
import { flowglad } from '@/lib/flowglad'
export const { GET, POST } = nextRouteHandler({
flowglad,
getCustomerExternalId: async (req) => {
// Extract the authenticated user's ID from your auth system
const session = await auth()
if (!session?.user?.id) {
throw new Error('Unauthorized')
}
return session.user.id
},
})
Important: The route must be a catch-all ([...path]) to handle all Flowglad API subroutes.
2.5 FlowgladProvider Setup
Impact: CRITICAL (missing provider = hooks don't work)
Wrap your application with FlowgladProvider to enable the useBilling hook.
Incorrect: not wrapping the app
// app/layout.tsx
// BAD: useBilling will throw without FlowgladProvider
export default function RootLayout({ children }) {
return (
<html>
<body>{children}</body>
</html>
)
}
Correct: wrap with FlowgladProvider
// app/layout.tsx
import { FlowgladProvider } from '@flowglad/react'
export default function RootLayout({
children,
}: {
children: React.ReactNode
}) {
return (
<html>
<body>
<FlowgladProvider>{children}</FlowgladProvider>
</body>
</html>
)
}
For apps with a custom API base URL:
<FlowgladProvider baseURL="https://api.yourapp.com">
{children}
</FlowgladProvider>
3. Express Setup
Impact: HIGH
For Express applications, use the @flowglad/server package with the Express router helper.
3.1 Package Installation
Impact: HIGH (wrong package = missing Express utilities)
Incorrect: installing the Next.js package for Express
# Wrong package for Express
npm install @flowglad/nextjs
Correct: install the server package
bun add @flowglad/server
3.2 Server Factory Creation
Impact: HIGH (same pattern as Next.js)
Incorrect: not providing getCustomerDetails
// utils/flowglad.ts
// BAD: Missing getCustomerDetails - customer creation will fail
export const flowglad = (customerExternalId: string) => {
return new FlowgladServer({
customerExternalId,
// getCustomerDetails is required!
})
}
Correct: provide complete factory
// utils/flowglad.ts
import { FlowgladServer } from '@flowglad/server'
import { db } from '../db'
export const flowglad = (customerExternalId: string) => {
return new FlowgladServer({
customerExternalId,
getCustomerDetails: async (externalId: string) => {
const user = await db.users.findOne({ id: externalId })
if (!user) {
throw new Error(`User not found: ${externalId}`)
}
return {
email: user.email,
name: user.name,
}
},
})
}
3.3 Express Router Setup
Impact: HIGH (incorrect setup = broken API routes)
Incorrect: manually handling each route
// routes/flowglad.ts
// BAD: Manual route handling is error-prone and incomplete
import express from 'express'
const router = express.Router()
router.post('/checkout', async (req, res) => {
// Manual implementation - missing validation, error handling, etc.
})
export { router }
Correct: use expressRouter helper
// routes/flowglad.ts
import { expressRouter } from '@flowglad/server/express'
import type { Request } from 'express'
import { flowglad } from '../utils/flowglad'
export const flowgladRouter = expr
---
*Content truncated.*
More by flowglad
View all skills by flowglad →You might also like
flutter-development
aj-geddes
Build beautiful cross-platform mobile apps with Flutter and Dart. Covers widgets, state management with Provider/BLoC, navigation, API integration, and material design.
drawio-diagrams-enhanced
jgtolentino
Create professional draw.io (diagrams.net) diagrams in XML format (.drawio files) with integrated PMP/PMBOK methodologies, extensive visual asset libraries, and industry-standard professional templates. Use this skill when users ask to create flowcharts, swimlane diagrams, cross-functional flowcharts, org charts, network diagrams, UML diagrams, BPMN, project management diagrams (WBS, Gantt, PERT, RACI), risk matrices, stakeholder maps, or any other visual diagram in draw.io format. This skill includes access to custom shape libraries for icons, clipart, and professional symbols.
ui-ux-pro-max
nextlevelbuilder
"UI/UX design intelligence. 50 styles, 21 palettes, 50 font pairings, 20 charts, 8 stacks (React, Next.js, Vue, Svelte, SwiftUI, React Native, Flutter, Tailwind). Actions: plan, build, create, design, implement, review, fix, improve, optimize, enhance, refactor, check UI/UX code. Projects: website, landing page, dashboard, admin panel, e-commerce, SaaS, portfolio, blog, mobile app, .html, .tsx, .vue, .svelte. Elements: button, modal, navbar, sidebar, card, table, form, chart. Styles: glassmorphism, claymorphism, minimalism, brutalism, neumorphism, bento grid, dark mode, responsive, skeuomorphism, flat design. Topics: color palette, accessibility, animation, layout, typography, font pairing, spacing, hover, shadow, gradient."
godot
bfollington
This skill should be used when working on Godot Engine projects. It provides specialized knowledge of Godot's file formats (.gd, .tscn, .tres), architecture patterns (component-based, signal-driven, resource-based), common pitfalls, validation tools, code templates, and CLI workflows. The `godot` command is available for running the game, validating scripts, importing resources, and exporting builds. Use this skill for tasks involving Godot game development, debugging scene/resource files, implementing game systems, or creating new Godot components.
nano-banana-pro
garg-aayush
Generate and edit images using Google's Nano Banana Pro (Gemini 3 Pro Image) API. Use when the user asks to generate, create, edit, modify, change, alter, or update images. Also use when user references an existing image file and asks to modify it in any way (e.g., "modify this image", "change the background", "replace X with Y"). Supports both text-to-image generation and image-to-image editing with configurable resolution (1K default, 2K, or 4K for high resolution). DO NOT read the image file first - use this skill directly with the --input-image parameter.
fastapi-templates
wshobson
Create production-ready FastAPI projects with async patterns, dependency injection, and comprehensive error handling. Use when building new FastAPI applications or setting up backend API projects.
Related MCP Servers
Browse all serversMCP Installer simplifies dynamic installation and configuration of additional MCP servers. Get started easily with MCP I
install.md — Step-by-step MCP server guides to install and configure coding agents and use your software fast.
Automate Excel file tasks without Microsoft Excel using openpyxl and xlsxwriter for formatting, formulas, charts, and ad
Access shadcn/ui v4 components, blocks, and demos for rapid React UI library development. Seamless integration and sourc
Supercharge your NextJS projects with AI-powered tools for diagnostics, upgrades, and docs. Accelerate development and b
Control TouchDesigner nodes and properties with natural language for audio reactive installations and interactive digita
Stay ahead of the MCP ecosystem
Get weekly updates on new skills and servers.