Files
chat_web_app/llm-fe/ANALYTICS.md
T
westfarn 347fa75534
Deploy Beta / unit-tests (push) Successful in 12s
Unit Tests / test (push) Successful in 12s
Deploy Beta / deploy-beta (push) Failing after 1m16s
Tianji custom event tracking (auth, billing, chat) (#36) (#45)
## Summary

Closes #36.

Helpers / consent gating already exist from [#42](#42). This PR adds **call sites** + docs:

- `identifyAccount` + `AnalyticsSession` (identify on session; `Logout` when auth ends)
- Auth: Sign In / Sign Up / AuthCallback (SSO) success & fail
- Billing: Checkout started, Payment Success / Canceled
- Chat: Conversation Created, Message Sent (metadata only — no prompt text)
- ToS Acknowledged
- `BILLING_PORTAL_OPENED` reserved until Account portal (#33)
- Catalog: [`llm-fe/ANALYTICS.md`](llm-fe/ANALYTICS.md)

No `chat_backend` changes required.

## Test plan

- [ ] Grant consent on beta → sign in → Tianji shows Login Success + identify
- [ ] Decline consent → same actions produce no custom events (page views still ok)
- [ ] Sign up + checkout + cancel/success return URLs fire expected events
- [ ] New chat + send message → Conversation Created / Message Sent without prompt text
- [ ] Acknowledge ToS → ToS Acknowledged
- [ ] `npm run test:ci -- --testPathPattern='analytics.test|SignIn.test|SignUp.test|AuthCallback.test'`Reviewed-on: #45
2026-07-27 08:40:19 -07:00

1.7 KiB

Tianji product events (Hesychia)

Helpers: llm-fe/src/llm-fe/utils/analytics.ts
Consent gate: custom events + identify only when hesychia_analytics_consent* is granted (see #37).
Page views: always via Tracker / tracker.js on prod + beta.

Event catalog

Event name Constant Call site(s) Payload (non-PII)
Login Success LOGIN_SUCCESS SignIn, AuthCallback { method: 'password' | 'sso' }
Login Failed LOGIN_FAILED SignIn, AuthCallback { method }
Sign Up Started SIGNUP_STARTED SignUp
Sign Up Success SIGNUP_SUCCESS SignUp, AuthCallback (created) { method? }
Sign Up Failed SIGNUP_FAILED SignUp, AuthCallback { method? }
Logout LOGOUT AnalyticsSession (auth → logged out)
Checkout Started CHECKOUT_STARTED SignUp, AuthCallback { source }
Payment Success PAYMENT_SUCCESS BillingSuccess { hasSessionId }
Payment Canceled PAYMENT_CANCELED BillingCancel
Conversation Created CONVERSATION_CREATED MessageContext { conversationId }
Message Sent MESSAGE_SENT AsyncDashboard2 { hasConversation, hasAttachment }
ToS Acknowledged TOS_ACKNOWLEDGED TermsOfService
Billing Portal Opened BILLING_PORTAL_OPENED (pending #33 Account portal CTA)

Identify

identifyAccount(account) sends { userId: email, companyId?, isCompanyManager? }.
No message text, document contents, or names.

Environments

Only prod/beta (REACT_APP_DEPLOY_ENV or production build with Tianji website id). Local dev skips unless env set.