Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
83 commits
Select commit Hold shift + click to select a range
dec9f47
feat(analytics): Cloudflare Analytics Engine client
alukach Jul 6, 2026
0b85713
feat(analytics): product/object usage cards + admin traffic explorer
alukach Jul 6, 2026
3389dd7
refactor(analytics): UsagePoint extends UsageTotals
alukach Jul 6, 2026
b95bd1b
fix(analytics): review findings from multi-agent pass
alukach Jul 6, 2026
d5d6793
fix(analytics): satisfy Analytics Engine's strict SQL type checker
alukach Jul 6, 2026
6ddd38f
fix(analytics): don't let the meta column crush the usage card
alukach Jul 6, 2026
557715b
feat(analytics): expand country codes to names in admin breakdown
alukach Jul 6, 2026
ede63a2
fix(analytics): label the client_ip_hash group-by "IP hash"
alukach Jul 6, 2026
749b1a5
fix(analytics): no default bar highlight; explain stats via tooltips
alukach Jul 6, 2026
b646c2c
test(analytics): wrap UsagePanel renders in Theme for Tooltip provider
alukach Jul 6, 2026
e0fa71d
fix(analytics): single-decimal byte values in the usage card
alukach Jul 6, 2026
bed8b25
feat(analytics): 30-day usage window (was 28)
alukach Jul 6, 2026
56e5a5e
feat(analytics): redesign usage card per mockups
alukach Jul 6, 2026
ea6ec96
feat(analytics): maintainer analytics page + product layout rework
alukach Jul 6, 2026
5b0b08d
chore: drop unused productsTable import from product layout
alukach Jul 6, 2026
95ea90a
feat(analytics): route the product analytics tab via ?tab=analytics
alukach Jul 6, 2026
e3b0a3b
perf(analytics): cache card/page stats for 4 hours
alukach Jul 6, 2026
73f1c07
feat(analytics): skeleton fallback for the product analytics card
alukach Jul 6, 2026
9a99fad
feat(analytics): drop the Object Analytics section from object views
alukach Jul 6, 2026
fa81be5
fix(product): loading skeleton matches the two-column layout
alukach Jul 6, 2026
a7b53b2
feat(product): README/viewer spans the full container width
alukach Jul 6, 2026
65a3b8b
feat(analytics): gate the product analytics card to product managers
alukach Jul 6, 2026
2c1bd09
fix(analytics): public card, manager-only tabs
alukach Jul 6, 2026
045cab8
feat(product): full-width object preview via @preview slot
alukach Jul 7, 2026
79009df
fix(analytics): per-IP download frequency; restore full-bleed cards
alukach Jul 7, 2026
c77f4fc
docs(analytics): note the row-cap ceiling on the per-IP histogram
alukach Jul 7, 2026
ac2f3f6
feat(analytics): Unique IPs stat alongside Registered on the Users tab
alukach Jul 7, 2026
8e5f873
Merge branch 'main' into worktree-analytics-suite
alukach Jul 7, 2026
276421c
Simplify labels
alukach Jul 7, 2026
c35bbe3
feat(product): title the full-width preview card "Object Preview"
alukach Jul 7, 2026
769507d
fix(analytics): day-align the usage window so all numbers agree
alukach Jul 7, 2026
371e55d
simplify ui components
alukach Jul 7, 2026
8f5c940
mv external open link
alukach Jul 7, 2026
73fedc9
reduce object preview padding top
alukach Jul 7, 2026
47a1603
rm unused page
alukach Jul 7, 2026
c6f9eb1
fix(analytics): suppress selection overlay on the downloads chart
alukach Jul 7, 2026
f47fbfe
Revert "rm unused page"
alukach Jul 7, 2026
af89eab
fix(routing): harden the analytics-tab rewrite per 3-agent review
alukach Jul 7, 2026
f99057b
fix(analytics): keep chart clicks from moving focus
alukach Jul 7, 2026
c1bf8f6
Merge branch 'main' into worktree-analytics-suite
alukach Jul 7, 2026
a87f4eb
feat(analytics): week-multiple windows + admin date-range selector
alukach Jul 8, 2026
dd472f2
feat(analytics): finer admin range shifting, date inputs only
alukach Jul 8, 2026
8e50f96
fix(analytics): « » shift by the shown range length, ‹ › by 1 day
alukach Jul 8, 2026
32268bd
feat(analytics): admin chart date+time ticks, interval selector, req/s
alukach Jul 8, 2026
004942c
feat(analytics): show the selected date range in the chart title
alukach Jul 8, 2026
a2bcd59
feat(analytics): carry the Bytes/Requests toggle in ?metric=
alukach Jul 8, 2026
f7edfb1
feat(analytics): debounced auto-apply admin filters
alukach Jul 8, 2026
1f1f4bc
feat(analytics): fullscreen chart toggle and SQL viewer
alukach Jul 8, 2026
52f7991
fix(analytics): surface the bar-count ceiling instead of silently coa…
alukach Jul 8, 2026
cf5200d
feat(analytics): debounce group-by toggling
alukach Jul 8, 2026
96c3f1a
fix(analytics): exclude keyless requests from Top Files
alukach Jul 9, 2026
4370922
fix: address PR review findings
alukach Jul 13, 2026
6ae8de7
fix(analytics): assemble day-multiple buckets from daily rows
alukach Jul 13, 2026
1573520
feat(analytics): headline stats row on the admin explorer
alukach Jul 13, 2026
741ce55
feat(analytics): snappier admin filters and mono styling throughout
alukach Jul 13, 2026
ffe6f0f
fix(analytics): move mono/HELP out of the client module
alukach Jul 13, 2026
2bd6906
style(analytics): drop the admin chart title one size
alukach Jul 13, 2026
18f4e00
feat(analytics): bytes/sec in tooltips; stats row into the chart block
alukach Jul 13, 2026
34265b1
style(analytics): two-zone admin filter panel
alukach Jul 13, 2026
787baa7
feat(analytics): click/drag drill-down with a Minute interval
alukach Jul 13, 2026
59234d0
feat(analytics): downloads-per-IP histogram beside the frequency bands
alukach Jul 13, 2026
122441f
feat(analytics): rank the admin view by the active metric; default Re…
alukach Jul 13, 2026
9f73c57
feat(analytics): rank numbers in the admin groups table
alukach Jul 13, 2026
0cf1dd9
fix(analytics): vertically center admin table rows
alukach Jul 13, 2026
be7a0eb
fix(analytics): sync admin filters through history; manager-only notes
alukach Jul 13, 2026
982edb3
style(analytics): card visibility note moves into a tooltip
alukach Jul 13, 2026
6e2ece2
feat(analytics): log-binned downloads-per-IP histogram
alukach Jul 13, 2026
35ade09
feat(analytics): datetime-local range filters in the admin explorer
alukach Jul 13, 2026
85c1c9a
feat(analytics): UTC-window tooltips on the day-count labels
alukach Jul 13, 2026
3928831
style(analytics): stack the datetime inputs to keep the panel horizontal
alukach Jul 13, 2026
f02e972
fix(analytics): keep the filter panel's two zones side by side
alukach Jul 13, 2026
66a8139
feat(analytics): filter the admin view by any group-by dimension
alukach Jul 14, 2026
41b5147
fix(analytics): stack FILTER BY under the dates; no submit on dimensi…
alukach Jul 14, 2026
a280e06
style(analytics): natural-width datetime inputs
alukach Jul 14, 2026
7521a8d
fix(analytics): visible dense bars; card loses the Users tab; tab lock
alukach Jul 15, 2026
407fcff
refactor(analytics): drop the card's "View all analytics" link
alukach Jul 15, 2026
aa4792c
feat(analytics): Pareto chart for IPs by download count
alukach Jul 15, 2026
a70e0e3
fix(analytics): keep the download-count bins in ordinal order
alukach Jul 15, 2026
9399cf2
Merge origin/main into worktree-analytics-suite
alukach Jul 20, 2026
3e6c1f4
Merge branch 'main' into worktree-analytics-suite
alukach Jul 29, 2026
6a02727
feat(analytics): drop tilde prefix on approximate values
alukach Jul 29, 2026
f2f7626
feat(analytics): group download-count stats together
alukach Jul 29, 2026
694002a
chore(analytics): guard AE client with server-only import
alukach Jul 29, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -29,3 +29,10 @@ NEXT_PUBLIC_S3_ENDPOINT=https://data.source.coop
DYNAMODB_ENDPOINT=http://localhost:8000
STAGE=local

# Cloudflare Analytics Engine (request analytics written by the data proxy).
# Token needs Account Analytics:Read. Dataset is source_data_proxy_production
# or source_data_proxy_staging. Optional — analytics UI hides itself when unset.
# CF_ANALYTICS_ACCOUNT_ID=
# CF_ANALYTICS_API_TOKEN=
# CF_ANALYTICS_DATASET=source_data_proxy_staging

3 changes: 3 additions & 0 deletions jest.setup.ts
Original file line number Diff line number Diff line change
Expand Up @@ -45,5 +45,8 @@ jest.mock("@/lib/config", () => ({
},
// 32 zero bytes, base64 — a valid key for the encrypted-cookie helpers.
proxyCredentialsCookieKey: Buffer.alloc(32).toString("base64"),
// Unconfigured by default so analytics components no-op in unrelated
// tests; the analytics client's own tests mock this with real values.
analytics: { accountId: "", apiToken: "", dataset: "" },
},
}));
Loading
Loading