- 4 top KPI cards (registrations, downloads by OS+total, MAU, DAU) from
drb_iliyas_telecomkz_daily_info + telecomkz_mau_stats; JSON gets top{} block
- grid/list view toggle (list = full-width cards), persisted in localStorage
- click any card -> modal with Chart.js line chart + per-month table; tooltip
shows monthly delta for both years; ESC/overlay/✕ to close
- updater: group by report_period_id (YYYYmm), current month capped to
yesterday symmetrically for both years; per-year cumulative reset each Jan;
adsl CTE now date-bounded for equal-period comparison
- JSON adds months/month_labels + per-metric cur_cum/prev_cum
- page: per-card cumulative sparkline (2025 dashed vs 2026 solid) + legend
- new page app_stats/index.html (login-gated, same style/nav)
- app_stats/app_metrics.json data (year-over-year comparison, NEW badges)
- updater/update_app_metrics.py: adaptive SQL (Jan 1 -> yesterday vs prev year)
- run both updaters from run_update.bat; refactor shared git push
- AI analysis loaded from git on startup (same for all users)
- Saving new response commits ai-cache.json via Gitea API
- Requires GITEA_TOKEN in config.js to update cache
- Update UI: auto-expanded result, collapsible refresh section
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>