How to Develop a Custom CRM using only Low-Code Platforms

Low-code and no-code technologies have enabled everybody to build business software and apps

Building a Custom CRM using Low-code Platforms

Building a Custom CRM Data-model and GraphQL API

Empty tables Deals and Touch Points for Custom CRM project
Setting touch points contact medium for Custom CRM project
Building a relational data-model for custom CRM
mutation {
dealCreate(
data: {
deal_name: "Big opportunity at Big.co"
department: "Marketing"
email: "jake@big.co"
amount: 100000.00
stage: "lead"
touchPoints: {
create: [{ contactMedium: "Phone" }, { contactMedium: "Email" }]
}
}
) {
id
deal_name
createdAt
}
}
Create API Token for the custom CRM

Setting up Retool with a GraphQL Resource and Custom CRM template

Create Retool GraphQL resource for custom CRM
Create Retool app template for flexible CRM

leads Query

query($stage: String!, $name: String!) {
dealsList(
filter: {
AND: [{ stage: { equals: $stage } }, { deal_name: { contains: $name } }]
}
) {
items {
id
stage
email
amount
deal_name
createdAt
updatedAt
}
}
}
Update leads graphql query for the custom CRM
Deals table for the custom CRM

touch_points Query

query($dealId: ID!) {
touchPointsList(filter: { deal: { id: { equals: $dealId } } }) {
items {
id
createdAt
contactMedium
}
}
}
touch points for custom CRM

create_lead Mutation

mutation(
$phoneNumber: String!
$department: String!
$deal_name: String!
$email: String!
$amount: Float!
) {
dealCreate(
data: {
phoneNumber: $phoneNumber
department: $department
deal_name: $deal_name
amount: $amount
email: $email
stage: "lead"
}
) {
id
}
}

upgrade_deal Mutation

mutation($stage: String!, $id: ID!) {
dealUpdate(data: { id: $id, stage: $stage }) {
id
stage
email
amount
deal_name
}
}

downgrade_deal Mutation

mutation($stage: String!, $id: ID!) {
dealUpdate(data: { id: $id, stage: $stage }) {
id
stage
email
amount
deal_name
}
}

set_details Query

mutation($email: String, $name: String, $amount: Float, $id: ID!) {
dealUpdate(
data: { id: $id, email: $email, amount: $amount, deal_name: $name }
) {
id
email
amount
deal_name
}
}

Updating the Custom CRM components

Image component

Touch Points count

\# Touch Points#### {{touch_points.data.touchPointsList.items.length}}

Last contact date

Last Contact#### {{ moment(touch_points.data.touchPointsList.items[0].createdAt).format(‘MM/DD/YY’)}}

Next Step and Next Contact

Next Contact#### {{ moment(touch_points.data.touchPointsList.items[0].createdAt).add(moment.duration(1, ‘week’)).format(‘MM/DD/YY’)}}Next Step#### {{ touch_points.data.touchPointsList.items[0].contactMedium === ‘email’ ? ‘Phone Call’ : touch_points.data.touchPointsList.items[0].contactMedium === ‘phone’ ? ‘Book Meeting’: ‘Send Email’ }}

Testing the Custom CRM

Loves art, writing, and code.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store