From david-skills
Generates professional PDF invoices using maaslalani/invoice CLI. Store commands in Obsidian or notes for on-demand creation, regeneration, and management without saving files.
npx claudepluginhub thedavidweng/skillsThis skill uses the workspace's default tool permissions.
> Tool: [maaslalani/invoice](https://github.com/maaslalani/invoice) — Command line invoice generator
Guides Next.js Cache Components and Partial Prerendering (PPR): 'use cache' directives, cacheLife(), cacheTag(), revalidateTag() for caching, invalidation, static/dynamic optimization. Auto-activates on cacheComponents: true.
Processes PDFs: extracts text/tables/images, merges/splits/rotates pages, adds watermarks, creates/fills forms, encrypts/decrypts, OCRs scans. Activates on PDF mentions or output requests.
Share bugs, ideas, or general feedback.
Tool: maaslalani/invoice — Command line invoice generator
Check that invoice is available:
command -v invoice >/dev/null 2>&1 || { echo "ERROR: invoice CLI not installed"; exit 1; }
| Method | Command | Requires |
|---|---|---|
| Homebrew (recommended on macOS) | brew install invoice | Homebrew |
| Go install | go install github.com/maaslalani/invoice@main | Go 1.19+ |
| Binary download | Download from GitHub Releases | — |
Note: The Go install path uses
@main, not@latest. This is per the upstream README.
invoice --help
invoice generate \
--from "Sender Name" \
--to "Recipient Name/Company" \
--item "Description" --quantity <N> --rate <PRICE> \
[--item "Another item" --quantity <N> --rate <PRICE>] \
[--tax <DECIMAL>] \
[--discount <DECIMAL>] \
[--note "Additional notes"] \
[--output <path.pdf>]
| Flag | Required | Description |
|---|---|---|
--from | Yes | Sender name or business |
--to | Yes | Recipient name or business |
--item | Yes (1+) | Line item description. Repeat with --quantity and --rate for each item |
--quantity | Yes | Quantity for the preceding --item |
--rate | Yes | Unit price for the preceding --item |
--tax | No | Tax rate as decimal (e.g., 0.13 for 13%) |
--discount | No | Discount rate as decimal (e.g., 0.15 for 15%) |
--note | No | Footer note (e.g., payment terms) |
--output | No | Output path (default: invoice.pdf in current directory) |
--import | No | Import data from a JSON or YAML file (see Import from file) |
invoice generate \
--from "Jane Smith" \
--to "Acme Corp" \
--item "Web Development" --quantity 40 --rate 75 \
--item "Design Consultation" --quantity 8 --rate 100 \
--tax 0.05 \
--note "Payment due within 30 days. E-transfer preferred."
For complex invoices, use --import with a JSON or YAML config:
invoice generate --import data.json --output my-invoice.pdf
Example data.json:
{
"from": "Jane Smith",
"to": "Acme Corp",
"tax": 0.05,
"items": ["Web Development", "Design Consultation"],
"quantities": [40, 8],
"rates": [75, 100]
}
invoice generate commandopen invoice.pdf (macOS)Just re-run the stored command. The PDF is recreated identically.
The user stores invoice commands in their note-taking app. Example Obsidian note:
## Invoices
### 2026-04 — Acme Corp
```bash
invoice generate \
--from "Jane Smith" \
--to "Acme Corp" \
--item "Web Development" --quantity 40 --rate 75 \
--item "Design Consultation" --quantity 8 --rate 100 \
--tax 0.05 \
--note "Payment due within 30 days."
```
### 2026-03 — Beta LLC
```bash
invoice generate \
--from "Jane Smith" \
--to "Beta LLC" \
--item "Monthly Retainer" --quantity 1 --rate 2000 \
--tax 0.12 \
--note "March 2026 retainer."
```
Each code block is a complete, self-contained invoice. Copy-paste and run.
invoice.pdf in the current working directory--output to specify a different path or filenameThe invoice CLI supports environment variables for repeated sender info:
| Variable | Description |
|---|---|
INVOICE_FROM | Default sender name |
INVOICE_TO | Default recipient name |
INVOICE_LOGO | Path to logo image (PNG) to include on invoice |
INVOICE_TAX | Default tax rate (decimal) |
INVOICE_RATE | Default unit rate |
export INVOICE_FROM="Jane Smith"
export INVOICE_LOGO=/path/to/logo.png
export INVOICE_TAX=0.05
export INVOICE_RATE=75
When set, these become defaults that can be omitted from individual commands.
Do NOT forget --quantity and --rate after each --item — they are required per item
Do NOT use percentage for --tax — use decimal (0.13, not 13)
Do NOT use percentage for --discount — use decimal (0.15, not 15)
Do NOT omit --from or --to — both are required