# crm-cli

> Customers Relationship Management from your Terminal

Latest version **2.3.2** (published 2024-05-17) · GPL license · 0 weekly downloads

## Install

```sh
npm install crm-cli
pnpm add crm-cli
yarn add crm-cli
bun add crm-cli
```

Provides the command `crm`.

## Health

**Score 25/100 (F)** — status: abandoned.

Positive: has types; no vulnerabilities; high quality score.

Warnings: low downloads; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 2.3.2 |
| Published | 2024-05-17 |
| First published | 2018-11-06 |
| Weekly downloads | 0 |
| License | GPL |
| TypeScript types | bundled |
| Module format | CommonJS |
| Dependencies | 8 |
| Unpacked size | 1.9 MB |
| Known vulnerabilities | 0 (+2 in 1 direct dependencies) |
| Install scripts | no |
| Author | Jean-Christophe Hoelt |
| Maintainers | jchoelt, jeko6777 |

## Links

- npm: https://www.npmjs.com/package/crm-cli
- npm.io page: https://npm.io/package/crm-cli

## Dependencies (8)

- [tmp](https://npm.io/package/tmp.md) 0.0.33
- [axios](https://npm.io/package/axios.md) ^1.6.8
- [bunyan](https://npm.io/package/bunyan.md) ^1.8.15
- [moment](https://npm.io/package/moment.md) ^2.22.2
- [express](https://npm.io/package/express.md) ^4.19.2
- [fuse.js](https://npm.io/package/fuse.js.md) ^3.3.0
- [enquirer](https://npm.io/package/enquirer.md) ^2.0.2
- [cli-table](https://npm.io/package/cli-table.md) ^0.3.1

## Recent versions

- 2.3.2 (latest) — 2024-05-17
- 2.3.1 — 2024-05-17
- 2.3.0 — 2024-05-17
- 2.2.5 — 2024-05-12
- 2.2.4 — 2024-05-11
- 2.2.3 — 2024-05-11
- 2.2.2 — 2024-05-11
- 2.2.1 — 2024-05-11
- 2.2.0 — 2024-05-11
- 2.1.0 — 2024-05-09
- 2.0.2 — 2024-05-09
- 2.0.1 — 2024-05-08
- 2.0.0 — 2024-05-08
- 1.5.0 — 2019-09-30
- 1.4.0 — 2019-02-27
- … 14 more at https://npm.io/package/crm-cli/versions

## 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:
   * data as a singe JSON file
   * [CouchDB](https://couchdb.apache.org/)

## 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:

```sh
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:

```sh
export DATABASE_URL=http://myapikey@127.0.0.1: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.

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

To build the image:

```sh
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

---
_Source: https://npm.io/package/crm-cli · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
