PDF Generation pack
Claude Skill

Certificate Generator

Generates branded certificates of completion or participation. Recipient name, course, date, signatures.

What it does

Produces a single-page PDF certificate: recipient name (large, centered), course or event title, date, issuing organization, signature lines or signature images. Supports bulk generation from a CSV (one PDF per recipient) and optional unique verification codes / QR codes.

When to use

  • You ran a workshop / course / event and need to send certificates to attendees
  • Bulk certificate generation from a roster CSV
  • Internal recognition (training completed, milestone hit) where you want something printable

When not to use

  • Accredited certifications (ISO, CompTIA, AWS) — those have their own issuance systems with verification
  • Highly designed certificates with custom illustration — design tool, not this

Install

Download the .zip, then unzip into your Claude skills folder.

mkdir -p ~/.claude/skills
unzip ~/Downloads/certificate-generator.zip -d ~/.claude/skills/

# Restart Claude Code session.
# Skill is now available — Claude will use it when relevant.

SKILL.md

SKILL.md
---
name: certificate-generator
description: Use when generating a branded certificate PDF — completion, participation, recognition. Triggers on "generate a certificate", "certificate of completion", "bulk certificates from CSV".
---

# Certificate Generator

Generate single-page certificate PDFs. Most certificate templates look cheap because they over-design — fake gold seals, four fonts, clip-art ribbons. Restraint reads as legitimate.

## Required inputs

1. **Recipient(s)** — full name(s); CSV for bulk
2. **Certificate type** — "Certificate of Completion", "Certificate of Participation", "Certificate of Achievement"
3. **Course / event title** — exact wording
4. **Date** — issue date OR completion date
5. **Issuing organization** — name + optional logo
6. **Signature(s)** — names + titles of 1-2 signers; optional signature images
7. **Optional**: unique verification code per recipient, QR linking to a verification URL

If the user is generating for a public-facing course and there's no verification mechanism, recommend adding one. Certificates without verification are easy to forge and devalue the real ones.

## Approach

**Default**: HTML + print CSS via headless Chrome or WeasyPrint, landscape orientation. Best balance of design control and ease.

**For bulk**: template once, loop over CSV rows, output one PDF per row. Filename pattern: `Cert_FirstLast_CourseSlug_YYYY-MM-DD.pdf`.

**LaTeX**: `pdfpages` or a custom `tikz` template. More effort but gives you precise typography for engraved-feel layouts.

**Python alone**: ReportLab with a `canvas` for absolute positioning works well. Use this when you don't have a browser-rendering pipeline available.

## Structure

Landscape, single page. Visual hierarchy:

1. **Top band** — issuing organization logo + name (small, centered or top-left)
2. **Title** — "Certificate of Completion" in display type, ~36-48pt
3. **Awarded to** — small connector text, "This certificate is presented to" or "is awarded to"
4. **Recipient name** — LARGEST element, ~48-64pt, in a script or distinguished serif
5. **Connector** — "for successfully completing" or "in recognition of"
6. **Course / event title** — second-largest, ~24-32pt
7. **Date** — smaller, often italic
8. **Signature block** — 1 or 2 signature lines, side by side, with name + title under each
9. **Verification footer** (optional) — "Verify at example.com/verify/abc123" + QR code

## Style guidance

- Orientation: landscape. Default. Don't ship portrait certificates without a reason.
- Page size: US Letter (US) or A4 (rest of world). Match audience.
- Margins: generous — 20-25mm. The certificate "feels" expensive when there's air around the content.
- Border: subtle thin rule at 12-15mm from edge OR no border. Avoid clip-art borders, scrollwork, wreaths.
- Colors: 2 max + black + white. Navy + gold-ish accent works classically. Don't ACTUALLY use gold gradient — it always looks cheap in PDF.
- Fonts: 2 max. One display/serif for headlines and recipient name (Playfair, Cormorant, EB Garamond), one sans for metadata (Source Sans, Inter).
- Recipient name: should be visually dominant. If the longest expected name (say, 30 characters) doesn't fit at the chosen size, scale the name field dynamically to fit one line.
- No fake "seals" generated by AI image tools — they always look uncanny

## Bulk generation

When given a CSV:
1. Validate columns: at minimum, recipient name. Push back if columns missing.
2. Render one PDF per row.
3. Output a manifest: CSV with input data + output filename + verification code (if generated).
4. Optionally bundle into a ZIP.

For 100+ certificates, recommend rendering in parallel (each PDF is independent) — sequential takes minutes, parallel takes seconds.

## Verification (optional but recommended)

If verification is requested:
- Generate a unique short code per recipient (8-12 chars, base32-style, avoiding 0/O/1/I)
- Include it as text on the cert AND as a QR code linking to `https://your-domain/verify/<code>`
- Output a separate manifest (CSV: name, code, course, date) the user can host on a verification endpoint

If the user has no verification endpoint, mention this and offer to generate just the codes — the user can implement verification later.

## Common pitfalls

- **Long names truncated**: "Maximilianne Rasmussen-Aaltonen" doesn't fit at 60pt. Always test against the longest name in the CSV; scale font down or wrap to two lines.
- **Diacritics rendered as boxes**: ensure font supports the names' character set (Cyrillic, CJK, Vietnamese, etc.). Use a Unicode-complete font like Noto Serif if going global.
- **Date format inconsistency** between bulk runs: lock to ISO or "April 29, 2026" and lint.
- **Misspelled name**: ask the user to confirm spelling — even better, send a draft for the first 1-2 recipients before bulk generation.
- **PDF metadata gives it away**: set `/Title`, `/Author` to the issuing org. Don't leave the default "Untitled."
- **No backup of who got what**: the manifest is non-negotiable. You'll get re-issuance requests in 6 months.

## Output

For single: the PDF + a confirmation line ("Cert generated for [name], [course], [date]").

For bulk: ZIP of PDFs + manifest.csv. Final summary: how many generated, how many skipped (and why), any names that needed truncation/wrap, suggested next step (email blast, upload to LMS, etc.).

Example prompts

Once installed, try these prompts in Claude:

  • Generate certificates for these 40 attendees of our "Intro to Claude" workshop. CSV: [paste]
  • Build a single completion certificate for Jane Smith, "Advanced Prompting", April 2026, signed by [...]