No need to rewrite the system from scratch, just refine it!
I am looking for a competent programmer for ongoing collaboration. For this refinement of the CRM, I am READY to pay up to 5000 + bonuses for quality work. Please place your bids; I will choose based on your work experience and, of course, the lower amount compared to my proposed price.
Current technical base:
- Admin panel: React + Vite + Tailwind SPA in the admin/ folder
- API / backend: Node.js + Express
- Database: SQLite via better-sqlite3
Main task:
to add a clear logic for working with leads, deals, managers, Zoom/calls, payments, payment confirmations by the admin, and automatic calculation of managers' balances.
Technical requirements
To ensure the system operates stably, implement it through the backend and database without heavy solutions.
- Database
Create a separate deals table for deals, linked to the application via lead_id / request_id. - Indexes
Add indexes on fields that will have filters: managers, statuses, creation date, Zoom/call date. - Change history
Store who and when changed the deal status, payment, or financial data. - Delays
Do not create heavy cron jobs. Calculate delays such as "application without a deal for more than 2 hours" using timestamp during data selection. - Payment confirmations
The manager can set the status "Prepayment made" or "Full payment made", but only the admin can confirm the payment. - Accruals
Only payments confirmed by the admin should be included in statistics, balance, and accruals. - Protection against duplication
Do not allow creating a duplicate deal for one application, a duplicate confirmation of one payment, or a duplicate accrual for one payment. - Prepayment and additional payment
If the client initially made a prepayment and then paid the remaining amount, these should be two separate financial events. - Access rights
Rights to check on the backend: only the admin can confirm payment, change %, add payouts, and see all financial data. - Main principle
The source of truth for analytics, balances, and accruals is only the payment confirmed by the admin.
TASKS
1. Current CRM logic
Currently, the CRM already has sections:
- Overview
- Applications
- Managers
- Settings
A new section needs to be added:
The final menu structure:
- Overview
- Applications
- Deals
- Managers
- Settings
2. "Applications" section
The "Applications" section contains all leads that have submitted a form on the website.
An application is not automatically a deal.
Logic:
Application from the website → manager contacted the lead → agreed on Zoom/call → a deal is created
A button needs to be added to the applications table:
"Create deal"
If an active deal has already been created for the application, instead of the button "Create deal", show:
"Open deal"
There can only be one active deal per application.
Do not allow creating a duplicate deal for the same application.
3. Application statuses
In the "Applications" section, add a field:
"Application status"
Application status options:
- Awaiting response
- Deal created
- Did not reach out
- Refusal
If a deal is created from the application, the application status automatically changes to "Deal created".
4. Separation of managers
In the CRM, it is necessary to separate two types of managers:
- Traffic manager
- Sales manager
Traffic manager
This is the person through whose unique link the application came to the website.
It is used in the "Applications" section.
The field in the application should be called:
"Traffic manager"
Sales manager
This is the person who conducts the Zoom/call, communicates with the client, and closes the deal.
It is used in the "Deals" section.
The field in the deal should be called:
"Responsible sales manager"
Separately in the deal, there should be a field:
"Sales manager who closed the deal"
This field is used for sales analytics and for accruing the manager's balance.
Important:
the traffic manager from the application should not automatically become the sales manager in the deal.
5. "Deals" section
Add a new section:
"Deals"
Deal creation form
When creating a deal, the following fields should be included:
- Lead name
- Lead contact
- Application ID
- Responsible sales manager
- Zoom/call date
- Zoom/call time
- Deal status
- Rate
- Manager comment
- Next contact date
Logic for creating a deal from an application
A deal is created only manually from the "Applications" section.
In the "Applications" section, there should be a button "Create deal" next to each application.
The manager creates a deal only after contacting the lead and the lead confirms the date and time of the Zoom/call.
A deal is not created automatically after the application is received.
After clicking "Create deal", a deal creation form opens where the manager specifies the responsible sales manager, Zoom/call date, Zoom/call time, deal status, rate, and comment.
After creating the deal, the application receives the status "Deal created", and instead of the button "Create deal", it should show the button "Open deal". There can only be one active deal per application. Do not allow creating a duplicate deal for the same application.
YOU CAN VIEW THE FULL TERMS OF REFERENCE IN THE GOOGLE DOCUMENT
https://docs.google.com/document/d/1XX6daB1__MplFfQDwjV7w9-6DlUznEwSln7ao8i_9BM/edit?usp=sharing