make-mp-data 3.0.3 → 3.0.5
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/README.md +46 -0
- package/dungeons/array-of-object-lookup-schema.json +327 -0
- package/dungeons/array-of-object-lookup.js +29 -9
- package/dungeons/capstone/capstone-ic3.js +291 -0
- package/dungeons/capstone/capstone-ic4.js +598 -0
- package/dungeons/capstone/capstone-ic5.js +668 -0
- package/dungeons/capstone/generate-product-lookup.js +309 -0
- package/dungeons/ecommerce-schema.json +462 -0
- package/dungeons/{copilot.js → ecommerce.js} +79 -17
- package/dungeons/education-schema.json +2409 -0
- package/dungeons/education.js +226 -462
- package/dungeons/fintech-schema.json +14034 -0
- package/dungeons/fintech.js +134 -413
- package/dungeons/foobar-schema.json +403 -0
- package/dungeons/foobar.js +27 -4
- package/dungeons/food-delivery-schema.json +192 -0
- package/dungeons/food-delivery.js +602 -0
- package/dungeons/food-schema.json +1152 -0
- package/dungeons/food.js +173 -406
- package/dungeons/gaming-schema.json +1270 -0
- package/dungeons/gaming.js +182 -42
- package/dungeons/insurance-application-schema.json +204 -0
- package/dungeons/insurance-application.js +605 -0
- package/dungeons/media-schema.json +906 -0
- package/dungeons/media.js +250 -420
- package/dungeons/retention-cadence-schema.json +78 -0
- package/dungeons/retention-cadence.js +35 -1
- package/dungeons/rpg-schema.json +4526 -0
- package/dungeons/rpg.js +171 -429
- package/dungeons/sanity-schema.json +255 -0
- package/dungeons/sanity.js +21 -10
- package/dungeons/sass-schema.json +1291 -0
- package/dungeons/sass.js +241 -368
- package/dungeons/scd-schema.json +919 -0
- package/dungeons/scd.js +41 -13
- package/dungeons/simple-schema.json +608 -0
- package/dungeons/simple.js +52 -15
- package/dungeons/simplest-schema.json +1418 -0
- package/dungeons/simplest.js +392 -0
- package/dungeons/social-schema.json +1118 -0
- package/dungeons/social.js +150 -391
- package/dungeons/text-generation-schema.json +3096 -0
- package/dungeons/text-generation.js +71 -0
- package/index.js +8 -6
- package/lib/core/config-validator.js +28 -8
- package/lib/core/storage.js +5 -5
- package/lib/generators/events.js +4 -4
- package/lib/orchestrators/mixpanel-sender.js +16 -13
- package/lib/orchestrators/user-loop.js +14 -6
- package/lib/templates/soup-presets.js +188 -0
- package/lib/utils/utils.js +52 -6
- package/package.json +1 -1
- package/types.d.ts +20 -3
- package/dungeons/adspend.js +0 -130
- package/dungeons/anon.js +0 -128
- package/dungeons/benchmark-heavy.js +0 -240
- package/dungeons/benchmark-light.js +0 -140
- package/dungeons/big.js +0 -226
- package/dungeons/business.js +0 -391
- package/dungeons/complex.js +0 -428
- package/dungeons/experiments.js +0 -137
- package/dungeons/funnels.js +0 -309
- package/dungeons/mil.js +0 -323
- package/dungeons/mirror.js +0 -161
- package/dungeons/soup-test.js +0 -52
- package/dungeons/streaming.js +0 -372
- package/dungeons/strict-event-test.js +0 -30
- package/dungeons/student-teacher.js +0 -438
- package/dungeons/too-big-events.js +0 -203
- package/dungeons/user-agent.js +0 -209
package/dungeons/gaming.js
CHANGED
|
@@ -11,7 +11,146 @@ const chance = u.initChance(SEED);
|
|
|
11
11
|
const num_users = 12_000;
|
|
12
12
|
const days = 180;
|
|
13
13
|
|
|
14
|
-
/** @typedef {import("../types.
|
|
14
|
+
/** @typedef {import("../types.d.ts").Dungeon} Config */
|
|
15
|
+
|
|
16
|
+
/*
|
|
17
|
+
* ═══════════════════════════════════════════════════════════════════════════════
|
|
18
|
+
* DATASET OVERVIEW
|
|
19
|
+
* ═══════════════════════════════════════════════════════════════════════════════
|
|
20
|
+
*
|
|
21
|
+
* QuestForge — A D&D-inspired action RPG where players create characters,
|
|
22
|
+
* join parties, embark on quests, fight bosses, and level up. Think Baldur's
|
|
23
|
+
* Gate meets a mobile RPG with in-game purchases and seasonal content.
|
|
24
|
+
*
|
|
25
|
+
* CORE USER LOOP:
|
|
26
|
+
* Players install the app, create a character (race + class + alignment),
|
|
27
|
+
* and join a party. They then cycle through quests — starting quests,
|
|
28
|
+
* engaging in gameplay (attacks, defenses, enemy defeats), completing quests
|
|
29
|
+
* for gold rewards, fighting bosses, and leveling up. In-game purchases
|
|
30
|
+
* (gold, gems, weapons, armor, boosts) monetize the experience.
|
|
31
|
+
*
|
|
32
|
+
* SCALE: 12,000 users, ~1.08M events, 180 days
|
|
33
|
+
*
|
|
34
|
+
* KEY DIMENSIONS:
|
|
35
|
+
* - Platform: Mobile, Xbox, Playstation, Switch, Web
|
|
36
|
+
* - Game mode: Single Player vs Multiplayer (biased toward Multiplayer)
|
|
37
|
+
* - Character: 9 races, 12 classes, 9 alignments, 13 backgrounds
|
|
38
|
+
* - Quests: 5 types, 4 difficulties, 5 locations
|
|
39
|
+
* - Experiment: fast leveling / tension economy / free trial with A/B/C/Control
|
|
40
|
+
*
|
|
41
|
+
* FUNNELS:
|
|
42
|
+
* 1. Onboarding: app install → character creation → join party (80% conversion)
|
|
43
|
+
* 2. Quest loop: start quest → gameplay summary → complete quest (99% conversion)
|
|
44
|
+
*/
|
|
45
|
+
|
|
46
|
+
/*
|
|
47
|
+
* ═══════════════════════════════════════════════════════════════════════════════
|
|
48
|
+
* ANALYTICS HOOKS
|
|
49
|
+
* ═══════════════════════════════════════════════════════════════════════════════
|
|
50
|
+
*
|
|
51
|
+
* This dungeon has 3 deliberate patterns engineered via hooks:
|
|
52
|
+
*
|
|
53
|
+
* ───────────────────────────────────────────────────────────────────────────────
|
|
54
|
+
* 1. GOLD SCALING BY LEVEL (event hook)
|
|
55
|
+
* ───────────────────────────────────────────────────────────────────────────────
|
|
56
|
+
*
|
|
57
|
+
* PATTERN: On "complete quest" events, the quest reward (gold) is multiplied by
|
|
58
|
+
* (1 + level * 0.1), so a level-10 player earns 2x gold and a level-20 player
|
|
59
|
+
* earns 3x gold compared to level-1.
|
|
60
|
+
*
|
|
61
|
+
* HOW TO FIND IT IN MIXPANEL:
|
|
62
|
+
* - Report type: Insights
|
|
63
|
+
* - Event: "complete quest"
|
|
64
|
+
* - Measure: Average of "quest reward (gold)"
|
|
65
|
+
* - Breakdown: "level at end"
|
|
66
|
+
* - Expected: Linear increase — level 1 ≈ 55 gold, level 10 ≈ 110 gold,
|
|
67
|
+
* level 20 ≈ 165 gold. Clear positive correlation between level and reward.
|
|
68
|
+
*
|
|
69
|
+
* ───────────────────────────────────────────────────────────────────────────────
|
|
70
|
+
* 2. WHALE PURCHASES (event hook)
|
|
71
|
+
* ───────────────────────────────────────────────────────────────────────────────
|
|
72
|
+
*
|
|
73
|
+
* PATTERN: ~33% of users (determined by first character of user_id hash) are
|
|
74
|
+
* "whales" who spend 1.8x on in-game purchases and are tagged is_whale: true.
|
|
75
|
+
*
|
|
76
|
+
* HOW TO FIND IT IN MIXPANEL:
|
|
77
|
+
*
|
|
78
|
+
* Report 1: Whale vs Normal Purchase Amounts
|
|
79
|
+
* - Report type: Insights
|
|
80
|
+
* - Event: "in-game purchase"
|
|
81
|
+
* - Measure: Average of "purchase amount"
|
|
82
|
+
* - Breakdown: "is_whale"
|
|
83
|
+
* - Expected: is_whale=true shows ~1.8x higher avg purchase amount than
|
|
84
|
+
* is_whale=false (e.g., ~18 vs ~10)
|
|
85
|
+
*
|
|
86
|
+
* Report 2: Revenue Concentration
|
|
87
|
+
* - Report type: Insights
|
|
88
|
+
* - Event: "in-game purchase"
|
|
89
|
+
* - Measure: Sum of "purchase amount"
|
|
90
|
+
* - Breakdown: "is_whale"
|
|
91
|
+
* - Expected: ~33% of users (whales) contribute disproportionate total revenue
|
|
92
|
+
*
|
|
93
|
+
* ───────────────────────────────────────────────────────────────────────────────
|
|
94
|
+
* 3. ALIGNMENT ARCHETYPE (user hook)
|
|
95
|
+
* ───────────────────────────────────────────────────────────────────────────────
|
|
96
|
+
*
|
|
97
|
+
* PATTERN: User profiles are enriched with an "archetype" property based on
|
|
98
|
+
* alignment. Evil alignments → "villain", Good alignments → "hero", others → "neutral".
|
|
99
|
+
*
|
|
100
|
+
* HOW TO FIND IT IN MIXPANEL:
|
|
101
|
+
*
|
|
102
|
+
* Report 1: Archetype Distribution
|
|
103
|
+
* - Report type: Insights
|
|
104
|
+
* - Event: Any event (e.g., "complete quest")
|
|
105
|
+
* - Measure: Total unique users
|
|
106
|
+
* - Breakdown: User profile "archetype"
|
|
107
|
+
* - Expected: Three segments — "hero" (~22%), "villain" (~22%), "neutral" (~56%)
|
|
108
|
+
* matching the 2/9, 2/9, 5/9 alignment split
|
|
109
|
+
*
|
|
110
|
+
* Report 2: Archetype Behavior Comparison
|
|
111
|
+
* - Report type: Insights
|
|
112
|
+
* - Event: "fight boss"
|
|
113
|
+
* - Measure: Total events per user
|
|
114
|
+
* - Breakdown: User profile "archetype"
|
|
115
|
+
* - Expected: All three archetypes should show similar event volumes
|
|
116
|
+
* (archetype doesn't affect gameplay — just a profiling hook)
|
|
117
|
+
*
|
|
118
|
+
* ═══════════════════════════════════════════════════════════════════════════════
|
|
119
|
+
* EXPECTED METRICS SUMMARY
|
|
120
|
+
* ═══════════════════════════════════════════════════════════════════════════════
|
|
121
|
+
*
|
|
122
|
+
* Hook | Metric | Baseline | Hook Effect | Ratio
|
|
123
|
+
* ────────────────────────|─────────────────────────|──────────|──────────────|──────
|
|
124
|
+
* Gold Scaling | Avg gold at level 1 | ~55 | ~55 | 1.0x
|
|
125
|
+
* Gold Scaling | Avg gold at level 10 | ~55 | ~110 | 2.0x
|
|
126
|
+
* Gold Scaling | Avg gold at level 20 | ~55 | ~165 | 3.0x
|
|
127
|
+
* Whale Purchases | Avg purchase (whale) | ~10 | ~18 | 1.8x
|
|
128
|
+
* Whale Purchases | Revenue share (whale) | ~33% | >50% | disprop.
|
|
129
|
+
* Alignment Archetype | Hero users | — | ~22% | 2/9
|
|
130
|
+
* Alignment Archetype | Villain users | — | ~22% | 2/9
|
|
131
|
+
* Alignment Archetype | Neutral users | — | ~56% | 5/9
|
|
132
|
+
*
|
|
133
|
+
* ═══════════════════════════════════════════════════════════════════════════════
|
|
134
|
+
* ADVANCED ANALYSIS IDEAS
|
|
135
|
+
* ═══════════════════════════════════════════════════════════════════════════════
|
|
136
|
+
*
|
|
137
|
+
* 1. Gold Economy Analysis: Plot avg gold earned by level AND quest difficulty.
|
|
138
|
+
* Do Legendary quests at high levels create outsized gold rewards?
|
|
139
|
+
*
|
|
140
|
+
* 2. Whale Segmentation: Cross-reference is_whale with platform and game mode.
|
|
141
|
+
* Are whales concentrated on mobile? Do multiplayer whales spend more?
|
|
142
|
+
*
|
|
143
|
+
* 3. Archetype × Class Matrix: Do certain class/archetype combos correlate
|
|
144
|
+
* with higher boss fight rates or quest completion?
|
|
145
|
+
*
|
|
146
|
+
* 4. Experiment Impact: Compare "fast leveling" vs "tension economy" vs
|
|
147
|
+
* "free trial" on purchase amounts, level progression, and retention.
|
|
148
|
+
*
|
|
149
|
+
* 5. Quest Difficulty Funnel: How does quest difficulty affect completion
|
|
150
|
+
* rate, death count, and hint/boost usage? Is "Legendary" too hard?
|
|
151
|
+
*
|
|
152
|
+
* ═══════════════════════════════════════════════════════════════════════════════
|
|
153
|
+
*/
|
|
15
154
|
|
|
16
155
|
/** @type {Config} */
|
|
17
156
|
const config = {
|
|
@@ -51,26 +190,26 @@ const config = {
|
|
|
51
190
|
conversionRate: 0.99,
|
|
52
191
|
timeToConvert: 1,
|
|
53
192
|
props: {
|
|
54
|
-
"quest type":
|
|
193
|
+
"quest type": [
|
|
55
194
|
"Rescue",
|
|
56
195
|
"Retrieve",
|
|
57
196
|
"Explore",
|
|
58
197
|
"Destroy",
|
|
59
198
|
"Investigate",
|
|
60
|
-
]
|
|
61
|
-
"quest difficulty":
|
|
199
|
+
],
|
|
200
|
+
"quest difficulty": [
|
|
62
201
|
"Easy",
|
|
63
202
|
"Medium",
|
|
64
203
|
"Hard",
|
|
65
204
|
"Legendary",
|
|
66
|
-
]
|
|
67
|
-
"quest location":
|
|
205
|
+
],
|
|
206
|
+
"quest location": [
|
|
68
207
|
"Forest",
|
|
69
208
|
"Dungeon",
|
|
70
209
|
"Mountain",
|
|
71
210
|
"City",
|
|
72
211
|
"Desert",
|
|
73
|
-
]
|
|
212
|
+
]
|
|
74
213
|
}
|
|
75
214
|
},
|
|
76
215
|
],
|
|
@@ -80,7 +219,7 @@ const config = {
|
|
|
80
219
|
event: "character creation",
|
|
81
220
|
weight: 2,
|
|
82
221
|
properties: {
|
|
83
|
-
mode:
|
|
222
|
+
mode: ["fast", "slow", "template"],
|
|
84
223
|
},
|
|
85
224
|
},
|
|
86
225
|
{
|
|
@@ -88,7 +227,7 @@ const config = {
|
|
|
88
227
|
weight: 8,
|
|
89
228
|
properties: {
|
|
90
229
|
"party size": u.weighNumRange(1, 6),
|
|
91
|
-
"party leader":
|
|
230
|
+
"party leader": [
|
|
92
231
|
"Bard",
|
|
93
232
|
"Cleric",
|
|
94
233
|
"Fighter",
|
|
@@ -98,33 +237,33 @@ const config = {
|
|
|
98
237
|
"Ranger",
|
|
99
238
|
"Sorcerer",
|
|
100
239
|
"Warlock",
|
|
101
|
-
]
|
|
240
|
+
],
|
|
102
241
|
},
|
|
103
242
|
},
|
|
104
243
|
{
|
|
105
244
|
event: "start quest",
|
|
106
245
|
weight: 12,
|
|
107
246
|
properties: {
|
|
108
|
-
"quest type":
|
|
247
|
+
"quest type": [
|
|
109
248
|
"Rescue",
|
|
110
249
|
"Retrieve",
|
|
111
250
|
"Explore",
|
|
112
251
|
"Destroy",
|
|
113
252
|
"Investigate",
|
|
114
|
-
]
|
|
115
|
-
"quest difficulty":
|
|
253
|
+
],
|
|
254
|
+
"quest difficulty": [
|
|
116
255
|
"Easy",
|
|
117
256
|
"Medium",
|
|
118
257
|
"Hard",
|
|
119
258
|
"Legendary",
|
|
120
|
-
]
|
|
121
|
-
"quest location":
|
|
259
|
+
],
|
|
260
|
+
"quest location": [
|
|
122
261
|
"Forest",
|
|
123
262
|
"Dungeon",
|
|
124
263
|
"Mountain",
|
|
125
264
|
"City",
|
|
126
265
|
"Desert",
|
|
127
|
-
]
|
|
266
|
+
],
|
|
128
267
|
"party size": u.weighNumRange(1, 6),
|
|
129
268
|
"used hint": u.pickAWinner(["yes", "no"], 0.3),
|
|
130
269
|
"used boost": u.pickAWinner(["yes", "no"], 0.2),
|
|
@@ -159,7 +298,7 @@ const config = {
|
|
|
159
298
|
"event": "in-game purchase",
|
|
160
299
|
"weight": 2,
|
|
161
300
|
"properties": {
|
|
162
|
-
"purchase type":
|
|
301
|
+
"purchase type": [
|
|
163
302
|
"Gold",
|
|
164
303
|
"Gems",
|
|
165
304
|
"Items: Weapons",
|
|
@@ -168,7 +307,7 @@ const config = {
|
|
|
168
307
|
"Items: Scrolls",
|
|
169
308
|
"Boosts",
|
|
170
309
|
"Currency",
|
|
171
|
-
]
|
|
310
|
+
],
|
|
172
311
|
"purchase amount": u.weighNumRange(1, 50, 1, 20),
|
|
173
312
|
}
|
|
174
313
|
},
|
|
@@ -176,63 +315,63 @@ const config = {
|
|
|
176
315
|
event: "fight boss",
|
|
177
316
|
weight: 3,
|
|
178
317
|
properties: {
|
|
179
|
-
"boss type":
|
|
318
|
+
"boss type": [
|
|
180
319
|
"Dragon",
|
|
181
320
|
"Demon",
|
|
182
321
|
"Lich",
|
|
183
322
|
"Vampire",
|
|
184
323
|
"Beholder",
|
|
185
|
-
]
|
|
324
|
+
],
|
|
186
325
|
"boss level": u.weighNumRange(10, 20),
|
|
187
|
-
"boss difficulty":
|
|
326
|
+
"boss difficulty": [
|
|
188
327
|
"Hard",
|
|
189
328
|
"Legendary",
|
|
190
329
|
"Impossible",
|
|
191
|
-
]
|
|
330
|
+
],
|
|
192
331
|
"fight duration (mins)": u.weighNumRange(1, 60),
|
|
193
|
-
|
|
332
|
+
|
|
194
333
|
},
|
|
195
334
|
},
|
|
196
335
|
{
|
|
197
336
|
event: "level up",
|
|
198
337
|
weight: 1,
|
|
199
338
|
properties: {
|
|
200
|
-
"new abilities":
|
|
339
|
+
"new abilities": [
|
|
201
340
|
"Attack",
|
|
202
341
|
"Spell",
|
|
203
342
|
"Feat",
|
|
204
343
|
"Skill",
|
|
205
|
-
]
|
|
344
|
+
],
|
|
206
345
|
},
|
|
207
346
|
},
|
|
208
347
|
{
|
|
209
348
|
event: "attack",
|
|
210
349
|
weight: 5,
|
|
211
350
|
properties: {
|
|
212
|
-
generic_prop:
|
|
351
|
+
generic_prop: ["foo", "bar", "baz", "qux"],
|
|
213
352
|
}
|
|
214
353
|
},
|
|
215
354
|
{
|
|
216
355
|
event: "defend",
|
|
217
356
|
weight: 3,
|
|
218
357
|
properties: {
|
|
219
|
-
generic_prop:
|
|
358
|
+
generic_prop: ["foo", "bar", "baz", "qux"],
|
|
220
359
|
}
|
|
221
360
|
},
|
|
222
361
|
],
|
|
223
362
|
superProps: {
|
|
224
|
-
platform:
|
|
363
|
+
platform: [
|
|
225
364
|
"Mobile",
|
|
226
365
|
"Xbox",
|
|
227
366
|
"Playstation",
|
|
228
367
|
"Switch",
|
|
229
368
|
"Web"
|
|
230
|
-
]
|
|
369
|
+
],
|
|
231
370
|
"game mode": u.pickAWinner([
|
|
232
371
|
"Single Player",
|
|
233
372
|
"Multiplayer",
|
|
234
373
|
], 1),
|
|
235
|
-
language:
|
|
374
|
+
language: [
|
|
236
375
|
"English",
|
|
237
376
|
"Spanish",
|
|
238
377
|
"French",
|
|
@@ -240,7 +379,7 @@ const config = {
|
|
|
240
379
|
"Japanese",
|
|
241
380
|
"Korean",
|
|
242
381
|
"Chinese",
|
|
243
|
-
],
|
|
382
|
+
],
|
|
244
383
|
|
|
245
384
|
},
|
|
246
385
|
scdProps: {
|
|
@@ -249,18 +388,18 @@ const config = {
|
|
|
249
388
|
// "type": "number",
|
|
250
389
|
// values: u.weighNumRange(0, 250, 1, 200),
|
|
251
390
|
// timing: "fixed",
|
|
252
|
-
// max: 250,
|
|
391
|
+
// max: 250,
|
|
253
392
|
// }
|
|
254
393
|
},
|
|
255
394
|
userProps: {
|
|
256
|
-
experiment:
|
|
395
|
+
experiment: [
|
|
257
396
|
"fast leveling",
|
|
258
397
|
"tension economy",
|
|
259
398
|
"free trial",
|
|
260
|
-
]
|
|
399
|
+
],
|
|
261
400
|
variant: ["A", "B", "C", "Control"],
|
|
262
401
|
|
|
263
|
-
race:
|
|
402
|
+
race: [
|
|
264
403
|
"Human",
|
|
265
404
|
"Elf",
|
|
266
405
|
"Dwarf",
|
|
@@ -270,8 +409,8 @@ const config = {
|
|
|
270
409
|
"Half-Elf",
|
|
271
410
|
"Half-Orc",
|
|
272
411
|
"Tiefling",
|
|
273
|
-
]
|
|
274
|
-
class:
|
|
412
|
+
],
|
|
413
|
+
class: [
|
|
275
414
|
"Barbarian",
|
|
276
415
|
"Bard",
|
|
277
416
|
"Cleric",
|
|
@@ -284,8 +423,8 @@ const config = {
|
|
|
284
423
|
"Sorcerer",
|
|
285
424
|
"Warlock",
|
|
286
425
|
"Wizard",
|
|
287
|
-
]
|
|
288
|
-
alignment:
|
|
426
|
+
],
|
|
427
|
+
alignment: [
|
|
289
428
|
"Lawful Good",
|
|
290
429
|
"Neutral Good",
|
|
291
430
|
"Chaotic Good",
|
|
@@ -295,9 +434,9 @@ const config = {
|
|
|
295
434
|
"Lawful Evil",
|
|
296
435
|
"Neutral Evil",
|
|
297
436
|
"Chaotic Evil",
|
|
298
|
-
]
|
|
437
|
+
],
|
|
299
438
|
level: u.weighNumRange(1, 20),
|
|
300
|
-
background:
|
|
439
|
+
background: [
|
|
301
440
|
"Acolyte",
|
|
302
441
|
"Charlatan",
|
|
303
442
|
"Criminal",
|
|
@@ -311,9 +450,10 @@ const config = {
|
|
|
311
450
|
"Sailor",
|
|
312
451
|
"Soldier",
|
|
313
452
|
"Urchin",
|
|
314
|
-
]
|
|
453
|
+
],
|
|
315
454
|
"subscription MRR": u.weighNumRange(0, 250, 1, 200)
|
|
316
455
|
},
|
|
456
|
+
// HOOK: 3 patterns — gold scaling by level, whale purchases, alignment archetype
|
|
317
457
|
hook: function (record, type, meta) {
|
|
318
458
|
|
|
319
459
|
if (type === "event") {
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
{
|
|
2
|
+
"events": [
|
|
3
|
+
{
|
|
4
|
+
"event": "account created",
|
|
5
|
+
"weight": 1,
|
|
6
|
+
"isFirstEvent": true,
|
|
7
|
+
"properties": {
|
|
8
|
+
"signup_source": ["web", "mobile", "agent_referral", "partner"],
|
|
9
|
+
"account_type": ["individual", "family", "business"]
|
|
10
|
+
}
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"event": "page viewed",
|
|
14
|
+
"weight": 10,
|
|
15
|
+
"properties": {
|
|
16
|
+
"page_name": ["home", "quotes", "coverage_options", "claims", "faq", "profile", "payment", "documents"],
|
|
17
|
+
"referrer": ["direct", "google", "email", "social_media"]
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"event": "quote requested",
|
|
22
|
+
"weight": 5,
|
|
23
|
+
"properties": {
|
|
24
|
+
"coverage_level": ["basic", "standard", "premium"],
|
|
25
|
+
"deductible": { "$range": [250, 5000] }
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"event": "quote received",
|
|
30
|
+
"weight": 4,
|
|
31
|
+
"properties": {
|
|
32
|
+
"monthly_premium": { "$range": [30, 800] },
|
|
33
|
+
"coverage_amount": { "$range": [10000, 500000] },
|
|
34
|
+
"quote_comparison_count": { "$range": [1, 5] }
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"event": "application started",
|
|
39
|
+
"weight": 4,
|
|
40
|
+
"properties": {
|
|
41
|
+
"coverage_level": ["basic", "standard", "premium"],
|
|
42
|
+
"estimated_premium": { "$range": [30, 800] }
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"event": "application step completed",
|
|
47
|
+
"weight": 6,
|
|
48
|
+
"properties": {
|
|
49
|
+
"step_name": ["personal_info", "coverage_selection", "medical_history", "vehicle_info", "beneficiary", "review"],
|
|
50
|
+
"step_number": { "$range": [1, 6] },
|
|
51
|
+
"time_on_step_sec": { "$range": [15, 600] }
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"event": "document uploaded",
|
|
56
|
+
"weight": 3,
|
|
57
|
+
"properties": {
|
|
58
|
+
"document_type": ["drivers_license", "proof_of_address", "vehicle_registration", "medical_records", "property_photos"],
|
|
59
|
+
"file_size_kb": { "$range": [50, 5000] }
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
"event": "application submitted",
|
|
64
|
+
"weight": 3,
|
|
65
|
+
"properties": {
|
|
66
|
+
"documents_attached": { "$range": [1, 5] },
|
|
67
|
+
"application_time_min": { "$range": [5, 60] }
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
"event": "application approved",
|
|
72
|
+
"weight": 2,
|
|
73
|
+
"properties": {
|
|
74
|
+
"approved_premium": { "$range": [30, 800] },
|
|
75
|
+
"approval_time_hours": { "$range": [1, 72] }
|
|
76
|
+
}
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
"event": "policy activated",
|
|
80
|
+
"weight": 2,
|
|
81
|
+
"properties": {
|
|
82
|
+
"policy_term_months": [6, 12, 12, 12, 24],
|
|
83
|
+
"effective_date_offset_days": { "$range": [0, 30] }
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
"event": "claim filed",
|
|
88
|
+
"weight": 2,
|
|
89
|
+
"properties": {
|
|
90
|
+
"claim_type": ["collision", "theft", "water_damage", "fire", "medical", "liability"],
|
|
91
|
+
"estimated_amount": { "$range": [100, 50000] }
|
|
92
|
+
}
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
"event": "claim status checked",
|
|
96
|
+
"weight": 4,
|
|
97
|
+
"properties": {
|
|
98
|
+
"claim_status": ["submitted", "under_review", "approved", "denied", "payment_pending"],
|
|
99
|
+
"days_since_filed": { "$range": [1, 60] }
|
|
100
|
+
}
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
"event": "payment made",
|
|
104
|
+
"weight": 5,
|
|
105
|
+
"properties": {
|
|
106
|
+
"payment_method": ["credit_card", "bank_transfer", "auto_pay", "check"],
|
|
107
|
+
"amount": { "$range": [30, 800] },
|
|
108
|
+
"payment_status": ["success", "success", "success", "success", "failed"]
|
|
109
|
+
}
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
"event": "support ticket created",
|
|
113
|
+
"weight": 4,
|
|
114
|
+
"properties": {
|
|
115
|
+
"issue_category": ["billing", "claims", "coverage", "technical", "policy_change"],
|
|
116
|
+
"priority": ["low", "medium", "medium", "high"],
|
|
117
|
+
"channel": ["chat", "phone", "email", "web_form"]
|
|
118
|
+
}
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
"event": "support ticket resolved",
|
|
122
|
+
"weight": 3,
|
|
123
|
+
"properties": {
|
|
124
|
+
"resolution_type": ["self_service", "agent_assisted", "escalated", "auto_resolved"],
|
|
125
|
+
"satisfaction_score": { "$range": [1, 5] },
|
|
126
|
+
"resolution_time_hours": { "$range": [1, 72] }
|
|
127
|
+
}
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
"event": "coverage reviewed",
|
|
131
|
+
"weight": 4,
|
|
132
|
+
"properties": {
|
|
133
|
+
"current_premium": { "$range": [30, 800] },
|
|
134
|
+
"coverage_adequate": [true, true, true, false]
|
|
135
|
+
}
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
"event": "profile updated",
|
|
139
|
+
"weight": 2,
|
|
140
|
+
"properties": {
|
|
141
|
+
"field_updated": ["address", "phone", "email", "beneficiary", "payment_method", "vehicle_info"]
|
|
142
|
+
}
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
"event": "renewal completed",
|
|
146
|
+
"weight": 2,
|
|
147
|
+
"properties": {
|
|
148
|
+
"renewal_premium": { "$range": [30, 800] },
|
|
149
|
+
"premium_change_pct": { "$range": [-15, 20] },
|
|
150
|
+
"auto_renewed": [true, true, false]
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
],
|
|
154
|
+
"superProps": {
|
|
155
|
+
"platform": ["web", "ios", "android"],
|
|
156
|
+
"insurance_type": ["auto", "home", "life", "health", "renters"]
|
|
157
|
+
},
|
|
158
|
+
"userProps": {
|
|
159
|
+
"age_range": ["18-25", "26-35", "36-45", "46-55", "56-65", "65+"],
|
|
160
|
+
"risk_profile": ["low", "medium", "high"],
|
|
161
|
+
"policy_count": { "$range": [0, 5] },
|
|
162
|
+
"lifetime_premium": { "$range": [0, 50000] },
|
|
163
|
+
"preferred_contact": ["email", "phone", "app_notification"]
|
|
164
|
+
},
|
|
165
|
+
"funnels": [
|
|
166
|
+
{
|
|
167
|
+
"name": "Onboarding",
|
|
168
|
+
"sequence": ["account created", "page viewed", "quote requested"],
|
|
169
|
+
"isFirstFunnel": true,
|
|
170
|
+
"conversionRate": 85,
|
|
171
|
+
"timeToConvert": 0.5
|
|
172
|
+
},
|
|
173
|
+
{
|
|
174
|
+
"name": "Application Completion",
|
|
175
|
+
"sequence": ["application started", "application step completed", "document uploaded", "application submitted"],
|
|
176
|
+
"conversionRate": 60,
|
|
177
|
+
"timeToConvert": 48,
|
|
178
|
+
"weight": 4,
|
|
179
|
+
"order": "sequential"
|
|
180
|
+
},
|
|
181
|
+
{
|
|
182
|
+
"name": "Application Approval",
|
|
183
|
+
"sequence": ["application submitted", "application approved", "policy activated"],
|
|
184
|
+
"conversionRate": 70,
|
|
185
|
+
"timeToConvert": 72,
|
|
186
|
+
"weight": 3,
|
|
187
|
+
"order": "sequential"
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
"name": "Claims Process",
|
|
191
|
+
"sequence": ["claim filed", "claim status checked", "support ticket created"],
|
|
192
|
+
"conversionRate": 50,
|
|
193
|
+
"timeToConvert": 24,
|
|
194
|
+
"weight": 2
|
|
195
|
+
},
|
|
196
|
+
{
|
|
197
|
+
"name": "Policy Renewal",
|
|
198
|
+
"sequence": ["coverage reviewed", "payment made", "renewal completed"],
|
|
199
|
+
"conversionRate": 65,
|
|
200
|
+
"timeToConvert": 72,
|
|
201
|
+
"weight": 3
|
|
202
|
+
}
|
|
203
|
+
]
|
|
204
|
+
}
|