Ga4 Dashboard

repo: ~/Projects/ga4-dashboard · 4 commits · 0 in last 24h, 0 in last 7d ·

Search the build

4 commits indexed

  1. 3942604 2026-08-04 chore: lint (drop unused import), v1.0.1 (session close)
  2. 80a2fa1 2026-08-04 auto-save: 2026-08-04T14:04:01 (1 files) — etl.py
  3. 464db7f 2026-08-04 Fix A: duplicate-domain dedup; Fix B: wire table column sort
  4. f917b8b 2026-08-04 Add GA4 fleet traffic dashboard (local, port 9710)

Authors

Agents used

  • none detected

Skills used

  • /www1
  • /trailing-slash1
  • /canonical1
  • /data1
  • /table1

Creative ideas + design notes

Commits with substantial prose (≥120 chars) — the rationale behind each move.

464db7f · 2026-08-04 · Fix A: duplicate-domain dedup; Fix B: wire table column sort
Fix A (etl.py): after building the results list, normalize each property's
domain (lowercase, strip scheme/www./trailing-slash) and group by normalized
key. For any domain shared by >1 property, pick the canonical as the one with
the highest sessions_7d (tie-break: newest create_time) and set
duplicate_domain=True/canonical=False on the rest. Every entry now carries
both fields. ETL run confirmed 10 duplicates flagged across 126 properties.

Fix A (server.js): active-site headline count now excludes non-canonical
duplicates (54 real active vs. inflated 64). filterData() respects a
"Hide duplicates" checkbox (default checked, persisted to localStorage).
Duplicate cards and table rows get an opacity-0.6 "is-dup" class and a
muted "dup" badge.

Fix B (server.js): table <th> headers wired with onclick="tableSort(key)".
Added colValue(), NUMERIC_COLS, sortByState(), and tableSort() — numeric
cols sort descending by default, text cols A-Z. Active sort header gets
.sorted class + directional arrow. render() uses sortByState() when a
column sort is active in table mode.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
f917b8b · 2026-08-04 · Add GA4 fleet traffic dashboard (local, port 9710)
ETL script (etl.py) auto-discovers all accounts + properties via GA4 Admin API,
pulls 7d + 30d traffic metrics, writes cache/data.json. Server (server.js) serves
the cache instantly with basic-auth, sort, density slider, grid/table toggle, and
drill-down links to GA4 reports. 126 properties across 2 accounts, 0 errors, $0 cost.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

File tree

6 files tracked. Click any to browse the source at HEAD.

Other build journals

← Ga Global Viewer  ·  all 4 projects  ·  Ga4 Fleet →

Export

commits.csv · feed.atom · project.json · commits.json

rendered in 0ms