Episode 2 — React Frontend Architecture NextJS / 2.11 — Routing and Application Structure

2.11.d — useNavigate: programmatic navigation

<< 2.11 Overview


Learning outcomes

  1. Navigate imperatively after async work (login, save).
  2. Choose replace vs default push behavior deliberately.
  3. Avoid navigation during render.

Example

import { useNavigate } from "react-router-dom";

export function SaveButton() {
  const navigate = useNavigate();

  return (
    <button
      type="button"
      onClick={async () => {
        await save();
        navigate("/done", { replace: true });
      }}
    >
      Save
    </button>
  );
}

When to prefer Link

If the user is clicking a normal navigation affordance, prefer Link—it is accessible, middle-clickable, and SEO-friendlier for public pages than buttons with navigate.



Appendix — Scenario bank (basic → advanced)

Drill format: broken URL / UX → root cause → fix → interview phrase.

RR3-001 — useNavigate #1

  • Level: Beginner
  • Symptom: 404 on refresh at depth 13 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Relative navigate resolves incorrectly from nested route context.
  • Primary remediation: Use replace for auth redirects and post-submit redirects when stack should not grow.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-002 — useNavigate #2

  • Level: Beginner+
  • Symptom: 404 on refresh at depth 26 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Blocking navigation without prompt UX for dirty forms.
  • Primary remediation: Cancel async or guard with mounted flag before navigate.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-003 — useNavigate #3

  • Level: Intermediate
  • Symptom: 404 on refresh at depth 39 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Programmatic nav duplicates work Link already expresses declaratively.
  • Primary remediation: Prefer Link for user-visible navigation; reserve navigate for post-mutation flows.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-004 — useNavigate #4

  • Level: Intermediate+
  • Symptom: 404 on refresh at depth 52 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Navigation on unmounted component after async completion.
  • Primary remediation: Use router blocker APIs per version docs for unsaved changes.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-005 — useNavigate #5

  • Level: Advanced
  • Symptom: 404 on refresh at depth 65 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Forgot replace: true duplicating history entries on wizard back.
  • Primary remediation: Use absolute paths or relative option intentionally.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-006 — useNavigate #6

  • Level: Advanced+
  • Symptom: 404 on refresh at depth 78 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: navigate() called during render causing infinite redirect loop.
  • Primary remediation: Call navigate in event handlers or effects with stable deps—not render.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-007 — useNavigate #7

  • Level: Beginner
  • Symptom: 404 on refresh at depth 91 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Relative navigate resolves incorrectly from nested route context.
  • Primary remediation: Use replace for auth redirects and post-submit redirects when stack should not grow.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-008 — useNavigate #8

  • Level: Beginner+
  • Symptom: 404 on refresh at depth 104 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Blocking navigation without prompt UX for dirty forms.
  • Primary remediation: Cancel async or guard with mounted flag before navigate.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-009 — useNavigate #9

  • Level: Intermediate
  • Symptom: 404 on refresh at depth 117 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Programmatic nav duplicates work Link already expresses declaratively.
  • Primary remediation: Prefer Link for user-visible navigation; reserve navigate for post-mutation flows.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-010 — useNavigate #10

  • Level: Intermediate+
  • Symptom: 404 on refresh at depth 130 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Navigation on unmounted component after async completion.
  • Primary remediation: Use router blocker APIs per version docs for unsaved changes.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-011 — useNavigate #11

  • Level: Advanced
  • Symptom: 404 on refresh at depth 143 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Forgot replace: true duplicating history entries on wizard back.
  • Primary remediation: Use absolute paths or relative option intentionally.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-012 — useNavigate #12

  • Level: Advanced+
  • Symptom: 404 on refresh at depth 156 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: navigate() called during render causing infinite redirect loop.
  • Primary remediation: Call navigate in event handlers or effects with stable deps—not render.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-013 — useNavigate #13

  • Level: Beginner
  • Symptom: 404 on refresh at depth 169 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Relative navigate resolves incorrectly from nested route context.
  • Primary remediation: Use replace for auth redirects and post-submit redirects when stack should not grow.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-014 — useNavigate #14

  • Level: Beginner+
  • Symptom: 404 on refresh at depth 182 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Blocking navigation without prompt UX for dirty forms.
  • Primary remediation: Cancel async or guard with mounted flag before navigate.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-015 — useNavigate #15

  • Level: Intermediate
  • Symptom: 404 on refresh at depth 195 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Programmatic nav duplicates work Link already expresses declaratively.
  • Primary remediation: Prefer Link for user-visible navigation; reserve navigate for post-mutation flows.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-016 — useNavigate #16

  • Level: Intermediate+
  • Symptom: 404 on refresh at depth 8 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Navigation on unmounted component after async completion.
  • Primary remediation: Use router blocker APIs per version docs for unsaved changes.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-017 — useNavigate #17

  • Level: Advanced
  • Symptom: 404 on refresh at depth 21 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Forgot replace: true duplicating history entries on wizard back.
  • Primary remediation: Use absolute paths or relative option intentionally.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-018 — useNavigate #18

  • Level: Advanced+
  • Symptom: 404 on refresh at depth 34 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: navigate() called during render causing infinite redirect loop.
  • Primary remediation: Call navigate in event handlers or effects with stable deps—not render.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-019 — useNavigate #19

  • Level: Beginner
  • Symptom: 404 on refresh at depth 47 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Relative navigate resolves incorrectly from nested route context.
  • Primary remediation: Use replace for auth redirects and post-submit redirects when stack should not grow.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-020 — useNavigate #20

  • Level: Beginner+
  • Symptom: 404 on refresh at depth 60 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Blocking navigation without prompt UX for dirty forms.
  • Primary remediation: Cancel async or guard with mounted flag before navigate.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-021 — useNavigate #21

  • Level: Intermediate
  • Symptom: 404 on refresh at depth 73 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Programmatic nav duplicates work Link already expresses declaratively.
  • Primary remediation: Prefer Link for user-visible navigation; reserve navigate for post-mutation flows.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-022 — useNavigate #22

  • Level: Intermediate+
  • Symptom: 404 on refresh at depth 86 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Navigation on unmounted component after async completion.
  • Primary remediation: Use router blocker APIs per version docs for unsaved changes.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-023 — useNavigate #23

  • Level: Advanced
  • Symptom: 404 on refresh at depth 99 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Forgot replace: true duplicating history entries on wizard back.
  • Primary remediation: Use absolute paths or relative option intentionally.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-024 — useNavigate #24

  • Level: Advanced+
  • Symptom: 404 on refresh at depth 112 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: navigate() called during render causing infinite redirect loop.
  • Primary remediation: Call navigate in event handlers or effects with stable deps—not render.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-025 — useNavigate #25

  • Level: Beginner
  • Symptom: 404 on refresh at depth 125 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Relative navigate resolves incorrectly from nested route context.
  • Primary remediation: Use replace for auth redirects and post-submit redirects when stack should not grow.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-026 — useNavigate #26

  • Level: Beginner+
  • Symptom: 404 on refresh at depth 138 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Blocking navigation without prompt UX for dirty forms.
  • Primary remediation: Cancel async or guard with mounted flag before navigate.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-027 — useNavigate #27

  • Level: Intermediate
  • Symptom: 404 on refresh at depth 151 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Programmatic nav duplicates work Link already expresses declaratively.
  • Primary remediation: Prefer Link for user-visible navigation; reserve navigate for post-mutation flows.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-028 — useNavigate #28

  • Level: Intermediate+
  • Symptom: 404 on refresh at depth 164 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Navigation on unmounted component after async completion.
  • Primary remediation: Use router blocker APIs per version docs for unsaved changes.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-029 — useNavigate #29

  • Level: Advanced
  • Symptom: 404 on refresh at depth 177 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Forgot replace: true duplicating history entries on wizard back.
  • Primary remediation: Use absolute paths or relative option intentionally.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-030 — useNavigate #30

  • Level: Advanced+
  • Symptom: 404 on refresh at depth 190 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: navigate() called during render causing infinite redirect loop.
  • Primary remediation: Call navigate in event handlers or effects with stable deps—not render.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-031 — useNavigate #31

  • Level: Beginner
  • Symptom: 404 on refresh at depth 3 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Relative navigate resolves incorrectly from nested route context.
  • Primary remediation: Use replace for auth redirects and post-submit redirects when stack should not grow.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-032 — useNavigate #32

  • Level: Beginner+
  • Symptom: 404 on refresh at depth 16 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Blocking navigation without prompt UX for dirty forms.
  • Primary remediation: Cancel async or guard with mounted flag before navigate.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-033 — useNavigate #33

  • Level: Intermediate
  • Symptom: 404 on refresh at depth 29 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Programmatic nav duplicates work Link already expresses declaratively.
  • Primary remediation: Prefer Link for user-visible navigation; reserve navigate for post-mutation flows.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-034 — useNavigate #34

  • Level: Intermediate+
  • Symptom: 404 on refresh at depth 42 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Navigation on unmounted component after async completion.
  • Primary remediation: Use router blocker APIs per version docs for unsaved changes.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-035 — useNavigate #35

  • Level: Advanced
  • Symptom: 404 on refresh at depth 55 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Forgot replace: true duplicating history entries on wizard back.
  • Primary remediation: Use absolute paths or relative option intentionally.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-036 — useNavigate #36

  • Level: Advanced+
  • Symptom: 404 on refresh at depth 68 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: navigate() called during render causing infinite redirect loop.
  • Primary remediation: Call navigate in event handlers or effects with stable deps—not render.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-037 — useNavigate #37

  • Level: Beginner
  • Symptom: 404 on refresh at depth 81 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Relative navigate resolves incorrectly from nested route context.
  • Primary remediation: Use replace for auth redirects and post-submit redirects when stack should not grow.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-038 — useNavigate #38

  • Level: Beginner+
  • Symptom: 404 on refresh at depth 94 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Blocking navigation without prompt UX for dirty forms.
  • Primary remediation: Cancel async or guard with mounted flag before navigate.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-039 — useNavigate #39

  • Level: Intermediate
  • Symptom: 404 on refresh at depth 107 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Programmatic nav duplicates work Link already expresses declaratively.
  • Primary remediation: Prefer Link for user-visible navigation; reserve navigate for post-mutation flows.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-040 — useNavigate #40

  • Level: Intermediate+
  • Symptom: 404 on refresh at depth 120 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Navigation on unmounted component after async completion.
  • Primary remediation: Use router blocker APIs per version docs for unsaved changes.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-041 — useNavigate #41

  • Level: Advanced
  • Symptom: 404 on refresh at depth 133 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Forgot replace: true duplicating history entries on wizard back.
  • Primary remediation: Use absolute paths or relative option intentionally.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-042 — useNavigate #42

  • Level: Advanced+
  • Symptom: 404 on refresh at depth 146 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: navigate() called during render causing infinite redirect loop.
  • Primary remediation: Call navigate in event handlers or effects with stable deps—not render.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-043 — useNavigate #43

  • Level: Beginner
  • Symptom: 404 on refresh at depth 159 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Relative navigate resolves incorrectly from nested route context.
  • Primary remediation: Use replace for auth redirects and post-submit redirects when stack should not grow.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-044 — useNavigate #44

  • Level: Beginner+
  • Symptom: 404 on refresh at depth 172 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Blocking navigation without prompt UX for dirty forms.
  • Primary remediation: Cancel async or guard with mounted flag before navigate.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-045 — useNavigate #45

  • Level: Intermediate
  • Symptom: 404 on refresh at depth 185 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Programmatic nav duplicates work Link already expresses declaratively.
  • Primary remediation: Prefer Link for user-visible navigation; reserve navigate for post-mutation flows.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-046 — useNavigate #46

  • Level: Intermediate+
  • Symptom: 404 on refresh at depth 198 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Navigation on unmounted component after async completion.
  • Primary remediation: Use router blocker APIs per version docs for unsaved changes.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-047 — useNavigate #47

  • Level: Advanced
  • Symptom: 404 on refresh at depth 11 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Forgot replace: true duplicating history entries on wizard back.
  • Primary remediation: Use absolute paths or relative option intentionally.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-048 — useNavigate #48

  • Level: Advanced+
  • Symptom: 404 on refresh at depth 24 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: navigate() called during render causing infinite redirect loop.
  • Primary remediation: Call navigate in event handlers or effects with stable deps—not render.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-049 — useNavigate #49

  • Level: Beginner
  • Symptom: 404 on refresh at depth 37 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Relative navigate resolves incorrectly from nested route context.
  • Primary remediation: Use replace for auth redirects and post-submit redirects when stack should not grow.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-050 — useNavigate #50

  • Level: Beginner+
  • Symptom: 404 on refresh at depth 50 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Blocking navigation without prompt UX for dirty forms.
  • Primary remediation: Cancel async or guard with mounted flag before navigate.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-051 — useNavigate #51

  • Level: Intermediate
  • Symptom: 404 on refresh at depth 63 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Programmatic nav duplicates work Link already expresses declaratively.
  • Primary remediation: Prefer Link for user-visible navigation; reserve navigate for post-mutation flows.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-052 — useNavigate #52

  • Level: Intermediate+
  • Symptom: 404 on refresh at depth 76 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Navigation on unmounted component after async completion.
  • Primary remediation: Use router blocker APIs per version docs for unsaved changes.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-053 — useNavigate #53

  • Level: Advanced
  • Symptom: 404 on refresh at depth 89 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Forgot replace: true duplicating history entries on wizard back.
  • Primary remediation: Use absolute paths or relative option intentionally.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-054 — useNavigate #54

  • Level: Advanced+
  • Symptom: 404 on refresh at depth 102 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: navigate() called during render causing infinite redirect loop.
  • Primary remediation: Call navigate in event handlers or effects with stable deps—not render.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-055 — useNavigate #55

  • Level: Beginner
  • Symptom: 404 on refresh at depth 115 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Relative navigate resolves incorrectly from nested route context.
  • Primary remediation: Use replace for auth redirects and post-submit redirects when stack should not grow.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-056 — useNavigate #56

  • Level: Beginner+
  • Symptom: 404 on refresh at depth 128 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Blocking navigation without prompt UX for dirty forms.
  • Primary remediation: Cancel async or guard with mounted flag before navigate.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-057 — useNavigate #57

  • Level: Intermediate
  • Symptom: 404 on refresh at depth 141 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Programmatic nav duplicates work Link already expresses declaratively.
  • Primary remediation: Prefer Link for user-visible navigation; reserve navigate for post-mutation flows.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-058 — useNavigate #58

  • Level: Intermediate+
  • Symptom: 404 on refresh at depth 154 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Navigation on unmounted component after async completion.
  • Primary remediation: Use router blocker APIs per version docs for unsaved changes.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-059 — useNavigate #59

  • Level: Advanced
  • Symptom: 404 on refresh at depth 167 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Forgot replace: true duplicating history entries on wizard back.
  • Primary remediation: Use absolute paths or relative option intentionally.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-060 — useNavigate #60

  • Level: Advanced+
  • Symptom: 404 on refresh at depth 180 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: navigate() called during render causing infinite redirect loop.
  • Primary remediation: Call navigate in event handlers or effects with stable deps—not render.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-061 — useNavigate #61

  • Level: Beginner
  • Symptom: 404 on refresh at depth 193 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Relative navigate resolves incorrectly from nested route context.
  • Primary remediation: Use replace for auth redirects and post-submit redirects when stack should not grow.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-062 — useNavigate #62

  • Level: Beginner+
  • Symptom: 404 on refresh at depth 6 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Blocking navigation without prompt UX for dirty forms.
  • Primary remediation: Cancel async or guard with mounted flag before navigate.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-063 — useNavigate #63

  • Level: Intermediate
  • Symptom: 404 on refresh at depth 19 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Programmatic nav duplicates work Link already expresses declaratively.
  • Primary remediation: Prefer Link for user-visible navigation; reserve navigate for post-mutation flows.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-064 — useNavigate #64

  • Level: Intermediate+
  • Symptom: 404 on refresh at depth 32 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Navigation on unmounted component after async completion.
  • Primary remediation: Use router blocker APIs per version docs for unsaved changes.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-065 — useNavigate #65

  • Level: Advanced
  • Symptom: 404 on refresh at depth 45 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Forgot replace: true duplicating history entries on wizard back.
  • Primary remediation: Use absolute paths or relative option intentionally.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-066 — useNavigate #66

  • Level: Advanced+
  • Symptom: 404 on refresh at depth 58 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: navigate() called during render causing infinite redirect loop.
  • Primary remediation: Call navigate in event handlers or effects with stable deps—not render.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-067 — useNavigate #67

  • Level: Beginner
  • Symptom: 404 on refresh at depth 71 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Relative navigate resolves incorrectly from nested route context.
  • Primary remediation: Use replace for auth redirects and post-submit redirects when stack should not grow.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-068 — useNavigate #68

  • Level: Beginner+
  • Symptom: 404 on refresh at depth 84 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Blocking navigation without prompt UX for dirty forms.
  • Primary remediation: Cancel async or guard with mounted flag before navigate.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-069 — useNavigate #69

  • Level: Intermediate
  • Symptom: 404 on refresh at depth 97 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Programmatic nav duplicates work Link already expresses declaratively.
  • Primary remediation: Prefer Link for user-visible navigation; reserve navigate for post-mutation flows.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-070 — useNavigate #70

  • Level: Intermediate+
  • Symptom: 404 on refresh at depth 110 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Navigation on unmounted component after async completion.
  • Primary remediation: Use router blocker APIs per version docs for unsaved changes.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-071 — useNavigate #71

  • Level: Advanced
  • Symptom: 404 on refresh at depth 123 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Forgot replace: true duplicating history entries on wizard back.
  • Primary remediation: Use absolute paths or relative option intentionally.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-072 — useNavigate #72

  • Level: Advanced+
  • Symptom: 404 on refresh at depth 136 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: navigate() called during render causing infinite redirect loop.
  • Primary remediation: Call navigate in event handlers or effects with stable deps—not render.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-073 — useNavigate #73

  • Level: Beginner
  • Symptom: 404 on refresh at depth 149 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Relative navigate resolves incorrectly from nested route context.
  • Primary remediation: Use replace for auth redirects and post-submit redirects when stack should not grow.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-074 — useNavigate #74

  • Level: Beginner+
  • Symptom: 404 on refresh at depth 162 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Blocking navigation without prompt UX for dirty forms.
  • Primary remediation: Cancel async or guard with mounted flag before navigate.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-075 — useNavigate #75

  • Level: Intermediate
  • Symptom: 404 on refresh at depth 175 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Programmatic nav duplicates work Link already expresses declaratively.
  • Primary remediation: Prefer Link for user-visible navigation; reserve navigate for post-mutation flows.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-076 — useNavigate #76

  • Level: Intermediate+
  • Symptom: 404 on refresh at depth 188 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Navigation on unmounted component after async completion.
  • Primary remediation: Use router blocker APIs per version docs for unsaved changes.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-077 — useNavigate #77

  • Level: Advanced
  • Symptom: 404 on refresh at depth 1 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Forgot replace: true duplicating history entries on wizard back.
  • Primary remediation: Use absolute paths or relative option intentionally.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-078 — useNavigate #78

  • Level: Advanced+
  • Symptom: 404 on refresh at depth 14 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: navigate() called during render causing infinite redirect loop.
  • Primary remediation: Call navigate in event handlers or effects with stable deps—not render.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-079 — useNavigate #79

  • Level: Beginner
  • Symptom: 404 on refresh at depth 27 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Relative navigate resolves incorrectly from nested route context.
  • Primary remediation: Use replace for auth redirects and post-submit redirects when stack should not grow.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-080 — useNavigate #80

  • Level: Beginner+
  • Symptom: 404 on refresh at depth 40 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Blocking navigation without prompt UX for dirty forms.
  • Primary remediation: Cancel async or guard with mounted flag before navigate.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-081 — useNavigate #81

  • Level: Intermediate
  • Symptom: 404 on refresh at depth 53 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Programmatic nav duplicates work Link already expresses declaratively.
  • Primary remediation: Prefer Link for user-visible navigation; reserve navigate for post-mutation flows.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-082 — useNavigate #82

  • Level: Intermediate+
  • Symptom: 404 on refresh at depth 66 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Navigation on unmounted component after async completion.
  • Primary remediation: Use router blocker APIs per version docs for unsaved changes.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-083 — useNavigate #83

  • Level: Advanced
  • Symptom: 404 on refresh at depth 79 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Forgot replace: true duplicating history entries on wizard back.
  • Primary remediation: Use absolute paths or relative option intentionally.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-084 — useNavigate #84

  • Level: Advanced+
  • Symptom: 404 on refresh at depth 92 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: navigate() called during render causing infinite redirect loop.
  • Primary remediation: Call navigate in event handlers or effects with stable deps—not render.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-085 — useNavigate #85

  • Level: Beginner
  • Symptom: 404 on refresh at depth 105 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Relative navigate resolves incorrectly from nested route context.
  • Primary remediation: Use replace for auth redirects and post-submit redirects when stack should not grow.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-086 — useNavigate #86

  • Level: Beginner+
  • Symptom: 404 on refresh at depth 118 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Blocking navigation without prompt UX for dirty forms.
  • Primary remediation: Cancel async or guard with mounted flag before navigate.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-087 — useNavigate #87

  • Level: Intermediate
  • Symptom: 404 on refresh at depth 131 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Programmatic nav duplicates work Link already expresses declaratively.
  • Primary remediation: Prefer Link for user-visible navigation; reserve navigate for post-mutation flows.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-088 — useNavigate #88

  • Level: Intermediate+
  • Symptom: 404 on refresh at depth 144 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Navigation on unmounted component after async completion.
  • Primary remediation: Use router blocker APIs per version docs for unsaved changes.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-089 — useNavigate #89

  • Level: Advanced
  • Symptom: 404 on refresh at depth 157 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Forgot replace: true duplicating history entries on wizard back.
  • Primary remediation: Use absolute paths or relative option intentionally.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-090 — useNavigate #90

  • Level: Advanced+
  • Symptom: 404 on refresh at depth 170 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: navigate() called during render causing infinite redirect loop.
  • Primary remediation: Call navigate in event handlers or effects with stable deps—not render.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-091 — useNavigate #91

  • Level: Beginner
  • Symptom: 404 on refresh at depth 183 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Relative navigate resolves incorrectly from nested route context.
  • Primary remediation: Use replace for auth redirects and post-submit redirects when stack should not grow.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-092 — useNavigate #92

  • Level: Beginner+
  • Symptom: 404 on refresh at depth 196 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Blocking navigation without prompt UX for dirty forms.
  • Primary remediation: Cancel async or guard with mounted flag before navigate.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-093 — useNavigate #93

  • Level: Intermediate
  • Symptom: 404 on refresh at depth 9 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Programmatic nav duplicates work Link already expresses declaratively.
  • Primary remediation: Prefer Link for user-visible navigation; reserve navigate for post-mutation flows.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-094 — useNavigate #94

  • Level: Intermediate+
  • Symptom: 404 on refresh at depth 22 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Navigation on unmounted component after async completion.
  • Primary remediation: Use router blocker APIs per version docs for unsaved changes.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-095 — useNavigate #95

  • Level: Advanced
  • Symptom: 404 on refresh at depth 35 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Forgot replace: true duplicating history entries on wizard back.
  • Primary remediation: Use absolute paths or relative option intentionally.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-096 — useNavigate #96

  • Level: Advanced+
  • Symptom: 404 on refresh at depth 48 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: navigate() called during render causing infinite redirect loop.
  • Primary remediation: Call navigate in event handlers or effects with stable deps—not render.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-097 — useNavigate #97

  • Level: Beginner
  • Symptom: 404 on refresh at depth 61 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Relative navigate resolves incorrectly from nested route context.
  • Primary remediation: Use replace for auth redirects and post-submit redirects when stack should not grow.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-098 — useNavigate #98

  • Level: Beginner+
  • Symptom: 404 on refresh at depth 74 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Blocking navigation without prompt UX for dirty forms.
  • Primary remediation: Cancel async or guard with mounted flag before navigate.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-099 — useNavigate #99

  • Level: Intermediate
  • Symptom: 404 on refresh at depth 87 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Programmatic nav duplicates work Link already expresses declaratively.
  • Primary remediation: Prefer Link for user-visible navigation; reserve navigate for post-mutation flows.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-100 — useNavigate #100

  • Level: Intermediate+
  • Symptom: 404 on refresh at depth 100 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Navigation on unmounted component after async completion.
  • Primary remediation: Use router blocker APIs per version docs for unsaved changes.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-101 — useNavigate #101

  • Level: Advanced
  • Symptom: 404 on refresh at depth 113 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Forgot replace: true duplicating history entries on wizard back.
  • Primary remediation: Use absolute paths or relative option intentionally.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-102 — useNavigate #102

  • Level: Advanced+
  • Symptom: 404 on refresh at depth 126 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: navigate() called during render causing infinite redirect loop.
  • Primary remediation: Call navigate in event handlers or effects with stable deps—not render.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-103 — useNavigate #103

  • Level: Beginner
  • Symptom: 404 on refresh at depth 139 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Relative navigate resolves incorrectly from nested route context.
  • Primary remediation: Use replace for auth redirects and post-submit redirects when stack should not grow.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-104 — useNavigate #104

  • Level: Beginner+
  • Symptom: 404 on refresh at depth 152 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Blocking navigation without prompt UX for dirty forms.
  • Primary remediation: Cancel async or guard with mounted flag before navigate.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-105 — useNavigate #105

  • Level: Intermediate
  • Symptom: 404 on refresh at depth 165 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Programmatic nav duplicates work Link already expresses declaratively.
  • Primary remediation: Prefer Link for user-visible navigation; reserve navigate for post-mutation flows.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-106 — useNavigate #106

  • Level: Intermediate+
  • Symptom: 404 on refresh at depth 178 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Navigation on unmounted component after async completion.
  • Primary remediation: Use router blocker APIs per version docs for unsaved changes.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-107 — useNavigate #107

  • Level: Advanced
  • Symptom: 404 on refresh at depth 191 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Forgot replace: true duplicating history entries on wizard back.
  • Primary remediation: Use absolute paths or relative option intentionally.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-108 — useNavigate #108

  • Level: Advanced+
  • Symptom: 404 on refresh at depth 4 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: navigate() called during render causing infinite redirect loop.
  • Primary remediation: Call navigate in event handlers or effects with stable deps—not render.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-109 — useNavigate #109

  • Level: Beginner
  • Symptom: 404 on refresh at depth 17 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Relative navigate resolves incorrectly from nested route context.
  • Primary remediation: Use replace for auth redirects and post-submit redirects when stack should not grow.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-110 — useNavigate #110

  • Level: Beginner+
  • Symptom: 404 on refresh at depth 30 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Blocking navigation without prompt UX for dirty forms.
  • Primary remediation: Cancel async or guard with mounted flag before navigate.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-111 — useNavigate #111

  • Level: Intermediate
  • Symptom: 404 on refresh at depth 43 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Programmatic nav duplicates work Link already expresses declaratively.
  • Primary remediation: Prefer Link for user-visible navigation; reserve navigate for post-mutation flows.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-112 — useNavigate #112

  • Level: Intermediate+
  • Symptom: 404 on refresh at depth 56 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Navigation on unmounted component after async completion.
  • Primary remediation: Use router blocker APIs per version docs for unsaved changes.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-113 — useNavigate #113

  • Level: Advanced
  • Symptom: 404 on refresh at depth 69 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Forgot replace: true duplicating history entries on wizard back.
  • Primary remediation: Use absolute paths or relative option intentionally.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-114 — useNavigate #114

  • Level: Advanced+
  • Symptom: 404 on refresh at depth 82 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: navigate() called during render causing infinite redirect loop.
  • Primary remediation: Call navigate in event handlers or effects with stable deps—not render.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-115 — useNavigate #115

  • Level: Beginner
  • Symptom: 404 on refresh at depth 95 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Relative navigate resolves incorrectly from nested route context.
  • Primary remediation: Use replace for auth redirects and post-submit redirects when stack should not grow.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-116 — useNavigate #116

  • Level: Beginner+
  • Symptom: 404 on refresh at depth 108 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Blocking navigation without prompt UX for dirty forms.
  • Primary remediation: Cancel async or guard with mounted flag before navigate.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-117 — useNavigate #117

  • Level: Intermediate
  • Symptom: 404 on refresh at depth 121 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Programmatic nav duplicates work Link already expresses declaratively.
  • Primary remediation: Prefer Link for user-visible navigation; reserve navigate for post-mutation flows.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-118 — useNavigate #118

  • Level: Intermediate+
  • Symptom: 404 on refresh at depth 134 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Navigation on unmounted component after async completion.
  • Primary remediation: Use router blocker APIs per version docs for unsaved changes.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-119 — useNavigate #119

  • Level: Advanced
  • Symptom: 404 on refresh at depth 147 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Forgot replace: true duplicating history entries on wizard back.
  • Primary remediation: Use absolute paths or relative option intentionally.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-120 — useNavigate #120

  • Level: Advanced+
  • Symptom: 404 on refresh at depth 160 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: navigate() called during render causing infinite redirect loop.
  • Primary remediation: Call navigate in event handlers or effects with stable deps—not render.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-121 — useNavigate #121

  • Level: Beginner
  • Symptom: 404 on refresh at depth 173 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Relative navigate resolves incorrectly from nested route context.
  • Primary remediation: Use replace for auth redirects and post-submit redirects when stack should not grow.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-122 — useNavigate #122

  • Level: Beginner+
  • Symptom: 404 on refresh at depth 186 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Blocking navigation without prompt UX for dirty forms.
  • Primary remediation: Cancel async or guard with mounted flag before navigate.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-123 — useNavigate #123

  • Level: Intermediate
  • Symptom: 404 on refresh at depth 199 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Programmatic nav duplicates work Link already expresses declaratively.
  • Primary remediation: Prefer Link for user-visible navigation; reserve navigate for post-mutation flows.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-124 — useNavigate #124

  • Level: Intermediate+
  • Symptom: 404 on refresh at depth 12 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Navigation on unmounted component after async completion.
  • Primary remediation: Use router blocker APIs per version docs for unsaved changes.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-125 — useNavigate #125

  • Level: Advanced
  • Symptom: 404 on refresh at depth 25 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Forgot replace: true duplicating history entries on wizard back.
  • Primary remediation: Use absolute paths or relative option intentionally.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-126 — useNavigate #126

  • Level: Advanced+
  • Symptom: 404 on refresh at depth 38 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: navigate() called during render causing infinite redirect loop.
  • Primary remediation: Call navigate in event handlers or effects with stable deps—not render.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-127 — useNavigate #127

  • Level: Beginner
  • Symptom: 404 on refresh at depth 51 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Relative navigate resolves incorrectly from nested route context.
  • Primary remediation: Use replace for auth redirects and post-submit redirects when stack should not grow.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-128 — useNavigate #128

  • Level: Beginner+
  • Symptom: 404 on refresh at depth 64 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Blocking navigation without prompt UX for dirty forms.
  • Primary remediation: Cancel async or guard with mounted flag before navigate.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-129 — useNavigate #129

  • Level: Intermediate
  • Symptom: 404 on refresh at depth 77 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Programmatic nav duplicates work Link already expresses declaratively.
  • Primary remediation: Prefer Link for user-visible navigation; reserve navigate for post-mutation flows.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-130 — useNavigate #130

  • Level: Intermediate+
  • Symptom: 404 on refresh at depth 90 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Navigation on unmounted component after async completion.
  • Primary remediation: Use router blocker APIs per version docs for unsaved changes.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-131 — useNavigate #131

  • Level: Advanced
  • Symptom: 404 on refresh at depth 103 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Forgot replace: true duplicating history entries on wizard back.
  • Primary remediation: Use absolute paths or relative option intentionally.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-132 — useNavigate #132

  • Level: Advanced+
  • Symptom: 404 on refresh at depth 116 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: navigate() called during render causing infinite redirect loop.
  • Primary remediation: Call navigate in event handlers or effects with stable deps—not render.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-133 — useNavigate #133

  • Level: Beginner
  • Symptom: 404 on refresh at depth 129 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Relative navigate resolves incorrectly from nested route context.
  • Primary remediation: Use replace for auth redirects and post-submit redirects when stack should not grow.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-134 — useNavigate #134

  • Level: Beginner+
  • Symptom: 404 on refresh at depth 142 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Blocking navigation without prompt UX for dirty forms.
  • Primary remediation: Cancel async or guard with mounted flag before navigate.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-135 — useNavigate #135

  • Level: Intermediate
  • Symptom: 404 on refresh at depth 155 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Programmatic nav duplicates work Link already expresses declaratively.
  • Primary remediation: Prefer Link for user-visible navigation; reserve navigate for post-mutation flows.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-136 — useNavigate #136

  • Level: Intermediate+
  • Symptom: 404 on refresh at depth 168 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Navigation on unmounted component after async completion.
  • Primary remediation: Use router blocker APIs per version docs for unsaved changes.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-137 — useNavigate #137

  • Level: Advanced
  • Symptom: 404 on refresh at depth 181 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Forgot replace: true duplicating history entries on wizard back.
  • Primary remediation: Use absolute paths or relative option intentionally.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-138 — useNavigate #138

  • Level: Advanced+
  • Symptom: 404 on refresh at depth 194 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: navigate() called during render causing infinite redirect loop.
  • Primary remediation: Call navigate in event handlers or effects with stable deps—not render.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-139 — useNavigate #139

  • Level: Beginner
  • Symptom: 404 on refresh at depth 7 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Relative navigate resolves incorrectly from nested route context.
  • Primary remediation: Use replace for auth redirects and post-submit redirects when stack should not grow.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-140 — useNavigate #140

  • Level: Beginner+
  • Symptom: 404 on refresh at depth 20 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Blocking navigation without prompt UX for dirty forms.
  • Primary remediation: Cancel async or guard with mounted flag before navigate.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-141 — useNavigate #141

  • Level: Intermediate
  • Symptom: 404 on refresh at depth 33 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Programmatic nav duplicates work Link already expresses declaratively.
  • Primary remediation: Prefer Link for user-visible navigation; reserve navigate for post-mutation flows.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-142 — useNavigate #142

  • Level: Intermediate+
  • Symptom: 404 on refresh at depth 46 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Navigation on unmounted component after async completion.
  • Primary remediation: Use router blocker APIs per version docs for unsaved changes.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-143 — useNavigate #143

  • Level: Advanced
  • Symptom: 404 on refresh at depth 59 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Forgot replace: true duplicating history entries on wizard back.
  • Primary remediation: Use absolute paths or relative option intentionally.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-144 — useNavigate #144

  • Level: Advanced+
  • Symptom: 404 on refresh at depth 72 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: navigate() called during render causing infinite redirect loop.
  • Primary remediation: Call navigate in event handlers or effects with stable deps—not render.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-145 — useNavigate #145

  • Level: Beginner
  • Symptom: 404 on refresh at depth 85 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Relative navigate resolves incorrectly from nested route context.
  • Primary remediation: Use replace for auth redirects and post-submit redirects when stack should not grow.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-146 — useNavigate #146

  • Level: Beginner+
  • Symptom: 404 on refresh at depth 98 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Blocking navigation without prompt UX for dirty forms.
  • Primary remediation: Cancel async or guard with mounted flag before navigate.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-147 — useNavigate #147

  • Level: Intermediate
  • Symptom: 404 on refresh at depth 111 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Programmatic nav duplicates work Link already expresses declaratively.
  • Primary remediation: Prefer Link for user-visible navigation; reserve navigate for post-mutation flows.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-148 — useNavigate #148

  • Level: Intermediate+
  • Symptom: 404 on refresh at depth 124 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Navigation on unmounted component after async completion.
  • Primary remediation: Use router blocker APIs per version docs for unsaved changes.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-149 — useNavigate #149

  • Level: Advanced
  • Symptom: 404 on refresh at depth 137 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Forgot replace: true duplicating history entries on wizard back.
  • Primary remediation: Use absolute paths or relative option intentionally.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-150 — useNavigate #150

  • Level: Advanced+
  • Symptom: 404 on refresh at depth 150 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: navigate() called during render causing infinite redirect loop.
  • Primary remediation: Call navigate in event handlers or effects with stable deps—not render.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-151 — useNavigate #151

  • Level: Beginner
  • Symptom: 404 on refresh at depth 163 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Relative navigate resolves incorrectly from nested route context.
  • Primary remediation: Use replace for auth redirects and post-submit redirects when stack should not grow.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-152 — useNavigate #152

  • Level: Beginner+
  • Symptom: 404 on refresh at depth 176 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Blocking navigation without prompt UX for dirty forms.
  • Primary remediation: Cancel async or guard with mounted flag before navigate.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-153 — useNavigate #153

  • Level: Intermediate
  • Symptom: 404 on refresh at depth 189 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Programmatic nav duplicates work Link already expresses declaratively.
  • Primary remediation: Prefer Link for user-visible navigation; reserve navigate for post-mutation flows.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-154 — useNavigate #154

  • Level: Intermediate+
  • Symptom: 404 on refresh at depth 2 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Navigation on unmounted component after async completion.
  • Primary remediation: Use router blocker APIs per version docs for unsaved changes.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-155 — useNavigate #155

  • Level: Advanced
  • Symptom: 404 on refresh at depth 15 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Forgot replace: true duplicating history entries on wizard back.
  • Primary remediation: Use absolute paths or relative option intentionally.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-156 — useNavigate #156

  • Level: Advanced+
  • Symptom: 404 on refresh at depth 28 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: navigate() called during render causing infinite redirect loop.
  • Primary remediation: Call navigate in event handlers or effects with stable deps—not render.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-157 — useNavigate #157

  • Level: Beginner
  • Symptom: 404 on refresh at depth 41 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Relative navigate resolves incorrectly from nested route context.
  • Primary remediation: Use replace for auth redirects and post-submit redirects when stack should not grow.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

RR3-158 — useNavigate #158

  • Level: Beginner+
  • Symptom: 404 on refresh at depth 54 or wrong active nav highlight.
  • Structure symptom: duplicated layout or import cycles after refactor.
  • Root cause class: Blocking navigation without prompt UX for dirty forms.
  • Primary remediation: Cancel async or guard with mounted flag before navigate.
  • Verify: direct URL load, back/forward, deep link from email, mobile share sheet.
  • Interview one-liner: Declarative routing for discoverability; imperative navigate for outcomes of async work.

<< 2.11 Overview