Generate professional invoices for freelancers and contractors. Creates a polished HTML invoice with live preview and download button, saved to /invoices. Stores contractor info (company name, address, phone) in a config file so it's only entered once. Asks for client name, email, line items, and optional payment terms each time. Auto-numbers invoices per client (saleshood_001, saleshood_002, etc.) and auto-dates to today. Supports multiple languages and currencies. The user can customize the HTML template to match their brand. Use this skill whenever the user mentions invoice, billing, bill a client, send an invoice, create an invoice, contractor invoice, freelance billing, or wants to generate any kind of invoice document — even if they just say something like 'I need to bill my client' or 'charge for last month's work'.
Generate clean, professional invoices as self-contained HTML files with a live preview and a download-as-PDF button. Invoices are saved to a /invoices folder in the current working directory.
The skill uses two pieces:
invoice-generator.local.md in the project's .claude/ directory) that stores your company/contractor info so you don't have to re-enter it every time.assets/invoice-template.html bundled with this skill) that defines the look of the invoice. The user can swap this out or edit it to match their brand.Each time the skill runs, it reads the config, asks for the per-invoice details (client, items, amounts), fills in the template, and writes the final HTML file. Invoice numbers are auto-generated per client.
Look for a config file at .claude/invoice-generator.local.md in the current project directory. This file uses YAML frontmatter to store the contractor's reusable info.
If the file exists, read it and extract the frontmatter fields. Confirm with the user: "I'll use your saved info — [Contractor Name], [Company Name]. Sound good?"
If the file doesn't exist, tell the user: "No config found yet — let me set up your info once so future invoices are instant."
Then collect each field using AskUserQuestion, batching up to 4 questions per call. Run three calls sequentially:
Call 1 — locale & identity (4 questions):
country — "What country are you based in?" (header: "Country"). Options: "Mexico" (description: "MX — America/Mexico_City timezone"), "United States" (description: "US — America/New_York timezone"), "Spain" (description: "ES — Europe/Madrid timezone").language — "What language should invoices be written in?" (header: "Language"). Options: "Español" (description: "All labels in Spanish"), "English" (description: "All labels in English"), "Português" (description: "All labels in Portuguese").company_name — "What's your company or business name?" (header: "Company"). Options: examples like "Acme LLC", "Smith Consulting" — the user will pick Other and type their own.contractor_name — "What's your full name (as the contractor/sender)?" (header: "Name"). Options: examples like "Jane Smith", "John Doe".Call 2 — address & contact (4 questions):
street_address — "What's your street address?" (header: "Address"). Options: examples like "123 Main St", "456 Oak Ave".city_state_zip — "City, State and ZIP code?" (header: "City/ZIP"). Options: examples like "Austin, TX 78701", "Morelia, 58000, Michoacan, Mexico".phone — "What's your phone number?" (header: "Phone"). Options: examples like "+1 512-555-0100", "+52 443-555-0100".email — "What's your email address?" (header: "Email"). Options: examples like "[email protected]", "[email protected]".Call 3 — optional fields (2 questions):
fax — "Do you have a fax number?" (header: "Fax"). Options: "No fax" (description: "Skip this field"), "Yes, I have a fax number" (description: "I'll type it in").default_currency — "Which currency do you use?" (header: "Currency"). Options: "$ MXN" (description: "Mexican Peso"), "$ USD" (description: "US Dollar"), "€ EUR" (description: "Euro"), "£ GBP" (description: "British Pound").After collecting all answers, confirm the info back to the user in a summary and create the file:
---
company_name: "Acme Consulting LLC"
contractor_name: "Jane Smith"
street_address: "123 Main St"
city_state_zip: "Austin, TX 78701"