It is necessary to refine the existing CRM and add a separate section "Deals," linked to the already implemented section "Applications."
The CRM is already operational; there is no need to create or rewrite the "Applications" section from scratch. The task is to carefully extend the existing system without breaking the current logic.
Technical stack:
- admin panel: React + Vite + Tailwind SPA in the admin/ folder
- backend/API: Node.js + Express
- database: SQLite via better-sqlite3
What needs to be implemented:
1. Add a new tab "Deals" in the CRM menu.
2. In the "Applications" section, add a button "Create Deal." If a deal for the application has already been created, show "Open Deal." There can only be one active deal per application.
3. When creating a deal, automatically pull only the basic data from the application:
- Application ID
- Lead name
- Lead contact
The manager from the application should not be pulled automatically. There must be a separate mandatory field in the deal: "Responsible Manager for the Deal."
4. The deal creation form must contain:
- lead
- contact
- responsible manager for the deal
- call date
- call time
- deal status
- manager's comment
- next action
- date of next contact
- deal amount + currency
Mandatory fields: responsible manager, call date, call time, deal status.
5. Deal statuses:
- Call scheduled
- In progress / thinking
- Awaiting prepayment
- Prepayment made / Deal closed
- Refusal
- Did not get in touch
- Postpone call
Final statuses: "Prepayment made / Deal closed" and "Refusal."
6. In the "Deals" section, create a table with the main columns:
- Deal ID
- Creation date
- Call date/time
- Lead
- Contact
- Responsible manager
- Deal status
- Deal amount
- Prepayment status
- Who closed the deal
- Actions
7. In the deal card, display all main information about the lead, status, amount, manager, prepayment, comments, and change history.
8. Add the ability to edit the deal:
- change status
- change call date/time
- add comment
- change responsible manager
- change deal amount
- change prepayment status
- delete deal
9. Add prepayment logic:
The manager can set "Awaiting prepayment" or "Prepayment made." The admin separately confirms the prepayment with the status "Prepayment confirmed by admin." The deal should only enter the final statistics and manager's calculation after the prepayment is confirmed by the admin.
10. Add control for overdue applications and deals:
- An application is overdue if there is no deal after more than 2 hours and no reason is given for why the deal was not created.
- A deal is overdue if the call date/time has passed and the status is not final.
11. In applications, add a column "Deal":
- Not created
- Created
- Poor quality lead
- Duplicate
- No response
- Closed without a deal
12. Add simple filters in "Applications" and "Deals":
by status, manager, date, overdue, prepayment, refusals, currency.
13. Add basic statistics in "Overview":
- applications without a deal
- overdue applications
- calls today
- overdue deals
- deals in progress
- awaiting prepayment
- confirmed prepayments
- closed deals
- amount of confirmed prepayments
14. Add statistics for managers:
number of applications, created deals, closed deals, confirmed prepayments, refusals, amount of confirmed prepayments, conversions.
15. Add CSV export for deals and a separate CSV export for calculations with managers.
Important:
No need to create Telegram notifications, calendar integration, Kanban board, complex analytics, or a complete overhaul of the CRM.
Main goal:
to create a simple and clear section for controlling leads after the application:
application → deal → responsible manager → call date/time → status → next action / reason for refusal → amount → prepayment → confirmation by admin → manager statistics.
I expect from the performer:
- experience with React / Node.js / Express / SQLite
- careful work with existing code
- no rewriting of the CRM from scratch
- simple implementation without unnecessary complications
- ability to quickly understand the current project structure.