@org.ai/examples 0.0.1
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/.turbo/turbo-build.log +4 -0
- package/LICENSE +21 -0
- package/README.md +147 -0
- package/api-business/index.ts +1179 -0
- package/directory/index.ts +1118 -0
- package/dist/api-business/index.d.ts +221 -0
- package/dist/api-business/index.d.ts.map +1 -0
- package/dist/api-business/index.js +1132 -0
- package/dist/api-business/index.js.map +1 -0
- package/dist/directory/index.d.ts +202 -0
- package/dist/directory/index.d.ts.map +1 -0
- package/dist/directory/index.js +1073 -0
- package/dist/directory/index.js.map +1 -0
- package/dist/index.d.ts +75 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +127 -0
- package/dist/index.js.map +1 -0
- package/dist/marketplace/index.d.ts +242 -0
- package/dist/marketplace/index.d.ts.map +1 -0
- package/dist/marketplace/index.js +1249 -0
- package/dist/marketplace/index.js.map +1 -0
- package/dist/saas/index.d.ts +151 -0
- package/dist/saas/index.d.ts.map +1 -0
- package/dist/saas/index.js +1142 -0
- package/dist/saas/index.js.map +1 -0
- package/dist/startup-studio/index.d.ts +285 -0
- package/dist/startup-studio/index.d.ts.map +1 -0
- package/dist/startup-studio/index.js +1252 -0
- package/dist/startup-studio/index.js.map +1 -0
- package/dist/vc-firm/index.d.ts +248 -0
- package/dist/vc-firm/index.d.ts.map +1 -0
- package/dist/vc-firm/index.js +1335 -0
- package/dist/vc-firm/index.js.map +1 -0
- package/index.ts +151 -0
- package/marketplace/index.ts +1295 -0
- package/package.json +58 -0
- package/saas/index.ts +1188 -0
- package/startup-studio/index.ts +1324 -0
- package/tsconfig.json +12 -0
- package/vc-firm/index.ts +1430 -0
|
@@ -0,0 +1,1118 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Directory Business Example
|
|
3
|
+
*
|
|
4
|
+
* A complete example of a directory/listing business modeled using primitives.org.ai
|
|
5
|
+
* Think: ProductHunt, Crunchbase, G2, Capterra, Yellow Pages, Yelp for B2B
|
|
6
|
+
*
|
|
7
|
+
* @example TechDirectory - A curated directory of SaaS tools
|
|
8
|
+
* @packageDocumentation
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* NOTE: These examples demonstrate the DESIRED API shape for business-as-code.
|
|
13
|
+
* Some types may not exist yet in the actual package. The examples serve as
|
|
14
|
+
* documentation and specification for the ideal primitives API.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
// Use any for flexibility - these examples define the ideal API shape
|
|
18
|
+
const Business = (def: any) => def
|
|
19
|
+
const Product = (def: any) => def
|
|
20
|
+
const Service = (def: any) => def
|
|
21
|
+
const Goals = (defs: any[]) => defs
|
|
22
|
+
const Vision = (def: any) => def
|
|
23
|
+
const kpis = (defs: any[]) => defs
|
|
24
|
+
const okrs = (defs: any[]) => defs
|
|
25
|
+
const financials = (def: any) => def
|
|
26
|
+
const Process = (def: any) => def
|
|
27
|
+
const Workflow = (def: any) => def
|
|
28
|
+
const createBusinessRole = (def: any) => def
|
|
29
|
+
|
|
30
|
+
// Re-export Organization type placeholder
|
|
31
|
+
export interface Organization {
|
|
32
|
+
id: string
|
|
33
|
+
name: string
|
|
34
|
+
settings?: any
|
|
35
|
+
departments?: any[]
|
|
36
|
+
teams?: any[]
|
|
37
|
+
roles?: any[]
|
|
38
|
+
approvalChains?: any[]
|
|
39
|
+
routingRules?: any[]
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// $ helper placeholder
|
|
43
|
+
const $ = {
|
|
44
|
+
format: (n: number) => `$${n.toLocaleString()}`,
|
|
45
|
+
growth: (current: number, previous: number) => ((current - previous) / previous * 100).toFixed(1),
|
|
46
|
+
margin: (revenue: number, cost: number) => ((revenue - cost) / revenue * 100).toFixed(1),
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// =============================================================================
|
|
50
|
+
// 1. BUSINESS DEFINITION
|
|
51
|
+
// =============================================================================
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* TechDirectory - Curated SaaS Tools Directory
|
|
55
|
+
*/
|
|
56
|
+
export const TechDirectoryBusiness = Business({
|
|
57
|
+
name: 'TechDirectory Inc.',
|
|
58
|
+
mission: 'Help businesses discover and compare the best software tools',
|
|
59
|
+
values: ['Curation Quality', 'User Trust', 'Vendor Fairness', 'Community'],
|
|
60
|
+
industry: 'Media / Information Services',
|
|
61
|
+
founded: new Date('2020-03-15'),
|
|
62
|
+
stage: 'growth',
|
|
63
|
+
structure: {
|
|
64
|
+
departments: [
|
|
65
|
+
{
|
|
66
|
+
name: 'Product & Engineering',
|
|
67
|
+
headcount: 18,
|
|
68
|
+
budget: 2200000,
|
|
69
|
+
teams: [
|
|
70
|
+
{ name: 'Platform', headcount: 6, focus: 'Core directory platform' },
|
|
71
|
+
{ name: 'Search & Discovery', headcount: 4, focus: 'Search, recommendations' },
|
|
72
|
+
{ name: 'Data', headcount: 4, focus: 'Data pipelines, enrichment' },
|
|
73
|
+
{ name: 'Growth', headcount: 4, focus: 'Acquisition, engagement' },
|
|
74
|
+
],
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
name: 'Content & Curation',
|
|
78
|
+
headcount: 12,
|
|
79
|
+
budget: 900000,
|
|
80
|
+
teams: [
|
|
81
|
+
{ name: 'Editorial', headcount: 4, focus: 'Reviews, guides, comparisons' },
|
|
82
|
+
{ name: 'Curation', headcount: 4, focus: 'Listing quality, verification' },
|
|
83
|
+
{ name: 'Community', headcount: 4, focus: 'User reviews, Q&A' },
|
|
84
|
+
],
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
name: 'Sales & Partnerships',
|
|
88
|
+
headcount: 10,
|
|
89
|
+
budget: 1200000,
|
|
90
|
+
teams: [
|
|
91
|
+
{ name: 'Vendor Sales', headcount: 5, focus: 'Premium listings' },
|
|
92
|
+
{ name: 'Partnerships', headcount: 3, focus: 'Affiliate, integrations' },
|
|
93
|
+
{ name: 'Account Management', headcount: 2, focus: 'Vendor success' },
|
|
94
|
+
],
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
name: 'Marketing',
|
|
98
|
+
headcount: 6,
|
|
99
|
+
budget: 800000,
|
|
100
|
+
teams: [
|
|
101
|
+
{ name: 'SEO & Content', headcount: 3 },
|
|
102
|
+
{ name: 'Demand Gen', headcount: 3 },
|
|
103
|
+
],
|
|
104
|
+
},
|
|
105
|
+
],
|
|
106
|
+
},
|
|
107
|
+
})
|
|
108
|
+
|
|
109
|
+
// =============================================================================
|
|
110
|
+
// 2. VISION & GOALS
|
|
111
|
+
// =============================================================================
|
|
112
|
+
|
|
113
|
+
export const TechDirectoryVision = Vision({
|
|
114
|
+
statement: 'Be the most trusted source for software discovery worldwide',
|
|
115
|
+
timeHorizon: '2027',
|
|
116
|
+
pillars: [
|
|
117
|
+
'Content Quality',
|
|
118
|
+
'User Trust',
|
|
119
|
+
'Vendor Ecosystem',
|
|
120
|
+
'Data Excellence',
|
|
121
|
+
],
|
|
122
|
+
successIndicators: [
|
|
123
|
+
{ name: 'Monthly Visitors', target: 10000000 },
|
|
124
|
+
{ name: 'Listed Tools', target: 50000 },
|
|
125
|
+
{ name: 'Verified Reviews', target: 500000 },
|
|
126
|
+
{ name: 'Vendor NPS', target: 50 },
|
|
127
|
+
],
|
|
128
|
+
})
|
|
129
|
+
|
|
130
|
+
export const TechDirectoryGoals = Goals([
|
|
131
|
+
{
|
|
132
|
+
name: 'Reach 3M Monthly Visitors',
|
|
133
|
+
category: 'growth',
|
|
134
|
+
status: 'in-progress',
|
|
135
|
+
progress: 70,
|
|
136
|
+
dueDate: new Date('2024-12-31'),
|
|
137
|
+
owner: 'VP Marketing',
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
name: 'Launch AI-Powered Recommendations',
|
|
141
|
+
category: 'product',
|
|
142
|
+
status: 'in-progress',
|
|
143
|
+
progress: 45,
|
|
144
|
+
dueDate: new Date('2024-06-30'),
|
|
145
|
+
owner: 'VP Product',
|
|
146
|
+
},
|
|
147
|
+
{
|
|
148
|
+
name: 'Expand to 25K Listed Tools',
|
|
149
|
+
category: 'content',
|
|
150
|
+
status: 'in-progress',
|
|
151
|
+
progress: 60,
|
|
152
|
+
dueDate: new Date('2024-09-30'),
|
|
153
|
+
owner: 'Content Lead',
|
|
154
|
+
},
|
|
155
|
+
{
|
|
156
|
+
name: '1000 Paying Vendors',
|
|
157
|
+
category: 'revenue',
|
|
158
|
+
status: 'in-progress',
|
|
159
|
+
progress: 65,
|
|
160
|
+
dueDate: new Date('2024-12-31'),
|
|
161
|
+
owner: 'VP Sales',
|
|
162
|
+
},
|
|
163
|
+
{
|
|
164
|
+
name: '$5M ARR',
|
|
165
|
+
category: 'financial',
|
|
166
|
+
status: 'in-progress',
|
|
167
|
+
progress: 55,
|
|
168
|
+
dueDate: new Date('2024-12-31'),
|
|
169
|
+
owner: 'CEO',
|
|
170
|
+
},
|
|
171
|
+
])
|
|
172
|
+
|
|
173
|
+
// =============================================================================
|
|
174
|
+
// 3. PRODUCTS & SERVICES
|
|
175
|
+
// =============================================================================
|
|
176
|
+
|
|
177
|
+
export const DirectoryPlatform = Product({
|
|
178
|
+
name: 'TechDirectory Platform',
|
|
179
|
+
description: 'The core directory platform for discovering software tools',
|
|
180
|
+
pricingModel: 'freemium',
|
|
181
|
+
features: [
|
|
182
|
+
'Tool search & discovery',
|
|
183
|
+
'Category browsing',
|
|
184
|
+
'Comparison tables',
|
|
185
|
+
'User reviews & ratings',
|
|
186
|
+
'Tool profiles',
|
|
187
|
+
'Alternatives finder',
|
|
188
|
+
'Stack builder',
|
|
189
|
+
],
|
|
190
|
+
roadmap: [
|
|
191
|
+
{ name: 'AI Recommendations', status: 'in-progress', priority: 'high', targetDate: new Date('2024-Q2') },
|
|
192
|
+
{ name: 'Integration Directory', status: 'planned', priority: 'medium', targetDate: new Date('2024-Q3') },
|
|
193
|
+
{ name: 'Pricing Intelligence', status: 'planned', priority: 'high', targetDate: new Date('2024-Q4') },
|
|
194
|
+
],
|
|
195
|
+
})
|
|
196
|
+
|
|
197
|
+
/**
|
|
198
|
+
* Vendor Products (B2B Revenue)
|
|
199
|
+
*/
|
|
200
|
+
export const VendorProducts = {
|
|
201
|
+
basicListing: Product({
|
|
202
|
+
name: 'Basic Listing',
|
|
203
|
+
description: 'Free listing with verified profile',
|
|
204
|
+
pricingModel: 'free',
|
|
205
|
+
features: [
|
|
206
|
+
'Basic profile',
|
|
207
|
+
'Logo & description',
|
|
208
|
+
'Category listing',
|
|
209
|
+
'User reviews',
|
|
210
|
+
'Basic analytics',
|
|
211
|
+
],
|
|
212
|
+
}),
|
|
213
|
+
premiumListing: Product({
|
|
214
|
+
name: 'Premium Listing',
|
|
215
|
+
description: 'Enhanced visibility and features',
|
|
216
|
+
pricingModel: 'subscription',
|
|
217
|
+
price: 299, // /month
|
|
218
|
+
features: [
|
|
219
|
+
'Everything in Basic',
|
|
220
|
+
'Featured placement',
|
|
221
|
+
'Rich media gallery',
|
|
222
|
+
'Lead capture form',
|
|
223
|
+
'Review response',
|
|
224
|
+
'Competitor insights',
|
|
225
|
+
'Advanced analytics',
|
|
226
|
+
],
|
|
227
|
+
}),
|
|
228
|
+
sponsoredPlacement: Product({
|
|
229
|
+
name: 'Sponsored Placement',
|
|
230
|
+
description: 'Top visibility in search and categories',
|
|
231
|
+
pricingModel: 'usage-based',
|
|
232
|
+
price: 5, // per click
|
|
233
|
+
features: [
|
|
234
|
+
'Category top placement',
|
|
235
|
+
'Search result boost',
|
|
236
|
+
'Comparison table feature',
|
|
237
|
+
'Homepage showcase',
|
|
238
|
+
],
|
|
239
|
+
}),
|
|
240
|
+
enterpriseProfile: Product({
|
|
241
|
+
name: 'Enterprise Profile',
|
|
242
|
+
description: 'Full-featured vendor presence',
|
|
243
|
+
pricingModel: 'subscription',
|
|
244
|
+
price: 999, // /month
|
|
245
|
+
features: [
|
|
246
|
+
'Everything in Premium',
|
|
247
|
+
'Dedicated landing page',
|
|
248
|
+
'Case study publishing',
|
|
249
|
+
'Integration showcase',
|
|
250
|
+
'Custom badges',
|
|
251
|
+
'API access',
|
|
252
|
+
'Dedicated support',
|
|
253
|
+
],
|
|
254
|
+
}),
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
/**
|
|
258
|
+
* Affiliate & Lead Services
|
|
259
|
+
*/
|
|
260
|
+
export const AffiliateServices = Service({
|
|
261
|
+
name: 'Affiliate Partnerships',
|
|
262
|
+
description: 'Revenue share on qualified leads',
|
|
263
|
+
pricingModel: 'performance-based',
|
|
264
|
+
deliverables: [
|
|
265
|
+
'Click tracking',
|
|
266
|
+
'Conversion attribution',
|
|
267
|
+
'Monthly reporting',
|
|
268
|
+
'Dedicated affiliate link',
|
|
269
|
+
],
|
|
270
|
+
})
|
|
271
|
+
|
|
272
|
+
// =============================================================================
|
|
273
|
+
// 4. ORGANIZATION & ROLES
|
|
274
|
+
// =============================================================================
|
|
275
|
+
|
|
276
|
+
export const TechDirectoryOrg: Organization = {
|
|
277
|
+
id: 'techdirectory',
|
|
278
|
+
name: 'TechDirectory Inc.',
|
|
279
|
+
settings: {
|
|
280
|
+
timezone: 'America/New_York',
|
|
281
|
+
currency: 'USD',
|
|
282
|
+
fiscalYearStart: 1,
|
|
283
|
+
},
|
|
284
|
+
departments: [
|
|
285
|
+
{
|
|
286
|
+
id: 'content',
|
|
287
|
+
name: 'Content & Curation',
|
|
288
|
+
permissions: {
|
|
289
|
+
listings: ['read', 'write', 'publish', 'feature'],
|
|
290
|
+
reviews: ['read', 'write', 'moderate'],
|
|
291
|
+
content: ['read', 'write', 'publish'],
|
|
292
|
+
},
|
|
293
|
+
teams: [
|
|
294
|
+
{
|
|
295
|
+
id: 'editorial',
|
|
296
|
+
name: 'Editorial',
|
|
297
|
+
positions: [
|
|
298
|
+
{ id: 'editor-chief', title: 'Editor in Chief', roleId: 'content-lead', reportsTo: 'ceo' },
|
|
299
|
+
{ id: 'senior-editor', title: 'Senior Editor', roleId: 'editor', reportsTo: 'editor-chief' },
|
|
300
|
+
],
|
|
301
|
+
},
|
|
302
|
+
{
|
|
303
|
+
id: 'curation',
|
|
304
|
+
name: 'Curation',
|
|
305
|
+
positions: [
|
|
306
|
+
{ id: 'curation-lead', title: 'Curation Lead', roleId: 'curator', reportsTo: 'editor-chief' },
|
|
307
|
+
{ id: 'curator-1', title: 'Curator', roleId: 'curator', reportsTo: 'curation-lead' },
|
|
308
|
+
],
|
|
309
|
+
},
|
|
310
|
+
],
|
|
311
|
+
},
|
|
312
|
+
{
|
|
313
|
+
id: 'sales',
|
|
314
|
+
name: 'Sales & Partnerships',
|
|
315
|
+
permissions: {
|
|
316
|
+
vendors: ['read', 'write', 'manage'],
|
|
317
|
+
deals: ['read', 'write', 'negotiate'],
|
|
318
|
+
partnerships: ['read', 'write', 'manage'],
|
|
319
|
+
},
|
|
320
|
+
},
|
|
321
|
+
{
|
|
322
|
+
id: 'engineering',
|
|
323
|
+
name: 'Engineering',
|
|
324
|
+
permissions: {
|
|
325
|
+
code: ['read', 'write', 'deploy'],
|
|
326
|
+
data: ['read', 'write', 'manage'],
|
|
327
|
+
infrastructure: ['read', 'write'],
|
|
328
|
+
},
|
|
329
|
+
},
|
|
330
|
+
],
|
|
331
|
+
roles: [
|
|
332
|
+
createBusinessRole({
|
|
333
|
+
id: 'content-lead',
|
|
334
|
+
name: 'Content Lead',
|
|
335
|
+
type: 'manager',
|
|
336
|
+
level: 6,
|
|
337
|
+
permissions: {
|
|
338
|
+
listings: ['read', 'write', 'publish', 'feature', 'delete'],
|
|
339
|
+
reviews: ['read', 'write', 'moderate', 'delete'],
|
|
340
|
+
content: ['read', 'write', 'publish'],
|
|
341
|
+
},
|
|
342
|
+
canHandle: ['content-strategy', 'editorial-review', 'quality-control'],
|
|
343
|
+
canApprove: ['listing-publish', 'feature-decision', 'content-removal'],
|
|
344
|
+
}),
|
|
345
|
+
createBusinessRole({
|
|
346
|
+
id: 'editor',
|
|
347
|
+
name: 'Editor',
|
|
348
|
+
type: 'support',
|
|
349
|
+
level: 4,
|
|
350
|
+
permissions: {
|
|
351
|
+
listings: ['read', 'write', 'publish'],
|
|
352
|
+
reviews: ['read', 'write', 'moderate'],
|
|
353
|
+
content: ['read', 'write'],
|
|
354
|
+
},
|
|
355
|
+
canHandle: ['listing-review', 'content-editing', 'comparison-writing'],
|
|
356
|
+
}),
|
|
357
|
+
createBusinessRole({
|
|
358
|
+
id: 'curator',
|
|
359
|
+
name: 'Curator',
|
|
360
|
+
type: 'support',
|
|
361
|
+
level: 3,
|
|
362
|
+
permissions: {
|
|
363
|
+
listings: ['read', 'write'],
|
|
364
|
+
reviews: ['read', 'moderate'],
|
|
365
|
+
},
|
|
366
|
+
canHandle: ['listing-verification', 'data-enrichment', 'categorization'],
|
|
367
|
+
}),
|
|
368
|
+
createBusinessRole({
|
|
369
|
+
id: 'community-mod',
|
|
370
|
+
name: 'Community Moderator',
|
|
371
|
+
type: 'support',
|
|
372
|
+
level: 2,
|
|
373
|
+
workerType: 'hybrid', // AI + human
|
|
374
|
+
permissions: {
|
|
375
|
+
reviews: ['read', 'moderate'],
|
|
376
|
+
comments: ['read', 'moderate'],
|
|
377
|
+
},
|
|
378
|
+
canHandle: ['review-moderation', 'spam-detection', 'community-response'],
|
|
379
|
+
}),
|
|
380
|
+
createBusinessRole({
|
|
381
|
+
id: 'vendor-success',
|
|
382
|
+
name: 'Vendor Success Manager',
|
|
383
|
+
type: 'support',
|
|
384
|
+
level: 4,
|
|
385
|
+
permissions: {
|
|
386
|
+
vendors: ['read', 'write'],
|
|
387
|
+
listings: ['read'],
|
|
388
|
+
analytics: ['read'],
|
|
389
|
+
},
|
|
390
|
+
canHandle: ['vendor-onboarding', 'listing-optimization', 'renewal-management'],
|
|
391
|
+
}),
|
|
392
|
+
createBusinessRole({
|
|
393
|
+
id: 'data-enrichment-bot',
|
|
394
|
+
name: 'Data Enrichment Bot',
|
|
395
|
+
type: 'agent',
|
|
396
|
+
level: 1,
|
|
397
|
+
workerType: 'ai',
|
|
398
|
+
permissions: {
|
|
399
|
+
listings: ['read', 'write'],
|
|
400
|
+
data: ['read', 'write'],
|
|
401
|
+
},
|
|
402
|
+
canHandle: ['data-scraping', 'profile-enrichment', 'pricing-updates'],
|
|
403
|
+
}),
|
|
404
|
+
],
|
|
405
|
+
routingRules: [
|
|
406
|
+
{
|
|
407
|
+
id: 'new-listing-review',
|
|
408
|
+
taskType: 'listing-review',
|
|
409
|
+
priority: 1,
|
|
410
|
+
assignTo: { roleId: 'curator' },
|
|
411
|
+
},
|
|
412
|
+
{
|
|
413
|
+
id: 'review-moderation',
|
|
414
|
+
taskType: 'review-moderation',
|
|
415
|
+
priority: 1,
|
|
416
|
+
assignTo: { roleId: 'community-mod' },
|
|
417
|
+
},
|
|
418
|
+
{
|
|
419
|
+
id: 'vendor-inquiry',
|
|
420
|
+
taskType: 'vendor-inquiry',
|
|
421
|
+
priority: 2,
|
|
422
|
+
assignTo: { roleId: 'vendor-success' },
|
|
423
|
+
},
|
|
424
|
+
],
|
|
425
|
+
}
|
|
426
|
+
|
|
427
|
+
// =============================================================================
|
|
428
|
+
// 5. KPIs & METRICS
|
|
429
|
+
// =============================================================================
|
|
430
|
+
|
|
431
|
+
export const TechDirectoryKPIs = kpis([
|
|
432
|
+
// Traffic & Engagement
|
|
433
|
+
{
|
|
434
|
+
name: 'Monthly Unique Visitors',
|
|
435
|
+
category: 'operational',
|
|
436
|
+
target: 3000000,
|
|
437
|
+
current: 2100000,
|
|
438
|
+
frequency: 'monthly',
|
|
439
|
+
owner: 'VP Marketing',
|
|
440
|
+
},
|
|
441
|
+
{
|
|
442
|
+
name: 'Pages per Session',
|
|
443
|
+
category: 'operational',
|
|
444
|
+
target: 4.5,
|
|
445
|
+
current: 3.8,
|
|
446
|
+
frequency: 'weekly',
|
|
447
|
+
owner: 'VP Product',
|
|
448
|
+
},
|
|
449
|
+
{
|
|
450
|
+
name: 'Time on Site',
|
|
451
|
+
category: 'operational',
|
|
452
|
+
target: 5,
|
|
453
|
+
current: 4.2,
|
|
454
|
+
unit: 'minutes',
|
|
455
|
+
frequency: 'weekly',
|
|
456
|
+
owner: 'VP Product',
|
|
457
|
+
},
|
|
458
|
+
{
|
|
459
|
+
name: 'Bounce Rate',
|
|
460
|
+
category: 'operational',
|
|
461
|
+
target: 40,
|
|
462
|
+
current: 48,
|
|
463
|
+
unit: '%',
|
|
464
|
+
frequency: 'weekly',
|
|
465
|
+
owner: 'VP Marketing',
|
|
466
|
+
},
|
|
467
|
+
// Content Metrics
|
|
468
|
+
{
|
|
469
|
+
name: 'Listed Tools',
|
|
470
|
+
category: 'content',
|
|
471
|
+
target: 25000,
|
|
472
|
+
current: 15000,
|
|
473
|
+
frequency: 'monthly',
|
|
474
|
+
owner: 'Content Lead',
|
|
475
|
+
},
|
|
476
|
+
{
|
|
477
|
+
name: 'Verified Reviews',
|
|
478
|
+
category: 'content',
|
|
479
|
+
target: 200000,
|
|
480
|
+
current: 125000,
|
|
481
|
+
frequency: 'monthly',
|
|
482
|
+
owner: 'Community Lead',
|
|
483
|
+
},
|
|
484
|
+
{
|
|
485
|
+
name: 'Data Completeness Score',
|
|
486
|
+
category: 'content',
|
|
487
|
+
target: 90,
|
|
488
|
+
current: 78,
|
|
489
|
+
unit: '%',
|
|
490
|
+
frequency: 'monthly',
|
|
491
|
+
owner: 'Data Lead',
|
|
492
|
+
},
|
|
493
|
+
// Revenue Metrics
|
|
494
|
+
{
|
|
495
|
+
name: 'Paying Vendors',
|
|
496
|
+
category: 'financial',
|
|
497
|
+
target: 1000,
|
|
498
|
+
current: 650,
|
|
499
|
+
frequency: 'monthly',
|
|
500
|
+
owner: 'VP Sales',
|
|
501
|
+
},
|
|
502
|
+
{
|
|
503
|
+
name: 'MRR',
|
|
504
|
+
category: 'financial',
|
|
505
|
+
target: 400000,
|
|
506
|
+
current: 275000,
|
|
507
|
+
unit: 'USD',
|
|
508
|
+
frequency: 'monthly',
|
|
509
|
+
owner: 'CEO',
|
|
510
|
+
},
|
|
511
|
+
{
|
|
512
|
+
name: 'Affiliate Revenue',
|
|
513
|
+
category: 'financial',
|
|
514
|
+
target: 80000,
|
|
515
|
+
current: 55000,
|
|
516
|
+
unit: 'USD',
|
|
517
|
+
frequency: 'monthly',
|
|
518
|
+
owner: 'Partnerships Lead',
|
|
519
|
+
},
|
|
520
|
+
{
|
|
521
|
+
name: 'Vendor Churn Rate',
|
|
522
|
+
category: 'customer',
|
|
523
|
+
target: 3,
|
|
524
|
+
current: 4.5,
|
|
525
|
+
unit: '%',
|
|
526
|
+
frequency: 'monthly',
|
|
527
|
+
owner: 'VP Sales',
|
|
528
|
+
},
|
|
529
|
+
// SEO Metrics
|
|
530
|
+
{
|
|
531
|
+
name: 'Organic Traffic Share',
|
|
532
|
+
category: 'marketing',
|
|
533
|
+
target: 70,
|
|
534
|
+
current: 62,
|
|
535
|
+
unit: '%',
|
|
536
|
+
frequency: 'monthly',
|
|
537
|
+
owner: 'SEO Lead',
|
|
538
|
+
},
|
|
539
|
+
{
|
|
540
|
+
name: 'Ranking Keywords',
|
|
541
|
+
category: 'marketing',
|
|
542
|
+
target: 50000,
|
|
543
|
+
current: 32000,
|
|
544
|
+
frequency: 'monthly',
|
|
545
|
+
owner: 'SEO Lead',
|
|
546
|
+
},
|
|
547
|
+
])
|
|
548
|
+
|
|
549
|
+
// =============================================================================
|
|
550
|
+
// 6. OKRs
|
|
551
|
+
// =============================================================================
|
|
552
|
+
|
|
553
|
+
export const TechDirectoryOKRs = okrs([
|
|
554
|
+
{
|
|
555
|
+
objective: 'Become the Go-To Resource for Software Discovery',
|
|
556
|
+
owner: 'CEO',
|
|
557
|
+
period: 'Q1 2024',
|
|
558
|
+
keyResults: [
|
|
559
|
+
{
|
|
560
|
+
description: 'Reach 2.5M monthly visitors',
|
|
561
|
+
metric: 'Monthly Visitors',
|
|
562
|
+
targetValue: 2500000,
|
|
563
|
+
currentValue: 2100000,
|
|
564
|
+
},
|
|
565
|
+
{
|
|
566
|
+
description: 'Achieve 4+ pages per session',
|
|
567
|
+
metric: 'Pages per Session',
|
|
568
|
+
targetValue: 4,
|
|
569
|
+
currentValue: 3.8,
|
|
570
|
+
},
|
|
571
|
+
{
|
|
572
|
+
description: 'Grow to 20K listed tools',
|
|
573
|
+
metric: 'Listed Tools',
|
|
574
|
+
targetValue: 20000,
|
|
575
|
+
currentValue: 15000,
|
|
576
|
+
},
|
|
577
|
+
],
|
|
578
|
+
},
|
|
579
|
+
{
|
|
580
|
+
objective: 'Build Trust Through Quality Content',
|
|
581
|
+
owner: 'Content Lead',
|
|
582
|
+
period: 'Q1 2024',
|
|
583
|
+
keyResults: [
|
|
584
|
+
{
|
|
585
|
+
description: 'Achieve 85% data completeness',
|
|
586
|
+
metric: 'Data Completeness',
|
|
587
|
+
targetValue: 85,
|
|
588
|
+
currentValue: 78,
|
|
589
|
+
unit: '%',
|
|
590
|
+
},
|
|
591
|
+
{
|
|
592
|
+
description: 'Publish 100 in-depth comparisons',
|
|
593
|
+
metric: 'Comparisons Published',
|
|
594
|
+
targetValue: 100,
|
|
595
|
+
currentValue: 45,
|
|
596
|
+
},
|
|
597
|
+
{
|
|
598
|
+
description: 'Verify 50K new reviews',
|
|
599
|
+
metric: 'Verified Reviews',
|
|
600
|
+
targetValue: 50000,
|
|
601
|
+
currentValue: 28000,
|
|
602
|
+
},
|
|
603
|
+
],
|
|
604
|
+
},
|
|
605
|
+
{
|
|
606
|
+
objective: 'Scale Vendor Revenue',
|
|
607
|
+
owner: 'VP Sales',
|
|
608
|
+
period: 'Q1 2024',
|
|
609
|
+
keyResults: [
|
|
610
|
+
{
|
|
611
|
+
description: 'Reach 800 paying vendors',
|
|
612
|
+
metric: 'Paying Vendors',
|
|
613
|
+
targetValue: 800,
|
|
614
|
+
currentValue: 650,
|
|
615
|
+
},
|
|
616
|
+
{
|
|
617
|
+
description: 'Achieve $350K MRR',
|
|
618
|
+
metric: 'MRR',
|
|
619
|
+
targetValue: 350000,
|
|
620
|
+
currentValue: 275000,
|
|
621
|
+
unit: 'USD',
|
|
622
|
+
},
|
|
623
|
+
{
|
|
624
|
+
description: 'Reduce vendor churn to 3%',
|
|
625
|
+
metric: 'Vendor Churn',
|
|
626
|
+
targetValue: 3,
|
|
627
|
+
currentValue: 4.5,
|
|
628
|
+
unit: '%',
|
|
629
|
+
},
|
|
630
|
+
],
|
|
631
|
+
},
|
|
632
|
+
{
|
|
633
|
+
objective: 'Dominate Organic Search',
|
|
634
|
+
owner: 'VP Marketing',
|
|
635
|
+
period: 'Q1 2024',
|
|
636
|
+
keyResults: [
|
|
637
|
+
{
|
|
638
|
+
description: 'Rank for 40K keywords',
|
|
639
|
+
metric: 'Ranking Keywords',
|
|
640
|
+
targetValue: 40000,
|
|
641
|
+
currentValue: 32000,
|
|
642
|
+
},
|
|
643
|
+
{
|
|
644
|
+
description: 'Achieve 65% organic traffic share',
|
|
645
|
+
metric: 'Organic Traffic',
|
|
646
|
+
targetValue: 65,
|
|
647
|
+
currentValue: 62,
|
|
648
|
+
unit: '%',
|
|
649
|
+
},
|
|
650
|
+
{
|
|
651
|
+
description: 'Top 3 ranking for 500 key terms',
|
|
652
|
+
metric: 'Top 3 Rankings',
|
|
653
|
+
targetValue: 500,
|
|
654
|
+
currentValue: 320,
|
|
655
|
+
},
|
|
656
|
+
],
|
|
657
|
+
},
|
|
658
|
+
])
|
|
659
|
+
|
|
660
|
+
// =============================================================================
|
|
661
|
+
// 7. PROCESSES
|
|
662
|
+
// =============================================================================
|
|
663
|
+
|
|
664
|
+
export const ListingSubmissionProcess = Process({
|
|
665
|
+
name: 'Listing Submission',
|
|
666
|
+
description: 'Process for new tool listings',
|
|
667
|
+
owner: 'Content Lead',
|
|
668
|
+
steps: [
|
|
669
|
+
{
|
|
670
|
+
order: 1,
|
|
671
|
+
name: 'Submission',
|
|
672
|
+
description: 'Vendor submits listing request',
|
|
673
|
+
automationLevel: 'automated',
|
|
674
|
+
duration: 'instant',
|
|
675
|
+
},
|
|
676
|
+
{
|
|
677
|
+
order: 2,
|
|
678
|
+
name: 'Initial Validation',
|
|
679
|
+
description: 'Automated validation of submission data',
|
|
680
|
+
automationLevel: 'automated',
|
|
681
|
+
duration: '5 minutes',
|
|
682
|
+
},
|
|
683
|
+
{
|
|
684
|
+
order: 3,
|
|
685
|
+
name: 'Data Enrichment',
|
|
686
|
+
description: 'AI enriches profile with public data',
|
|
687
|
+
automationLevel: 'automated',
|
|
688
|
+
duration: '30 minutes',
|
|
689
|
+
},
|
|
690
|
+
{
|
|
691
|
+
order: 4,
|
|
692
|
+
name: 'Human Review',
|
|
693
|
+
description: 'Curator reviews and verifies listing',
|
|
694
|
+
automationLevel: 'manual',
|
|
695
|
+
duration: '1 day',
|
|
696
|
+
owner: 'Curator',
|
|
697
|
+
},
|
|
698
|
+
{
|
|
699
|
+
order: 5,
|
|
700
|
+
name: 'Categorization',
|
|
701
|
+
description: 'Assign categories and tags',
|
|
702
|
+
automationLevel: 'semi-automated',
|
|
703
|
+
duration: '15 minutes',
|
|
704
|
+
owner: 'Curator',
|
|
705
|
+
},
|
|
706
|
+
{
|
|
707
|
+
order: 6,
|
|
708
|
+
name: 'Publication',
|
|
709
|
+
description: 'Publish listing to directory',
|
|
710
|
+
automationLevel: 'automated',
|
|
711
|
+
duration: 'instant',
|
|
712
|
+
},
|
|
713
|
+
{
|
|
714
|
+
order: 7,
|
|
715
|
+
name: 'Notification',
|
|
716
|
+
description: 'Notify vendor of publication',
|
|
717
|
+
automationLevel: 'automated',
|
|
718
|
+
duration: 'instant',
|
|
719
|
+
},
|
|
720
|
+
],
|
|
721
|
+
metrics: [
|
|
722
|
+
{ name: 'Time to Publish', target: 48, unit: 'hours' },
|
|
723
|
+
{ name: 'Approval Rate', target: 85, unit: '%' },
|
|
724
|
+
{ name: 'Data Quality Score', target: 90, unit: '%' },
|
|
725
|
+
],
|
|
726
|
+
})
|
|
727
|
+
|
|
728
|
+
export const ReviewModerationProcess = Process({
|
|
729
|
+
name: 'Review Moderation',
|
|
730
|
+
description: 'Moderate user reviews for quality and authenticity',
|
|
731
|
+
owner: 'Community Lead',
|
|
732
|
+
steps: [
|
|
733
|
+
{
|
|
734
|
+
order: 1,
|
|
735
|
+
name: 'Submission',
|
|
736
|
+
description: 'User submits review',
|
|
737
|
+
automationLevel: 'automated',
|
|
738
|
+
duration: 'instant',
|
|
739
|
+
},
|
|
740
|
+
{
|
|
741
|
+
order: 2,
|
|
742
|
+
name: 'Spam Check',
|
|
743
|
+
description: 'AI filters obvious spam',
|
|
744
|
+
automationLevel: 'automated',
|
|
745
|
+
duration: 'instant',
|
|
746
|
+
},
|
|
747
|
+
{
|
|
748
|
+
order: 3,
|
|
749
|
+
name: 'Sentiment Analysis',
|
|
750
|
+
description: 'Analyze review sentiment and flag outliers',
|
|
751
|
+
automationLevel: 'automated',
|
|
752
|
+
duration: '1 minute',
|
|
753
|
+
},
|
|
754
|
+
{
|
|
755
|
+
order: 4,
|
|
756
|
+
name: 'Verification',
|
|
757
|
+
description: 'Verify reviewer identity and usage',
|
|
758
|
+
automationLevel: 'semi-automated',
|
|
759
|
+
duration: '5 minutes',
|
|
760
|
+
},
|
|
761
|
+
{
|
|
762
|
+
order: 5,
|
|
763
|
+
name: 'Human Review',
|
|
764
|
+
description: 'Moderator reviews flagged reviews',
|
|
765
|
+
automationLevel: 'manual',
|
|
766
|
+
duration: '30 minutes',
|
|
767
|
+
owner: 'Community Moderator',
|
|
768
|
+
},
|
|
769
|
+
{
|
|
770
|
+
order: 6,
|
|
771
|
+
name: 'Publication',
|
|
772
|
+
description: 'Publish approved review',
|
|
773
|
+
automationLevel: 'automated',
|
|
774
|
+
duration: 'instant',
|
|
775
|
+
},
|
|
776
|
+
],
|
|
777
|
+
metrics: [
|
|
778
|
+
{ name: 'Auto-Approval Rate', target: 80, unit: '%' },
|
|
779
|
+
{ name: 'Moderation Time', target: 2, unit: 'hours' },
|
|
780
|
+
{ name: 'Fake Review Detection', target: 99, unit: '%' },
|
|
781
|
+
],
|
|
782
|
+
})
|
|
783
|
+
|
|
784
|
+
export const VendorOnboardingProcess = Process({
|
|
785
|
+
name: 'Vendor Onboarding',
|
|
786
|
+
description: 'Onboard new paying vendors',
|
|
787
|
+
owner: 'VP Sales',
|
|
788
|
+
steps: [
|
|
789
|
+
{
|
|
790
|
+
order: 1,
|
|
791
|
+
name: 'Welcome',
|
|
792
|
+
description: 'Send welcome email with credentials',
|
|
793
|
+
automationLevel: 'automated',
|
|
794
|
+
duration: 'instant',
|
|
795
|
+
},
|
|
796
|
+
{
|
|
797
|
+
order: 2,
|
|
798
|
+
name: 'Kickoff Call',
|
|
799
|
+
description: 'Introduction call with vendor',
|
|
800
|
+
automationLevel: 'manual',
|
|
801
|
+
duration: '30 minutes',
|
|
802
|
+
owner: 'Vendor Success Manager',
|
|
803
|
+
},
|
|
804
|
+
{
|
|
805
|
+
order: 3,
|
|
806
|
+
name: 'Profile Setup',
|
|
807
|
+
description: 'Help vendor complete premium profile',
|
|
808
|
+
automationLevel: 'semi-automated',
|
|
809
|
+
duration: '1 week',
|
|
810
|
+
owner: 'Vendor Success Manager',
|
|
811
|
+
},
|
|
812
|
+
{
|
|
813
|
+
order: 4,
|
|
814
|
+
name: 'Badge Assignment',
|
|
815
|
+
description: 'Assign verified badges',
|
|
816
|
+
automationLevel: 'semi-automated',
|
|
817
|
+
duration: '1 day',
|
|
818
|
+
},
|
|
819
|
+
{
|
|
820
|
+
order: 5,
|
|
821
|
+
name: 'Training',
|
|
822
|
+
description: 'Train on analytics and lead management',
|
|
823
|
+
automationLevel: 'manual',
|
|
824
|
+
duration: '1 hour',
|
|
825
|
+
owner: 'Vendor Success Manager',
|
|
826
|
+
},
|
|
827
|
+
{
|
|
828
|
+
order: 6,
|
|
829
|
+
name: 'Go Live',
|
|
830
|
+
description: 'Activate premium features',
|
|
831
|
+
automationLevel: 'automated',
|
|
832
|
+
duration: 'instant',
|
|
833
|
+
},
|
|
834
|
+
],
|
|
835
|
+
metrics: [
|
|
836
|
+
{ name: 'Time to Value', target: 7, unit: 'days' },
|
|
837
|
+
{ name: 'Profile Completion Rate', target: 95, unit: '%' },
|
|
838
|
+
{ name: 'Vendor CSAT', target: 90, unit: '%' },
|
|
839
|
+
],
|
|
840
|
+
})
|
|
841
|
+
|
|
842
|
+
// =============================================================================
|
|
843
|
+
// 8. WORKFLOWS
|
|
844
|
+
// =============================================================================
|
|
845
|
+
|
|
846
|
+
export const NewListingWorkflow = Workflow({
|
|
847
|
+
name: 'New Listing Processing',
|
|
848
|
+
description: 'Automated processing of new listing submissions',
|
|
849
|
+
trigger: { type: 'event', event: 'listing.submitted' },
|
|
850
|
+
actions: [
|
|
851
|
+
{
|
|
852
|
+
order: 1,
|
|
853
|
+
type: 'compute',
|
|
854
|
+
name: 'Validate Submission',
|
|
855
|
+
config: {
|
|
856
|
+
checks: ['url_valid', 'name_unique', 'description_length', 'category_valid'],
|
|
857
|
+
},
|
|
858
|
+
},
|
|
859
|
+
{
|
|
860
|
+
order: 2,
|
|
861
|
+
type: 'condition',
|
|
862
|
+
name: 'Check Validation',
|
|
863
|
+
condition: 'validation.passed == true',
|
|
864
|
+
},
|
|
865
|
+
{
|
|
866
|
+
order: 3,
|
|
867
|
+
type: 'api',
|
|
868
|
+
name: 'Enrich Data',
|
|
869
|
+
config: {
|
|
870
|
+
sources: ['clearbit', 'linkedin', 'crunchbase'],
|
|
871
|
+
fields: ['logo', 'employees', 'funding', 'social'],
|
|
872
|
+
},
|
|
873
|
+
},
|
|
874
|
+
{
|
|
875
|
+
order: 4,
|
|
876
|
+
type: 'compute',
|
|
877
|
+
name: 'Auto-Categorize',
|
|
878
|
+
config: {
|
|
879
|
+
model: 'category-classifier',
|
|
880
|
+
confidence_threshold: 0.8,
|
|
881
|
+
},
|
|
882
|
+
},
|
|
883
|
+
{
|
|
884
|
+
order: 5,
|
|
885
|
+
type: 'condition',
|
|
886
|
+
name: 'Check Auto-Approval',
|
|
887
|
+
condition: 'enrichment.score >= 80 && categorization.confidence >= 0.9',
|
|
888
|
+
},
|
|
889
|
+
{
|
|
890
|
+
order: 6,
|
|
891
|
+
type: 'task',
|
|
892
|
+
name: 'Queue for Review',
|
|
893
|
+
config: {
|
|
894
|
+
type: 'listing-review',
|
|
895
|
+
assignTo: 'curator',
|
|
896
|
+
priority: 'normal',
|
|
897
|
+
},
|
|
898
|
+
},
|
|
899
|
+
],
|
|
900
|
+
})
|
|
901
|
+
|
|
902
|
+
export const ReviewVerificationWorkflow = Workflow({
|
|
903
|
+
name: 'Review Verification',
|
|
904
|
+
description: 'Verify authenticity of user reviews',
|
|
905
|
+
trigger: { type: 'event', event: 'review.submitted' },
|
|
906
|
+
actions: [
|
|
907
|
+
{
|
|
908
|
+
order: 1,
|
|
909
|
+
type: 'compute',
|
|
910
|
+
name: 'Spam Detection',
|
|
911
|
+
config: {
|
|
912
|
+
model: 'spam-classifier',
|
|
913
|
+
checks: ['content', 'user_history', 'ip_reputation'],
|
|
914
|
+
},
|
|
915
|
+
},
|
|
916
|
+
{
|
|
917
|
+
order: 2,
|
|
918
|
+
type: 'condition',
|
|
919
|
+
name: 'Check Spam',
|
|
920
|
+
condition: 'spam.score < 0.3',
|
|
921
|
+
},
|
|
922
|
+
{
|
|
923
|
+
order: 3,
|
|
924
|
+
type: 'compute',
|
|
925
|
+
name: 'Verify User',
|
|
926
|
+
config: {
|
|
927
|
+
checks: ['email_verified', 'linked_profile', 'usage_signals'],
|
|
928
|
+
},
|
|
929
|
+
},
|
|
930
|
+
{
|
|
931
|
+
order: 4,
|
|
932
|
+
type: 'compute',
|
|
933
|
+
name: 'Analyze Content',
|
|
934
|
+
config: {
|
|
935
|
+
checks: ['sentiment', 'specificity', 'helpful_vote_prediction'],
|
|
936
|
+
},
|
|
937
|
+
},
|
|
938
|
+
{
|
|
939
|
+
order: 5,
|
|
940
|
+
type: 'condition',
|
|
941
|
+
name: 'Check Auto-Approve',
|
|
942
|
+
condition: 'verification.score >= 70 && content.score >= 60',
|
|
943
|
+
},
|
|
944
|
+
{
|
|
945
|
+
order: 6,
|
|
946
|
+
type: 'api',
|
|
947
|
+
name: 'Publish Review',
|
|
948
|
+
config: { action: 'publish', notify_vendor: true },
|
|
949
|
+
},
|
|
950
|
+
{
|
|
951
|
+
order: 7,
|
|
952
|
+
type: 'task',
|
|
953
|
+
name: 'Queue Manual Review',
|
|
954
|
+
config: {
|
|
955
|
+
type: 'review-moderation',
|
|
956
|
+
assignTo: 'community-mod',
|
|
957
|
+
reason: 'auto_approval_failed',
|
|
958
|
+
},
|
|
959
|
+
},
|
|
960
|
+
],
|
|
961
|
+
})
|
|
962
|
+
|
|
963
|
+
export const VendorEngagementWorkflow = Workflow({
|
|
964
|
+
name: 'Vendor Engagement',
|
|
965
|
+
description: 'Engage free vendors for conversion',
|
|
966
|
+
trigger: { type: 'schedule', cron: '0 10 * * 1' }, // Weekly Monday 10am
|
|
967
|
+
actions: [
|
|
968
|
+
{
|
|
969
|
+
order: 1,
|
|
970
|
+
type: 'compute',
|
|
971
|
+
name: 'Identify High-Value Free Vendors',
|
|
972
|
+
config: {
|
|
973
|
+
criteria: {
|
|
974
|
+
profile_views: '> 1000',
|
|
975
|
+
review_count: '> 10',
|
|
976
|
+
days_since_signup: '> 30',
|
|
977
|
+
has_premium: false,
|
|
978
|
+
},
|
|
979
|
+
},
|
|
980
|
+
},
|
|
981
|
+
{
|
|
982
|
+
order: 2,
|
|
983
|
+
type: 'notification',
|
|
984
|
+
name: 'Send Upgrade Email',
|
|
985
|
+
config: {
|
|
986
|
+
template: 'vendor_upgrade_offer',
|
|
987
|
+
channel: 'email',
|
|
988
|
+
personalize: ['profile_views', 'competitor_comparison'],
|
|
989
|
+
},
|
|
990
|
+
},
|
|
991
|
+
{
|
|
992
|
+
order: 3,
|
|
993
|
+
type: 'wait',
|
|
994
|
+
name: 'Wait 3 Days',
|
|
995
|
+
duration: '3 days',
|
|
996
|
+
},
|
|
997
|
+
{
|
|
998
|
+
order: 4,
|
|
999
|
+
type: 'condition',
|
|
1000
|
+
name: 'Check Not Converted',
|
|
1001
|
+
condition: 'vendor.plan == "free"',
|
|
1002
|
+
},
|
|
1003
|
+
{
|
|
1004
|
+
order: 5,
|
|
1005
|
+
type: 'task',
|
|
1006
|
+
name: 'Assign Sales Outreach',
|
|
1007
|
+
config: {
|
|
1008
|
+
type: 'vendor-outreach',
|
|
1009
|
+
assignTo: 'vendor-sales',
|
|
1010
|
+
data: ['vendor.id', 'engagement_score'],
|
|
1011
|
+
},
|
|
1012
|
+
},
|
|
1013
|
+
],
|
|
1014
|
+
})
|
|
1015
|
+
|
|
1016
|
+
// =============================================================================
|
|
1017
|
+
// 9. FINANCIALS
|
|
1018
|
+
// =============================================================================
|
|
1019
|
+
|
|
1020
|
+
export const TechDirectoryFinancials = financials({
|
|
1021
|
+
revenue: 3960000, // ARR
|
|
1022
|
+
cogs: 594000, // 15% (mostly hosting/data)
|
|
1023
|
+
operatingExpenses: 2800000,
|
|
1024
|
+
depreciation: 50000,
|
|
1025
|
+
interestExpense: 0,
|
|
1026
|
+
otherIncome: 30000,
|
|
1027
|
+
taxes: 100000,
|
|
1028
|
+
})
|
|
1029
|
+
|
|
1030
|
+
export const DirectoryMetrics = {
|
|
1031
|
+
mrr: 275000,
|
|
1032
|
+
arr: 3300000,
|
|
1033
|
+
affiliateRevenue: 660000, // yearly
|
|
1034
|
+
totalRevenue: 3960000,
|
|
1035
|
+
visitors: {
|
|
1036
|
+
monthly: 2100000,
|
|
1037
|
+
organic: 1302000, // 62%
|
|
1038
|
+
pagesPerSession: 3.8,
|
|
1039
|
+
bounceRate: 48,
|
|
1040
|
+
},
|
|
1041
|
+
content: {
|
|
1042
|
+
listedTools: 15000,
|
|
1043
|
+
verifiedReviews: 125000,
|
|
1044
|
+
comparisons: 450,
|
|
1045
|
+
guides: 200,
|
|
1046
|
+
},
|
|
1047
|
+
vendors: {
|
|
1048
|
+
total: 15000,
|
|
1049
|
+
paying: 650,
|
|
1050
|
+
premium: 450,
|
|
1051
|
+
enterprise: 50,
|
|
1052
|
+
sponsored: 150,
|
|
1053
|
+
conversionRate: 4.3, // %
|
|
1054
|
+
},
|
|
1055
|
+
arpu: 423, // MRR / paying vendors
|
|
1056
|
+
vendorChurn: 4.5, // %
|
|
1057
|
+
cac: 1200,
|
|
1058
|
+
ltv: 9500, // 22 months avg
|
|
1059
|
+
}
|
|
1060
|
+
|
|
1061
|
+
// =============================================================================
|
|
1062
|
+
// 10. UTILITY FUNCTIONS
|
|
1063
|
+
// =============================================================================
|
|
1064
|
+
|
|
1065
|
+
export function getBusinessSummary() {
|
|
1066
|
+
return {
|
|
1067
|
+
company: TechDirectoryBusiness,
|
|
1068
|
+
vision: TechDirectoryVision,
|
|
1069
|
+
goals: TechDirectoryGoals,
|
|
1070
|
+
products: { platform: DirectoryPlatform, vendor: VendorProducts },
|
|
1071
|
+
kpis: TechDirectoryKPIs,
|
|
1072
|
+
okrs: TechDirectoryOKRs,
|
|
1073
|
+
financials: TechDirectoryFinancials,
|
|
1074
|
+
metrics: DirectoryMetrics,
|
|
1075
|
+
}
|
|
1076
|
+
}
|
|
1077
|
+
|
|
1078
|
+
export function getTrafficMetrics() {
|
|
1079
|
+
return {
|
|
1080
|
+
visitors: DirectoryMetrics.visitors.monthly.toLocaleString(),
|
|
1081
|
+
organic: `${((DirectoryMetrics.visitors.organic / DirectoryMetrics.visitors.monthly) * 100).toFixed(0)}%`,
|
|
1082
|
+
pagesPerSession: DirectoryMetrics.visitors.pagesPerSession,
|
|
1083
|
+
bounceRate: `${DirectoryMetrics.visitors.bounceRate}%`,
|
|
1084
|
+
}
|
|
1085
|
+
}
|
|
1086
|
+
|
|
1087
|
+
export function getVendorMetrics() {
|
|
1088
|
+
return {
|
|
1089
|
+
total: DirectoryMetrics.vendors.total.toLocaleString(),
|
|
1090
|
+
paying: DirectoryMetrics.vendors.paying,
|
|
1091
|
+
conversionRate: `${DirectoryMetrics.vendors.conversionRate}%`,
|
|
1092
|
+
mrr: $.format(DirectoryMetrics.mrr),
|
|
1093
|
+
arpu: $.format(DirectoryMetrics.arpu),
|
|
1094
|
+
}
|
|
1095
|
+
}
|
|
1096
|
+
|
|
1097
|
+
export default {
|
|
1098
|
+
business: TechDirectoryBusiness,
|
|
1099
|
+
vision: TechDirectoryVision,
|
|
1100
|
+
goals: TechDirectoryGoals,
|
|
1101
|
+
products: { platform: DirectoryPlatform, vendor: VendorProducts },
|
|
1102
|
+
services: { affiliate: AffiliateServices },
|
|
1103
|
+
organization: TechDirectoryOrg,
|
|
1104
|
+
kpis: TechDirectoryKPIs,
|
|
1105
|
+
okrs: TechDirectoryOKRs,
|
|
1106
|
+
processes: {
|
|
1107
|
+
listingSubmission: ListingSubmissionProcess,
|
|
1108
|
+
reviewModeration: ReviewModerationProcess,
|
|
1109
|
+
vendorOnboarding: VendorOnboardingProcess,
|
|
1110
|
+
},
|
|
1111
|
+
workflows: {
|
|
1112
|
+
newListing: NewListingWorkflow,
|
|
1113
|
+
reviewVerification: ReviewVerificationWorkflow,
|
|
1114
|
+
vendorEngagement: VendorEngagementWorkflow,
|
|
1115
|
+
},
|
|
1116
|
+
financials: TechDirectoryFinancials,
|
|
1117
|
+
metrics: DirectoryMetrics,
|
|
1118
|
+
}
|