Skip to content

Feat/analytics tracking#114

Merged
Hugo0 merged 3 commits into
mainfrom
feat/analytics-tracking
Jan 26, 2026
Merged

Feat/analytics tracking#114
Hugo0 merged 3 commits into
mainfrom
feat/analytics-tracking

Conversation

@Hugo0

@Hugo0 Hugo0 commented Jan 26, 2026

Copy link
Copy Markdown
Owner

Summary by CodeRabbit

  • New Features
    • Added event tracking for game lifecycle (start, complete, abandon, guess submissions).
    • Added retention metrics (returning players, streak milestones).
    • Added sharing analytics across multiple share methods.
    • Added PWA engagement tracking (prompts, installs, dismissals).
    • Added error and friction point detection.
    • Added settings and feature usage monitoring.

✏️ Tip: You can customize this high-level summary in your review settings.

Hugo0 and others added 2 commits January 26, 2026 02:18
Add comprehensive analytics module to answer key business questions:

- Game lifecycle: start, complete, abandon, guess tracking
- Retention: returning players, streak milestones
- Virality: share click/success/fail funnel
- PWA: install prompts, installs, dismissals
- Frustration: invalid words, rapid backspace detection
- Features: settings changes, help/stats modal opens

All events include language parameter for per-language analysis.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
…gnals

- Replace noisy frustration_signal events (fired every 3rd invalid) with
  session-aggregated context in game_complete event
- Add total_invalid_attempts, max_consecutive_invalid, had_frustration,
  and time_to_complete_seconds to game_complete
- Track game start time for duration measurement
- Reset frustration state on game start/complete
- onValidWord() resets consecutive invalid counter

Before: 247 frustration_signal events = unclear if 247 users or 30 users × 8
After: One game_complete with full struggle context per completed game
@coderabbitai

coderabbitai Bot commented Jan 26, 2026

Copy link
Copy Markdown
📝 Walkthrough

Walkthrough

Introduces a comprehensive Google Analytics 4 event tracking module with type-safe APIs for game lifecycle events (start, complete, abandon, guess submission), feature usage (sharing, PWA, settings), and error/frustration state tracking. Integrates tracking calls throughout game.ts and pwa.ts without altering core logic.

Changes

Cohort / File(s) Summary
Analytics Module
frontend/src/analytics.ts
New GA4 event tracking module providing type-safe interfaces (GameStartParams, GameCompleteParams, ShareParams, PWAParams, ErrorParams, FrustrationState, etc.) and tracking functions across game lifecycle, sharing, PWA, settings, errors, and frustration state. Includes stateful frustration tracking helpers and defensive track wrapper for resilience.
Game Integration
frontend/src/game.ts
Adds analytics instrumentation at key points: game initialization (trackGameStart, initErrorTracking, initAbandonTracking), guess submission (onValidWord, trackGuessSubmit, trackInvalidWordAndUpdateState), game completion (trackGameComplete, trackStreakMilestone), share flow (trackShareClick, trackShareSuccess, trackShareFail), and settings changes (trackSettingsChange).
PWA Integration
frontend/src/pwa.ts
Adds PWA-specific analytics: trackPWAPromptShown on banner display, trackPWADismiss on banner hide, trackPWAInstall on install event.

Sequence Diagram

sequenceDiagram
    participant Game as Game App
    participant Analytics as Analytics Module
    participant GA4 as Google Analytics 4
    
    Game->>Analytics: initErrorTracking(language)
    Game->>Analytics: trackPageView(language)
    Game->>Analytics: trackGameStart(params)
    Analytics->>GA4: gtag event: game_start
    Game->>Analytics: initAbandonTracking(getState)
    
    Note over Game,Analytics: Guess Submission Flow
    alt Valid Word
        Game->>Analytics: onValidWord()
        Game->>Analytics: trackGuessSubmit(language, attempt, true)
        Analytics->>GA4: gtag event: guess_submit
    else Invalid Word
        Game->>Analytics: trackInvalidWordAndUpdateState(params)
        Analytics->>Analytics: Update frustration state
        Analytics->>GA4: gtag event: invalid_word
        Game->>Analytics: trackGuessSubmit(language, attempt, false)
        Analytics->>GA4: gtag event: guess_submit
    end
    
    Note over Game,Analytics: Game Completion Flow
    Game->>Analytics: resetFrustrationState()
    Game->>Analytics: trackGameComplete(params with frustration metrics)
    Analytics->>GA4: gtag event: game_complete
    Game->>Analytics: trackStreakMilestone(language, streak)
    Analytics->>GA4: gtag event: streak_milestone
    
    Note over Game,Analytics: Share Flow
    Game->>Analytics: trackShareClick(params)
    Analytics->>GA4: gtag event: share_click
    alt Share Success
        Game->>Analytics: trackShareSuccess(params)
        Analytics->>GA4: gtag event: share_success
    else Share Fail
        Game->>Analytics: trackShareFail(language, method, error)
        Analytics->>GA4: gtag event: share_fail
    end
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~35 minutes

Poem

🐰 Hop hooray! The metrics flow,
From game starts to shareflow,
Analytics hops through every screen,
Tracking every guess so keen,
Frustration states and streaks we count,
All the data stacked in mount! 📊✨

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'Feat/analytics tracking' directly describes the main change: introducing comprehensive Google Analytics 4 event tracking across multiple game lifecycle and user interaction scenarios.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing touches
  • 📝 Generate docstrings

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Resolved conflicts in favor of session-aggregated analytics approach:
- analytics.ts: Keep resetFrustrationState, onValidWord, trackInvalidWordAndUpdateState
- game.ts: Keep game start time tracking and frustration context in game_complete
@Hugo0
Hugo0 merged commit 820c6e9 into main Jan 26, 2026
2 of 4 checks passed
@Hugo0
Hugo0 deleted the feat/analytics-tracking branch February 21, 2026 12:59
Hugo0 added a commit that referenced this pull request Feb 22, 2026
* feat: Add GA4 analytics tracking for user behavior insights

Add comprehensive analytics module to answer key business questions:

- Game lifecycle: start, complete, abandon, guess tracking
- Retention: returning players, streak milestones
- Virality: share click/success/fail funnel
- PWA: install prompts, installs, dismissals
- Frustration: invalid words, rapid backspace detection
- Features: settings changes, help/stats modal opens

All events include language parameter for per-language analysis.
* refactor: Session-aggregate analytics events instead of fragmented signals

- Replace noisy frustration_signal events (fired every 3rd invalid) with
  session-aggregated context in game_complete event
- Add total_invalid_attempts, max_consecutive_invalid, had_frustration,
  and time_to_complete_seconds to game_complete
- Track game start time for duration measurement
- Reset frustration state on game start/complete
- onValidWord() resets consecutive invalid counter

Before: 247 frustration_signal events = unclear if 247 users or 30 users × 8
After: One game_complete with full struggle context per completed game

---------
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant