CtrlK
BlogDocsLog inGet started
Tessl Logo

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, and formatting raw transaction totals (lowest-unit conversion + Intl.NumberFormat, with the zero-decimal currency special case for JPY/KRW/CLP).

65

Quality

78%

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

Fix and improve this skill with Tessl

tessl review fix ./skills/billing-history/SKILL.md
SKILL.md
Quality
Evals
Security

Quality

Content

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

The content is highly actionable with complete executable code and an explicit verification checklist, and it is well-structured for navigation. Its main weakness is redundancy between the 'Common formatting traps' and 'Common pitfalls' sections.

Suggestions

Merge 'Common formatting traps' into 'Common pitfalls' (or vice versa) to eliminate the duplicated zero-decimal-currency, manual-summing, and formattedTotals-on-Transaction points.

State the 'don't loop while (collection.hasMore) server-side' guidance once — it currently appears in the code comments, the Pagination section, and Common pitfalls.

Consider moving the status-filter reference table and/or the parse-money helpers into a reference file so the main SKILL.md stays a lean overview, enabling clearer progressive disclosure.

DimensionReasoningScore

Conciseness

The body is mostly efficient and avoids beginner-concept padding, but several points are repeated across sections — the JPY/KRW/CLP branch, manual line-item summing, and the `formattedTotals`-on-Transaction trap each appear in both 'Common formatting traps' and 'Common pitfalls', and the 'don't loop hasMore' guidance is stated three times.

3 / 5

Actionability

Provides fully executable, copy-paste-ready TypeScript: the complete `getBillingHistory` Server Action, the `convertAmountFromLowestUnit`/`formatMoney`/`parseMoney` helpers, and a client `BillingHistory` component with load-more, covering the common cases.

5 / 5

Workflow Clarity

The Server Action is a clearly numbered 5-step sequence and the 'Verify the integration' section supplies an explicit 7-point checklist including a critical cross-customer security check, giving validation checkpoints and feedback loops.

5 / 5

Progressive Disclosure

No bundle files exist, so everything is inline, but the body is well-organized with clear section headers and one-level-deep, clearly signaled references to sibling skills and external docs; minor organization gaps come from the overlapping traps/pitfalls sections that could be consolidated.

4 / 5

Total

17

/

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.

The description is specific, distinctive, and covers the skill's actions comprehensively, but it lacks an explicit 'Use when...' trigger clause, which caps completeness. Adding a natural-language trigger with synonyms would round it out.

Suggestions

Add an explicit 'Use when...' clause naming the scenario, e.g. adding a billing history / invoices / payment history section to an authenticated user's account page.

Include a few natural synonyms users might say ('invoices', 'payment history', 'charges') alongside 'billing history' and 'transactions' to broaden trigger coverage.

Trim the inline SDK mechanics (`.next()`/`.hasMore`, lowest-unit conversion) from the description so the trigger phrasing stays scannable.

DimensionReasoningScore

Specificity

Lists multiple concrete actions — listing transactions via the Paddle Node SDK, the mandatory customer-id filter, pagination via `.next()`/`.hasMore`, status filtering, and currency formatting with the JPY/KRW/CLP special case — giving comprehensive coverage.

5 / 5

Completeness

The 'what' is clearly and comprehensively stated, but there is no explicit 'Use when...' trigger clause, so per the rubric completeness is capped at 3.

3 / 5

Trigger Term Quality

Includes natural terms like 'billing history' and 'transactions' alongside SDK specifics, but misses common synonyms a user might say such as 'invoices', 'payment history', or 'charges'.

4 / 5

Distinctiveness Conflict Risk

The description carves a clear niche — rendering Paddle billing history in Next.js with a mandatory customer-id filter and zero-decimal currency handling — with distinct triggers and minimal conflict risk.

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.

Validation16 / 16 Passed

Validation for skill structure

No warnings or errors.

Repository
PaddleHQ/paddle-agent-skills
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.