Commit Graph
312 Commits
Author SHA1 Message Date
kyle 2ae6269a15 Merge pull request 'Development' (#24) from development into main
CI/CD Pipeline / Build and Push PocketBase Docker Image (push) Successful in 14s
CI/CD Pipeline / i18n Catalog Check (push) Successful in 55s
CI/CD Pipeline / Build and Push App Docker Image (push) Successful in 3m34s
CI/CD Pipeline / Deploy to Kubernetes (push) Successful in 8m26s
Reviewed-on: #24
2026-08-28 10:40:06 -05:00
kyle 6bb3ee4bc7 fix: render local-timezone dates client-side only
CI/CD Pipeline / Build and Push PocketBase Docker Image (push) Successful in 14s
CI/CD Pipeline / i18n Catalog Check (push) Successful in 37s
CI/CD Pipeline / Build and Push App Docker Image (push) Successful in 2m10s
CI/CD Pipeline / Deploy to Kubernetes (push) Successful in 8m28s
- started-tournament header and tournament list formatted times in the
  server timezone during ssr, mismatching hydration on every load
2026-08-27 14:14:03 -07:00
kyle 7bda138d69 feat(telemetry): matchup and direction context in timelines; live error groups
CI/CD Pipeline / Build and Push PocketBase Docker Image (push) Successful in 9s
CI/CD Pipeline / i18n Catalog Check (push) Successful in 47s
CI/CD Pipeline / Build and Push App Docker Image (push) Successful in 2m18s
CI/CD Pipeline / Deploy to Kubernetes (push) Successful in 8m29s
- h2h_viewed carries who-v-who, stats_sorted carries asc/desc via a
  timeline-only context prop
- error browser aggregates raw rows so new groups appear immediately
- catalogs re-extracted for shifted line references
2026-08-27 10:47:57 -07:00
kyle 9b51d61519 i18n: refresh catalog line references
CI/CD Pipeline / Build and Push PocketBase Docker Image (push) Successful in 8s
CI/CD Pipeline / i18n Catalog Check (push) Successful in 42s
CI/CD Pipeline / Build and Push App Docker Image (push) Successful in 2m8s
CI/CD Pipeline / Deploy to Kubernetes (push) Successful in 8m28s
2026-08-27 10:32:14 -07:00
kyle 8e42862d20 fix(telemetry): review nits
CI/CD Pipeline / Build and Push PocketBase Docker Image (push) Successful in 8s
CI/CD Pipeline / i18n Catalog Check (push) Failing after 49s
CI/CD Pipeline / Build and Push App Docker Image (push) Skipped
CI/CD Pipeline / Deploy to Kubernetes (push) Skipped
- dock h2h source corrected to match_dock; badge_viewed breakdown via value
- stats filter guards unified, ref-based, double-tap safe
- emoji picker reuses handleReactionClick; comment and import tidy
2026-08-26 23:19:45 -07:00
kyle f593b2c7b8 feat(telemetry): product interaction events
- h2h_viewed from match card, dock, profile, stats, predictions
- reaction_sent with emoji and surface; score_report_opened from all
  three report entry points
- stats_filtered and stats_sorted on stats route and profile
- rules/teams/players/bracket/tournament view events with sources
- match_history_viewed, badge_viewed, player_searched (count only)
2026-08-26 23:04:36 -07:00
kyle fc65fdb451 feat(telemetry): resolve profile and team names in session timelines 2026-08-26 22:56:11 -07:00
kyle 8171354e2a feat(telemetry): generic event aggregates and usage range presets
- rollups emit event.count (dim name) and event.detail.count (dim name|detail
  from props.source/emoji/tournament)
- usage screen: events section with tap-through breakdown; 7d/30d/180d/custom
  date-range presets
2026-08-26 22:53:58 -07:00
kyle cb16d9757e fix(telemetry): idle-based session rotation; faster sse keepalive
- session id rotates after 30 idle minutes so installed pwas produce
  visit-sized sessions instead of one eternal id
- sse ping every 8s, under the idle timeout observed killing streams
2026-08-26 22:43:25 -07:00
kyle 96d5535293 fix: countdown hydration mismatch; rate-limit sse-error session refreshes
- suppressHydrationWarning on countdown time text (server second differs
  from client second; first tick corrects)
- sse reconnects attempt a session refresh at most once per minute so a
  flaky stream cannot hammer the refresh endpoint
2026-08-26 22:41:05 -07:00
kyle f5b49d49ee code fix
CI/CD Pipeline / Build and Push PocketBase Docker Image (push) Successful in 13s
CI/CD Pipeline / i18n Catalog Check (push) Successful in 42s
CI/CD Pipeline / Build and Push App Docker Image (push) Successful in 2m8s
CI/CD Pipeline / Deploy to Kubernetes (push) Successful in 8m28s
2026-08-26 20:33:13 -07:00
kyle fd45ba1112 Merge branch 'admin-telemetry-redesign' into development
CI/CD Pipeline / Build and Push PocketBase Docker Image (push) Successful in 10s
CI/CD Pipeline / i18n Catalog Check (push) Successful in 44s
CI/CD Pipeline / Build and Push App Docker Image (push) Successful in 3m0s
CI/CD Pipeline / Deploy to Kubernetes (push) Successful in 8m27s
2026-08-26 19:14:00 -07:00
kyle f13e5b752a refactor(enrollment): drop count header, keep player-count warnings 2026-08-26 19:12:33 -07:00
kyle 4106c3c846 fix(build): keep supertokens server init out of the client module graph
- ensureSuperTokensBackend moved to the health route handler; the dynamic
  imports in exclusions and alerts dragged recipes into the client build
2026-08-26 18:58:31 -07:00
kyle 044e573933 Merge branch 'admin-telemetry-redesign' into development
CI/CD Pipeline / Build and Push PocketBase Docker Image (push) Successful in 19s
CI/CD Pipeline / i18n Catalog Check (push) Successful in 41s
CI/CD Pipeline / Build and Push App Docker Image (push) Failing after 51s
CI/CD Pipeline / Deploy to Kubernetes (push) Skipped
2026-08-25 23:36:10 -07:00
kyle 3d8ee52a15 feat(telemetry): opt-in admin alert pushes
- telemetryAlerts metadata flag, admin-gated server fn
- alerts sent only to admins with the flag enabled
- settings toggle visible to admins only, under device notifications
2026-08-25 23:33:01 -07:00
kyle 1ddcffc511 fix(telemetry): review findings
- wau/mau trailing scans run hourly and on day finalization, not every tick
- exclusion lookup failures cached 30s so an st outage cannot amplify
- unverified relation filter dropped; player emptiness checked in js
- anonymous unauthenticated read failures no longer logged
- alerts and exclusions ensure supertokens init on cold pods
2026-08-25 23:26:34 -07:00
kyle 31f6237446 refactor(admin): drop status strip from dashboard; full-bleed usage tab
- admin home is tournament section + tools list only
- usage route matches sibling tabs (fullWidth, no shell padding); screen
  pads its own content so the tab bar stays flush
2026-08-25 23:22:21 -07:00
kyle 6dff5f19c1 chore(k8s): optional telemetry_exclude_phones secret env 2026-08-25 23:04:31 -07:00
kyle 9f5fac2753 feat(telemetry): exclude configured phones from usage telemetry
- TELEMETRY_EXCLUDE_PHONES resolves to player ids at runtime, cached 10m
- excluded players write no activities, client events, or vitals
- their client errors are still captured
2026-08-25 23:04:14 -07:00
kyle c05bdec252 fix(sheet): native scroll container so vaul drag detection works 2026-08-25 22:59:00 -07:00
kyle e4d1ba720a feat(telemetry): session journey view replaces raw events table
- sessions listed from client_events grouped by session id (7d window)
- timeline sheet merges page views, client events, errors, and server-fn
  activities joined by player within the session window
- vitals excluded from timelines; gap markers over 5 minutes
2026-08-25 22:56:09 -07:00
kyle 5d7747839c refactor(telemetry): text-only list empty states, distinct p50/p95 series
- paginated-list empty prop is a plain string, no icon block
- second sparkline series drawn in dimmed color; area disabled on dual charts
- duration legend shows latest p50/p95 values
2026-08-25 22:38:45 -07:00
kyle fd0489a22f refactor(telemetry): chart scale labels, calmer vitals and error styling, usage-first tabs
- sparklines get start/end date and max-value footers
- vitals rating shown by value color instead of badges
- error rows use plain counts, subtle resolve button, terse empty state
- telemetry tab order: usage, players, functions, events, errors; usage is default
2026-08-25 22:35:16 -07:00
kyle 7ea189aa61 fix(telemetry): stop logging beacon requests as activities 2026-08-25 22:26:54 -07:00
kyle 1cc75591fa refactor(admin): align admin ui with app design language
- dashboard: card grid replaced by status strip + nav-tile section + list
- nav-tile promoted to shared component
- stat tiles and usage screen de-carded, sections divided like settings
- hub run tournament back to a list row
- telemetry link restored in tools list
2026-08-25 22:24:36 -07:00
kyle 895737febc style: trim comments to load-bearing invariants only 2026-08-25 22:13:41 -07:00
kyle 5e9d030297 fix(telemetry): enable client tracking in dev 2026-08-25 22:11:09 -07:00
kyle 2b02de2193 fix(telemetry): start scheduler from admin dashboard too, not only health probes 2026-08-25 22:09:08 -07:00
kyle 13481936f0 feat(start): csrf middleware for server functions 2026-08-25 22:05:25 -07:00
kyle 603d5a6f7f i18n: translate telemetry and admin strings for de/es/ja 2026-08-25 21:58:59 -07:00
kyle eb3dbe048b i18n: extract catalogs for telemetry and admin redesign strings 2026-08-25 21:54:51 -07:00
kyle 4af4a65527 bug
CI/CD Pipeline / Build and Push PocketBase Docker Image (push) Successful in 8s
CI/CD Pipeline / i18n Catalog Check (push) Successful in 30s
CI/CD Pipeline / Build and Push App Docker Image (push) Successful in 2m3s
CI/CD Pipeline / Deploy to Kubernetes (push) Successful in 8m27s
2026-08-25 21:54:50 -07:00
kyle a52872bea8 feat(admin): dashboard home, telemetry section, enrollment ops screen
- mission-control dashboard: now strip, tournament quick actions, usage
  sparklines, error feed, live activity, tools list
- /admin/telemetry with functions/events/errors/players/usage child routes,
  hand-rolled svg chart primitives, decomposed activities table
- error browser with grouping and mark-resolved
- consolidated per-tournament enrollment screen; hub simplified with
  run tournament promoted
- /admin/activities redirects to /admin/telemetry/functions
2026-08-25 21:54:21 -07:00
kyle 06fe1f4ed7 feat(telemetry): rollups, alerts, scheduler, health checks, admin server fns
- pure rollup accumulators with tests; daily upserts keyed date/metric/dim
- alert checks with db-backed cooldown and push to admin players
- in-process scheduler started from health probes
- health endpoint checks pb + supertokens, stale-while-revalidate, always 200
- sse connection counter moved to emitter
- telemetry feature server fns: events/errors/groups/rollups/alerts/status
2026-08-25 21:38:08 -07:00
kyle e2863c1f6c feat(telemetry): collections, universal server-fn coverage, beacon, client tracker
- activities indexes + client_events/client_errors/rollups/alerts collections
- global function middleware via createStart; reads skipped on success
- actor stash, denial dedup, control-flow error guards
- api route logging, auth event overrides, beacon endpoint, web vitals
- centralized admin role checks, shared skeletons, award-badges fix
- extracted deriveRunState with tests
2026-08-25 21:33:25 -07:00
kyle f4396d9527 Merge pull request 'pwa fixes' (#23) from development into main
CI/CD Pipeline / Build and Push PocketBase Docker Image (push) Successful in 8s
CI/CD Pipeline / i18n Catalog Check (push) Successful in 43s
CI/CD Pipeline / Build and Push App Docker Image (push) Successful in 2m4s
CI/CD Pipeline / Deploy to Kubernetes (push) Successful in 8m28s
Reviewed-on: #23
2026-08-24 00:04:44 -05:00
kyle 15aeb64b19 pwa fixes
CI/CD Pipeline / Build and Push PocketBase Docker Image (push) Successful in 8s
CI/CD Pipeline / i18n Catalog Check (push) Successful in 40s
CI/CD Pipeline / Build and Push App Docker Image (push) Successful in 2m6s
CI/CD Pipeline / Deploy to Kubernetes (push) Successful in 8m27s
2026-08-23 21:51:38 -07:00
kyle 352fadadb5 Merge pull request 'Adding: themes, predictions, match reporting, ui fixes, sse fixes, badge fixes, match flow, i18n, match edits, perf, auth fix' (#22) from development into main
CI/CD Pipeline / i18n Catalog Check (push) Successful in 30s
CI/CD Pipeline / Build and Push PocketBase Docker Image (push) Successful in 36s
CI/CD Pipeline / Build and Push App Docker Image (push) Successful in 1m53s
CI/CD Pipeline / Deploy to Kubernetes (push) Successful in 8m30s
Reviewed-on: #22
2026-08-23 23:08:56 -05:00
kyle 8a894e8365 Merge branch 'deep-ketch' into development
CI/CD Pipeline / i18n Catalog Check (push) Successful in 38s
CI/CD Pipeline / Build and Push App Docker Image (push) Successful in 3m11s
CI/CD Pipeline / Build and Push PocketBase Docker Image (push) Successful in 14s
CI/CD Pipeline / Deploy to Kubernetes (push) Successful in 8m31s
2026-08-23 20:31:49 -07:00
kyle e3fea18ab2 badges improvements 2026-08-23 20:31:44 -07:00
kyle 58702da156 style: trim narration comments from recent changes 2026-08-23 20:06:05 -07:00
kyle c342b91029 feat(header): shrink long titles to fit instead of wrapping
The header keeps its size; a title that would overflow scales down to a
floor of 55% and ellipsizes only past that. Re-measures on title change,
resize, and web-font load.
2026-08-23 20:06:05 -07:00
kyle 792425a83e fix(i18n): hydrate in the SSR locale instead of regressing to en
The client's message cache held only en at hydration, so a non-en user
rendered English until the locale's catalog chunk loaded — and stayed
English if that import failed or lost a race. __root beforeLoad now
dehydrates the active locale's compiled catalog with the page and the
provider primes its cache from that payload, so first paint is already in
the user's locale with no dependency on a client-side chunk load.
ensureMessages dedupes concurrent loads and drops rejected ones so a
retry can succeed, and the provider's fallback loader retries instead of
silently stranding the UI in en.
2026-08-23 19:47:31 -07:00
kyle ac2e61731c Merge branch 'theme-discovery-presets' into development 2026-08-23 19:26:37 -07:00
kyle 62cbca4a9d theme tooltip 2026-08-23 19:26:21 -07:00
kyle 11bb70316a fix(pwa): simplify the install prompt copy 2026-08-23 19:03:57 -07:00
kyle 9fc79dfc07 fix(audit): readable names, single writer, denial rows, redacted args
The activity log recorded Start's hashed function id (a sha256 URL
segment) as the name; the middleware now reads compile-time
serverFnMeta.name with the path segment as fallback. toServerResult
resolves { success:false } instead of throwing, so the middleware logged
failures as successes while toServerResult wrote a duplicate row with its
own dead name parser — the middleware is now the single writer and reads
the envelope's success flag. Admin denials, which threw before the logging
middleware ran, get their own audit row. Arguments are redacted
(phone/otp/token keys) and truncated at 2KB. The admin activities search
binds its filter parameters (likePattern escaping) instead of
interpolating raw input. Adds vitest with node-env tests for the
middleware, redaction, and filter utils, and extends logging coverage to
mutating fns that lacked it.
2026-08-23 18:27:53 -07:00
kyle 60e91d1371 fix(pocketbase): self-heal admin auth instead of stranding requests
beforeSend now skips its gate for the auth endpoints (no self-await
deadlock), swallows a rejected authPromise and re-authenticates when the
store is invalid, re-stamps Authorization after the gate so requests built
mid-auth carry the fresh token, and guards startTokenRefresh against
stacking intervals. A failed boot auth logs a diagnostic instead of
crashing the process; recovery happens on the next request.
2026-08-23 18:27:45 -07:00
kyle a45c2aeafa fix(pwa): reword the install prompt and keep it off the bottom nav
The banner sat fixed at the viewport bottom at z-index 1000, covering the
authed shell's mobile nav; it now offsets above the nav's geometry when a
signed-in mobile user has one. New casual copy replaces the Twilio line,
the dismiss button gains a localized aria-label, and de/es/ja catalogs
carry the new strings.
2026-08-23 18:27:40 -07:00