feat(donate): add PostHog analytics events
Build and Push Image / build-frontend (push) Successful in 5m19s
Build and Push Image / build-backend (push) Successful in 3m46s
Build and Push Image / push (push) Successful in 1m20s

Track donation lifecycle across form, widget, admin, and backend:
- Form: donation_completed, donation_*_failed, donation_slip_conflict, donation_artifact_conflict
- Widget: donation_widget_displayed, donation_widget_tts_failed, donation_widget_animation_end, donation_widget_connected, donation_widget_heartbeat_failure
- Admin: donation_admin_test_popup, donation_admin_widget_reload, donation_admin_resend
- Backend: donation_widget_state_playing, donation_widget_state_shown, donation_resent
This commit is contained in:
2026-06-08 20:51:07 +00:00 Unverified
parent 995d5c1614
commit 5edd92a97f
6 changed files with 58 additions and 14 deletions
+5
View File
@@ -3,8 +3,11 @@
import { db } from "@/lib/db";
import { donations } from "@/lib/db/schema";
import { eq } from "drizzle-orm";
import { getPostHogClient } from "@/lib/posthog-server";
export async function markRunning(id: string) {
getPostHogClient().capture({ distinctId: id, event: "donation_widget_state_playing", properties: { donation_id: id } });
await db
.update(donations)
.set({ lastPing: new Date() })
@@ -12,5 +15,7 @@ export async function markRunning(id: string) {
}
export async function markDone(id: string) {
getPostHogClient().capture({ distinctId: id, event: "donation_widget_state_shown", properties: { donation_id: id } });
await db.update(donations).set({ sent: true }).where(eq(donations.id, id));
}