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

fork-you

v0.2.0

Published

Git-based CRM. Your pipeline lives in your repo.

Readme

fu 🤌

License

Git-based CRM. Your pipeline lives in your repo.


Why

Every CRM wants you to sign up, sync, pay, and pray your data doesn't get locked in.

What if your CRM was just files in a git repo?

.forkyou/
├── contacts/
│   └── abc123.json       ← one file per record
├── companies/
│   └── def456.json
├── deals/
│   └── ghi789.json
├── activities/
│   └── jkl012.json
└── tasks/
    └── mno345.json
  • Full history — git tracks every change, who made it, when
  • Team-friendly — one file per record means no merge conflicts
  • Works offline — it's just files
  • No vendor lock-in — it's just JSON
  • Agent-native — lives where agents live: in your repo, on the CLI

Installation

npm install -g fork-you  # installs the "fu" command

Quick Start

# Initialize CRM in your repo
fu init

# Add a company
fu company add --name "Acme Corp" --domain acme.com --industry SaaS

# Add a contact (use the company ID from above)
fu contact add --name "Jane Smith" --email [email protected] --role CTO --company <company-id>

# Create a deal
fu deal add --title "Enterprise License" --company <company-id> --contact <contact-id> --value 50000 --probability 60

# Log an activity
fu activity add --type call --subject "Discovery call" --contact <contact-id> --deal <deal-id>

# Add a follow-up task
fu task add --title "Send proposal" --contact <contact-id> --deal <deal-id> --due 2026-03-01

# Check the pipeline
fu pipeline
  Pipeline

  lead              —
  qualified         —
  proposal          ██ 1 deal(s)  $50,000  weighted: $30,000
  negotiation       —
  closed-won        —
  closed-lost       —

  Total: 1 deal(s)  $50,000  weighted: $30,000

For Agents

fu is designed to be used by agents. Onboard your agent:

fu onboard

This adds fu instructions to your CLAUDE.md or AGENTS.md, teaching your agent how to manage your CRM.

Every command supports --json for structured output:

fu contact list --json
{
  "success": true,
  "contacts": [
    {
      "id": "abc123",
      "name": "Jane Smith",
      "email": "[email protected]",
      "role": "CTO",
      "company": "def456"
    }
  ]
}

Agents can create contacts, log activities, move deals through the pipeline, and check status — all through CLI flags and JSON responses.


Commands

Contacts

fu contact add --name <n> [--email <e>] [--phone <p>] [--company <id>] [--role <r>]
fu contact list
fu contact show <id>
fu contact edit <id> [--name <n>] [--email <e>] [--phone <p>] [--company <id>] [--role <r>]
fu contact rm <id>
fu contact search <query>

Companies

fu company add --name <n> [--domain <d>] [--industry <i>] [--size <s>]
fu company list
fu company show <id>
fu company edit <id> [--name <n>] [--domain <d>] [--industry <i>] [--size <s>]
fu company rm <id>
fu company search <query>

Deals

fu deal add --title <t> [--company <id>] [--contact <id>]... [--stage <s>] [--value <v>] [--probability <p>] [--close-date <d>]
fu deal list
fu deal show <id>
fu deal edit <id> [--title <t>] [--stage <s>] [--value <v>] ...
fu deal move <id> <stage>
fu deal rm <id>
fu deal search <query>

Deals are grouped by pipeline stage. Move them forward:

fu deal move abc123 proposal
# ✓ Enterprise License: lead → proposal

Activities

fu activity add --type <call|email|meeting|note> --subject <s> [--body <b>] [--contact <id>] [--deal <id>] [--company <id>] [--date <d>]
fu activity list
fu activity show <id>
fu activity rm <id>

Tasks

fu task add --title <t> [--contact <id>] [--deal <id>] [--company <id>] [--due <date>]
fu task list
fu task done <id>
fu task rm <id>

Pipeline

fu pipeline              # Summary with deal counts, values, weighted forecast
fu pipeline --json       # Structured output

Config

fu config stages                              # Show pipeline stages
fu config stages --set lead,qualified,won,lost # Customize stages

Global Flags

All commands support:

--json          # Structured JSON output (for agents)
-q, --quiet     # Suppress output, use exit codes

How It Works

Storage

Every record is a single JSON file in .forkyou/:

{
  "id": "abc123",
  "name": "Jane Smith",
  "email": "[email protected]",
  "company": "def456",
  "role": "CTO",
  "created": "2026-02-17T15:00:00.000Z",
  "updated": "2026-02-17T15:00:00.000Z"
}

One file per record means two people editing different contacts never conflict in git. IDs are short random strings (nanoid), so renames don't change filenames.

Records reference each other by ID — a deal's contacts field is an array of contact IDs, a contact's company field is a company ID.

Querying

fu uses sql.js (SQLite compiled to WASM) as an in-memory query engine. On every command:

  1. Read all JSON files from .forkyou/
  2. Build an in-memory SQLite database
  3. Run the query
  4. Throw the database away

No cache, no sync, no stale data. git pull and you're immediately up to date. At CRM scale (hundreds to low thousands of records), this takes single-digit milliseconds.

Team Workflow

# Alice adds a contact
fu contact add --name "Bob Client" --email [email protected]
git add .forkyou/ && git commit -m "Add Bob Client"
git push

# Bob adds a deal (on another branch, no conflict)
fu deal add --title "Bob's Deal" --value 10000
git add .forkyou/ && git commit -m "Add deal"
git push

# No merge conflicts — different files entirely

Development

# Install dependencies
bun install

# Run locally
bun run src/main.ts --help

# Build single binary
bun run build

# Run tests
bun test

# Lint & format
bun run check

License

MIT