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).

62

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 ./providers/cursor/plugin/skills/billing-history/SKILL.md

The canonical home for this skill is paddle-billing-history in PaddleHQ/paddle-agent-skills

SKILL.md
Quality
Evals
Security

Quality

Content

70%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 thorough, highly actionable skill whose Paddle-specific knowledge (security scoping, pagination semantics, currency formatting) is excellent and well-verified by an explicit integration checklist. Its weaknesses are repetition and inline boilerplate that inflate token cost, and the absence of any reference-file structure despite being well over 400 lines.

Suggestions

Move the two Supabase createClient helpers and the parse-money utility into a references/ (or shared) file, keeping SKILL.md to the action logic and a one-line pointer, which would improve both conciseness and progressive disclosure.

Consolidate the thrice-repeated zero-decimal-currency warning and the customerId-security emphasis into single authoritative sections (e.g. the pitfalls list) instead of restating them in the formatting traps, code comments, and pitfalls.

Define or inline the getPaddleInstance helper (or note it comes from the starter kit) so the Server Action code is fully copy-paste ready.

DimensionReasoningScore

Conciseness

Most content is high-value Paddle-specific knowledge Claude cannot infer (TransactionCollection semantics, customerId as a security guarantee, zero-decimal currencies, grandTotal vs total), but the ~45-line Supabase createServerClient boilerplate is a pattern Claude already knows, and the zero-decimal warning and customerId-security point are each repeated three times across sections, so it could be tightened.

3 / 5

Actionability

The skill provides complete, executable TypeScript with imports, error handling, and edge cases (auth failure, missing customer, formatting, pagination, invoice fetch), but getPaddleInstance is imported and never defined in the skill — it is only resolvable via the linked external starter kit — which is a minor gap keeping it from fully copy-paste-ready.

4 / 5

Workflow Clarity

The Server Action embeds a numbered 6-step sequence, and the 'Verify the integration' section is an explicit 8-point checklist including the critical cross-customer security test and the Forbidden invoice case, matching the anchor for clear sequencing with explicit validation steps and checklists.

5 / 5

Progressive Disclosure

Sections are well-organized with clear headers, but the skill is a monolithic ~450-line SKILL.md with no bundle files at all; ~150 lines of reusable utility code (the two Supabase client helpers, the parse-money module) that would serve better in shared reference files are fully inlined, matching the anchor of 'content that should be separate is inline'.

3 / 5

Total

15

/

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, distinctive description with concrete SDK-level actions and natural trigger phrases. Its one structural weakness is the absence of an explicit 'Use when...' trigger clause, which caps completeness and leaves a few natural synonyms uncovered.

Suggestions

Append an explicit trigger clause, e.g. 'Use when adding a billing history, invoices, or payment history section to a Next.js app using Paddle.'

Add natural synonyms users would say, such as 'payment history', 'charges', or 'receipts', to broaden trigger coverage.

Briefly disambiguate from the hosted alternative (e.g. 'for a self-hosted view; use customer-portal if Paddle should host it') to further reduce overlap with sibling skills.

DimensionReasoningScore

Specificity

The description lists multiple concrete, technically precise actions — 'listing transactions via the Paddle Node SDK', 'pagination via .next()/.hasMore', '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)' — comprehensively covering the skill's scope, matching the anchor for multiple specific concrete actions with comprehensive coverage.

5 / 5

Completeness

The 'what' is explicit and detailed (listing, filtering, pagination, invoice links, formatting), but there is no 'Use when...' clause or equivalent explicit trigger guidance — the 'when' is only weakly implied by 'Next.js' and 'authenticated user', which caps completeness at 3 per the judging guidelines.

3 / 5

Trigger Term Quality

Natural phrases users would say are present ('billing history', 'transactions', 'invoice PDF', 'Next.js', 'Paddle'), giving good keyword coverage, but common synonyms like 'payment history', 'charges', or 'receipts' are missing, so it falls short of the comprehensive-synonyms anchor.

4 / 5

Distinctiveness Conflict Risk

The combination of 'Paddle Node SDK', 'Next.js', 'billing history', and SDK-specific details like '.next()/.hasMore' and the JPY/KRW/VND/CLP special case carves out a clear niche with distinct triggers and minimal risk of firing the wrong skill.

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