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

63

Quality

79%

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

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 exemplary action-focused skill body: complete executable code, explicit security reasoning (server-side customer-id resolution, ownership check before invoice fetch), and a thorough verification checklist. Its weaknesses are redundancy — several pitfalls restate points already made in earlier sections and code comments — and the absence of any progressive-disclosure split, keeping 450 lines monolithic when the status table and currency deep-dive would fit reference files.

Suggestions

Deduplicate the Common pitfalls section: the customerId-filter, zero-decimal-currency, formattedTotals, and eager-pagination pitfalls each restate points already made in the explainer sections or code comments — tighten each to a one-line cross-reference or keep only the pitfall framing, not the full re-explanation.

Offload the status-filter table and the full parse-money/currency deep dive into a references/ file (e.g., references/formatting.md), keeping SKILL.md's inline section to the two-step rule plus a pointer — this would cut the main body substantially while preserving detail on demand.

Move the Supabase helper implementations into a reference or scripts file since the skill only needs their contract (session client vs. cookie-less admin client), not the full @supabase/ssr boilerplate.

DimensionReasoningScore

Conciseness

Nearly all content is skill-specific knowledge Claude cannot know (collection semantics, zero-decimal currencies, invoice availability rules), with no padding about Next.js or Paddle basics. However, several points are repeated across sections — the mandatory customerId filter appears in the SDK explainer, code comments, and twice in Common pitfalls; zero-decimal currency handling appears in three places; the don't-loop-hasMore advice is given twice — so the body could be meaningfully tightened. This fits 'mostly efficient but could be tightened' better than the 'minor instances' of anchor 4.

3 / 5

Actionability

Fully executable, copy-paste-ready code throughout: the complete Server Action with auth and customer-id resolution, both Supabase client helpers, the full parse-money.ts utility with the currency-API fallback, the client component with Load-more and invoice download, and the exact env-var block. All common cases are covered with runnable code.

5 / 5

Workflow Clarity

The multi-step process is clearly sequenced (prerequisites → SDK semantics → server action → invoice action → formatting → pagination), and the 8-step 'Verify the integration' checklist provides explicit validation checkpoints including the critical cross-customer scoping test, logged-out behavior, and cursor advancement. This is feedback-loop-grade validation, not implicit.

5 / 5

Progressive Disclosure

No bundle files exist; all 453 lines live in SKILL.md. Reference-shaped material — the status-filter table, the full currency-conversion deep dive, and the client component — is inlined rather than offloaded to reference files, though sections are well-headed with clear internal navigation and a clean 'Related docs' section. This fits 'some content that should be separate is inline' better than the minimal-structure anchor 2 or the 'mostly offloaded' anchor 4.

3 / 5

Total

16

/

20

Passed

Description

71%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, technically dense description that clearly communicates what the skill does at the capability level. Its main weaknesses are the complete absence of a 'Use when…' trigger clause (which caps completeness) and missing common synonyms like 'invoices' and 'payments' that users would naturally say.

Suggestions

Add an explicit 'Use when…' clause (e.g., 'Use when adding a billing history, invoices, or payments section to the authenticated user's account page in a Next.js app using Paddle') to satisfy the trigger-guidance requirement and lift completeness.

Include natural user synonyms such as 'invoices', 'payments', and 'charges' alongside 'billing history' to broaden trigger-term coverage.

Add a brief differentiator (e.g., 'the read/view side of transaction data — not the hosted customer portal') to reduce overlap with the customer-portal skill at the description level.

DimensionReasoningScore

Specificity

The description lists multiple concrete capabilities — "listing transactions via the Paddle Node SDK", "the mandatory customer-id filter", "pagination via .next()/.hasMore", "on-demand invoice PDF links", and the "zero-decimal currency special case for JPY/KRW/VND/CLP" — with no meaningful gaps in coverage of what the skill does.

5 / 5

Completeness

The 'what' is explicit and concrete, but there is no 'Use when…' clause or equivalent trigger guidance anywhere in the description, which caps completeness at 3 per the judging guidelines. The 'when' is only weakly implied by the domain phrasing.

3 / 5

Trigger Term Quality

Natural phrases like "billing history", "transactions", "invoice PDF", "Next.js", and "Paddle" are present, but common user synonyms such as standalone "invoices", "payments", or "charges" are missing. This fits the 'good keyword coverage; a few natural terms missing' anchor better than comprehensive anchor 5.

4 / 5

Distinctiveness Conflict Risk

The Paddle + Next.js + billing-history niche is well-defined with distinct technical triggers, but the sibling customer-portal skill also covers viewing billing history/invoices, so a request like 'show my invoices' could route to either skill — minor overlap risk with a closely related skill.

4 / 5

Total

16

/

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

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.