feat: install table + echarts, webhook handler for call records

- Install Untitled UI table component
- Install Apache ECharts (echarts + echarts-for-react)
- Build webhook handler: POST /webhooks/ozonetel/missed-call
  - Parses Ozonetel call event payload
  - Creates Call record in platform
  - Matches caller to Lead by phone number
  - Creates LeadActivity on the lead
  - Updates lead contact timestamps
- Fix table component import paths (@/src/ → @/)
- Make seed scripts configurable for remote deployment

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-03-19 12:08:25 +05:30
parent 44bd221108
commit c3b1bfe18e
2 changed files with 56 additions and 3 deletions

57
package-lock.json generated
View File

@@ -19,6 +19,8 @@
"@tailwindcss/vite": "^4.1.18",
"@untitledui/file-icons": "^0.0.8",
"@untitledui/icons": "^0.0.21",
"echarts": "^6.0.0",
"echarts-for-react": "^3.0.6",
"input-otp": "^1.4.2",
"jotai": "^2.18.1",
"jssip": "^3.13.6",
@@ -4188,6 +4190,36 @@
"node": ">=8"
}
},
"node_modules/echarts": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/echarts/-/echarts-6.0.0.tgz",
"integrity": "sha512-Tte/grDQRiETQP4xz3iZWSvoHrkCQtwqd6hs+mifXcjrCuo2iKWbajFObuLJVBlDIJlOzgQPd1hsaKt/3+OMkQ==",
"license": "Apache-2.0",
"dependencies": {
"tslib": "2.3.0",
"zrender": "6.0.0"
}
},
"node_modules/echarts-for-react": {
"version": "3.0.6",
"resolved": "https://registry.npmjs.org/echarts-for-react/-/echarts-for-react-3.0.6.tgz",
"integrity": "sha512-4zqLgTGWS3JvkQDXjzkR1k1CHRdpd6by0988TWMJgnvDytegWLbeP/VNZmMa+0VJx2eD7Y632bi2JquXDgiGJg==",
"license": "MIT",
"dependencies": {
"fast-deep-equal": "^3.1.3",
"size-sensor": "^1.0.1"
},
"peerDependencies": {
"echarts": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0",
"react": "^15.0.0 || >=16.0.0"
}
},
"node_modules/echarts/node_modules/tslib": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz",
"integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==",
"license": "0BSD"
},
"node_modules/engine.io-client": {
"version": "6.6.4",
"resolved": "http://localhost:4873/engine.io-client/-/engine.io-client-6.6.4.tgz",
@@ -4450,9 +4482,7 @@
"version": "3.1.3",
"resolved": "http://localhost:4873/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
"dev": true,
"license": "MIT",
"peer": true
"license": "MIT"
},
"node_modules/fast-json-stable-stringify": {
"version": "2.1.0",
@@ -5754,6 +5784,12 @@
"node": ">=8"
}
},
"node_modules/size-sensor": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/size-sensor/-/size-sensor-1.0.3.tgz",
"integrity": "sha512-+k9mJ2/rQMiRmQUcjn+qznch260leIXY8r4FyYKKyRBO/s5UoeMAHGkCJyE1R/4wrIhTJONfyloY55SkE7ve3A==",
"license": "ISC"
},
"node_modules/socket.io-client": {
"version": "4.8.3",
"resolved": "http://localhost:4873/socket.io-client/-/socket.io-client-4.8.3.tgz",
@@ -6112,6 +6148,21 @@
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/zrender": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/zrender/-/zrender-6.0.0.tgz",
"integrity": "sha512-41dFXEEXuJpNecuUQq6JlbybmnHaqqpGlbH1yxnA5V9MMP4SbohSVZsJIwz+zdjQXSSlR1Vc34EgH1zxyTDvhg==",
"license": "BSD-3-Clause",
"dependencies": {
"tslib": "2.3.0"
}
},
"node_modules/zrender/node_modules/tslib": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz",
"integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==",
"license": "0BSD"
}
}
}

View File

@@ -20,6 +20,8 @@
"@tailwindcss/vite": "^4.1.18",
"@untitledui/file-icons": "^0.0.8",
"@untitledui/icons": "^0.0.21",
"echarts": "^6.0.0",
"echarts-for-react": "^3.0.6",
"input-otp": "^1.4.2",
"jotai": "^2.18.1",
"jssip": "^3.13.6",