Expand dashboard analytics and document production implementation
This commit is contained in:
24
PROJECT.md
24
PROJECT.md
@@ -1,5 +1,7 @@
|
||||
# Roblox Game Analytics Dashboard
|
||||
|
||||
Production implementation reference: [PRODUCTION_IMPLEMENTATION.md](PRODUCTION_IMPLEMENTATION.md). It specifies the proposed production APIs, Roblox reporting contract, AI prompt templates, deployment/validation plan, and the existing `mockups/` features to port. The current mockup and latest accepted changes are the product reference; older notes below must not restore removed UI.
|
||||
|
||||
## Project overview
|
||||
|
||||
Build a custom analytics data logger and web dashboard for Roblox games. Roblox experiences send event data to the service over HTTP requests; game owners use the web frontend to inspect activity, retention, playtime, and other metrics. The system must also support game-defined custom datasets so developers can record and analyze data specific to their experience.
|
||||
@@ -46,7 +48,7 @@ Use composite foreign keys to keep player, session, event, activity, and product
|
||||
- Support player-stat snapshots submitted by the game, associated with the Roblox user ID and capture time. Store a copy of each accepted snapshot so the dashboard can show current values and how those values change over time. The game controls which custom fields it reports; validate field names, types, and payload sizes.
|
||||
- Support configurable activity definitions that pair start/end events and optionally track intermediate events, outcomes, timeouts, and selected property values. Persist individual activity runs against the associated player for profile history; aggregate activity run statistics across players for analysis. The development prototype now persists seeded definitions and runs in PostgreSQL; definition editing and live event ingestion remain future work.
|
||||
- Report each trusted product sale with receipt ID, product ID, price, quantity, timestamp, and player. Deduplicate receipts within each game and derive monetization metrics from stored sale reports.
|
||||
- Whether each HTTP request contains one event or a batch of events is undecided; choose this when defining the API contract, taking Roblox request limits and retry behavior into account.
|
||||
- The production guide proposes versioned batched JSON ingestion with stable event IDs, durable acceptance, per-record acknowledgements, and bounded retries; the live ModuleScript integration is still to be implemented.
|
||||
|
||||
## Web frontend
|
||||
|
||||
@@ -176,6 +178,26 @@ In addition to raw snapshot fields, useful sortable or trendable measures includ
|
||||
Prefer clear time windows and definitions for derived measures; for example, show whether playtime is lifetime or selected-period, and calculate rates only when the denominator is nonzero and the underlying snapshot history is available.
|
||||
## Analytics UI refinements
|
||||
|
||||
- Overview starts with one expandable Everything at a glance analysis, replacing the Game health section header. It interprets seven-day trends versus the prior week with latest-day/weekday context, then discusses strengths, player-experience weaknesses, activity/progression friction, monetization quality, and test priorities. It uses selected evidence rather than repeating the daily/weekly metric recaps below. Matched returning-player snapshot changes can inform economy/progression observations without assuming causation.
|
||||
- Remove the Summaries workspace/mobile navigation and standalone summary UI. Existing summary-page bookmarks redirect to Overview with their game query preserved. Daily/weekly numerical reports remain below the broad analysis. Analysis stays game-specific, cached daily, and labeled as sample text.
|
||||
|
||||
- Keep unresolved-data diagnostics in Project settings → Data quality log, with category filtering, source IDs, timestamps, and 20-row pages. The log is a live view over retained original records; issues disappear from the current log when corrected. Hide unresolved columns, source-unknown comparisons, missing-check coverage columns, and report warning text elsewhere. N/A still represents genuinely unavailable metrics.
|
||||
- Prompt analytics and report text use only resolved bought/closed prompts with a known game/player source. Buy conversion divides bought by those resolved results. Incomplete activity outcomes are excluded from activity analysis, missing stage observations are excluded from funnel denominators, and stale unended sessions are omitted from player session lists. Recent open sessions remain visible for the Join placeholder. Existing valid counts/revenue and missing-data safeguards are preserved.
|
||||
|
||||
|
||||
- Overview includes per-game Game Health report cards for yesterday and the past seven complete UTC days, covering average/peak CCU and growth, active players/DAU, sessions, known playtime, average session duration, new/returning players, first-session five-minute retention, mature D1 returns, and spending/payer conversion. Compare equal prior periods and include a same-weekday comparison for yesterday.
|
||||
- Save daily reports per internal game ID/date/window. Refresh automatically after UTC rollover while the server runs, and catch up on startup or first read. Reports stay independent of dashboard chart date filters. The prototype generates sample narrative text from PostgreSQL metrics without an AI provider; a production model can later consume the same evidence. Show covered dates, update time, missing-data notes, and N/A for unavailable measurements.
|
||||
|
||||
- Product prompts explicitly report `trigger_source` as `game` (automatic game offer/trigger), `player` (explicit purchase action), or `unknown`. Filter prompt metrics by source and compare conversion, resolution counts, and buy/close time side by side; missing source must not be inferred from outcome. Sample source labels are synthetic. Comparisons are observational and may reflect different audiences.
|
||||
- Graphs with more than two available lines have searchable line checkboxes plus All/None controls. Graphs with one or two lines keep the simple layout. Hidden lines are excluded from scaling and hover values, colors remain stable, and selections survive chart refreshes during the page session. Events retains its existing per-game event picker.
|
||||
|
||||
- All data tables use pages of 20, with Previous/Next and direct page selection. Player snapshots, sessions, activity runs, events, and purchases are fetched per page, newest first with stable timestamp/ID ordering. Event-name and product filters apply before counting and pagination. Snapshot graphs remain chronological.
|
||||
- Player overview has separate Owned gamepasses and Products purchased cards. Passes are ordered by known purchase date, unknown dates last and shown as N/A. Products show lifetime quantity and spending totals.
|
||||
- Players includes a Hall of Fame: top five Robux spenders, top playtime, top cash, and a selectable fourth stat. Avatar boxes are placeholders for production images. Rankings span the whole selected game and exclude unknown values.
|
||||
- Retention keeps the cohort grid and adds a Day 1–7 curve using one fully mature cohort pool for all seven points.
|
||||
- All graphs preserve text proportions and recalculate their viewport on resize, using readable labels and fewer ticks on narrow screens. Category charts scroll horizontally when needed.
|
||||
- Monetization has Revenue, Product prompts, and Gamepasses tabs. Product prompts use lightweight `interaction_events` records, independent of activity sessions, with start/end, bought/closed/unresolved outcome, product, player/session, and optional receipt linkage. Show per-product prompt count, observed buy percentage, average time to buy, and average time to close, plus daily conversion graphs. Unknown timings display N/A.
|
||||
|
||||
- Player value history compares up to two numeric values with independent left/right scales and hover inspection. Include custom numeric snapshot fields, cash, level, recorded Robux spending, purchases, completed playtime, session count, average/median session duration, active days, and Robux per playtime hour. Derived history is calculated as of each snapshot, never from future records.
|
||||
- Player session tables replace Place with a Join session placeholder. Only unended sessions started within six hours have an enabled button; ended or stale sessions are disabled. Real Roblox joining remains unconnected.
|
||||
- The Events per day chart has searchable event checkboxes and All/None controls. Remember selection per game; preserve event colors when filtering. The summary remains game-wide.
|
||||
|
||||
Reference in New Issue
Block a user