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, and formatting raw transaction totals (lowest-unit conversion + Intl.NumberFormat, with the zero-decimal currency special case for JPY/KRW/CLP).
57
65%
Does it follow best practices?
Impact
—
No eval scenarios have been run
Passed
No known issues
Optimize this skill with Tessl
npx tessl skill review --optimize ./skills/billing-history/SKILL.mdQuality
Discovery
67%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 excels at specificity and distinctiveness, providing extremely detailed implementation-level information about Paddle billing history rendering in Next.js. Its main weaknesses are the absence of an explicit 'Use when...' clause and a reliance on implementation jargon over natural user trigger terms. Adding trigger guidance and more user-facing language would significantly improve skill selection accuracy.
Suggestions
Add an explicit 'Use when...' clause, e.g., 'Use when the user needs to display billing history, payment transactions, or invoices using Paddle in a Next.js application.'
Include more natural user-facing trigger terms such as 'invoices', 'payment history', 'billing page', 'Paddle integration', and 'subscription payments' to improve matching against how users actually phrase requests.
| Dimension | Reasoning | Score |
|---|---|---|
Specificity | The description lists multiple specific concrete actions: rendering billing history, listing transactions via Paddle Node SDK, customer-id filtering, pagination via .next()/.hasMore, status filtering, and formatting raw transaction totals with lowest-unit conversion, Intl.NumberFormat, and zero-decimal currency handling for JPY/KRW/CLP. | 3 / 3 |
Completeness | The description clearly answers 'what does this do' with extensive detail about capabilities, but it lacks an explicit 'Use when...' clause or equivalent trigger guidance explaining when Claude should select this skill. Per the rubric, a missing 'Use when...' clause caps completeness at 2. | 2 / 3 |
Trigger Term Quality | It includes relevant technical keywords like 'billing history', 'Next.js', 'Paddle Node SDK', 'transactions', 'pagination', 'Intl.NumberFormat', and specific currencies. However, it lacks common natural user phrases — a user might say 'show invoices', 'payment history', 'billing page', or 'Paddle integration' which aren't all covered, and some terms are very implementation-specific rather than what users would naturally say. | 2 / 3 |
Distinctiveness Conflict Risk | This description is highly specific to a narrow niche: Paddle billing history in Next.js with very particular implementation details (customer-id filter, .next()/.hasMore pagination, zero-decimal currencies). It is very unlikely to conflict with other skills. | 3 / 3 |
Total | 10 / 12 Passed |
Implementation
62%Reviews the quality of instructions and guidance provided to agents. Good implementation is clear, handles edge cases, and produces reliable results.
The skill is highly actionable with excellent executable code examples and a thorough verification checklist, but it is severely undermined by verbosity and redundancy. The same critical points (zero-decimal currencies, customerId filter, TransactionCollection not being an array) are repeated 3-4 times across different sections. Trimming the redundancy and extracting the lengthy pitfalls/traps into a separate reference file would significantly improve token efficiency without losing any value.
Suggestions
Consolidate the repeated warnings about zero-decimal currencies (JPY/KRW/CLP) into a single location — currently stated in the Server Action comments, 'Display' section, 'Common formatting traps', and 'Common pitfalls'.
Merge 'Common formatting traps' into 'Common pitfalls' since they overlap significantly, and reduce both to a concise bullet list without explanatory paragraphs for each point.
Remove the 'Should you build this yourself?' section — Claude can determine applicability from context without being told when not to use a skill.
Remove or drastically shorten the 'How paddle.transactions.list works' preamble section — the full Server Action that follows already demonstrates all the same points with executable code.
| Dimension | Reasoning | Score |
|---|---|---|
Conciseness | The skill is extremely verbose at ~300+ lines. It repeats the zero-decimal currency caveat (JPY/KRW/CLP) at least four separate times across different sections. The 'Common pitfalls' section largely restates points already made inline (e.g., customerId filter importance, TransactionCollection not being an array, formattedTotals not existing on Transaction). The 'Should you build this yourself?' and 'Common formatting traps' sections explain things Claude can infer. Significant token waste through redundancy. | 1 / 3 |
Actionability | The skill provides fully executable, copy-paste-ready code: a complete Server Action with type definitions, a utility module for currency formatting, and a client component for pagination. Commands, type shapes, and API patterns are all concrete and specific rather than abstract. | 3 / 3 |
Workflow Clarity | The verification section provides a clear 7-step checklist covering happy path, empty state, unauthenticated state, security validation (cross-customer leakage), and pagination. The Server Action itself is numbered with inline comments explaining each step's purpose. Validation checkpoints are explicit, including the critical security check in step 6. | 3 / 3 |
Progressive Disclosure | The skill references related skills (subscription-sync, webhooks, customer-portal, pricing-pages) and external docs, which is good. However, with no bundle files, all content is inlined in a single monolithic document. The status filter table, common pitfalls, and formatting traps sections could be separated. The content that is present is reasonably well-organized with clear headers, but the sheer volume inline hurts this score. | 2 / 3 |
Total | 9 / 12 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 — 11 / 11 Passed
Validation for skill structure
No warnings or errors.
86596b3
Table of Contents
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.