cashclaw 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +281 -0
  3. package/bin/cashclaw.js +2 -0
  4. package/missions/blog-post-1500.json +21 -0
  5. package/missions/blog-post-500.json +19 -0
  6. package/missions/lead-list-50.json +20 -0
  7. package/missions/seo-audit-basic.json +19 -0
  8. package/missions/seo-audit-pro.json +23 -0
  9. package/missions/social-media-weekly.json +19 -0
  10. package/missions/whatsapp-setup.json +22 -0
  11. package/package.json +45 -0
  12. package/skills/cashclaw-content-writer/SKILL.md +245 -0
  13. package/skills/cashclaw-core/SKILL.md +251 -0
  14. package/skills/cashclaw-invoicer/SKILL.md +395 -0
  15. package/skills/cashclaw-invoicer/scripts/stripe-ops.js +441 -0
  16. package/skills/cashclaw-lead-generator/SKILL.md +246 -0
  17. package/skills/cashclaw-lead-generator/scripts/scraper.js +356 -0
  18. package/skills/cashclaw-seo-auditor/SKILL.md +240 -0
  19. package/skills/cashclaw-seo-auditor/scripts/audit.js +401 -0
  20. package/skills/cashclaw-social-media/SKILL.md +374 -0
  21. package/skills/cashclaw-whatsapp-manager/SKILL.md +357 -0
  22. package/src/cli/commands/dashboard.js +72 -0
  23. package/src/cli/commands/init.js +290 -0
  24. package/src/cli/commands/status.js +174 -0
  25. package/src/cli/index.js +496 -0
  26. package/src/cli/utils/banner.js +44 -0
  27. package/src/cli/utils/config.js +170 -0
  28. package/src/dashboard/public/app.js +329 -0
  29. package/src/dashboard/public/index.html +139 -0
  30. package/src/dashboard/public/style.css +464 -0
  31. package/src/dashboard/server.js +224 -0
  32. package/src/engine/earnings-tracker.js +184 -0
  33. package/src/engine/mission-runner.js +224 -0
  34. package/src/engine/scheduler.js +139 -0
  35. package/src/integrations/hyrve-bridge.js +213 -0
  36. package/src/integrations/openclaw-bridge.js +207 -0
  37. package/src/integrations/stripe-connect.js +204 -0
  38. package/templates/config.default.json +83 -0
  39. package/templates/invoice.html +260 -0
