CtrlK
BlogDocsLog inGet started
Tessl Logo
SkillPublic

paddle-billing-history

Render the authenticated user's billing history in Next.js — listing transactions via the Paddle Node SDK, the mandatory customer-id filter, pagination via `.next()`/`.hasMore`, status filtering, on-demand invoice PDF links, and formatting raw transaction totals (lowest-unit conversion + Intl.NumberFormat, with the zero-decimal currency special case for JPY/KRW/VND/CLP).

64

Quality

81%

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide
SecuritybySnyk

Passed

No findings from the security scan

The canonical home for this skill is paddle-billing-history 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.

An excellent, fully executable single-file skill with an outstanding verification checklist, held back by token inefficiency (boilerplate and triple-repeated warnings) and a monolithic structure with zero reference files. The core Server Action guidance is among the strongest possible; the packaging around it could be tightened.

Suggestions

Deduplicate the zero-decimal-currency and mandatory-customerId warnings: keep each in one authoritative section (Common pitfalls) and reference it tersely elsewhere, and trim the @supabase/ssr boilerplate to the import plus a one-line note — this targets the conciseness score.

Move the Supabase helper implementations, parse-money.ts, and the client component into references/ files with clear 'See [X](references/x.md)' pointers from the body — this targets progressive_disclosure and further reduces tokens.

Give the cited sibling skills (subscription-sync, webhooks, customer-portal, pricing-pages) concrete paths or links so the pairing guidance is navigable rather than nominal.

DimensionReasoningScore

Conciseness

The body is expert-level and largely earns its tokens, but it inlines ~50 lines of @supabase/ssr client boilerplate Claude already knows, and repeats the zero-decimal-currency rule three times (the 'Common formatting traps' bullet is nearly duplicated verbatim in 'Common pitfalls') and the mandatory-customerId warning in four places. This matches 'mostly efficient but includes some unnecessary explanation or could be tightened' rather than the minor-instances 4 anchor.

3 / 5

Actionability

Fully executable, copy-paste-ready code throughout: the complete getBillingHistory Server Action, the getInvoiceUrl action with an ownership check, the full parse-money.ts utility (fetch + conversion + Intl formatting with fallbacks), and the client component with Load-more and invoice download. Specific examples cover the common cases, matching the 5 anchor.

5 / 5

Workflow Clarity

The main action sequences its steps explicitly (1. Authenticate → 2. Look up customer_id → 3. Resolve locale → 4. List scoped transactions → 5. Fetch one page → 6. Slim to DTO), and the 'Verify the integration' section is an 8-item validation checklist including the critical cross-customer security check, logged-out behavior, and cursor advancement. Clear sequence, explicit validation steps, and a checklist — the 5 anchor.

5 / 5

Progressive Disclosure

Section structure and headers are good and external links are one level deep, but there are no bundle/reference files at all: the Supabase helper implementations, the parse-money utility, and the client component (~150 lines) are inlined where a references/ file would fit, and sibling skills (subscription-sync, webhooks, customer-portal, pricing-pages) are cited without paths. This matches 'content that should be separate is inline' (3) rather than 'most content appropriately placed' (4).

3 / 5

Total

16

/

20

Passed

Description

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

A highly specific, capability-dense description with excellent distinctiveness, weakened only by the complete absence of a 'when to use this' trigger clause, which caps completeness. Adding one sentence of explicit trigger guidance would bring it to the top anchor level.

Suggestions

Append a 'Use when...' clause, e.g. "Use when adding a Billing history or Invoices section to an authenticated account page in a Next.js app using Paddle billing." — this addresses the completeness cap.

Include a few natural synonyms users might say, such as "receipts", "payments history", or "Invoices section", to strengthen trigger_term_quality from 4 to 5.

Keep the current capability list intact; it is the description's strongest asset and needs no trimming.

DimensionReasoningScore

Specificity

The description lists multiple concrete actions — "listing transactions via the Paddle Node SDK", "the mandatory customer-id filter", "pagination via .next()/.hasMore", "status filtering", "on-demand invoice PDF links", and "formatting raw transaction totals (lowest-unit conversion + Intl.NumberFormat, with the zero-decimal currency special case for JPY/KRW/VND/CLP)" — which matches the 'multiple specific concrete actions; comprehensive coverage' anchor. It fits the 5 anchor better than 4 because there are no real coverage gaps for this task.

5 / 5

Completeness

The 'what' is explicit and concrete (render billing history with listing, filtering, pagination, invoice links, and amount formatting), but there is no "Use when..." clause or equivalent explicit trigger guidance. Per the judging guidelines, a missing 'Use when' clause caps completeness at 3, which is exactly the 'clear what, when missing' anchor.

3 / 5

Trigger Term Quality

Natural phrases a user would say are present: "billing history", "invoice PDF", "transactions", "Next.js", "Paddle". It falls between the 3 anchor (missing common variations) and the 5 anchor (comprehensive synonyms/extensions) — good coverage but natural variants like "receipts", "payments page", or "Invoices section" are absent.

4 / 5

Distinctiveness Conflict Risk

The combination of Paddle, Node SDK, billing history, customer-id filter, and zero-decimal currency handling is a clear niche with distinct triggers and minimal conflict risk against generic rendering or document skills. It does not blur into sibling skill territory because it names its own specific mechanics rather than generic billing-UI language.

5 / 5

Total

17

/

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/billing-history/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.