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.

61

Quality

77%

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/cursor/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

77%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.

This is a strong, highly actionable skill body: the Server Action is complete and executable, the security model and pitfalls sections are specific and correct, and the verification checklist provides genuine feedback loops. The main weaknesses are token weight from inlined peripheral material (Supabase helpers, the trade-off essay) that would be better placed in reference files or trimmed.

Suggestions

Move the two Supabase client helper implementations into a references/ file (or trim to a note pointing at the starter-kit pattern) — they are peripheral glue code, not portal logic.

Compress the portal-vs-custom comparison table and 'Should you use the portal at all?' prose into a short decision summary with a pointer, reclaiming a large share of the body's token budget.

Extract the per-URL API detail (e.g. the view_subscription / direct-POST workaround, the 25-ID limit rules) into a compact reference table so the main body stays a lean overview.

DimensionReasoningScore

Conciseness

The body is mostly efficient and skill-specific, but the two full Supabase client helper implementations, the lengthy portal-vs-custom comparison table, and extended prose around known concepts (e.g. service-role/RLS behavior) could be tightened or externalized. This fits "mostly efficient but includes some unnecessary explanation or could be tightened" rather than the minor-trimmings-only bar for a 4.

3 / 5

Actionability

Provides a complete, copy-paste-ready Server Action with imports, typed error handling for both ApiError and the no-customer case, a working client component, env var configuration, and Supabase helpers — covering the common cases end to end. Fully executable with no gaps.

5 / 5

Workflow Clarity

The sequence (prerequisites → session semantics → full action → security model → pitfalls → verification) is clear, with an explicit 6-step "Verify the integration" checklist covering success, uniqueness-per-click, unauthenticated, no-customer, and ownership-escalation cases. Not a destructive or batch operation, so the validation cap does not apply.

5 / 5

Progressive Disclosure

Sections are well-organized with clear headers and outbound links to Paddle docs, but this is a ~240-line single file with no bundle files; content that would sit better in references (Supabase helpers, the portal-vs-custom comparison, the view_subscription API detail) is inlined. Fits anchor 3 ("some structure... content that should be separate is inline"); the under-50-line simple-skill exception does not apply.

3 / 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 communicates a crisp, distinctive capability with a concrete primary action, but it reads more like a table of contents (topic labels) than an action list, and it entirely lacks a "Use when..." trigger clause. Adding explicit usage triggers and a couple more user-facing action phrases would materially improve it.

Suggestions

Add an explicit trigger clause, e.g. "Use when the user wants to send customers to Paddle's hosted billing portal (manage subscription, view invoices, update payment methods, cancel) from a Next.js app."

Replace topic labels ("auth, ownership, URL structure... and the security model") with concrete action phrasings users would recognize, such as "authenticate the user, resolve their Paddle customer ID, and return a redirect URL (overview or per-subscription deep link)".

Include natural synonyms users actually say — "billing portal", "manage subscription", "Paddle dashboard" — to strengthen trigger-term coverage.

DimensionReasoningScore

Specificity

The description names one concrete action ("Mint a Paddle customer portal session URL from a Next.js Server Action") and then lists topic facets ("the portal-vs-custom-billing-screen trade-off, auth, ownership, URL structure... and the security model") rather than additional concrete actions. This matches the anchor for naming the domain with 1-2 concrete actions but not comprehensive coverage; score 4 would require several specific actions listed.

3 / 5

Completeness

The "what" is clear (mint a portal session URL via a Server Action), but there is no "Use when..." clause or equivalent explicit trigger guidance, which caps completeness at 3 per the judging guidelines. Not score 2 because the "what" is concrete and specific rather than vague.

3 / 5

Trigger Term Quality

Includes good natural keywords a user would say — "Paddle", "customer portal", "billing screen", "session URL" — but misses common phrasings like "manage subscription", "billing portal", "invoices", or "cancel subscription". Good coverage with a few natural terms missing fits between anchors 3 and 4, noticeably above the midpoint.

4 / 5

Distinctiveness Conflict Risk

The niche is unambiguous — Paddle customer portal session minting in a Next.js Server Action — and the phrase "the portal-vs-custom-billing-screen trade-off" explicitly delineates it from sibling custom-billing skills. Minimal conflict risk with clear distinct triggers.

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/cursor/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.