kanmi-perf-revenue 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Report Generator
3
+ *
4
+ * Generates simple, transparent markdown reports from empirical analysis.
5
+ * Key differentiator: shows the ACTUAL measured CVR at each bucket,
6
+ * not assumed coefficients.
7
+ *
8
+ * @author Kanmi Obasa <i@kanmiobasa.com>
9
+ */
10
+ import type { ConversionCurve } from './conversion-curve.js';
11
+ import type { OpportunityReport } from './opportunity-calculator.js';
12
+ export interface ReportConfig {
13
+ clientName?: string;
14
+ period: {
15
+ start: string;
16
+ end: string;
17
+ days: number;
18
+ };
19
+ includeRawCurve?: boolean;
20
+ }
21
+ export interface FullReport {
22
+ curves: {
23
+ lcp: ConversionCurve;
24
+ inp: ConversionCurve;
25
+ cls: ConversionCurve;
26
+ };
27
+ opportunities: {
28
+ lcp: OpportunityReport;
29
+ inp: OpportunityReport;
30
+ cls: OpportunityReport;
31
+ };
32
+ }
33
+ /**
34
+ * Generate a complete markdown report.
35
+ */
36
+ export declare function generateReport(data: FullReport, config: ReportConfig): string;
37
+ //# sourceMappingURL=report.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../src/empirical/report.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAMrE,MAAM,WAAW,YAAY;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE;QACN,KAAK,EAAE,MAAM,CAAC;QACd,GAAG,EAAE,MAAM,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IACF,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE;QACN,GAAG,EAAE,eAAe,CAAC;QACrB,GAAG,EAAE,eAAe,CAAC;QACrB,GAAG,EAAE,eAAe,CAAC;KACtB,CAAC;IACF,aAAa,EAAE;QACb,GAAG,EAAE,iBAAiB,CAAC;QACvB,GAAG,EAAE,iBAAiB,CAAC;QACvB,GAAG,EAAE,iBAAiB,CAAC;KACxB,CAAC;CACH;AAMD;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,GAAG,MAAM,CA0F7E"}
@@ -0,0 +1,264 @@
1
+ /**
2
+ * Report Generator
3
+ *
4
+ * Generates simple, transparent markdown reports from empirical analysis.
5
+ * Key differentiator: shows the ACTUAL measured CVR at each bucket,
6
+ * not assumed coefficients.
7
+ *
8
+ * @author Kanmi Obasa <i@kanmiobasa.com>
9
+ */
10
+ // =============================================================================
11
+ // REPORT GENERATOR
12
+ // =============================================================================
13
+ /**
14
+ * Generate a complete markdown report.
15
+ */
16
+ export function generateReport(data, config) {
17
+ const lines = [];
18
+ // Header
19
+ lines.push('# Empirical Performance Revenue Report');
20
+ if (config.clientName) {
21
+ lines.push(`## ${config.clientName}`);
22
+ }
23
+ lines.push('');
24
+ lines.push(`**Analysis Period:** ${config.period.start} to ${config.period.end} (${config.period.days} days)`);
25
+ lines.push('');
26
+ // Key difference callout
27
+ lines.push('> **Methodology:** This report uses empirical conversion rates measured from your actual session data.');
28
+ lines.push('> No industry coefficients or assumed relationships. What you see is what your data shows.');
29
+ lines.push('');
30
+ // Executive Summary
31
+ lines.push('## Executive Summary');
32
+ lines.push('');
33
+ lines.push(generateExecutiveSummary(data.opportunities));
34
+ lines.push('');
35
+ // Measured Conversion Curves
36
+ lines.push('## Measured Conversion Rates');
37
+ lines.push('');
38
+ lines.push('These are the **actual conversion rates** measured at each performance bucket from your session data:');
39
+ lines.push('');
40
+ for (const metric of ['lcp', 'inp', 'cls']) {
41
+ const curve = data.curves[metric];
42
+ if (curve.buckets.length > 0) {
43
+ lines.push(`### ${metric.toUpperCase()} Conversion Curve`);
44
+ lines.push('');
45
+ lines.push(generateCurveTable(curve));
46
+ lines.push('');
47
+ }
48
+ }
49
+ // Revenue Opportunities
50
+ lines.push('## Revenue Opportunities');
51
+ lines.push('');
52
+ const allOpportunities = [
53
+ { metric: 'LCP', report: data.opportunities.lcp },
54
+ { metric: 'INP', report: data.opportunities.inp },
55
+ { metric: 'CLS', report: data.opportunities.cls },
56
+ ].filter((o) => o.report.scenarios.length > 0);
57
+ if (allOpportunities.length === 0) {
58
+ lines.push('No significant opportunities detected. Your performance distribution shows minimal CVR variation across buckets.');
59
+ lines.push('');
60
+ }
61
+ else {
62
+ for (const { metric, report } of allOpportunities) {
63
+ lines.push(`### ${metric} Opportunity`);
64
+ lines.push('');
65
+ lines.push(generateOpportunitySection(report));
66
+ lines.push('');
67
+ }
68
+ }
69
+ // Prioritized Actions
70
+ lines.push('## Prioritized Actions');
71
+ lines.push('');
72
+ lines.push(generatePrioritizedActions(data.opportunities));
73
+ lines.push('');
74
+ // Methodology
75
+ lines.push('## Methodology');
76
+ lines.push('');
77
+ lines.push('### How This Works');
78
+ lines.push('');
79
+ lines.push('1. **Data Source:** Datadog RUM session data with conversion tracking');
80
+ lines.push('2. **Bucket Sessions:** Group sessions by LCP/INP/CLS performance');
81
+ lines.push('3. **Measure CVR:** Calculate actual conversion rate in each bucket');
82
+ lines.push('4. **Calculate Opportunity:** If slow sessions achieved fast-session CVR, how much more revenue?');
83
+ lines.push('');
84
+ lines.push('### Key Assumptions');
85
+ lines.push('');
86
+ lines.push('- **Conservative estimate** uses 50% of potential (not all slow sessions can be fixed)');
87
+ lines.push('- **Causation caveat:** Correlation observed, not proven causation');
88
+ lines.push('- **Confounders:** Device type, network, user intent may affect both performance AND conversion');
89
+ lines.push('');
90
+ // Footer
91
+ lines.push('---');
92
+ lines.push('Generated by Empirical Performance Revenue Engine');
93
+ lines.push(`Report Date: ${new Date().toISOString().split('T')[0]}`);
94
+ return lines.join('\n');
95
+ }
96
+ // =============================================================================
97
+ // SECTION GENERATORS
98
+ // =============================================================================
99
+ function generateExecutiveSummary(opportunities) {
100
+ const allScenarios = [];
101
+ for (const [metric, report] of Object.entries(opportunities)) {
102
+ if (report.recommendation.monthly_opportunity > 0) {
103
+ allScenarios.push({
104
+ metric: metric.toUpperCase(),
105
+ revenue: report.recommendation.monthly_opportunity,
106
+ summary: report.recommendation.summary,
107
+ });
108
+ }
109
+ }
110
+ if (allScenarios.length === 0) {
111
+ return 'Performance distribution shows minimal impact on conversion rates. No significant revenue opportunity detected.';
112
+ }
113
+ // Sort by revenue
114
+ allScenarios.sort((a, b) => b.revenue - a.revenue);
115
+ const totalOpportunity = allScenarios.reduce((sum, s) => sum + s.revenue, 0);
116
+ const topDriver = allScenarios[0];
117
+ const lines = [];
118
+ lines.push(`**Total Monthly Opportunity:** $${formatCurrency(totalOpportunity)}/month ($${formatCurrency(totalOpportunity * 12)}/year)`);
119
+ lines.push('');
120
+ lines.push(`**Primary Driver:** ${topDriver.metric} — ${topDriver.summary}`);
121
+ return lines.join('\n');
122
+ }
123
+ function generateCurveTable(curve) {
124
+ const lines = [];
125
+ lines.push('| Range | Sessions | Conversions | CVR | Revenue | Confidence |');
126
+ lines.push('|-------|----------|-------------|-----|---------|------------|');
127
+ for (const bucket of curve.buckets) {
128
+ const cvrPct = (bucket.conversion_rate * 100).toFixed(2);
129
+ const revenueStr = `$${formatCurrency(bucket.revenue)}`;
130
+ lines.push(`| ${bucket.range} | ${bucket.sessions.toLocaleString()} | ${bucket.conversions.toLocaleString()} | ${cvrPct}% | ${revenueStr} | ${bucket.confidence} |`);
131
+ }
132
+ // Summary row
133
+ lines.push('|-------|----------|-------------|-----|---------|------------|');
134
+ const overallCvr = (curve.summary.overall_cvr * 100).toFixed(2);
135
+ lines.push(`| **Total** | **${curve.summary.total_sessions.toLocaleString()}** | **${curve.summary.total_conversions.toLocaleString()}** | **${overallCvr}%** | **$${formatCurrency(curve.summary.total_revenue)}** | — |`);
136
+ // Add insight
137
+ if (curve.summary.cvr_range > 0) {
138
+ const cvrDropPct = (curve.summary.relative_cvr_drop * 100).toFixed(0);
139
+ lines.push('');
140
+ lines.push(`**Insight:** Slowest bucket converts ${cvrDropPct}% worse than fastest bucket.`);
141
+ }
142
+ return lines.join('\n');
143
+ }
144
+ function generateOpportunitySection(report) {
145
+ const lines = [];
146
+ if (report.scenarios.length === 0) {
147
+ lines.push('No significant opportunity at current thresholds.');
148
+ return lines.join('\n');
149
+ }
150
+ // Show best scenario details
151
+ const best = report.scenarios[0];
152
+ lines.push('```');
153
+ lines.push(`Target: ${best.name}`);
154
+ lines.push('');
155
+ lines.push('Current State:');
156
+ lines.push(` • Fast sessions (≤${formatMs(best.target_ms)}): ${best.fast_sessions.toLocaleString()} (${(best.fast_cvr * 100).toFixed(2)}% CVR)`);
157
+ lines.push(` • Slow sessions (>${formatMs(best.target_ms)}): ${best.slow_sessions.toLocaleString()} (${(best.slow_cvr * 100).toFixed(2)}% CVR)`);
158
+ lines.push('');
159
+ lines.push('Opportunity:');
160
+ lines.push(` • CVR gap: ${(best.cvr_delta * 100).toFixed(2)}pp (${(best.relative_improvement * 100).toFixed(0)}% relative)`);
161
+ lines.push(` • Potential conversions: +${best.max_additional_conversions.toLocaleString()}/month (if all improved)`);
162
+ lines.push(` • Conservative estimate: $${formatCurrency(best.conservative_monthly_revenue)}/month`);
163
+ lines.push(` • Maximum potential: $${formatCurrency(best.max_monthly_revenue)}/month`);
164
+ lines.push('');
165
+ lines.push(`Confidence: ${best.confidence}`);
166
+ lines.push('```');
167
+ // Alternative thresholds
168
+ if (report.scenarios.length > 1) {
169
+ lines.push('');
170
+ lines.push('**Alternative Targets:**');
171
+ lines.push('');
172
+ lines.push('| Target | Slow Sessions | CVR Gap | Monthly Opportunity |');
173
+ lines.push('|--------|---------------|---------|---------------------|');
174
+ for (const scenario of report.scenarios.slice(1)) {
175
+ const cvrGap = (scenario.cvr_delta * 100).toFixed(2);
176
+ lines.push(`| ${formatMs(scenario.target_ms)} | ${scenario.slow_sessions.toLocaleString()} | ${cvrGap}pp | $${formatCurrency(scenario.conservative_monthly_revenue)} |`);
177
+ }
178
+ }
179
+ return lines.join('\n');
180
+ }
181
+ function generatePrioritizedActions(opportunities) {
182
+ const lines = [];
183
+ const actions = [];
184
+ for (const [metric, report] of Object.entries(opportunities)) {
185
+ if (report.recommendation.priority !== 'low' || report.recommendation.monthly_opportunity > 0) {
186
+ actions.push({
187
+ priority: report.recommendation.priority,
188
+ metric: metric.toUpperCase(),
189
+ revenue: report.recommendation.monthly_opportunity,
190
+ summary: report.recommendation.summary,
191
+ });
192
+ }
193
+ }
194
+ // Sort by priority then revenue
195
+ const priorityOrder = { high: 0, medium: 1, low: 2 };
196
+ actions.sort((a, b) => {
197
+ if (priorityOrder[a.priority] !== priorityOrder[b.priority]) {
198
+ return priorityOrder[a.priority] - priorityOrder[b.priority];
199
+ }
200
+ return b.revenue - a.revenue;
201
+ });
202
+ if (actions.length === 0) {
203
+ lines.push('No prioritized actions. Performance is not significantly impacting conversions.');
204
+ return lines.join('\n');
205
+ }
206
+ lines.push('```');
207
+ lines.push('PRIORITY | METRIC | MONTHLY IMPACT | ACTION');
208
+ lines.push('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
209
+ for (const action of actions) {
210
+ const priorityStr = action.priority.toUpperCase().padEnd(8);
211
+ const metricStr = action.metric.padEnd(6);
212
+ const revenueStr = `$${formatCurrency(action.revenue)}/mo`.padStart(12);
213
+ lines.push(`${priorityStr} | ${metricStr} | ${revenueStr} | Fix ${action.metric}`);
214
+ }
215
+ lines.push('```');
216
+ // Detailed recommendations
217
+ lines.push('');
218
+ lines.push('### Recommended Actions');
219
+ lines.push('');
220
+ const highPriority = actions.filter((a) => a.priority === 'high');
221
+ const mediumPriority = actions.filter((a) => a.priority === 'medium');
222
+ const lowPriority = actions.filter((a) => a.priority === 'low');
223
+ if (highPriority.length > 0) {
224
+ lines.push('**FIX IMMEDIATELY:**');
225
+ for (const action of highPriority) {
226
+ lines.push(`- ${action.metric}: $${formatCurrency(action.revenue)}/month opportunity`);
227
+ }
228
+ lines.push('');
229
+ }
230
+ if (mediumPriority.length > 0) {
231
+ lines.push('**SCHEDULE FOR NEXT SPRINT:**');
232
+ for (const action of mediumPriority) {
233
+ lines.push(`- ${action.metric}: $${formatCurrency(action.revenue)}/month opportunity`);
234
+ }
235
+ lines.push('');
236
+ }
237
+ if (lowPriority.length > 0) {
238
+ lines.push('**MONITOR:**');
239
+ for (const action of lowPriority) {
240
+ lines.push(`- ${action.metric}: Minimal impact detected`);
241
+ }
242
+ lines.push('');
243
+ }
244
+ return lines.join('\n');
245
+ }
246
+ // =============================================================================
247
+ // HELPERS
248
+ // =============================================================================
249
+ function formatCurrency(value) {
250
+ if (value >= 1_000_000) {
251
+ return `${(value / 1_000_000).toFixed(1)}M`;
252
+ }
253
+ if (value >= 1_000) {
254
+ return `${Math.round(value / 1_000)}K`;
255
+ }
256
+ return Math.round(value).toString();
257
+ }
258
+ function formatMs(ms) {
259
+ if (ms >= 1000) {
260
+ return `${(ms / 1000).toFixed(1)}s`;
261
+ }
262
+ return `${ms}ms`;
263
+ }
264
+ //# sourceMappingURL=report.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report.js","sourceRoot":"","sources":["../../src/empirical/report.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,63 @@
1
+ {
2
+ "name": "kanmi-perf-revenue",
3
+ "version": "1.0.0",
4
+ "description": "Empirical Performance Revenue Engine - Measure how Core Web Vitals impact conversions from your actual data",
5
+ "main": "dist/empirical/index.js",
6
+ "types": "dist/empirical/index.d.ts",
7
+ "type": "module",
8
+ "bin": {
9
+ "kanmi-perf-revenue": "./dist/empirical/index.js"
10
+ },
11
+ "exports": {
12
+ ".": {
13
+ "types": "./dist/empirical/index.d.ts",
14
+ "import": "./dist/empirical/index.js"
15
+ },
16
+ "./empirical": {
17
+ "types": "./dist/empirical/index.d.ts",
18
+ "import": "./dist/empirical/index.js"
19
+ }
20
+ },
21
+ "files": [
22
+ "dist/empirical"
23
+ ],
24
+ "scripts": {
25
+ "build": "tsc",
26
+ "clean": "rm -rf dist",
27
+ "typecheck": "tsc --noEmit",
28
+ "prepublishOnly": "npm run clean && npm run build",
29
+ "demo": "npx tsx src/empirical/index.ts --demo",
30
+ "start": "node dist/empirical/index.js"
31
+ },
32
+ "keywords": [
33
+ "web-performance",
34
+ "core-web-vitals",
35
+ "lcp",
36
+ "inp",
37
+ "cls",
38
+ "conversion-rate",
39
+ "revenue",
40
+ "analytics",
41
+ "datadog",
42
+ "rum",
43
+ "empirical"
44
+ ],
45
+ "repository": {
46
+ "type": "git",
47
+ "url": "https://github.com/konfirmed/optimized-kanmi"
48
+ },
49
+ "homepage": "https://github.com/konfirmed/optimized-kanmi#readme",
50
+ "bugs": {
51
+ "url": "https://github.com/konfirmed/optimized-kanmi/issues"
52
+ },
53
+ "author": "Kanmi Obasa <i@kanmiobasa.com>",
54
+ "license": "MIT",
55
+ "dependencies": {},
56
+ "devDependencies": {
57
+ "@types/node": "^20.11.0",
58
+ "typescript": "^5.3.0"
59
+ },
60
+ "engines": {
61
+ "node": ">=18"
62
+ }
63
+ }