We build and sell a CRM + ERP called DGA CRM, and we install it on each client's own domain. It runs on PHP 8 and MySQL, which keeps hosting simple and cheap for small businesses. Here are a few lessons from running it for real clients.
One core, many industry presets
We tried separate products per industry first and it became hard to maintain. Now there is one core (leads, customers, invoices, appointments, deals, staff) and an industry preset that changes labels, modules and dashboards. A school sees admissions and fees, a clinic sees appointments and patients, a gym sees memberships. One codebase, many niches.
Web forms are the real lead source
Most leads arrive from website forms and ad forms, so the CRM generates a public web form with a hash. Our site posts to it from the browser. The CRM does not send CORS headers, so the form uses a no-cors POST and we accept that the response is opaque. The lead still lands in the CRM with its source, the page URL and UTM values in the description, which is all the sales team needs.
Reminders need a boring cron
Follow-up reminders, renewal messages and scheduled tasks run from one cron entry every five minutes. We kept it deliberately simple: one entry, idempotent jobs, and a log table, so a missed run never creates duplicates.
Ship updates to old installs
Our staff mobile app checks a small JSON file on the website for the latest version and APK link. That one file lets us push updates to every install without an app store review.
Install on the client's domain
Clients want their data on their own domain and no per-user fee. A PHP and MySQL stack makes that realistic on ordinary shared hosting, and it lets us customise labels, fields and workflows per client without forking the code.
If you are building something similar, start with the preset idea and the web form flow. They saved us the most time.
About DGA CRM: https://dizigoo.com/software/dga-crm-erp/
By Akash Gupta, founder of DiziGoo, Bareilly, India.
