saas-payment-patterns
Payment provider abstraction, webhook security, subscription lifecycle, dunning flows, pricing models, invoicing, tax handling, and refund patterns for SaaS…
Skill by vibeeval
Chalk Labs
Need help deploying saas-payment-patterns?
Chalk Labs sets up agents like this inside real teams: connected to your tools, tested on your data, with a human in the loop where it matters.
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/vibeeval-saas-payment-patterns
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: security, finance
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/saas-payment-patterns
What's inside
- Skill name
saas-payment-patterns- Description
- Payment provider abstraction, webhook security, subscription lifecycle, dunning flows, pricing models, invoicing, tax handling, and refund patterns for SaaS applications.
- License
- MIT
- Instructions
- 566 lines in SKILL.md · view on GitHub
Agent Skills spec issues
- body: 566 lines (spec recommends under 500)
Files (1)
- SKILL.md
SKILL.md (first lines)
# SaaS Payment Patterns
Provider-agnostic payment patterns for subscription-based applications. Works with Stripe, Paddle, LemonSqueezy, or any billing provider.
## Payment Provider Abstraction Layer
```typescript
// Abstract away the provider — swap Stripe for Paddle without touching business logic
interface PaymentProvider {
createCustomer(data: CreateCustomerDto): Promise<Customer>
createSubscription(data: CreateSubscriptionDto): Promise<Subscription>
cancelSubscription(subscriptionId: string, immediate?: boolean): Promise<void>
createCheckoutSession(data: CheckoutDto): Promise<{ url: string }>
issueRefund(paymentId: string, amountCents?: number): Promise<Refund>
getInvoice(invoiceId: string): Promise<Invoice>
verifyWebhookSignature(payload: string, signature: string): boolean
}
interface Customer { id: string; email: string; providerCustomerId: string }
interface Subscription {
id: string
status: SubscriptionStatus
planId: string
currentPeriodEnd: Date
cancelAtPeriodEnd: boolean
}
type SubscriptionStatus = 'trialing' | 'active' | 'past_due' | 'canceled' | 'expired'
// Provider implementation (Stripe example)
class StripePaymentProvider implements PaymentProvider {
constructor(private stripe: Stripe) {}
async createCustomer(data: CreateCustomerDto): Promise<Customer> {
const stripeCustomer = await this.stripe.customers.create({
email: data.email,
metadata: { internalUserId: data.userId }
})
return {
id: data.userId,
email: data.email,
providerCustomerId: stripeCustomer.id
}
}
// ... other methods follow the same translation pattern
}
// Usage — business logic never imports Stripe/Paddle directly
class BillingService {
constructor(private provider: PaymentProvider, private db: Database) {}
async startSubscription(userId: string, planId: string): Promise<Subscription> {
const customer = await this.db.customers.findByUserId(userId)
return this.provider.createSubscription({
customerId: customer.providerCustomerId,
planId,
trialDays: 14
})
}
}
```
## Webhook Security
```typescript
// GOOD: Verify signature, enforce idempotency, protect against replay
async function handleWebhook(req: Request): Promise<Response> {
const payload = await req.text()
const signature = req.headers.get('x-webhook-signature') ?? ''
const eventId = req.headers.get('x-webhook-id') ?? ''
const timestamp = req.headers.get('x-webhook-timestamp') ?? ''
// 1. Verify cryptographic signature
if (!provider.verifyWebhookSignature(payload, signature)) {
return new Response('Invalid signature', { status: 401 })
}
// 2. Replay protection — reject events older than 5 minutes
const timestampMs = new Date(timestamp).getTime()
if (isNaN(timestampMs)) {
return new Response('Invalid timestamp', { status: 400 })
}
const eventAge = Date.now() - timestampMs
if (eventAge > 5 * 60 * 1000 || eventAge < -60 * 1000) {
return new Response('Event too old or clock skew', { status: 400 })
}
// 3. Idempotency — process each event exactly once
const alreadyProcessed = await db.webhookEvents.findUnique({
where: { eventId }
})
if (alreadyProcessed) {
return new Response('Already processed', { status: 200 })
}
// 4. Process inside a transaction
await db.$transaction(async (tx) => {
await tx.webhookEvents.create({
data: { eventId, payload, processedAt: new Date() }
})
const event = JSON.parse(payload)
await routeWebhookEvent(event, tx)
})
return new Response('OK', { status: 200 })
}
// BAD: Fire-and-forget webhook handler
async function handleWebhookBad(req: Request): Promise<Response> {
const event = await req.json() // No signature verification
await processEvent(event) // No idempotency check
return new Response('OK') // No replay protection
// Result: anyone can POST fake events, duplicate processing, replay attacks
}
```
## Subscription LifecycleFrom vibeeval/vibecosystem, MIT.
More from vibeeval/vibecosystem
- 0.565score
codex-orchestration
vibeeval
OpenAI Codex CLI + Claude Code (Hizir) birlikte kullanim rehberi.
SkillBFreshness: B★ 540Claude Code +9 - 0.562score
plan-agent
vibeeval
Planning agent that creates implementation plans and handoffs from conversation context
SkillBFreshness: B★ 540Claude Code +9 - 0.559score
help
vibeeval
Interactive workspace discovery - learn what tools, workflows, agents, and hooks are available
SkillBFreshness: B★ 540Claude Code +9 - 0.559score
explore
vibeeval
Meta-skill for internal codebase exploration at varying depths (quick/deep/architecture)
SkillBFreshness: B★ 540Claude Code +9 - 0.559score
cli-reference
vibeeval
Claude Code CLI commands, flags, headless mode, and automation patterns
SkillBFreshness: B★ 540Claude Code +9 - 0.524score
tdd-workflow
vibeeval
Use this skill when writing new features, fixing bugs, or refactoring code.
SkillCFreshness: C★ 540Claude Code +9 - 0.522score
kotlin-patterns
vibeeval
Coroutine patterns, Flow operators, Jetpack Compose state management, Ktor routing, and Kotlin Multiplatform shared code.
SkillCFreshness: C★ 540Claude Code +9 - 0.522score
compliance-patterns
vibeeval
GDPR data handling, audit logging, data classification, retention policies, and consent management for regulatory compliance.
SkillCFreshness: C★ 540Claude Code +9 - 0.522score
feature-flag-patterns
vibeeval
Gradual rollout strategies, kill switches, A/B testing integration, flag lifecycle management, and technical debt prevention.
SkillCFreshness: C★ 540Claude Code +9 - 0.522score
aws-patterns
vibeeval
Lambda best practices, S3 event patterns, SQS/SNS fanout, and DynamoDB access patterns for serverless AWS architectures.
SkillCFreshness: C★ 540Claude Code +9 - 0.522score
experiment-engine
vibeeval
Otonom deney dongusu.
SkillCFreshness: C★ 540Claude Code +9 - 0.522score
grpc-patterns
vibeeval
Protobuf schema design, streaming patterns, interceptor chains, deadline propagation, and error handling for gRPC services.
SkillCFreshness: C★ 540Claude Code +9
Signals
- Stars
- 540
- Forks
- 44
- Open issues
- 5
- Last commit (this folder)
- Mar 24, 2026 (7 months ago)
- Last release
- Apr 12, 2026 (6 months ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/vibeeval/vibecosystem
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from vibeeval
- 0.565score
codex-orchestration
vibeeval
OpenAI Codex CLI + Claude Code (Hizir) birlikte kullanim rehberi.
SkillBFreshness: B★ 540Claude Code +9 - 0.562score
plan-agent
vibeeval
Planning agent that creates implementation plans and handoffs from conversation context
SkillBFreshness: B★ 540Claude Code +9 - 0.559score
help
vibeeval
Interactive workspace discovery - learn what tools, workflows, agents, and hooks are available
SkillBFreshness: B★ 540Claude Code +9 - 0.559score
cli-reference
vibeeval
Claude Code CLI commands, flags, headless mode, and automation patterns
SkillBFreshness: B★ 540Claude Code +9 - 0.559score
explore
vibeeval
Meta-skill for internal codebase exploration at varying depths (quick/deep/architecture)
SkillBFreshness: B★ 540Claude Code +9 - 0.524score
tdd-workflow
vibeeval
Use this skill when writing new features, fixing bugs, or refactoring code.
SkillCFreshness: C★ 540Claude Code +9
Done for you
Rather not set it up yourself?
Chalk Labs scopes, builds and runs agents for your team: the task audit, the eval harness, the integrations and the weekly ops report. Fixed scope, priced before we start.
See how we build AI agents →Read the case studies
Chalk Labs is a two-founder AI and growth studio. We build AI agents, CRMs and MVPs for Web3 and AI companies, and have shipped 50+ product and token launches.
- launches shipped
- 50+
- launches shipped
- media placements
- 500+
- media placements
- founders on every account
- 2
- founders on every account
Press we've placed: Forbes · CoinDesk · Decrypt · Cointelegraph · The Block
Rahil Jain, Co-founder, Chalk Labs. Ex-Goldman Sachs engineer. You talk to the person who builds it.
Get saas-payment-patterns running in your business
Tell us what you want to automate. A founder replies within one working day with a plan, not a pitch deck.
Cite this page
saas-payment-patterns skill. Agent Mart. https://agentmart.dev/skills/vibeeval-saas-payment-patterns (last updated 2026-10-24)