Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/j3k0/crm-cli
Customer Relationship Management from your Terminal
https://github.com/j3k0/crm-cli
Last synced: about 2 months ago
JSON representation
Customer Relationship Management from your Terminal
- Host: GitHub
- URL: https://github.com/j3k0/crm-cli
- Owner: j3k0
- Created: 2018-11-06T07:40:32.000Z (about 6 years ago)
- Default Branch: master
- Last Pushed: 2024-09-25T07:09:07.000Z (3 months ago)
- Last Synced: 2024-10-16T11:16:01.726Z (2 months ago)
- Language: TypeScript
- Homepage:
- Size: 638 KB
- Stars: 55
- Watchers: 8
- Forks: 8
- Open Issues: 6
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
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://[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.
```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`: stringThe `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