@growthub/cli 0.3.54 → 0.3.55
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.
- package/assets/worker-kits/growthub-ai-website-cloner-v1/.env.example +7 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/QUICKSTART.md +116 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/brands/NEW-CLIENT.md +22 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/brands/_template/brand-kit.md +27 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/brands/growthub/brand-kit.md +26 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/bundles/growthub-ai-website-cloner-v1.json +53 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/docs/ai-website-cloner-fork-integration.md +118 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/docs/design-token-system.md +135 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/docs/multi-phase-pipeline.md +129 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/docs/parallel-builder-dispatch.md +103 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/examples/clone-brief-sample.md +54 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/examples/component-spec-sample.md +123 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/examples/platform-handoff-sample.md +102 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/examples/visual-qa-sample.md +119 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/growthub-meta/README.md +71 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/growthub-meta/kit-standard.md +47 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/kit.json +105 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/output/README.md +26 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/output-standards.md +75 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/runtime-assumptions.md +70 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/setup/check-deps.sh +50 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/setup/clone-fork.sh +66 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/setup/verify-env.mjs +78 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/skills.md +186 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/templates/asset-manifest.md +57 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/templates/builder-dispatch-plan.md +92 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/templates/clone-brief.md +59 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/templates/component-spec.md +124 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/templates/design-token-extraction.md +89 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/templates/platform-handoff.md +114 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/templates/reconnaissance-report.md +77 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/templates/visual-qa-checklist.md +107 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/validation-checklist.md +76 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/workers/ai-website-cloner-operator/CLAUDE.md +256 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/.env.example +40 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/QUICKSTART.md +114 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/brands/NEW-CLIENT.md +42 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/brands/_template/brand-kit.md +49 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/brands/growthub/brand-kit.md +50 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/bundles/growthub-open-montage-studio-v1.json +55 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/docs/cms-node-bridge.md +152 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/docs/open-montage-fork-integration.md +120 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/docs/pipeline-reference.md +147 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/docs/provider-adapter-layer.md +105 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/examples/cms-node-video-gen-sample.md +109 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/examples/pipeline-selection-sample.md +67 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/examples/platform-ready-handoff-sample.md +101 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/examples/video-production-brief-sample.md +68 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/growthub-meta/README.md +7 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/growthub-meta/kit-standard.md +45 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/kit.json +107 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/output/README.md +34 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/output-standards.md +79 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/runtime-assumptions.md +86 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/setup/check-deps.sh +43 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/setup/clone-fork.sh +53 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/setup/verify-env.mjs +102 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/skills.md +254 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/templates/asset-tracking.md +46 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/templates/cms-node-pipeline-mapping.md +64 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/templates/generation-batch-plan.md +70 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/templates/pipeline-selection-brief.md +67 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/templates/platform-ready-execution-handoff.md +103 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/templates/prompt-matrix.md +48 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/templates/provider-selection-brief.md +86 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/templates/review-qa-checklist.md +59 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/templates/scene-plan.md +65 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/templates/video-production-brief.md +58 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/validation-checklist.md +46 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/workers/open-montage-studio-operator/CLAUDE.md +304 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/.env.example +15 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/QUICKSTART.md +90 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/brands/NEW-CLIENT.md +57 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/brands/_template/brand-kit.md +88 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/brands/growthub/brand-kit.md +92 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/bundles/growthub-twenty-crm-v1.json +56 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/docs/api-and-webhooks.md +296 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/docs/data-model-layer.md +172 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/docs/twenty-fork-integration.md +213 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/examples/crm-playbook-sample.md +172 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/examples/crm-setup-sample.md +100 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/examples/lead-enrichment-sample.md +117 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/examples/pipeline-automation-sample.md +132 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/growthub-meta/README.md +114 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/growthub-meta/kit-standard.md +61 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/kit.json +108 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/output/README.md +46 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/output-standards.md +175 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/runtime-assumptions.md +150 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/setup/check-deps.sh +56 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/setup/clone-fork.sh +77 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/setup/verify-env.mjs +105 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/skills.md +401 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/templates/api-query-plan.md +179 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/templates/crm-playbook.md +155 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/templates/crm-setup-brief.md +94 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/templates/custom-object-design.md +115 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/templates/data-model-design.md +112 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/templates/enrichment-field-map.md +100 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/templates/import-mapping.md +139 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/templates/integration-handoff.md +190 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/templates/lead-enrichment-pipeline.md +128 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/templates/pipeline-automation-brief.md +88 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/templates/webhook-integration-spec.md +129 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/templates/workspace-config-checklist.md +129 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/validation-checklist.md +115 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/workers/twenty-crm-operator/CLAUDE.md +310 -0
- package/package.json +1 -1
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
# CRM Playbook — [CLIENT NAME]
|
|
2
|
+
|
|
3
|
+
**Date:** YYYY-MM-DD
|
|
4
|
+
**Kit:** `growthub-twenty-crm-v1`
|
|
5
|
+
**Version:** v1
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## ABOUT THIS PLAYBOOK
|
|
10
|
+
|
|
11
|
+
This playbook is the operating manual for the [CLIENT NAME] Twenty CRM workspace. It defines roles, daily workflows, pipeline procedures, enrichment cadences, and data hygiene rules. Every team member with CRM access should read and follow this document.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## 1. TEAM ROLES AND PERMISSIONS
|
|
16
|
+
|
|
17
|
+
| Role | Name | Access level | Responsibilities |
|
|
18
|
+
|---|---|---|---|
|
|
19
|
+
| CRM Admin | [name] | Full access | Object configuration, user management, integration maintenance |
|
|
20
|
+
| Sales Rep | [name] | Create/edit own records | Lead creation, pipeline updates, note-taking |
|
|
21
|
+
| CS Manager | [name] | Read + edit post-close | Customer success tracking, renewal management |
|
|
22
|
+
|
|
23
|
+
**Onboarding new members:** CRM Admin creates workspace member in Settings > Members and assigns the correct role.
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## 2. DAILY WORKFLOW
|
|
28
|
+
|
|
29
|
+
### Sales rep daily workflow
|
|
30
|
+
|
|
31
|
+
1. Log in to Twenty and open the Opportunity pipeline view
|
|
32
|
+
2. Review any new leads assigned to you (filter: `assignee = me`, `stage = LEAD`)
|
|
33
|
+
3. Update stage for any leads that progressed since yesterday
|
|
34
|
+
4. Add a Note for every contact or company you spoke with
|
|
35
|
+
5. Check open Tasks due today and complete or reschedule them
|
|
36
|
+
6. Before end of day: all new contacts from today's calls must be in Twenty
|
|
37
|
+
|
|
38
|
+
### CRM admin daily workflow
|
|
39
|
+
|
|
40
|
+
1. Check the import error log (if enrichment pipeline is running)
|
|
41
|
+
2. Review any automation failures in the workflow logs
|
|
42
|
+
3. Confirm new workspace members have correct permissions
|
|
43
|
+
4. Spot-check 3–5 records for data quality (no blank required fields)
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
## 3. PIPELINE MANAGEMENT PROCEDURES
|
|
48
|
+
|
|
49
|
+
### Creating a new Opportunity
|
|
50
|
+
|
|
51
|
+
1. Navigate to Opportunities
|
|
52
|
+
2. Click `+ New`
|
|
53
|
+
3. Fill in: name, stage, linked Person (pointOfContact), linked Company, amount, close date
|
|
54
|
+
4. Set the assignee to the responsible sales rep
|
|
55
|
+
5. Add a first Note with context
|
|
56
|
+
|
|
57
|
+
### Moving a stage
|
|
58
|
+
|
|
59
|
+
1. Open the Opportunity record
|
|
60
|
+
2. Click the stage selector and choose the new stage
|
|
61
|
+
3. Add a Note explaining the stage change (what happened, next step)
|
|
62
|
+
4. If moving to `CLOSED_WON`: confirm amount and close date are accurate
|
|
63
|
+
5. If moving to `CLOSED_LOST`: add a Note with the loss reason
|
|
64
|
+
|
|
65
|
+
### Pipeline review (weekly — team)
|
|
66
|
+
|
|
67
|
+
Run the pipeline report query (see API Query Plan) or filter in Twenty:
|
|
68
|
+
- All Opportunities: stage in [QUALIFIED, DEMO, PROPOSAL]
|
|
69
|
+
- Sort by close date ascending
|
|
70
|
+
- Review top 10 by close date
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
## 4. ENRICHMENT CADENCE
|
|
75
|
+
|
|
76
|
+
**Enrichment schedule:** [one-time / weekly on [day] / monthly on [day] / event-triggered]
|
|
77
|
+
|
|
78
|
+
**Enrichment procedure (if CSV-based):**
|
|
79
|
+
|
|
80
|
+
1. Export contacts from [Apollo / Clay / source] with the filters defined in the Lead Enrichment Pipeline doc
|
|
81
|
+
2. Open the CSV and remove any test or duplicate entries
|
|
82
|
+
3. Import via Twenty: navigate to [Person / Company] > Import
|
|
83
|
+
4. Select the field mapping profile saved as `[mapping-profile-name]`
|
|
84
|
+
5. Run the import
|
|
85
|
+
6. After import: check the error log and resolve skipped records
|
|
86
|
+
|
|
87
|
+
**Enrichment procedure (if API/webhook-based):**
|
|
88
|
+
|
|
89
|
+
The enrichment pipeline runs automatically via [webhook / scheduled API call]. Review the error log weekly and resolve any skipped records.
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
## 5. REPORTING AND DASHBOARD INSTRUCTIONS
|
|
94
|
+
|
|
95
|
+
### Pipeline health view
|
|
96
|
+
|
|
97
|
+
**Filter:** Opportunities where stage is in [LEAD, QUALIFIED, DEMO, PROPOSAL]
|
|
98
|
+
**Group by:** Stage
|
|
99
|
+
**Sort by:** Close date ascending
|
|
100
|
+
|
|
101
|
+
**Reading the view:**
|
|
102
|
+
- Count of opportunities in each stage = pipeline coverage
|
|
103
|
+
- Total amount in DEMO + PROPOSAL = near-term revenue signal
|
|
104
|
+
- Opportunities with no stage update in 14+ days = stale — review and update or close
|
|
105
|
+
|
|
106
|
+
### Contact view
|
|
107
|
+
|
|
108
|
+
**Filter:** Persons created in the last 30 days
|
|
109
|
+
**Sort:** Created at descending
|
|
110
|
+
|
|
111
|
+
Use this view weekly to confirm all new contacts are properly linked to Companies and have no missing required fields.
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
## 6. ESCALATION AND HANDOFF PROTOCOLS
|
|
116
|
+
|
|
117
|
+
### CRM data dispute
|
|
118
|
+
|
|
119
|
+
If a record looks incorrect (wrong company, wrong stage, stale data):
|
|
120
|
+
1. Do not delete — add a Note documenting the issue
|
|
121
|
+
2. Tag `@[CRM Admin]` in the note
|
|
122
|
+
3. CRM Admin resolves within 2 business days
|
|
123
|
+
|
|
124
|
+
### Integration failure
|
|
125
|
+
|
|
126
|
+
If the enrichment pipeline or a webhook stops working:
|
|
127
|
+
1. CRM Admin checks the workflow logs in Twenty > Settings > Workflows
|
|
128
|
+
2. If logs are inconclusive, check the error log from the enrichment provider
|
|
129
|
+
3. Escalate to [developer contact] with the error message and timestamp
|
|
130
|
+
|
|
131
|
+
### Offboarding a team member
|
|
132
|
+
|
|
133
|
+
1. CRM Admin reassigns all open Opportunities from the departing member
|
|
134
|
+
2. Reassign all open Tasks
|
|
135
|
+
3. Deactivate the workspace member in Settings > Members
|
|
136
|
+
|
|
137
|
+
---
|
|
138
|
+
|
|
139
|
+
## 7. MAINTENANCE AND DATA HYGIENE CHECKLIST
|
|
140
|
+
|
|
141
|
+
**Weekly:**
|
|
142
|
+
- [ ] Review import error log — resolve skipped records
|
|
143
|
+
- [ ] Check open Opportunities for stale records (no update in 14 days)
|
|
144
|
+
- [ ] Confirm all Closed Won / Closed Lost opportunities have a close reason Note
|
|
145
|
+
|
|
146
|
+
**Monthly:**
|
|
147
|
+
- [ ] Audit duplicate Person records (same email) — merge or remove
|
|
148
|
+
- [ ] Audit Companies with no linked Persons — flag for review
|
|
149
|
+
- [ ] Review workflow automation logs for failures
|
|
150
|
+
- [ ] Update the CRM Playbook if any procedures have changed
|
|
151
|
+
|
|
152
|
+
**Quarterly:**
|
|
153
|
+
- [ ] Review custom object field usage — deprecate unused fields
|
|
154
|
+
- [ ] Review pipeline stage definitions — adjust if the sales process has changed
|
|
155
|
+
- [ ] Evaluate enrichment provider quality and coverage
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# CRM Setup Brief — [CLIENT NAME]
|
|
2
|
+
|
|
3
|
+
**Date:** YYYY-MM-DD
|
|
4
|
+
**Operator:** `twenty-crm-operator`
|
|
5
|
+
**Kit:** `growthub-twenty-crm-v1`
|
|
6
|
+
**Mode:** `[cloud / self-hosted / local-fork / agent-only]`
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## 1. CLIENT CONTEXT AND CRM OBJECTIVE
|
|
11
|
+
|
|
12
|
+
**Client:** [CLIENT NAME]
|
|
13
|
+
**Industry:** [industry]
|
|
14
|
+
**Company size:** [N employees]
|
|
15
|
+
**CRM objective:** [primary objective — e.g. "Build a structured outbound sales pipeline with automated lead enrichment from Apollo"]
|
|
16
|
+
|
|
17
|
+
**Why Twenty:**
|
|
18
|
+
- [reason 1]
|
|
19
|
+
- [reason 2]
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## 2. DEPLOYMENT MODE
|
|
24
|
+
|
|
25
|
+
**Selected mode:** `[cloud / self-hosted / local-fork]`
|
|
26
|
+
**API URL:** [URL or TBD]
|
|
27
|
+
**Environment:** [production / staging / development]
|
|
28
|
+
|
|
29
|
+
**Prerequisites confirmed:**
|
|
30
|
+
- [ ] Twenty workspace created
|
|
31
|
+
- [ ] API token generated
|
|
32
|
+
- [ ] `node setup/verify-env.mjs` passes
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## 3. TEAM SIZE AND USER ROLES
|
|
37
|
+
|
|
38
|
+
| Role | User | Permissions |
|
|
39
|
+
|---|---|---|
|
|
40
|
+
| CRM Admin | [name] | Full access |
|
|
41
|
+
| Sales Rep | [name] | Create/edit Opportunities and Persons |
|
|
42
|
+
| CS Manager | [name] | Read/edit Opportunities post-close |
|
|
43
|
+
|
|
44
|
+
**Total workspace members:** [N]
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## 4. DATA SOURCES AND VOLUME ESTIMATES
|
|
49
|
+
|
|
50
|
+
| Source | Object type | Estimated volume | Import method |
|
|
51
|
+
|---|---|---|---|
|
|
52
|
+
| [Apollo CSV export] | Person + Company | [N contacts] | CSV import |
|
|
53
|
+
| [Stripe webhooks] | [custom object or Note] | [events/month] | Webhook |
|
|
54
|
+
| [Intercom] | Note | [conversations/month] | Webhook |
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## 5. INTEGRATION SCOPE
|
|
59
|
+
|
|
60
|
+
| Integration | Direction | Priority |
|
|
61
|
+
|---|---|---|
|
|
62
|
+
| [Apollo] | Inbound enrichment | High |
|
|
63
|
+
| [Stripe] | Inbound webhook | High |
|
|
64
|
+
| [Intercom] | Inbound webhook | Medium |
|
|
65
|
+
| [Slack] | Outbound notification | Low |
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
## 6. GO-LIVE TIMELINE AND MILESTONES
|
|
70
|
+
|
|
71
|
+
| Milestone | Target date | Owner |
|
|
72
|
+
|---|---|---|
|
|
73
|
+
| Data model finalized | YYYY-MM-DD | [CRM admin] |
|
|
74
|
+
| Initial import complete | YYYY-MM-DD | [CRM admin] |
|
|
75
|
+
| Enrichment pipeline live | YYYY-MM-DD | [developer] |
|
|
76
|
+
| Automations active | YYYY-MM-DD | [developer] |
|
|
77
|
+
| Team onboarded | YYYY-MM-DD | [CRM admin] |
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
## 7. SUCCESS CRITERIA
|
|
82
|
+
|
|
83
|
+
- [ ] All [N] contacts imported and deduplicated against domain
|
|
84
|
+
- [ ] Pipeline visible with [N] stages
|
|
85
|
+
- [ ] At least [N] automations active (stage transitions, follow-up tasks)
|
|
86
|
+
- [ ] Enrichment pipeline running on [cadence] cadence
|
|
87
|
+
- [ ] All team members onboarded and using the CRM daily
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
## OPEN QUESTIONS
|
|
92
|
+
|
|
93
|
+
- [ ] [Open question 1]
|
|
94
|
+
- [ ] [Open question 2]
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
# Custom Object Design — [CLIENT NAME]
|
|
2
|
+
|
|
3
|
+
**Date:** YYYY-MM-DD
|
|
4
|
+
**Kit:** `growthub-twenty-crm-v1`
|
|
5
|
+
**Mode:** `[cloud / self-hosted / local-fork / agent-only]`
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## CUSTOM OBJECT: [OBJECT NAME]
|
|
10
|
+
|
|
11
|
+
**Purpose:** [What problem this custom object solves — e.g. "Track partner accounts separate from customer companies"]
|
|
12
|
+
**Creation method:** `[Settings > Objects (UI) / metadata API]`
|
|
13
|
+
**Scope:** `[per-workspace / this client only]`
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## FIELD TABLE
|
|
18
|
+
|
|
19
|
+
| Field name (camelCase) | Display label | Type | Required | Options / Notes |
|
|
20
|
+
|---|---|---|---|---|
|
|
21
|
+
| `[fieldName]` | [Label] | `TEXT` | [Yes / No] | |
|
|
22
|
+
| `[fieldName]` | [Label] | `NUMBER` | [Yes / No] | |
|
|
23
|
+
| `[fieldName]` | [Label] | `SELECT` | [Yes / No] | Options: [A, B, C] |
|
|
24
|
+
| `[fieldName]` | [Label] | `RELATION` | [Yes / No] | Links to `[Object]` |
|
|
25
|
+
| `[fieldName]` | [Label] | `DATE` | [Yes / No] | |
|
|
26
|
+
| `[fieldName]` | [Label] | `BOOLEAN` | [Yes / No] | |
|
|
27
|
+
| `[fieldName]` | [Label] | `LINK` | [Yes / No] | |
|
|
28
|
+
| `[fieldName]` | [Label] | `EMAILS` | [Yes / No] | |
|
|
29
|
+
| `[fieldName]` | [Label] | `CURRENCY` | [Yes / No] | Store in micros |
|
|
30
|
+
|
|
31
|
+
**Select field options (if any):**
|
|
32
|
+
|
|
33
|
+
| Field | Option value (SCREAMING_SNAKE_CASE) | Display label |
|
|
34
|
+
|---|---|---|
|
|
35
|
+
| `[fieldName]` | `[OPTION_A]` | [Label A] |
|
|
36
|
+
| `[fieldName]` | `[OPTION_B]` | [Label B] |
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## RELATIONSHIP DEFINITIONS
|
|
41
|
+
|
|
42
|
+
| Relation field | Direction | Target object | Cardinality | Notes |
|
|
43
|
+
|---|---|---|---|---|
|
|
44
|
+
| `[relationField]` | outgoing | `[TargetObject]` | many-to-one | [notes] |
|
|
45
|
+
| `[relationField]` | incoming | `[TargetObject]` | one-to-many | [notes] |
|
|
46
|
+
|
|
47
|
+
**Relationship map:**
|
|
48
|
+
|
|
49
|
+
```text
|
|
50
|
+
[CustomObject] ──── [relationField] ────> [TargetObject]
|
|
51
|
+
[AnotherObject] <─── [inverseField] ─── [CustomObject]
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## DISPLAY CONFIGURATION
|
|
57
|
+
|
|
58
|
+
| Property | Value |
|
|
59
|
+
|---|---|
|
|
60
|
+
| Label (singular) | [e.g. Partner Account] |
|
|
61
|
+
| Label (plural) | [e.g. Partner Accounts] |
|
|
62
|
+
| Icon | [Twenty icon name — e.g. `building`, `user`, `star`] |
|
|
63
|
+
| Default view | `[list / kanban]` |
|
|
64
|
+
| Kanban grouping field (if kanban) | `[fieldName]` |
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## CREATION PROCEDURE
|
|
69
|
+
|
|
70
|
+
### Via UI (Settings > Objects)
|
|
71
|
+
|
|
72
|
+
1. Go to Settings > Objects
|
|
73
|
+
2. Click `+ New custom object`
|
|
74
|
+
3. Set label (singular and plural), icon
|
|
75
|
+
4. Add each field from the field table above
|
|
76
|
+
5. Configure select options for any SELECT fields
|
|
77
|
+
6. Add relation fields and select the target object
|
|
78
|
+
7. Save and activate the object
|
|
79
|
+
|
|
80
|
+
### Via Metadata API
|
|
81
|
+
|
|
82
|
+
```graphql
|
|
83
|
+
mutation CreateCustomObject {
|
|
84
|
+
createOneObject(input: {
|
|
85
|
+
labelSingular: "[Label Singular]"
|
|
86
|
+
labelPlural: "[Label Plural]"
|
|
87
|
+
nameSingular: "[objectName]"
|
|
88
|
+
namePlural: "[objectNames]"
|
|
89
|
+
icon: "[icon-name]"
|
|
90
|
+
description: "[description]"
|
|
91
|
+
}) {
|
|
92
|
+
id
|
|
93
|
+
nameSingular
|
|
94
|
+
labelSingular
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
Then add fields with `createOneField` mutations per field.
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
## VALIDATION RULES
|
|
104
|
+
|
|
105
|
+
| Rule | Field | Condition | Behavior |
|
|
106
|
+
|---|---|---|---|
|
|
107
|
+
| [Rule 1] | `[field]` | [condition] | [show error / block save] |
|
|
108
|
+
| [Rule 2] | `[field]` | [condition] | [behavior] |
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
## OPEN QUESTIONS
|
|
113
|
+
|
|
114
|
+
- [ ] [Decision needed — e.g. "Should this object be visible to all team members or only admins?"]
|
|
115
|
+
- [ ] [Question 2]
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
# Data Model Design — [CLIENT NAME]
|
|
2
|
+
|
|
3
|
+
**Date:** YYYY-MM-DD
|
|
4
|
+
**Kit:** `growthub-twenty-crm-v1`
|
|
5
|
+
**Mode:** `[cloud / self-hosted / local-fork / agent-only]`
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 1. STANDARD OBJECTS IN USE
|
|
10
|
+
|
|
11
|
+
| Object | In use? | Configuration notes |
|
|
12
|
+
|---|---|---|
|
|
13
|
+
| `Person` | [Yes / No] | [e.g. "primary contact object — email as dedup key"] |
|
|
14
|
+
| `Company` | [Yes / No] | [e.g. "linked to Person via relation"] |
|
|
15
|
+
| `Opportunity` | [Yes / No] | [e.g. "6-stage pipeline: Lead → Closed Won"] |
|
|
16
|
+
| `Note` | [Yes / No] | [e.g. "used for Intercom conversation summaries"] |
|
|
17
|
+
| `Task` | [Yes / No] | [e.g. "auto-created by stage-change automation"] |
|
|
18
|
+
| `Workspace Member` | Yes | [roles: admin, sales, cs] |
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## 2. CUSTOM OBJECTS
|
|
23
|
+
|
|
24
|
+
### [Custom Object Name 1]
|
|
25
|
+
|
|
26
|
+
**Purpose:** [description]
|
|
27
|
+
**Creation method:** [UI (Settings > Objects) / metadata API]
|
|
28
|
+
|
|
29
|
+
| Field name | Type | Required | Options / Notes |
|
|
30
|
+
|---|---|---|---|
|
|
31
|
+
| `[fieldName]` | `[TEXT / NUMBER / SELECT / RELATION / ...]` | [Yes / No] | [options or notes] |
|
|
32
|
+
| `[fieldName]` | `[TYPE]` | [Yes / No] | |
|
|
33
|
+
|
|
34
|
+
**Relationships:**
|
|
35
|
+
- Links to `[Object]` via `[fieldName]` (one-to-one / one-to-many / many-to-many)
|
|
36
|
+
|
|
37
|
+
**Display configuration:**
|
|
38
|
+
- Label (singular): [label]
|
|
39
|
+
- Label (plural): [label plural]
|
|
40
|
+
- Icon: [Twenty icon name]
|
|
41
|
+
- Default view: [list / kanban]
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## 3. PERSON OBJECT — FIELD CONFIGURATION
|
|
46
|
+
|
|
47
|
+
| Field name | Type | Required | Notes |
|
|
48
|
+
|---|---|---|---|
|
|
49
|
+
| `name.firstName` | `TEXT` | Yes | |
|
|
50
|
+
| `name.lastName` | `TEXT` | Yes | |
|
|
51
|
+
| `emails.primaryEmail` | `EMAILS` | Yes | Dedup key |
|
|
52
|
+
| `phones.primaryPhoneNumber` | `PHONES` | No | |
|
|
53
|
+
| `company` | `RELATION` | No | Links to Company |
|
|
54
|
+
| `position` | `TEXT` | No | Job title |
|
|
55
|
+
| `linkedInLink.url` | `LINK` | No | |
|
|
56
|
+
| `city` | `TEXT` | No | |
|
|
57
|
+
| `[customField]` | `[TYPE]` | [Yes/No] | [source: enrichment provider] |
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## 4. COMPANY OBJECT — FIELD CONFIGURATION
|
|
62
|
+
|
|
63
|
+
| Field name | Type | Required | Notes |
|
|
64
|
+
|---|---|---|---|
|
|
65
|
+
| `name` | `TEXT` | Yes | |
|
|
66
|
+
| `domain` | `TEXT` | No | Dedup key |
|
|
67
|
+
| `employees` | `NUMBER` | No | |
|
|
68
|
+
| `annualRecurringRevenue.amountMicros` | `CURRENCY` | No | |
|
|
69
|
+
| `address` | `ADDRESS` | No | |
|
|
70
|
+
| `linkedInLink.url` | `LINK` | No | |
|
|
71
|
+
| `[customField]` | `[TYPE]` | [Yes/No] | |
|
|
72
|
+
|
|
73
|
+
---
|
|
74
|
+
|
|
75
|
+
## 5. OPPORTUNITY OBJECT — FIELD CONFIGURATION
|
|
76
|
+
|
|
77
|
+
| Field name | Type | Required | Notes |
|
|
78
|
+
|---|---|---|---|
|
|
79
|
+
| `name` | `TEXT` | Yes | |
|
|
80
|
+
| `stage` | `SELECT` | Yes | See stage options below |
|
|
81
|
+
| `amount.amountMicros` | `CURRENCY` | No | Store in micros (×1,000,000) |
|
|
82
|
+
| `closeDate` | `DATE` | No | ISO 8601 |
|
|
83
|
+
| `pointOfContact` | `RELATION` | No | Links to Person |
|
|
84
|
+
| `[customField]` | `[TYPE]` | [Yes/No] | |
|
|
85
|
+
|
|
86
|
+
**Stage options (SELECT values):**
|
|
87
|
+
|
|
88
|
+
| Value | Label | Order |
|
|
89
|
+
|---|---|---|
|
|
90
|
+
| `LEAD` | Lead | 1 |
|
|
91
|
+
| `QUALIFIED` | Qualified | 2 |
|
|
92
|
+
| `DEMO` | Demo | 3 |
|
|
93
|
+
| `PROPOSAL` | Proposal | 4 |
|
|
94
|
+
| `CLOSED_WON` | Closed Won | 5 |
|
|
95
|
+
| `CLOSED_LOST` | Closed Lost | 6 |
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## 6. RELATIONSHIP MAP
|
|
100
|
+
|
|
101
|
+
```text
|
|
102
|
+
Person ──── company ────> Company
|
|
103
|
+
Person <─── pointOfContact ─── Opportunity
|
|
104
|
+
Company <─── [relation] ─── [CustomObject]
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
---
|
|
108
|
+
|
|
109
|
+
## 7. OPEN QUESTIONS / DECISIONS REQUIRED
|
|
110
|
+
|
|
111
|
+
- [ ] [Decision 1 — e.g. "Should LeadSource be a custom field on Person or a separate custom object?"]
|
|
112
|
+
- [ ] [Decision 2]
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
# Enrichment Field Map — [CLIENT NAME]
|
|
2
|
+
|
|
3
|
+
**Date:** YYYY-MM-DD
|
|
4
|
+
**Kit:** `growthub-twenty-crm-v1`
|
|
5
|
+
**Provider:** [Apollo / Clearbit / Clay / Hunter / other]
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## PERSON FIELD MAP
|
|
10
|
+
|
|
11
|
+
**Dedup key:** `emails.primaryEmail`
|
|
12
|
+
**Update frequency:** [weekly / monthly / on-trigger]
|
|
13
|
+
|
|
14
|
+
| Provider field | Provider type | → | Twenty object | Twenty field | Twenty type | Transformation | Required |
|
|
15
|
+
|---|---|---|---|---|---|---|---|
|
|
16
|
+
| `first_name` | string | → | `Person` | `name.firstName` | `TEXT` | none | Yes |
|
|
17
|
+
| `last_name` | string | → | `Person` | `name.lastName` | `TEXT` | none | Yes |
|
|
18
|
+
| `email` | string | → | `Person` | `emails.primaryEmail` | `EMAILS` | lowercase, trim | Yes (dedup key) |
|
|
19
|
+
| `phone_numbers[0].raw_number` | string | → | `Person` | `phones.primaryPhoneNumber` | `PHONES` | none | No |
|
|
20
|
+
| `title` | string | → | `Person` | `position` | `TEXT` | none | No |
|
|
21
|
+
| `linkedin_url` | string | → | `Person` | `linkedInLink.url` | `LINK` | none | No |
|
|
22
|
+
| `city` | string | → | `Person` | `city` | `TEXT` | none | No |
|
|
23
|
+
| `seniority` | string | → | `Person` | `[custom field: seniority]` | `SELECT` | map to SELECT options | No |
|
|
24
|
+
| `departments` | array | → | `Person` | `[custom field: department]` | `TEXT` | join with comma | No |
|
|
25
|
+
| `[provider field]` | [type] | → | `Person` | `[field]` | `[type]` | [transform] | [Yes/No] |
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## COMPANY FIELD MAP
|
|
30
|
+
|
|
31
|
+
**Dedup key:** `domain`
|
|
32
|
+
**Update frequency:** [same as person / separate cadence]`
|
|
33
|
+
|
|
34
|
+
| Provider field | Provider type | → | Twenty object | Twenty field | Twenty type | Transformation | Required |
|
|
35
|
+
|---|---|---|---|---|---|---|---|
|
|
36
|
+
| `organization.name` | string | → | `Company` | `name` | `TEXT` | none | Yes |
|
|
37
|
+
| `organization.website_url` | string | → | `Company` | `domain` | `TEXT` | strip protocol, strip trailing slash | Yes (dedup key) |
|
|
38
|
+
| `organization.estimated_num_employees` | integer | → | `Company` | `employees` | `NUMBER` | integer cast | No |
|
|
39
|
+
| `organization.annual_revenue` | number | → | `Company` | `annualRecurringRevenue.amountMicros` | `CURRENCY` | multiply by 1,000,000 | No |
|
|
40
|
+
| `organization.industry` | string | → | `Company` | `[custom field: industry]` | `SELECT` | map to SELECT options | No |
|
|
41
|
+
| `organization.linkedin_url` | string | → | `Company` | `linkedInLink.url` | `LINK` | none | No |
|
|
42
|
+
| `[provider field]` | [type] | → | `Company` | `[field]` | `[type]` | [transform] | [Yes/No] |
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## SELECT OPTION MAPPINGS
|
|
47
|
+
|
|
48
|
+
### seniority → Person.seniority
|
|
49
|
+
|
|
50
|
+
| Provider value | → | Twenty SELECT value |
|
|
51
|
+
|---|---|---|
|
|
52
|
+
| `founder` | → | `FOUNDER` |
|
|
53
|
+
| `c_suite` | → | `C_SUITE` |
|
|
54
|
+
| `vp` | → | `VP` |
|
|
55
|
+
| `director` | → | `DIRECTOR` |
|
|
56
|
+
| `manager` | → | `MANAGER` |
|
|
57
|
+
| `individual_contributor` | → | `INDIVIDUAL_CONTRIBUTOR` |
|
|
58
|
+
| `[value]` | → | `[TWENTY_VALUE]` |
|
|
59
|
+
|
|
60
|
+
### industry → Company.industry
|
|
61
|
+
|
|
62
|
+
| Provider value | → | Twenty SELECT value |
|
|
63
|
+
|---|---|---|
|
|
64
|
+
| `software` | → | `SOFTWARE` |
|
|
65
|
+
| `saas` | → | `SOFTWARE` |
|
|
66
|
+
| `fintech` | → | `FINTECH` |
|
|
67
|
+
| `healthtech` | → | `HEALTHTECH` |
|
|
68
|
+
| `ecommerce` | → | `ECOMMERCE` |
|
|
69
|
+
| `[value]` | → | `[TWENTY_VALUE]` |
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
## FIELDS EXCLUDED FROM ENRICHMENT
|
|
74
|
+
|
|
75
|
+
| Provider field | Reason for exclusion |
|
|
76
|
+
|---|---|
|
|
77
|
+
| `id` | Internal provider ID — not stored in Twenty |
|
|
78
|
+
| `photo_url` | Not mapped — no avatar field in standard Twenty |
|
|
79
|
+
| `[field]` | [reason] |
|
|
80
|
+
|
|
81
|
+
---
|
|
82
|
+
|
|
83
|
+
## EDGE CASES AND NOTES
|
|
84
|
+
|
|
85
|
+
| Case | Handling |
|
|
86
|
+
|---|---|
|
|
87
|
+
| Email is null | Skip record — log to error file |
|
|
88
|
+
| Domain is null on company | Attempt to extract from email domain — if still null, skip |
|
|
89
|
+
| Multiple emails returned | Use `email` field as primary; log additional emails |
|
|
90
|
+
| Revenue value is 0 | Do not import — leave `annualRecurringRevenue` blank |
|
|
91
|
+
| [Case] | [handling] |
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
## ENRICHMENT MATCH KEY SUMMARY
|
|
96
|
+
|
|
97
|
+
| Object | Primary key | Secondary key | Fallback |
|
|
98
|
+
|---|---|---|---|
|
|
99
|
+
| `Person` | `emails.primaryEmail` | `linkedInLink.url` | Skip and log |
|
|
100
|
+
| `Company` | `domain` | `name` (exact match) | Create new |
|