Stat Cards
Sessions
Total times the resume builder was opened. Each browser tab counts as one session. The subtitle shows how many unique logged-in users those sessions came from.
PDF Downloads
Number of PDFs successfully generated and downloaded. This is the primary success metric — it means the user got a finished resume. The subtitle shows how many failed (server error, timeout, etc.).
Conversion Rate
Percentage of sessions that resulted in a successful PDF download. Formula: PDF Downloads ÷ Sessions × 100. A low rate might mean users are browsing but not finishing, or hitting paywalls/errors.
Avg Session Time
Average time users spend in the builder before leaving or closing the tab. Calculated from session_end events that include seconds_active. Median is shown below to filter out outliers (e.g. tabs left open overnight).
Conversion Funnel
Sessions → Template Applied → PDF Started → PDF Downloaded
Shows how users progress through the builder. Each bar is a percentage of total sessions. A big drop between steps tells you where users are abandoning. For example, a drop between "PDF Started" and "PDF Downloaded" means server-side PDF generation is failing.
Template Applied
User picked a design template. This is a strong engagement signal — they're actively customizing their resume, not just looking.
PDF Download Started
User clicked the Download PDF button and the request was sent to the server. If this is much higher than "PDF Downloaded", Puppeteer is failing.
PDF Downloaded
The server generated the PDF successfully and the browser download began. This is the final conversion event.
Imports
User uploaded an existing resume (PDF or DOCX) and it was parsed successfully. Shows how many users start from an existing document vs. from scratch.
Recent Errors
Last 50 error events, currently tracking PDF generation failures. Shows timestamp, which user hit the error (or "anonymous"), the event type, and the error message. Use this to debug Puppeteer crashes, timeouts, or HTML rendering issues.
How Tracking Works
Client-side batching
Events queue in the browser and flush every 30 seconds, or when 50 events accumulate, or when the user leaves the page. Uses navigator.sendBeacon() on unload for guaranteed delivery.
Session tracking
Each browser tab gets a unique session ID stored in sessionStorage. It persists across page refreshes within the same tab but resets when the tab is closed. Logged-in users are also tracked by user ID.
Privacy
No personal data is tracked beyond user ID (for logged-in users). No IP addresses, no device fingerprinting, no third-party services. All data stays in our PostgreSQL database.