* refactor(ip-info-card): reduce retry, use succeed as lastFetchTs
* refactor(ip-info-card): stop countdown during revalidation
* perf(ip-info-card): avoid aggressive schedule revalidation
* perf(ip-info-card): try stop interval on window minimized
* perf(ip-info-card): only mutate after card scroll into view once
* perf(ip-info-card): interval only when card has been visible
* chore: add more debug information
* Update src/components/home/ip-info-card.tsx
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* fix: reset countdown state after mutate finishes
---------
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* perf(ip-info-card): make ip info card much better
* fix(ip-info-card): remove unused useEffect deps
* Apply suggestion from @Copilot
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* refactor(ip-info-card): use `async-retry`, bail out non-2XX resp
* feat(ip-info-card): add new backend
* feat(ip-info-card): only revalidate when window is visible
* perf(ip-info-card): reduce re-renders when window is hidden
* fix(ip-info-card): remove `mutate` from `useEffect` arg
* Update src/components/home/ip-info-card.tsx
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* fix: drop AbortSignal.timeout for old safati compat
---------
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>