Add privacy-safe product analytics
CI / verify (push) Has been cancelled
CI / publish (push) Has been cancelled

Establish an idempotent analytics pipeline and internal decision dashboard while keeping event metadata allowlisted and account deletion enforceable.
This commit is contained in:
Rocky
2026-08-20 15:20:01 +08:00
parent 231c5040a5
commit 4b465e0e5e
38 changed files with 4275 additions and 80 deletions
+4
View File
@@ -10,6 +10,7 @@ import type {
LedgerEntry,
Overview,
PageResult,
ProductAnalyticsOverview,
ReferralOverview,
SessionResponse,
UserDetail,
@@ -165,6 +166,9 @@ export const adminApi = {
referrals: (range: string) =>
request<ReferralOverview>(`/referrals${query({ range })}`),
productAnalytics: (range: string) =>
request<ProductAnalyticsOverview>(`/analytics${query({ range })}`),
users: (search = "", cursor?: string) =>
request<PageResult<UserSummary>>(
`/users${query({ q: search.trim(), cursor })}`,
+78
View File
@@ -52,6 +52,84 @@ export interface ReferralOverview {
ranking: ReferralRankingItem[];
}
export interface AnalyticsRate {
numerator: number;
denominator: number;
percent?: number;
}
export interface AnalyticsChannel {
channel: string;
installations: number;
activated: number;
activationRate: AnalyticsRate;
}
export interface AnalyticsCohort {
cohortDate: string;
size: number;
d1?: AnalyticsRate;
d7?: AnalyticsRate;
d30?: AnalyticsRate;
}
export interface AnalyticsFeatureUsage {
feature: string;
executionMode: string;
users: number;
successes: number;
}
export interface ProductAnalyticsOverview {
period: {
from: string;
until: string;
};
northStar: {
weeklyAiActiveUsers: number;
previousWeeklyAiActiveUsers: number;
weekOverWeekPercent?: number;
};
growth: {
newInstallations: number;
newAccounts: number;
activation24h: AnalyticsRate;
medianTimeToValueMinutes?: number;
channels: AnalyticsChannel[];
};
activity: {
dau: number;
wau: number;
mau: number;
stickinessPercent?: number;
successfulAiRequests: number;
successfulRequestsPerActiveUser?: number;
};
consumption: {
totalCredits: number;
averageDailyCreditsPerActiveUser?: number;
medianUserDailyCredits?: number;
averageCreditsPerManagedRequest?: number;
};
monetization: {
payingUsers: number;
purchases: number;
creditsPurchased: number;
conversion7d: AnalyticsRate;
conversion30d: AnalyticsRate;
repeatPurchaseRate: AnalyticsRate;
};
growthFunnel: FunnelStep[];
retention: AnalyticsCohort[];
aiFeatures: AnalyticsFeatureUsage[];
referralFunnel: FunnelStep[];
guardrails: {
clientAiSuccessRate: AnalyticsRate;
managedSuccessRate: AnalyticsRate;
creditBlockedUsers: number;
};
}
export interface UserSummary {
userId: string;
displayName: string;