5.9 KiB
Phase 2: UI Performance - Discussion Log
Audit trail only. Do not use as input to planning, research, or execution agents. Decisions are captured in CONTEXT.md — this log preserves the alternatives considered.
Date: 2026-07-30 Phase: 2-ui-performance Areas discussed: Caching approach, Refresh/staleness UX, Profiling targets, Fix scope: backend RPC
Caching approach
| Option | Description | Selected |
|---|---|---|
| KeepAlive + SWR | KeepAlive for main tabs AND useCachedResource for data | ✓ |
| SWR only | Extend useCachedResource, keep full remounts | |
| KeepAlive only | Instances alive, ad-hoc data refresh |
User's choice: KeepAlive + SWR (recommended)
| Option | Description | Selected |
|---|---|---|
| Profiling decides | Convert only surfaces PERF-01 names as slow | ✓ |
| All main tabs | Blanket conversion |
User's choice: Profiling decides (recommended)
| Option | Description | Selected |
|---|---|---|
| Keep alive, cap count | Include heavy views (Mesh D3+Leaflet), KeepAlive max cap | ✓ |
| Exclude heavy views | Only lightweight tabs kept alive | |
| You decide | Per-view by measurement |
User's choice: Keep alive, cap count (recommended)
| Option | Description | Selected |
|---|---|---|
| SWR, no KeepAlive | Per-item cache keys, no instance cache | ✓ |
| Same as main tabs | KeepAlive + SWR for secondary screens too | |
| You decide | Per screen by cardinality |
User's choice: SWR, no KeepAlive for secondary screens (recommended)
Refresh/staleness UX
| Option | Description | Selected |
|---|---|---|
| Invisible | Content updates in place, no indicator | |
| Subtle indicator | Small spinner/shimmer while refreshing | ✓ |
| Stale-age badges | Show data age via isStale/ageMs |
User's choice: Subtle indicator (declined the "Invisible" recommendation)
| Option | Description | Selected |
|---|---|---|
| 30s, per-view tuning | Hook default; Claude tunes per view | ✓ |
| Short (10s) everywhere | Fresher, more RPC chatter | |
| Long (60s+) everywhere | Minimal chatter |
User's choice: 30s with per-view tuning (recommended)
| Option | Description | Selected |
|---|---|---|
| Silent keep-last | Keep cached data, retry on focus/TTL | ✓ |
| Toast on failure | Surface every background failure |
User's choice: Silent keep-last (recommended)
| Option | Description | Selected |
|---|---|---|
| Yes, except large payloads | sessionStorage persist, skip big lists | ✓ |
| Memory only | Cold start on every reload |
User's choice: Persist except large payloads (recommended)
Profiling targets
| Option | Description | Selected |
|---|---|---|
| Apps tab + AppDetails | App browser + detail/log screens | ✓ |
| Mesh tab | Map, contacts, messages | ✓ |
| Wallet tab + send flows | Balances, send/receive | ✓ |
| Cloud/Files + Server | File browser, node status/settings | ✓ |
User's choice: All four, plus free-text additions: "network and web 5 and cloud and often app store"
| Option | Description | Selected |
|---|---|---|
| .228 | Designated gate/test node | |
| .198 dev pair | Other dev-pair node | |
| Whichever node showed it | User names the node |
User's choice: Free-text: archi-dev-box
| Option | Description | Selected |
|---|---|---|
| Committed findings doc | Profiling report in phase dir before fixes | ✓ |
| Findings in plans only | No standalone report |
User's choice: Committed findings doc (recommended)
| Option | Description | Selected |
|---|---|---|
| No visible spinner on revisit | Subjective-but-crisp pass bar | ✓ |
| Numeric budgets | ms budgets measured on-device |
User's choice: No visible spinner on revisit (recommended)
Fix scope: backend RPC
| Option | Description | Selected |
|---|---|---|
| Additive changes only | New aggregate/batch endpoints ok; no refactors/orchestrator | ✓ |
| Frontend only | Backend untouched | |
| Whatever profiling justifies | Any backend change, gate re-runs as needed |
User's choice: Additive changes only (recommended)
| Option | Description | Selected |
|---|---|---|
| Parallelize + dedup | Promise.all + rpc-client dedup | ✓ |
| Aggregate endpoints | Combined-payload RPCs for 3+ call screens | |
| You decide per view | Per-screen by measurement |
User's choice: Parallelize + dedup (recommended)
| Option | Description | Selected |
|---|---|---|
| Dev pair only, no OTA | Verify on dev nodes; fleet rollout via release train | ✓ |
| OTA when verified | Fleet OTA as part of this phase |
User's choice: Dev pair only (recommended)
Scope routing (freeform input)
During area selection the user requested a large AIUI/IndeeHub scope expansion. Routed via a follow-up question:
| Option | Description | Selected |
|---|---|---|
| New phase, discuss next | Add roadmap phase + full discuss-phase | |
| Backlog only for now | Keep in Deferred Ideas | |
| Fold the small UX fixes into Phase 2 | Chat-expanded + mobile-starts-on-chat ride along; big work deferred | ✓ |
Notes: The two UX defaults became D-14 in CONTEXT.md. All other AIUI/IndeeHub items recorded verbatim in Deferred Ideas.
Claude's Discretion
- Per-view TTL values
- KeepAlive max cap / eviction tuning
- Parallelization vs aggregate endpoint per screen (within additive-only bound)
- Refresh indicator placement/styling
Deferred Ideas
- AIUI permissioned node access (Pine-parity command surface, no data leaks)
- AIUI content deep-dive ("make it perfect")
- AIUI peer videos and files
- IndeeHub cross-node content source with payments (films, music, everything)
- AIUI Nostr integration polish