CtrlK
BlogDocsLog inGet started
Tessl Logo
SkillPublic

paddle-customer-portal

Mint a Paddle customer portal session URL from a Next.js Server Action — the portal-vs-custom-billing-screen trade-off, auth, ownership, URL structure (overview vs deep links), and the security model.

60

Quality

75%

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide
SecuritybySnyk

Medium

Suggest reviewing before use

Fix and improve this skill with Tessl

tessl review fix ./providers/claude/plugin/skills/customer-portal/SKILL.md

The canonical home for this skill is paddle-customer-portal in PaddleHQ/paddle-agent-skills

SKILL.md
Quality
Evals
Security

Quality

Content

73%Weight 40%Scale 1-5

Reviews the quality of instructions and guidance provided to agents. Good implementation is clear, handles edge cases, and produces reliable results.

A strong, actionable skill: the full Server Action is nearly copy-paste ready, the workflow has explicit validation and a real verification checklist, and the security model is unusually well articulated. The main costs are token weight from boilerplate Supabase code and triple-stated security points, plus one undefined import (`getPaddleInstance`).

Suggestions

Define or stub `getPaddleInstance()` (the one imported helper the skill never shows) so the full action is truly copy-paste ready.

Trim the Supabase `createServerClient` boilerplate to a short note plus a link to the starter kit — Claude already knows the @supabase/ssr cookie pattern — and drop the trivial client-button component.

State the core security invariants once (Security model) and let the code comments and pitfalls reference them instead of restating "return only the URL" and "customerId from auth, not input" in all three places.

DimensionReasoningScore

Conciseness

The Paddle-specific core (URL structure, the 25-subscription-ID limit, pitfalls, verification) is tight and earns its tokens — fitting anchor 3 rather than anchor 2 because most sections are lean — but the ~47 lines of boilerplate Supabase helper code, the trivial client button component, and the "return only the URL / never trust a client-supplied customerId" point stated three times (code comments, Security model, and Common pitfalls) are padding that could be trimmed.

3 / 5

Actionability

"The full Server Action" is executable with imports, auth check, DB lookup, error handling, and a client component, plus prerequisites and env vars — but `getPaddleInstance` is imported from `@/utils/paddle/get-paddle-instance` and never defined anywhere in the skill, a minor gap that breaks full copy-paste readiness (anchor 5).

4 / 5

Workflow Clarity

The sequence (prerequisites → Supabase helpers → how portal sessions work → full action → security model → pitfalls → verification) is clearly ordered, the action has numbered steps with an explicit error-recovery loop (ApiError → user-facing message, rethrow anything else), and "Verify the integration" is a 6-item checklist covering negative paths (logged out, no customer, cross-customer minting, URL uniqueness per click).

5 / 5

Progressive Disclosure

Sections are well-organized with clear headers and external doc links are clearly signaled, but there are no bundle files at all: the long portal-vs-custom trade-off table and the Supabase helper code could live in reference files, and sibling-skill mentions (`subscription-cancel`, `subscription-update`, `subscription-sync`) are backticked prose names without paths — good structure with minor organization gaps (anchor 4).

4 / 5

Total

16

/

20

Passed

Description

65%Weight 40%Scale 1-5

Based on the skill's description, can an agent find and select it at the right time? Clear, specific descriptions lead to better discovery.

The description is specific and highly distinctive, with natural trigger terms for the Paddle-portal niche. Its main weakness is the missing "Use when..." clause — the "when to use" guidance exists only in the body, not the description — and the action list is one concrete action plus topic areas rather than multiple actions.

Suggestions

Add an explicit trigger clause, e.g. "Use when a signed-in user clicks 'Manage subscription' and you want Paddle to host the billing self-service UI".

Include a few more natural trigger phrases users would say, such as "manage subscription button", "billing portal", or "let users update their payment method / cancel their subscription".

Convert one or two of the trailing topic nouns ("auth", "ownership") into concrete actions, e.g. "authenticates the user and resolves their Paddle customer ID server-side".

DimensionReasoningScore

Specificity

"Mint a Paddle customer portal session URL from a Next.js Server Action" names the domain and one concrete action, but the trailing items ("auth, ownership, URL structure (overview vs deep links), and the security model") are topic nouns rather than additional specific actions, so coverage is not comprehensive as anchor 4 would require.

3 / 5

Completeness

The "what" is clear (mint a portal session URL from a Server Action), but there is no "Use when..." clause or equivalent explicit trigger guidance — the topic list describes the skill's contents, not usage conditions, which caps completeness at 3 per the judging guideline.

3 / 5

Trigger Term Quality

Natural terms users would say are present ("Paddle", "customer portal", "portal session", "billing screen", "Next.js Server Action"), but common variations like "manage subscription", "billing portal", or "self-service billing" are missing, so coverage is good rather than comprehensive.

4 / 5

Distinctiveness Conflict Risk

"Paddle customer portal session URL from a Next.js Server Action" carves a very narrow niche with distinct triggers, and it explicitly contrasts with the "portal-vs-custom-billing-screen" alternative, so conflict risk with other skills is minimal.

5 / 5

Total

15

/

20

Passed

Validation

100%

Checks the skill against the spec for correct structure and formatting. All validation checks must pass before discovery and implementation can be scored.

Validation — 16 / 16 Passed

Validation for skill structure

No warnings or errors.

Repository

PaddleHQ/paddle-agent-skills

Path

providers/claude/plugin/skills/customer-portal/SKILL.md

Reviewed

Table of Contents

Is this your skill?

If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.