npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

pitchlint

v0.1.3

Published

Lint your pitch deck before investors do — a no-AI CLI that audits your fundraising packet and generates an agent-readable sidecar (JSON + llms.txt + Markdown).

Downloads

578

Readme

pitchlint

Lint your pitch deck before investors do.

A no-AI CLI that audits your fundraising packet for missing investor-critical info and generates an agent-readable sidecar (JSON + llms.txt + Markdown) for DocSend, data rooms, and AI/VC workflows.

npx pitchlint audit

  pitchlint audit

  ✓ company.one_liner
  ✓ fundraising.target_raise
  ✓ fundraising.use_of_funds
  ✓ links.demo
  ✓ links.contact
  ✓ team.background
  ✖ growth_rate has no time period — got "14%", expected e.g. "14% MoM"
  ⚠ ICP too vague: "startups" — add company-size / segment / urgency
  ⚠ market.market_size has no source — add market_size_source (e.g. "Gartner 2023")

  1 error, 2 warnings, 6 passed  (9 rules)

  Audit failed. Fix errors before sending to investors.

Install

No install required. Just run:

npx pitchlint

Or install globally:

npm install -g pitchlint

Quick start

# 1. Create a blank deck.yml in your current directory
npx pitchlint init

# 2. Fill it in, then audit
npx pitchlint audit

# 3. Generate the agent-readable sidecar
npx pitchlint build

# 4. See what a great deck.yml looks like
npx pitchlint example

Commands

pitchlint init

Creates ./deck.yml from a blank template. Refuses to overwrite an existing file.

pitchlint audit

Runs all rules against deck.yml. Prints grouped output:

  • passes (green)
  • errors (red) — each with a specific fix hint
  • warnings (yellow) — worth fixing before sending

Exit code 1 if any error-severity rule fails. This makes it usable in CI and as a pre-send git hook.

pitchlint build

Generates ./deck-agent/ with four files:

./deck-agent/
  llms.txt              ← LLM-ingestible summary (llms.txt convention)
  deck.json             ← Full structured object
  metrics.json          ← Flat traction/numeric facts only
  investor-summary.md   ← Human-readable one-pager
  pitchlint build ✓

  Generated files:
    ./deck-agent/llms.txt
    ./deck-agent/deck.json
    ./deck-agent/metrics.json
    ./deck-agent/investor-summary.md

  Publish hint:
    Deck: https://docsend.com/view/your-deck
    Agent-readable: https://yourco.com/deck-agent/llms.txt

Builds even if audit has errors so you can iterate freely.

pitchlint example

Prints a fully-filled example deck.yml to stdout. Good for copy-pasting as a starting point.


deck.yml format

company:
  name:         "Acme AI"
  one_liner:    "We help Series A CFOs close their books 10x faster."
  category:     "B2B SaaS"
  stage:        "Seed"
  website:      "https://acme.ai"

fundraising:
  round:        "Seed"
  target_raise: "$2M"
  instrument:   "SAFE (post-money, $10M cap)"
  use_of_funds:
    - "Engineering — 3 hires (50%)"
    - "Sales & marketing (30%)"
    - "Ops / runway (20%)"

traction:
  mrr:          "$18,000"
  mrr_date:     "2024-03"        # required if mrr is set
  growth_rate:  "15% MoM"       # MUST include time period
  customers:    "12 paying"
  pilots:       "3 enterprise"

market:
  icp:              "CFOs at US SaaS companies with $5M-$50M ARR running NetSuite"
  pain:             "Month-end close takes 3 weeks; auditors demand manual reconciliation"
  competitors:
    - "Spreadsheets"
    - "Floqast"
  differentiation:  "Natively reads NetSuite journal entries - no CSV export required"
  market_size:      "$6B TAM"
  market_size_source: "Gartner CFO Tech Survey 2023"

team:
  - name:       "Jordan Kim"
    role:        "CEO & Co-founder"
    background:  "Ex-Intuit (TurboTax PM), 1 exit (FinancialOS to Xero)"

links:
  docsend:   "https://docsend.com/view/acme-seed-2024"
  demo:      "https://loom.com/share/acme-demo"
  calendly:  "https://calendly.com/jordan-acme"
  contact:   "[email protected]"

What the audit checks

Presence (error if missing):

  • company.one_liner
  • fundraising.target_raise
  • fundraising.use_of_funds (non-empty array)
  • links.demo
  • links.contact
  • Every team member has a non-empty background

Heuristics (regex/string matching — see limitations below):

  • traction.growth_rate must include a time period: MoM, YoY, WoW, monthly, annually, etc.
  • traction.mrr set but traction.mrr_date missing → error
  • market.icp matches a vague blocklist (smb, startups, everyone, b2b, saas...) → warning
  • market.competitors set but market.differentiation empty → warning
  • market.market_size set but market.market_size_source missing → warning

Honest limitations

pitchlint is a linter, not an AI. All checks are pattern-matching and heuristics:

  • A vague ICP like "fast-growing startups in regulated industries" will pass because it isn't on the blocklist. A human VC will see through it immediately.
  • Growth rate "14% MoM" passes the period check even if the 14% is fabricated.
  • The audit can't judge whether your one-liner is compelling, your market size is credible, or your team is fundable.

What pitchlint can do: catch the mechanical mistakes that make investors close the tab before they get to the substance — missing asks, dateless MRR, undifferentiated market positions, no demo link.

Think of it as spell-check, not a writing coach.


The sidecar (why deck-agent/)

VC platforms, AI deal-flow tools, and LLM research agents increasingly try to read startup data programmatically. A locked DocSend PDF gives them nothing. Publishing deck-agent/llms.txt at a stable URL lets any tool ingest your raise without you doing anything extra:

  • llms.txt — follows the llms.txt convention for LLM-readable docs
  • deck.json — full structured object for programmatic consumers
  • metrics.json — flat traction facts, easy to diff over time
  • investor-summary.md — human-readable one-pager for data rooms

Host ./deck-agent/ as a static directory at yoursite.com/deck-agent/.


CI / pre-send hook

# .github/workflows/deck-audit.yml
- run: npx pitchlint audit
# .git/hooks/pre-push (chmod +x)
#!/bin/sh
npx pitchlint audit

Exit code 1 on any error means the push or CI run fails until the deck is clean.


Security

  • No network calls. Ever.
  • No eval. YAML is parsed as data, never executed.
  • Output paths are resolved and validated to stay inside ./deck-agent/ — no path traversal via YAML fields.
  • All values are sanitized via JSON.stringify before appearing in generated files.

License

MIT