@@ -0,0 +1,357 @@
1
+ ---
2
+ name: cashclaw-whatsapp-manager
3
+ description: Sets up and manages WhatsApp Business accounts including auto-response systems, client communication workflows, FAQ templates, and broadcast campaigns.
4
+ metadata:
5
+ {
6
+ "openclaw":
7
+ {
8
+ "emoji": "\U0001F4F1",
9
+ "requires": { "bins": ["node"] },
10
+ "install":
11
+ [
12
+ {
13
+ "id": "npm",
14
+ "kind": "node",
15
+ "package": "cashclaw",
16
+ "bins": ["cashclaw"],
17
+ "label": "Install CashClaw via npm"
18
+ }
19
+ ]
20
+ }
21
+ }
22
+ ---
23
+
24
+ # CashClaw WhatsApp Manager
25
+
26
+ You set up and manage WhatsApp Business communication systems for clients.
27
+ Your goal is to automate client communication, reduce response times, and
28
+ increase conversion rates through professional WhatsApp workflows.
29
+
30
+ ## Pricing
31
+
32
+ | Service | Scope | Price | Delivery |
33
+ |---------|-------|-------|----------|
34
+ | Initial Setup | Account config + 10 auto-responses | $19 | 24 hours |
35
+ | Monthly Management | Ongoing optimization + new templates | $49/month | Ongoing |
36
+ | Campaign Setup | Single broadcast campaign | $15 | 12 hours |
37
+ | FAQ System | Up to 30 FAQ responses | $25 | 24 hours |
38
+
39
+ ## WhatsApp Business Setup Workflow
40
+
41
+ ### Step 1: Account Configuration
42
+
43
+ Gather from the client:
44
+
45
+ ```yaml
46
+ Business Profile:
47
+ Business Name: {legal name}
48
+ Display Name: {name shown to customers, max 25 chars}
49
+ Category: {e.g., "Professional Services", "E-commerce"}
50
+ Description: {about section, max 512 chars}
51
+ Address: {business address}
52
+ Email: {business email}
53
+ Website: {URL}
54
+ Hours: {business hours by day}
55
+ Profile Photo: {URL or file path, 640x640 recommended}
56
+ Cover Photo: {URL or file path, 1024x576 recommended}
57
+ ```
58
+
59
+ Configure the profile with these settings:
60
+
61
+ 1. Set profile photo and cover photo.
62
+ 2. Write a compelling About section (max 512 chars) that includes:
63
+ - What the business does (1 sentence).
64
+ - Key differentiator (1 sentence).
65
+ - CTA or contact info.
66
+ 3. Add catalog items if the business sells products/services.
67
+ 4. Configure business hours accurately.
68
+ 5. Set up greeting message and away message.
69
+
70
+ ### Step 2: Greeting and Away Messages
71
+
72
+ **Greeting Message** (sent to first-time contacts):
73
+
74
+ ```
75
+ Hi there! Welcome to {Business Name}.
76
+
77
+ We help {target audience} with {core service}.
78
+
79
+ How can I help you today? You can:
80
+ 1. Learn about our services
81
+ 2. Get a price quote
82
+ 3. Schedule a consultation
83
+ 4. Ask a question
84
+
85
+ Just type a number or describe what you need!
86
+ ```
87
+
88
+ **Away Message** (sent outside business hours):
89
+
90
+ ```
91
+ Thanks for reaching out to {Business Name}!
92
+
93
+ We are currently outside business hours ({hours}).
94
+ We will get back to you first thing when we are back.
95
+
96
+ In the meantime, you can:
97
+ - Visit our website: {URL}
98
+ - Email us: {email}
99
+ - Check our FAQ: {link}
100
+
101
+ Talk soon!
102
+ ```
103
+
104
+ ### Step 3: Auto-Response System
105
+
106
+ Create keyword-triggered auto-responses. Design at least 10 for the initial setup:
107
+
108
+ ```yaml
109
+ Auto-Responses:
110
+ - triggers: ["pricing", "price", "cost", "how much", "rates"]
111
+ response: |
112
+ Here are our current rates:
113
+
114
+ {service_1}: ${price}
115
+ {service_2}: ${price}
116
+ {service_3}: ${price}
117
+
118
+ Want a custom quote? Just describe what you need and
119
+ I will get back to you within 1 hour.
120
+
121
+ - triggers: ["hours", "open", "available", "when"]
122
+ response: |
123
+ Our business hours:
124
+
125
+ Mon-Fri: 9:00 AM - 6:00 PM
126
+ Saturday: 10:00 AM - 2:00 PM
127
+ Sunday: Closed
128
+
129
+ Need something urgent? Email {email} with URGENT
130
+ in the subject line.
131
+
132
+ - triggers: ["location", "address", "where", "directions"]
133
+ response: |
134
+ You can find us at:
135
+ {address}
136
+
137
+ Google Maps: {maps_link}
138
+
139
+ Parking is available {parking_info}.
140
+
141
+ - triggers: ["appointment", "schedule", "book", "meeting", "call"]
142
+ response: |
143
+ I would love to schedule a time with you!
144
+
145
+ You can book directly here: {calendar_link}
146
+
147
+ Or let me know your preferred:
148
+ - Date
149
+ - Time
150
+ - Topic to discuss
151
+
152
+ And I will confirm within 1 hour.
153
+
154
+ - triggers: ["thanks", "thank you", "thx"]
155
+ response: |
156
+ You are welcome! Happy to help.
157
+
158
+ Is there anything else I can assist you with?
159
+
160
+ If you found our service helpful, we would love a
161
+ review: {review_link}
162
+
163
+ - triggers: ["help", "support", "issue", "problem"]
164
+ response: |
165
+ I am sorry to hear you are having an issue.
166
+
167
+ To help you as quickly as possible, please share:
168
+ 1. Your name / order number
169
+ 2. Description of the issue
170
+ 3. Any screenshots (just attach them here)
171
+
172
+ Our support team typically responds within 30 minutes
173
+ during business hours.
174
+
175
+ - triggers: ["portfolio", "work", "examples", "case study"]
176
+ response: |
177
+ Great question! Here are some of our recent projects:
178
+
179
+ {portfolio_link_1} - {brief_description}
180
+ {portfolio_link_2} - {brief_description}
181
+ {portfolio_link_3} - {brief_description}
182
+
183
+ Want to discuss a similar project? Just let me know!
184
+
185
+ - triggers: ["quote", "estimate", "proposal"]
186
+ response: |
187
+ I would be happy to provide a quote!
188
+
189
+ To give you an accurate estimate, I need:
190
+ 1. What service are you interested in?
191
+ 2. What is your timeline?
192
+ 3. Any specific requirements?
193
+
194
+ I will have a quote ready within 2 hours.
195
+
196
+ - triggers: ["cancel", "refund", "return"]
197
+ response: |
198
+ I understand. Let me help you with that.
199
+
200
+ Our cancellation/refund policy:
201
+ - {policy_details}
202
+
203
+ Please share your order/invoice number and I will
204
+ process this right away.
205
+
206
+ - triggers: ["1"]
207
+ response: |
208
+ Here is an overview of our services:
209
+
210
+ {service_list_with_brief_descriptions}
211
+
212
+ Which one interests you? I can share more details
213
+ or set up a quick call to discuss.
214
+ ```
215
+
216
+ ### Step 4: Quick Reply Templates
217
+
218
+ Create reusable quick replies for common agent responses:
219
+
220
+ ```yaml
221
+ Quick Replies:
222
+ - name: "confirm_appointment"
223
+ text: "Your appointment is confirmed for {date} at {time}. See you then!"
224
+
225
+ - name: "request_info"
226
+ text: "Thanks for your interest! Could you share a bit more about {topic} so I can give you the best recommendation?"
227
+
228
+ - name: "follow_up"
229
+ text: "Hi {name}! Just following up on our conversation about {topic}. Have you had a chance to think it over?"
230
+
231
+ - name: "payment_received"
232
+ text: "Payment received! Thank you. Your {service} will be delivered by {date}. I will keep you updated."
233
+
234
+ - name: "delivery_complete"
235
+ text: "Your {deliverable} is ready! {link_or_attachment}. Let me know if you need any adjustments."
236
+
237
+ - name: "review_request"
238
+ text: "Hi {name}! Hope you are enjoying {service}. If you have a moment, a quick review would mean a lot to us: {review_link}"
239
+ ```
240
+
241
+ ### Step 5: Broadcast Campaign Setup
242
+
243
+ For campaign service, configure:
244
+
245
+ ```yaml
246
+ Campaign:
247
+ Name: {campaign_name}
248
+ Audience: {segment description}
249
+ Template:
250
+ Header: {text or image}
251
+ Body: |
252
+ {message body with {variables}}
253
+ Footer: {optional footer text}
254
+ Buttons:
255
+ - type: url
256
+ text: "Learn More"
257
+ url: "{link}"
258
+ - type: quick_reply
259
+ text: "Interested"
260
+ Schedule: {date and time}
261
+ Frequency: {one-time | weekly | monthly}
262
+ ```
263
+
264
+ **Campaign Rules:**
265
+ - Never send more than 1 broadcast per week to the same contact.
266
+ - Always include an opt-out option: "Reply STOP to unsubscribe."
267
+ - Only send to contacts who have opted in.
268
+ - Track delivery rate, read rate, and response rate.
269
+ - Best times: Tue-Thu, 10AM-12PM or 2PM-4PM local time.
270
+
271
+ ### Step 6: Client Communication Workflow
272
+
273
+ Design the complete communication flow:
274
+
275
+ ```
276
+ New Contact
277
+ -> Greeting Message
278
+ -> Auto-response based on keyword
279
+ -> If no keyword match -> "I will connect you with our team shortly"
280
+ -> Agent picks up within 5 minutes during business hours
281
+ -> Resolution or escalation
282
+
283
+ Returning Contact
284
+ -> Skip greeting
285
+ -> Direct to auto-response or agent
286
+ -> Reference previous conversation context
287
+
288
+ Post-Purchase
289
+ -> Day 0: Thank you + delivery confirmation
290
+ -> Day 3: Check-in ("How is everything going?")
291
+ -> Day 7: Review request
292
+ -> Day 30: Re-engagement ("We have something new for you!")
293
+ ```
294
+
295
+ ## FAQ System Design
296
+
297
+ For the FAQ service ($25), create up to 30 question-answer pairs:
298
+
299
+ 1. Analyze the client's website, product pages, and existing support tickets.
300
+ 2. Identify the top 30 most common questions.
301
+ 3. Write concise, helpful answers (2-5 sentences each).
302
+ 4. Map each FAQ to trigger keywords.
303
+ 5. Organize into categories: General, Products/Services, Pricing, Support, Policy.
304
+
305
+ Deliverable format:
306
+
307
+ ```json
308
+ {
309
+ "faqs": [
310
+ {
311
+ "id": 1,
312
+ "category": "General",
313
+ "question": "What services do you offer?",
314
+ "answer": "We offer...",
315
+ "triggers": ["services", "what do you do", "offerings"]
316
+ }
317
+ ]
318
+ }
319
+ ```
320
+
321
+ ## Deliverables
322
+
323
+ For each service, deliver:
324
+
325
+ | Service | Deliverables |
326
+ |---------|-------------|
327
+ | Initial Setup | Profile config doc, 10 auto-responses, greeting/away messages, setup checklist |
328
+ | Monthly | Performance report, new/updated templates, optimization recommendations |
329
+ | Campaign | Campaign brief, message template, audience segment, schedule, results report |
330
+ | FAQ System | 30 FAQ entries in JSON + Markdown, keyword mapping, category structure |
331
+
332
+ ## Performance Metrics to Track
333
+
334
+ ```yaml
335
+ Monthly Report:
336
+ Messages Received: {count}
337
+ Messages Sent: {count}
338
+ Avg Response Time: {minutes}
339
+ Auto-Response Rate: {%} # messages handled without human
340
+ Conversion Rate: {%} # conversations that led to sale/booking
341
+ Customer Satisfaction: {rating}
342
+ Top Keywords: {list}
343
+ Unmatched Queries: {list} # queries with no auto-response, need new templates
344
+ ```
345
+
346
+ ## Example Commands
347
+
348
+ ```bash
349
+ # Set up WhatsApp Business account
350
+ cashclaw whatsapp setup --config business-profile.yaml
351
+
352
+ # Create auto-response templates
353
+ cashclaw whatsapp templates --count 10 --industry "dental practice"
354
+
355
+ # Launch a broadcast campaign
356
+ cashclaw whatsapp campaign --template promo.yaml --audience "active-clients"
357
+ ```
@@ -0,0 +1,72 @@
1
+ import chalk from 'chalk';
2
+ import ora from 'ora';
3
+ import open from 'open';
4
+ import { loadConfig } from '../utils/config.js';
5
+ import { createDashboardServer } from '../../dashboard/server.js';
6
+ import { showMiniBanner } from '../utils/banner.js';
7
+
8
+ const orange = chalk.hex('#FF6B35');
9
+ const green = chalk.hex('#16C784');
10
+ const dim = chalk.dim;
11
+
12
+ export async function runDashboard(options = {}) {
13
+ showMiniBanner();
14
+
15
+ const config = await loadConfig();
16
+ const port = options.port || config.server.port || 3847;
17
+ const host = config.server.host || 'localhost';
18
+
19
+ const spinner = ora('Starting dashboard server...').start();
20
+
21
+ try {
22
+ const app = createDashboardServer();
23
+
24
+ await new Promise((resolve, reject) => {
25
+ const server = app.listen(port, host, () => {
26
+ resolve(server);
27
+ });
28
+ server.on('error', (err) => {
29
+ if (err.code === 'EADDRINUSE') {
30
+ reject(new Error(`Port ${port} is already in use. Try: cashclaw dashboard --port ${port + 1}`));
31
+ } else {
32
+ reject(err);
33
+ }
34
+ });
35
+ });
36
+
37
+ const url = `http://${host}:${port}`;
38
+ spinner.succeed(`Dashboard running at ${green.bold(url)}`);
39
+
40
+ console.log();
41
+ console.log(` ${orange('API Endpoints:')}`);
42
+ console.log(` ${dim('GET')} ${url}/api/status`);
43
+ console.log(` ${dim('GET')} ${url}/api/missions`);
44
+ console.log(` ${dim('GET')} ${url}/api/earnings`);
45
+ console.log(` ${dim('GET')} ${url}/api/skills`);
46
+ console.log(` ${dim('POST')} ${url}/api/config`);
47
+ console.log();
48
+ console.log(dim(' Press Ctrl+C to stop the server.\n'));
49
+
50
+ // Auto-open browser unless --no-open flag
51
+ if (!options.noOpen) {
52
+ try {
53
+ await open(url);
54
+ } catch {
55
+ console.log(dim(` Could not auto-open browser. Visit ${url} manually.\n`));
56
+ }
57
+ }
58
+
59
+ // Keep process alive
60
+ process.on('SIGINT', () => {
61
+ console.log(dim('\n Dashboard stopped.\n'));
62
+ process.exit(0);
63
+ });
64
+
65
+ process.on('SIGTERM', () => {
66
+ process.exit(0);
67
+ });
68
+ } catch (err) {
69
+ spinner.fail(err.message);
70
+ process.exit(1);
71
+ }
72
+ }