Resparke Analytics Documentation

Overview of the dashboard, data flow, Firestore schema, caching, and UI behaviors for the Resparke Analytics web app.

Contents

Overview

  • index.htmlPublic dashboard showing facility cards/list, global filters, stats, charts.
  • facilities.htmlAdmin facility manager (CRUD), requires authenticated user.
  • facility.htmlFacility detail view with per-facility stats, charts, and date range.

Authentication & Access

  • auth-guard.js enforces email/password auth (no anonymous). Non-authenticated users are redirected to login.html.
  • Auth guard dispatches firebaseInitialized after login; pages consume window.firestoreDb.
  • adminLogout() signs out and redirects to login.html.

Data Flow

  • main.js bootstraps the dashboard: sets up events, initializes date range, fetches data, renders UI.
  • firestore.js fetches facilities and date-ranged daily engagement; processes into state.
  • ui-render.js renders cards/list, stats, charts; uses memoized facility metrics.
  • events.js wires filters (search, date, sort, engagement, units, view mode) and refreshes data/render.
  • facility-details.js handles facility detail fetch, charts, and per-facility date range; fills missing dates with zeroes.

Firestore Collections

facilities

FieldTypeNotes
namestringFacility display name
facilityIdstringExternal ID (used in queries/links)
networkstringOptional grouping
statusstringactive | inactive
createdAt / updatedAttimestampSet on create/update

facilityAggregatedDaily

FieldTypeNotes
facilityIdstringMatches facilities.facilityId
datestring (YYYY-MM-DD)Partition key for daily rollups
videoDurationSnumberSeconds
musicDurationSnumberSeconds
slideshowDurationSnumberSeconds

Daily engagement (dashboard)

From DAILY_DATA_COLLECTION (configured in config.js): date-range query used for dashboard totals and facility cards/list.

Caching & Date Ranges

  • Dashboard caching: in-memory (60 min) + localStorage (24h) keyed by date range; controlled in firestore.js.
  • Facility manager: 5-minute in-memory cache; invalidated on add/update/delete.
  • Date defaults: 7-day window excluding today (yesterday back 6 days). Stored in localStorage (globalDateFrom/To).
  • Facility detail: accepts ?from=YYYY-MM-DD&to=YYYY-MM-DD, fills missing dates with zero rows for charts.
  • Unit toggle: minutes/hours stored in state; affects facility card values and summary totals.

UI Behaviors

  • Filters: search, date range, sort, engagement filter, view mode (cards/list), units (minutes/hours).
  • Cards/List: facilities rendered from processed state; engagement percentage drives star rating and header gradient.
  • List mode: table spans full width; total column shows summed minutes.
  • Facility detail: separate charts for Video/Music/Slideshow, donut + legend, stat tiles; date picker reloads with query params.
  • Admin: facilities CRUD with auth, cache invalidation; uses facilities collection.

Common Errors

  • Missing or insufficient permissions: User not authenticated or rules deny access; sign in via login.html.
  • No data in range: Charts show zeros due to filtered date window; adjust date range.

Key Files

Frontend Pages

  • index.html
  • facilities.html
  • facility.html
  • login.html
  • CSS/styles.css

App Scripts

  • main.js, events.js, filters.js, ui-render.js
  • firestore.js, data-utils.js, state.js
  • facility-details.js, facility-analytics.js
  • calculations.js, charts.js, analytics.js
  • config.js

Auth

  • auth-guard.js