Skip to content
Back to skills

Ratecard

ASecurity

Generate professional rate card document from service definition with pricing validation

  • 25 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added June 2, 2026
businessjavascriptjava

Works with

  • cli
  • mcp

Security analysis

A100/100

Scanned June 2, 2026

npx -y skills add reggiechan74/JobOps --skill ratecard --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Ratecard?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Ratecard
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/reggiechan74-ratecard/badge)](https://www.skillsdirectory.com/skills/reggiechan74-ratecard)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: ratecard
description: Generate professional rate card document from service definition with pricing validation
disable-model-invocation: true
---

## Configuration

Read `.jobops/config.json`. If missing, stop with:

> JOBOPS NOT CONFIGURED
> Run /jobops:setup (then /jobops-ic:setup) to initialize your workspace.

Use `config.directories.contractor_root` for output paths in this skill.
Use `config.preferences.default_currency` for pricing if applicable.

## Arguments

Generate professional rate card from service definition with pricing validation.

- `$1`: Format (default: md): `md` | `pdf` | `html`
- `$2`: Currency (default: CAD): `CAD` | `USD`
- `$3`: `--include-justification` to add credentials/ROI section

---

## Phase 1: Validate Prerequisites

### 1.1 Find and Load Service Definition

Find most recent: `{config.directories.contractor_root}/services/service_definition_*.md`

**If not found:**
```
PREREQUISITE MISSING: Service Definition

Run /defineservices first to create service catalog and pricing.
```

**Load and validate:**
- rate_card (hourly/daily rates for minimum/target/premium tiers)
- consultant identity (name, tagline, credentials)
- services catalog (>=1 service)
- payment_terms

**If rate_card missing:**
```
INVALID SERVICE DEFINITION: Missing Rate Card

Required structure:
## Rate Card
### Hourly Rates
- **Minimum**: $[X]/hr
- **Target**: $[Y]/hr
- **Premium**: $[Z]/hr
### Daily Rates
- **Minimum**: $[A]/day
- **Target**: $[B]/day
- **Premium**: $[C]/day

Fix with: /defineservices --update
```

### 1.2 Load Source Data (if --include-justification)

For rate-card generation, read these source files:
- `Preferences/Vision.md` — explicit rate preferences if user has stated them (overrides market research)
- `Technology/TechStack.md` — identify Expert-level skills (judged in-context from WorkHistory mentions, not from a precomputed enum)
- `Technology/Certifications.md` — Active certifications only
- `WorkHistory/*.md` — for years of experience, leadership scope, budget magnitude

Compute `years_total_experience` from earliest WorkHistory Start date to today. Do NOT load `candidate_profile.json` — removed in v2.2.0.

- If source files missing: Warn but continue without justification section

---

## Phase 2: Pricing Validation

### 2.1 Validation Checks

**Check 1: Daily Rate Consistency**
- Rule: `daily_rate ~ hourly_rate x 8` (+/-10% tolerance)
- If fails: Offer auto-correction or keep with explanation

**Check 2: Rate Tier Progression**
- Rule: `minimum < target < premium` (both hourly and daily)
- If fails: Refuse generation, require manual fix

**Check 3: Premium Multiplier**
- Rule: `1.3x <= premium/target <= 2.0x`
- If outside: Advisory warning only, continue

**Check 4: Retainer Discounts (if applicable)**
- Rule: Discounts increase with commitment length
- Warn if discount <5% or >40%

### 2.2 Validation Summary

Display results:
```
PRICING VALIDATION COMPLETE
- Daily rates align with hourly x 8
- Rate tiers ascending
- Premium multiplier reasonable (1.3x-2.0x)
[Advisory warnings if any]
[Auto-corrections if any]
```

---

## Phase 3: Generate Rate Card

### 3.1 Parse Arguments

- Format: Default md, fallback to md if invalid
- Currency: Default CAD, assume CAD if unspecified in service definition
- Justification: Check for `--include-justification` flag

### 3.2 Currency Conversion (if needed)

If output currency != service definition currency:
1. Web search for current CAD/USD exchange rate
2. Convert all monetary values
3. Add footnote with conversion rate and date

### 3.3 Markdown Rate Card Structure

**YAML Frontmatter:**
```yaml
consultant: "[Name]"
effective_date: [YYYY-MM-DD]
valid_until: [+6 months]
currency: [CAD|USD]
generated_on: [ISO8601]
pricing_validated: [true/false]
source_definition: "{config.directories.contractor_root}/services/service_definition_[Date].md"
```

**Sections:**

1. **Header**: Consultant name, tagline, credentials
2. **Service Offerings**: Top 5 services with descriptions, deliverables
3. **Engagement Models & Rates**:
   - Hourly: Standard/Premium with use cases, minimum engagement
   - Daily: Standard/Premium (8-hour equivalents)
   - Retainer (if applicable): Part/half/full-time with effective rates and discounts
   - Project-Based (if applicable): Typical ranges by service type
4. **Volume & Term Discounts**: 3/6/12-month retainer, project thresholds, referrals
5. **Expense Policy**: Included (standard tools, local travel) vs. Billed separately (travel, specialized licenses)
6. **Terms & Conditions**:
   - Payment terms (retainers, projects, hourly, late fees)
   - Cancellation policy (30-day notice retainers, prorated projects, 48-hour session notice)
   - Confidentiality & IP (standard confidentiality, work product ownership, anonymized case studies)
   - Rate validity (6 months, annual review)
7. **Why These Rates?** (if --include-justification):
   - Credentials (certifications, years experience, publications, speaking)
   - Proven ROI (top 3-5 proof points with business impact)
   - Unique value proposition
8. **Contact & Next Steps**: Contact details, 4-step engagement process
9. **Footer**: Version, generation date, source file

Save to: `{config.directories.contractor_root}/rate-cards/rate_card_[YYYYMMDD].md`

---

## Phase 4: HTML/PDF Generation (if requested)

### 4.1 HTML Template

**CSS Styling (embedded):**
- Professional B2B aesthetic: Blue (#2c5282) gradient header, clean tables
- Layout: 900px container, 2.5rem content padding
- Typography: System fonts, 1.6 line-height
- Tables: Header (#2c5282), alternating row backgrounds
- Print styles: Letter size, 0.75in margins, page-break-avoid for headings/tables

**HTML Structure:**
- Header: Gradient background with name/tagline/credentials
- Content sections: Parse markdown to HTML with styled classes
- Contact: Gray background callout box
- Footer: Metadata (version, date, source)

### 4.2 PDF Generation with Playwright

If format is `pdf`:

1. Save HTML to `/tmp/ratecard_temp_[timestamp].html`
2. Navigate: `mcp__playwright__browser_navigate` to `file://[tmp_html]`
3. Wait: 2 seconds for content load
4. Generate PDF via `browser_run_code`:
   ```javascript
   await page.pdf({
     path: '{config.directories.contractor_root}/rate-cards/rate_card_[YYYYMMDD].pdf',
     format: 'Letter',
     printBackground: true,
     margin: { top: '0.75in', bottom: '0.75in', left: '0.75in', right: '0.75in' }
   });
   ```
5. Close browser and cleanup temp file

**If PDF fails:** Fallback to HTML with manual conversion instructions

If format is `html`:
- Save to `{config.directories.contractor_root}/rate-cards/rate_card_[YYYYMMDD].html` and skip Phase 5

---

## Phase 5: Final Report

### 5.1 Success Report

```
PROFESSIONAL RATE CARD GENERATED

**Output:** {config.directories.contractor_root}/rate-cards/rate_card_[YYYYMMDD].[format] ([XX] KB)
**Source:** service_definition_[Date].md

**Pricing:**
Hourly: $[min]-$[premium]/hr ([Currency])
Daily: $[min]-$[premium]/day
[Retainer: $[min]-$[max]/mo]

**Services:** [X] offerings ([List names])

**Validation:**
- Daily = hourly x 8 (+/-10%)
- Tiers ascending
- Premium multiplier: [X.X]x
[Auto-corrections: [count] | Warnings: [count]]

**Validity:** [Start] to [End] (6 months)
[Currency conversion note if applicable]
[Credentials section if --include-justification]

**Next Steps:**
1. Review for accuracy
2. Customize: Company-specific terms, volume discounts, special tiers
3. Distribute: Email PDF, host HTML, include in proposals
4. Maintain: Quarterly reviews, annual updates
5. Related: /defineservices --update, /proposaltemplate, /findclient

**Rate Card Summary:**
================================================================
[CONSULTANT] | [CURRENCY] | VALID: [Start] to [End]
----------------------------------------------------------------
Hourly:    $[min]/hr | $[target]/hr | $[premium]/hr
Daily:     $[min]/day | $[target]/day | $[premium]/day
[Retainer: Part-time $[X]/mo, Half-time $[Y]/mo, Full-time $[Z]/mo]
----------------------------------------------------------------
PAYMENT: [Deposit]% upfront, Net [days] | MINIMUM: [hours]
================================================================
```

---

## Error Handling

**Missing Prerequisites:**
- No service definition -> Run /defineservices
- Missing rate_card section -> Show required structure, suggest /defineservices --update
- Missing source files (with --include-justification) -> Warn, continue without justification

**Validation Failures:**
- Invalid rate progression (min > target > premium) -> Refuse generation, require manual fix
- Daily != hourly x 8 (>10% variance) -> Offer auto-correction (yes/no/cancel)

**Generation Failures:**
- PDF generation fails -> Fallback to HTML with manual conversion instructions
- Currency conversion unavailable -> Keep original, warn user
- Invalid format -> Default to markdown

---

## Implementation Notes

**Pricing Validation Philosophy:**
- Auto-correct: Daily rate alignment, minor rounding
- Refuse: Rate progression violations, missing required fields
- Warn but continue: Premium multiplier outside 1.3x-2.0x, unusual retainer discounts

**Rate Card Best Practices:**
- 6-month validity, annual reviews
- Version control in YAML frontmatter
- Keep old versions for reference
- Professional B2B aesthetic: blue/gray, clean tables, generous whitespace

**Playwright PDF Pattern:** Same as /formatresume - HTML with embedded CSS -> temp file -> navigate -> page.pdf() -> cleanup

---

Now executing rate card generation with format `$1`, currency `$2`, and justification flag `$3`...

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.