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 🙏

© 2024 – Pkg Stats / Ryan Hefner

crm-cli

v2.3.2

Published

Customers Relationship Management from your Terminal

Downloads

786

Readme

crm-cli

A command-line Customer Relationship Management software.

  • Works as a standalone local cli tool or client / server for multi-users
  • With or withhout a database, supporting:

Who is it for?

The geek entrepreneur.

Why?

  • You own your data.
  • Use an open text-based format:
    • JSON it is.
    • You can create custom reporting tools.
    • You can create your own integrations (import, export, ...)
  • Open-source:
    • The code is very concise, hack into it!

Installation

npm install -g crm-cli

Usage

Get into the directory where you want your data to be stored. Something shared on Dropbox (or whatever) is a good idea.

The run the bellow command to initialize your data file.

crm init-crm

This creates a file called crm.json in the current directory. You can change the path to that file using the DATABASE_JSON_FILE environment variable (example: DATABASE_JSON_FILE=/home/user/crm.json)

The full list of commands supported by the tool is available by just entering crm on the command line.

usage: crm COMMAND [filter]

Available commands:

 - reports:

    i,interactions ... list of interactions.
    com,companies .... list of companies.
    con,contacts ..... list of contacts.
    a,apps ........... list of apps.
    about ............ all we know about a contact / company.
    f,followup ....... list of required follow-up.

 - data entry:

    add-company ............ register a new company.
    add-contact ............ register a new contact.
    add-app ................ register a new app.
    add-i,add-interaction .. register a new customer interaction.

    edit-company .............. edit an existing company.
    edit-contact .............. edit an existing contact.
    edit-app .................. edit an existing app.
    edit-i,edit-interaction ... edit an existing interaction.
    done ...................... remove follow-up date from interaction.

 - email:

    template FILE .......... fill in values for an email template.
    template-help .......... show the list of template fields.

 - system:

    init-crm ........ create data file in current directory.

Non-local usage

CRM cli also features a client server architecture.

You can launch a server:

export SERVER_API_KEY=myapikey
export HOSTNAME=127.0.0.1 # that's the default
export PORT=3000
export DATABASE_URL=file://database.json
crm server

Then connect the CRM client to the server:

export DATABASE_URL=http://[email protected]:3000
# reset the database, or do whatever
crm init-crm

Notice that the CRM server doesn't support SSL, so it's strongly recommended you only expose it through a reverse proxy.

Docker

You can run the server with docker.

docker run -p 8000:80 --rm -it jeko/crm-server

To build the image:

docker build -t jeko/crm-server .

By default it will use a local crm.json file stored in a volume mounted in /app/data.

You can customize the database with the DATABASE_URL environment variable.

Note on filters

All reports commands accepts a filter argument, used to restrict the data display.

The filter is a fuzzy case-insensitive operator.

Examples:

  • crm about microsoft will show all data you have about Microsoft.
  • crm about marc twain will show all data you have about Marc Twain.

DATABASE_URL

The DATABASE_URL environment variable sets the connection to the database.

Possible values:

  • file://PATH/TO-FILE.json - Relative path to a JSON file
  • file:///PATH/TO-FILE.json - Absolute path to a JSON file
  • http://USER:API_KEY@HOST:PORT - URL to a CRM server (see "server" command)
  • couchdb://USER:PASSWORD@HOSTNAME:5984/DATABASE_NAME - CouchDB over HTTP
  • couchdbs://USER:PASSWORD@HOSTNAME:5984/DATABASE_NAME - CouchDB over HTTPS
  • memory:// - Non-persistent in-memory database (for testing)

Best practices

  • Put the crm.json file in version control.

Template emails

Here is how I use the template feature.

I create a file that contains the headers and body of an email (see templates/subscriber-followup.txt for an example)

To initiate an email to our newly subscribed customer (Microsoftware in this example):

crm template tempates/fup-registration.txt Microsoftware > email.txt
neomutt -H email.txt

This will open a Draft in mutt with all fields replaced.

I guess not everyone uses neomutt, but it's easy to adjust to your need. You can simply paste the output of the crm template command and compose your email from gmail or whatever.

Data format

crm.json contains JSON formatted data.

The root element is an array of Companies.

Company

A Company has the following attributes:

  • name: string
  • url: string
  • address: string
  • contacts: array of Contacts
  • interactions: array of Interactions
  • apps: array of Apps

Contact

A Contact has the following attributes:

  • firstName: string
  • lastName: string
  • role: string
  • email: string

The email field is considered a primary key. Should appear in only 1 Contact across all Companies.

Interaction

An Interaction has the following attributes:

  • kind: string -- the type of interaction (email, github, automated, ...)
  • date: string -- date of the interaction (anything javascript Date constructor can parse)
  • from: string -- email address of the contact
  • summary: string -- short summary of the interaction
  • content: string (optional) -- full interaction
  • followUpDate: string (optional) -- when a follow-up is due

Apps

An App has the following attributes:

  • appName
  • plan
  • email
  • createdAt
  • upgradedAt
  • churnedAt

Apps is basically one of your products or subscription you're trying to sell... It's specific to my use case, if the tool is useful to others, we might make the App concept a little more generic.

Interested by the idea?

Am I launching a rock in the water by sharing this on github? Do you have some interest? Let me know!

PRs are welcome, of course.

Legal

  • GPL v3 -- https://www.gnu.org/licenses/gpl-3.0.en.html
  • Copyright (c) 2018, Fovea -- https://fovea.cc