CRMx is a super-flexible micro-CRM system for personal, freelance and small businesses. It can be customized very quickly for Customer Relationship Management, Lead Management System, Project Management, To-Do List or any other usage due to its flexibility in customization and scalable code. CRMx allows unlimited users to work in the same or different environments very flexibly. CRMx works through a RESTful API which allows third-party services and other software to interact neatly. CRMx also has a User Access Control system (UAC) to define permissions for each user and have maximum control over the organization.
CRMx is a super-flexible micro-CRM system for personal, freelance and small businesses. It can be customized very quickly for Customer Relationship Management, Lead Management System, Project Management, To-Do List or any other usage due to its flexibility in customization and scalable code.
config.php
which keeps the overall code tiny and much easier to maintain and scale.From here you have an overall view of your contacts:
Type in the search box to start filtering, results update dynamically as you type:
CRMx detects your custom form field types and adds shortcut lists on the top navigation automatically:
View a person details, edit them directly and also add timed comments:
Buttons appear next to the person fields to email, search Google or Skype-call in one click
There is no Settings menu or user accounts, all is done in PHP variables (like Sublime Text) in the config.php
file, which makes the code app a lot smaller as well as easy to administer, maintain and scale.
Open config.php
to modify the app settings:
$form
array (see Form field types below for more info)$users
and their permissionsoption(âbase_uriâ, â/â);
and add it there (for example.com/crmx/
it should be option(âbase_uriâ, â/crmx/â);
, note the trailing slash).htaccess
file, uncomment the #
and add the subdomain (following the example above it will be RewriteBase /crmx/
)http://YOURCRMXPATH.com/login/YOURPASSWORD
so that it autologins you every time.User accounts are created by adding them to the $users
PHP array. These are the fields you can customize:
is_logged_in()
in the code for a generator)sales_
)There is no login screen in CRMx. Users bookmark a long URL and click on it to login. You should specify a long and unique password (at least 50 characters) for each user and then send them the URL to bookmark, which looks like:
http://crmx.com/login/thesuperlongpassword
Environments allow users to work on separated CRMx (with their own contacts and form fields) while using the same app. Add that prefix to a user and another array in $form
. Simple as that.
Itâs very easy to customize CRMx to your own needs. You just need to modify the $form
PHP array in config.php
and the app will take care of the rest.
Just name and title are needed:
'name' => 'email', 'title' => 'Email address'
Specify âtypeâ => âselectâ
and a list of elements:
'name' => 'color', 'title' => 'Favorite color', 'type' => 'select', 'list' => array( "Red", Green", "Blue" )
You can use other HTML5 form field types like: password
, hidden
, color
, date
, datetime
, datetime-local
, email
, month
, number
, range
, search
, tel
, time
, url
and week
.
'name' => 'website', 'title' => 'Website URL', 'type' => 'url'
This is how I have my personal CRMx config.php
set up:
$form = array( 'test_' => array( // table prefix // name (default, no need to specify) // title (default, no need to specify) array('name' => 'group', 'title' => 'Group', 'type' => 'select', 'list' => array( "-", "London", "Barcelona")), array('name' => 'type', 'title' => 'Type', 'type' => 'select', 'list' => array( "-", "Partner", "Client", "Lead")), array('name' => 'email', 'title' => 'Email', 'type' => 'email'), array('name' => 'phone', 'title' => 'Phone Number', 'type' => 'tel'), array('name' => 'company', 'title' => 'Company', 'type' => 'search'), array('name' => 'address', 'title' => 'Address', 'type' => 'search'), ), );
To skip a form field to show in the main table, set the hidden
property to 1
. This is useful when you have a lot of fields or you want to disable a field you might want to use in the future.
'hidden' => 1,
Note that if you remove a field from config.php
it will still be in the database and will disappear when that person is updated. If youâd rather not loose any info, set hidden = 1
instead of deleting it.
/
GET
)(none)
HTML
)The home page in HTML format (including the default people and form JSON lists embedded to save server requests).
/login/:pass
pass
(string)JSON
)On success redirects to Home, on fail shows a message.
/search/:q
Searches people for that query and returns a JSON array.
GET
)q
(string)JSON
{ "id":"46", "name":"Richard", "form":{ "title":"CEO", // your defined form fields } },{ "id":"37", "name":"Peter", "form":{ "title":"Director", // your defined form fields } }
/get/:id
You can pass an ID or a name, returns results for a single person (if more than one match returns the most recently modified).
GET
)id
(string)JSON
){ "id": "46", "name": "Richard", "form": { "title": "CEO", // your defined form fields }, "comments":[ { "user": "Xavi Esteve", "date": "2013-03-24T16:03:19+00:00", "text": "..." } ], "created": "1364140289", "updated": "1364140289" }
/save
POST
)id
(string)JSON
){ "status": "success" OR "error", "message": "Contact saved successfully." }
/delete
DELETE
)id
(string)JSON
){ "status": "success" OR "error", "message": "Contact deleted successfully." }
/comment
POST
)id
(integer)comment
(string)JSON
){ "status": "success" OR "error", "message": "Comment added." }
/comment/:id
DELETE
)id
(integer)JSON
){ "status": "success" OR "error", "message": "Comment deleted." }
With plugins you can add extra functionality to CRMx without needing to modify the core files. Creating plugins is extremely easy and you can run PHP, JavaScript and/or CSS code. To create a plugin, add a new folder to the plugins
folder and files, all with your plugin name:
/plugins/salesforce salesforce.php salesforce.js salesforce.css
All files are optional, if you want to create a theme then a single CSS file should be enough. If you want to have a file that doesnât run automatically then name it differently than the plugin name.
The last step is to add the plugin name to the $plugins
array in config.php
.
In the lang
folder, create a new language file (use ISO 639-1 codes) or use an existing one.
Then, add âlangâ => âes_esâ,
in the userâs configuration.
Alternatively, you can change LANG_DEFAULT
so everyone will have the same language.
Having different languages is not only useful to change the language of CRMx but to customize the app further. For example, if you use CRMx as a Project Plan system you can rename âNameâ to âProjectâ or âSave contactâ to âSave projectâ.
people
table(You donât need to create any tables, CRMx will create them automatically)
CRMx has been created by Xavi Esteve and is licensed under a MIT License.
Copyright © 2013 Xavi Esteve
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the âSoftwareâ), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED âAS ISâ, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Author: Xavi Esteve (@xaviesteve)