← UX Grapher
About UX Grapher. It reads a web app’s source code and draws a map of the product: every screen, and every button and link between them. From that map it finds what users will run into: buttons that lead nowhere, pages nobody can reach, screens with no next step. It says how urgent each one is and exactly what to change. Nobody has to click through the app, and the code is never run.

Sample report: sadmann7/skateshop

Skateshop is a public, open-source online store built with Next.js (MIT). It was analysed with no setup at commit e954d54. Every problem marked critical or high was checked by hand against the source. Links under “Where” open the exact line on GitHub.

11
problems to fix first
24
worth a look
35
screens mapped
69%
of links understood

At a glance: fix these first

  1. Critical“Sell now” on the home page leads to a page that doesn’t exist.
  2. High“Get started” on the /dashboard/billing page leads to a page that doesn’t exist.
  3. High2 links, shown on 14 screens, lead to a page that doesn’t exist.
  4. High“View orders” on the /store/[storeId]/customers page leads to a page that doesn’t exist.
  5. High“View details” on the /store/[storeId]/customers/[customerId] page and 1 other screen leads to a page that doesn’t exist.
  6. HighA link on the /store/[storeId]/products/[productId] page leads to a page that doesn’t exist.
  7. High“Edit” on the /store/[storeId]/products page leads to a page that doesn’t exist.
  8. HighThe /store/[storeId]/customers/[customerId] page exists, but users have no way to reach it.
  9. HighThe /store/[storeId]/orders/[orderId] page exists, but users have no way to reach it.
  10. HighThe /store/[storeId]/products/[productId] page exists, but users have no way to reach it.
  11. HighThe /store/[storeId]/products/new page exists, but users have no way to reach it.

The map of the product

Every screen the analyzer found, and every link between screens. Bigger circles have more ways in. Screens are grouped by section.

no findingshas a warninghas an error×dead-link target (no route)in the menus
dashboardstoresigninblogcheckoutcollectionssignup///[...slug]/blog/blog/[...slug]/build-a-board/cart/cart/checkout/[storeId]/checkout/[storeId]/success/collections/[category]/collections/[category]/[subcategory]/dashboard/dashboard/dashboard/account/[[...rest]]/dashboard/billing/dashboard/purchases/dashboard/purchases/[purchaseId]/dashboard/settings/dashboard/stores/dashboard/stores/dashboard/stores/*/dashboard/stores/*/dashboard/stores/*/customers/*/dashboard/stores/*/customers/*/dashboard/stores/*/orders/*/dashboard/stores/*/orders/*/dashboard/stores/*/products/dashboard/stores/*/products/dashboard/stores/*/products/*/dashboard/stores/*/products/*/onboarding/preview/product/[productId]/product/[productId]/product/[productId]/products/products/signin/[[...signin]]/signin/reset-password/[[...reset-password]]/signin/reset-password/confirm/[[...confirm]]/signout/[[...signout]]/signup/[[...signup]]/signup/verify-email/[[...verify-email]]/sso-callback/[[...sso-callback]]/store/[storeId]/store/[storeId]/analytics/store/[storeId]/customers/store/[storeId]/customers/[customerId]/store/[storeId]/customers/[cust…/store/[storeId]/orders/store/[storeId]/orders/[orderId]/store/[storeId]/orders/[orderId]/store/[storeId]/products/store/[storeId]/products/[productId]/store/[storeId]/products/[produ…/store/[storeId]/products/new/store/[storeId]/products/new

Critical

1

Users are guaranteed to hit these, in the most visible places. Fix before anything else. Dead link ×1

CriticalDead link

“Sell now” on the home page leads to a page that doesn’t exist.

What users experience
Users who click “Sell now” on the home page land on a “page not found” instead of what they asked for. What they were trying to do stops there.
Why it matters
It sits on the home page or in the navigation, so a large share of visitors can hit it. Broken buttons at the front door cost sign-ups and trust.
Why critical
Users are guaranteed to hit it, and it is usually a one-line fix.
Recommended fixDecide where the “Sell now” button should take users and point it there. The closest existing pages are /store/[storeId] and /store/[storeId]/orders; confirm which fits.
Where
“Sell now” on the home pagesrc/app/(lobby)/_components/lobby.tsx:88
Technical details

dangling-edge · /dashboard/stores · error · confidence medium

No page.tsx backs /dashboard/stores. The link is dead.

High

10

Broken journeys or unreachable features. Fix in the next release. Dead link ×6 · Unreachable page ×4

HighDead link

“Get started” on the /dashboard/billing page leads to a page that doesn’t exist.

What users experience
Users who click “Get started” on the /dashboard/billing page land on a “page not found” instead of what they asked for. What they were trying to do stops there.
Why it matters
Every click is a failed task and a likely support ticket, and a visible broken link makes the whole product feel less reliable.
Why high
A guaranteed failure for anyone who clicks it, and usually a one-line fix.
Recommended fixEither add a page at /dashboard (for example an overview of the section), or point the “Get started” button at /dashboard/billing.
Where
“Get started” on the /dashboard/billing pagesrc/app/(dashboard)/dashboard/billing/_components/billing.tsx:116
Technical details

dangling-edge · /dashboard · error · confidence medium

No page.tsx backs /dashboard. It has pages under it, such as /dashboard/billing, but no page of its own.

Add a page at /dashboard, or point the link at /dashboard/billing.

HighDead link

2 links, shown on 14 screens, lead to a page that doesn’t exist.

What users experience
Users who click a link on the /dashboard/account page and 13 other screens land on a “page not found” instead of what they asked for. What they were trying to do stops there.
Why it matters
It is reachable from 14 different screens, so it interrupts several journeys, and each click is a likely support ticket.
Why high
A guaranteed failure for anyone who clicks it, and usually a one-line fix.
Recommended fixPoint these links at /store/[storeId]. That section moved there and these links were not updated.
Where
The /dashboard/account page and 13 other screenssrc/app/(dashboard)/store/[storeId]/_components/store-switcher.tsx:110
Technical details

dangling-edge · /dashboard/stores/* · error · confidence medium

No page.tsx backs /dashboard/stores/*. /store/[storeId] ends the same way, so this looks like a link left behind when the section moved.

/store/[storeId] exists and shares the rest of the path.

HighDead link

“View orders” on the /store/[storeId]/customers page leads to a page that doesn’t exist.

What users experience
Users who click “View orders” on the /store/[storeId]/customers page land on a “page not found” instead of what they asked for. What they were trying to do stops there.
Why it matters
Every click is a failed task and a likely support ticket, and a visible broken link makes the whole product feel less reliable.
Why high
A guaranteed failure for anyone who clicks it, and usually a one-line fix.
Recommended fixPoint the “View orders” button at /store/[storeId]/customers/[customerId]. That section moved there and this link was not updated.
Where
“View orders” on the /store/[storeId]/customers pagesrc/components/tables/customers-table.tsx:97
Technical details

dangling-edge · /dashboard/stores/*/customers/* · error · confidence medium

No page.tsx backs /dashboard/stores/*/customers/*. /store/[storeId]/customers/[customerId] ends the same way, so this looks like a link left behind when the section moved.

/store/[storeId]/customers/[customerId] exists and shares the rest of the path.

HighDead link

“View details” on the /store/[storeId]/customers/[customerId] page and 1 other screen leads to a page that doesn’t exist.

What users experience
Users who click “View details” on the /store/[storeId]/customers/[customerId] page and 1 other screen land on a “page not found” instead of what they asked for. What they were trying to do stops there.
Why it matters
It is reachable from 2 different screens, so it interrupts several journeys, and each click is a likely support ticket.
Why high
A guaranteed failure for anyone who clicks it, and usually a one-line fix.
Recommended fixPoint the “View details” button at /store/[storeId]/orders/[orderId]. That section moved there and this link was not updated.
Where
“View details” on the /store/[storeId]/customers/[customerId] page and 1 other screensrc/components/tables/orders-table.tsx:124
Technical details

dangling-edge · /dashboard/stores/*/orders/* · error · confidence medium

No page.tsx backs /dashboard/stores/*/orders/*. /store/[storeId]/orders/[orderId] ends the same way, so this looks like a link left behind when the section moved.

/store/[storeId]/orders/[orderId] exists and shares the rest of the path.

HighDead link

A link on the /store/[storeId]/products/[productId] page leads to a page that doesn’t exist.

What users experience
Users who click a link on the /store/[storeId]/products/[productId] page land on a “page not found” instead of what they asked for. What they were trying to do stops there.
Why it matters
Every click is a failed task and a likely support ticket, and a visible broken link makes the whole product feel less reliable.
Why high
A guaranteed failure for anyone who clicks it, and usually a one-line fix.
Recommended fixPoint the link at /store/[storeId]/products. That section moved there and this link was not updated.
Technical details

dangling-edge · /dashboard/stores/*/products · error · confidence medium

No page.tsx backs /dashboard/stores/*/products. /store/[storeId]/products ends the same way, so this looks like a link left behind when the section moved.

/store/[storeId]/products exists and shares the rest of the path.

HighDead link

“Edit” on the /store/[storeId]/products page leads to a page that doesn’t exist.

What users experience
Users who click “Edit” on the /store/[storeId]/products page land on a “page not found” instead of what they asked for. What they were trying to do stops there.
Why it matters
Every click is a failed task and a likely support ticket, and a visible broken link makes the whole product feel less reliable.
Why high
A guaranteed failure for anyone who clicks it, and usually a one-line fix.
Recommended fixPoint the “Edit” button at /store/[storeId]/products/[productId]. That section moved there and this link was not updated.
Where
“Edit” on the /store/[storeId]/products pagesrc/components/tables/products-table.tsx:159
Technical details

dangling-edge · /dashboard/stores/*/products/* · error · confidence medium

No page.tsx backs /dashboard/stores/*/products/*. /store/[storeId]/products/[productId] ends the same way, so this looks like a link left behind when the section moved.

/store/[storeId]/products/[productId] exists and shares the rest of the path.

HighUnreachable page

The /store/[storeId]/customers/[customerId] page exists, but users have no way to reach it.

What users experience
No button, link or menu entry leads to it. Links that were meant to open it point at an old address instead (/dashboard/stores/*/customers/*).
Why it matters
A feature that was designed, built and shipped is invisible. Whatever users would do there, they cannot, and the investment in it returns nothing.
Why high
Users are actively trying to get here and failing.
Recommended fixFixing the dead link to /dashboard/stores/*/customers/* reconnects this page too.
Where
The /store/[storeId]/customers/[customerId] pagesrc/app/(dashboard)/store/[storeId]/customers/[customerId]/page.tsx:1
Technical details

orphan · /store/[storeId]/customers/[customerId] · error · confidence high

/store/[storeId]/customers/[customerId] exists as a route but nothing in the app links to it or builds its URL, sidebar included. It is a feature that was paid for and cannot be found.

Link /store/[storeId]/customers/[customerId] from its cluster "store", or delete the route.

HighUnreachable page

The /store/[storeId]/orders/[orderId] page exists, but users have no way to reach it.

What users experience
No button, link or menu entry leads to it. Links that were meant to open it point at an old address instead (/dashboard/stores/*/orders/*).
Why it matters
A feature that was designed, built and shipped is invisible. Whatever users would do there, they cannot, and the investment in it returns nothing.
Why high
Users are actively trying to get here and failing.
Recommended fixFixing the dead link to /dashboard/stores/*/orders/* reconnects this page too.
Where
The /store/[storeId]/orders/[orderId] pagesrc/app/(dashboard)/store/[storeId]/orders/[orderId]/page.tsx:1
Technical details

orphan · /store/[storeId]/orders/[orderId] · error · confidence high

/store/[storeId]/orders/[orderId] exists as a route but nothing in the app links to it or builds its URL, sidebar included. It is a feature that was paid for and cannot be found.

Link /store/[storeId]/orders/[orderId] from its cluster "store", or delete the route.

HighUnreachable page

The /store/[storeId]/products/[productId] page exists, but users have no way to reach it.

What users experience
No button, link or menu entry leads to it. Links that were meant to open it point at an old address instead (/dashboard/stores/*/products/*).
Why it matters
A feature that was designed, built and shipped is invisible. Whatever users would do there, they cannot, and the investment in it returns nothing.
Why high
Users are actively trying to get here and failing.
Recommended fixFixing the dead link to /dashboard/stores/*/products/* reconnects this page too.
Where
The /store/[storeId]/products/[productId] pagesrc/app/(dashboard)/store/[storeId]/products/[productId]/page.tsx:1
Technical details

orphan · /store/[storeId]/products/[productId] · error · confidence high

/store/[storeId]/products/[productId] exists as a route but nothing in the app links to it or builds its URL, sidebar included. It is a feature that was paid for and cannot be found.

Link /store/[storeId]/products/[productId] from its cluster "store", or delete the route.

HighUnreachable page

The /store/[storeId]/products/new page exists, but users have no way to reach it.

What users experience
No button, link or menu entry leads to it. The only way in is typing the address, which users will not do.
Why it matters
A feature that was designed, built and shipped is invisible. Whatever users would do there, they cannot, and the investment in it returns nothing.
Why high
A whole feature is unreachable; confirm whether it is still wanted.
Recommended fixLink it from the screen where users need it, or delete it if it is no longer part of the product.
Where
Technical details

orphan · /store/[storeId]/products/new · error · confidence high

/store/[storeId]/products/new exists as a route but nothing in the app links to it or builds its URL, sidebar included. It is a feature that was paid for and cannot be found.

Link /store/[storeId]/products/new from its cluster "store", or delete the route.

Low

24

Worth knowing; many are deliberate or cosmetic. No visible way in ×10 · Leftover redirect ×1 · One-way section ×4 · Possibly unreachable ×1 · Only in the menus ×4 · Busy crossroads ×4

LowNo visible way in

The /build-a-board page is only reached through a generated link.

What users experience
No button leads here; users arrive through an address the app builds, such as a link in an email.
Why it matters
Fine for hand-offs. If users should also find it in the product, they cannot.
Why low
Often deliberate.
Recommended fixIf it is meant to be browsable, give it a link where users need it.
Where
The /build-a-board pagesrc/app/sitemap.ts:119
The /build-a-board pagesrc/config/site.ts:35
Technical details

indirect-only · /build-a-board · warning · confidence medium

No CTA anywhere leads to /build-a-board. Its address is assembled in code — a handoff link or a URL held in state — so it works, but it has no door in the interface and no back edge to whatever opened it.

If /build-a-board is meant to be a destination people navigate to, give it a CTA. If it is a handoff target, confirm it offers a way back.

LowNo visible way in

The /checkout/[storeId]/success page is only reached through a generated link.

What users experience
No button leads here; users arrive through an address the app builds, such as a link in an email.
Why it matters
Fine for hand-offs. If users should also find it in the product, they cannot.
Why low
Often deliberate.
Recommended fixIf it is meant to be browsable, give it a link where users need it.
Where
The /checkout/[storeId]/success pagesrc/components/checkout/checkout-form.tsx:80
Technical details

indirect-only · /checkout/[storeId]/success · warning · confidence medium

No CTA anywhere leads to /checkout/[storeId]/success. Its address is assembled in code — a handoff link or a URL held in state — so it works, but it has no door in the interface and no back edge to whatever opened it.

If /checkout/[storeId]/success is meant to be a destination people navigate to, give it a CTA. If it is a handoff target, confirm it offers a way back.

LowNo visible way in

The /collections/[category]/[subcategory] page is only reached through a generated link.

What users experience
No button leads here; users arrive through an address the app builds, such as a link in an email.
Why it matters
Fine for hand-offs. If users should also find it in the product, they cannot.
Why low
Often deliberate.
Recommended fixIf it is meant to be browsable, give it a link where users need it.
Where
The /collections/[category]/[subcategory] pagesrc/app/sitemap.ts:99
Technical details

indirect-only · /collections/[category]/[subcategory] · warning · confidence medium

No CTA anywhere leads to /collections/[category]/[subcategory]. Its address is assembled in code — a handoff link or a URL held in state — so it works, but it has no door in the interface and no back edge to whatever opened it.

If /collections/[category]/[subcategory] is meant to be a destination people navigate to, give it a CTA. If it is a handoff target, confirm it offers a way back.

LowNo visible way in

The /dashboard/account page is only reached through a generated link.

What users experience
No button leads here; users arrive through an address the app builds, such as a link in an email.
Why it matters
Fine for hand-offs. If users should also find it in the product, they cannot.
Why low
Often deliberate.
Recommended fixIf it is meant to be browsable, give it a link where users need it.
Where
The /dashboard/account pagesrc/app/sitemap.ts:121
Technical details

indirect-only · /dashboard/account/[[...rest]] · warning · confidence medium

No CTA anywhere leads to /dashboard/account/[[...rest]]. Its address is assembled in code — a handoff link or a URL held in state — so it works, but it has no door in the interface and no back edge to whatever opened it.

If /dashboard/account/[[...rest]] is meant to be a destination people navigate to, give it a CTA. If it is a handoff target, confirm it offers a way back.

LowNo visible way in

The /dashboard/purchases page is only reached through a generated link.

What users experience
No button leads here; users arrive through an address the app builds, such as a link in an email.
Why it matters
Fine for hand-offs. If users should also find it in the product, they cannot.
Why low
Often deliberate.
Recommended fixIf it is meant to be browsable, give it a link where users need it.
Where
The /dashboard/purchases pagesrc/app/sitemap.ts:124
Technical details

indirect-only · /dashboard/purchases · warning · confidence medium

No CTA anywhere leads to /dashboard/purchases. Its address is assembled in code — a handoff link or a URL held in state — so it works, but it has no door in the interface and no back edge to whatever opened it.

If /dashboard/purchases is meant to be a destination people navigate to, give it a CTA. If it is a handoff target, confirm it offers a way back.

LowNo visible way in

The /sso-callback page is only reached through a generated link.

What users experience
No button leads here; users arrive through an address the app builds, such as a link in an email.
Why it matters
Fine for hand-offs. If users should also find it in the product, they cannot.
Why low
Often deliberate.
Recommended fixIf it is meant to be browsable, give it a link where users need it.
Technical details

indirect-only · /sso-callback/[[...sso-callback]] · warning · confidence medium

No CTA anywhere leads to /sso-callback/[[...sso-callback]]. Its address is assembled in code — a handoff link or a URL held in state — so it works, but it has no door in the interface and no back edge to whatever opened it.

If /sso-callback/[[...sso-callback]] is meant to be a destination people navigate to, give it a CTA. If it is a handoff target, confirm it offers a way back.

LowNo visible way in

The /store/[storeId]/analytics page is only reached through a generated link.

What users experience
No button leads here; users arrive through an address the app builds, such as a link in an email.
Why it matters
Fine for hand-offs. If users should also find it in the product, they cannot.
Why low
Often deliberate.
Recommended fixIf it is meant to be browsable, give it a link where users need it.
Technical details

indirect-only · /store/[storeId]/analytics · warning · confidence medium

No CTA anywhere leads to /store/[storeId]/analytics. Its address is assembled in code — a handoff link or a URL held in state — so it works, but it has no door in the interface and no back edge to whatever opened it.

If /store/[storeId]/analytics is meant to be a destination people navigate to, give it a CTA. If it is a handoff target, confirm it offers a way back.

LowNo visible way in

The /store/[storeId]/customers page is only reached through a generated link.

What users experience
No button leads here; users arrive through an address the app builds, such as a link in an email.
Why it matters
Fine for hand-offs. If users should also find it in the product, they cannot.
Why low
Often deliberate.
Recommended fixIf it is meant to be browsable, give it a link where users need it.
Technical details

indirect-only · /store/[storeId]/customers · warning · confidence medium

No CTA anywhere leads to /store/[storeId]/customers. Its address is assembled in code — a handoff link or a URL held in state — so it works, but it has no door in the interface and no back edge to whatever opened it.

If /store/[storeId]/customers is meant to be a destination people navigate to, give it a CTA. If it is a handoff target, confirm it offers a way back.

LowNo visible way in

The /store/[storeId]/orders page is only reached through a generated link.

What users experience
No button leads here; users arrive through an address the app builds, such as a link in an email.
Why it matters
Fine for hand-offs. If users should also find it in the product, they cannot.
Why low
Often deliberate.
Recommended fixIf it is meant to be browsable, give it a link where users need it.
Technical details

indirect-only · /store/[storeId]/orders · warning · confidence medium

No CTA anywhere leads to /store/[storeId]/orders. Its address is assembled in code — a handoff link or a URL held in state — so it works, but it has no door in the interface and no back edge to whatever opened it.

If /store/[storeId]/orders is meant to be a destination people navigate to, give it a CTA. If it is a handoff target, confirm it offers a way back.

LowNo visible way in

The /store/[storeId]/products page is only reached through a generated link.

What users experience
No button leads here; users arrive through an address the app builds, such as a link in an email.
Why it matters
Fine for hand-offs. If users should also find it in the product, they cannot.
Why low
Often deliberate.
Recommended fixIf it is meant to be browsable, give it a link where users need it.
Technical details

indirect-only · /store/[storeId]/products · warning · confidence medium

No CTA anywhere leads to /store/[storeId]/products. Its address is assembled in code — a handoff link or a URL held in state — so it works, but it has no door in the interface and no back edge to whatever opened it.

If /store/[storeId]/products is meant to be a destination people navigate to, give it a CTA. If it is a handoff target, confirm it offers a way back.

LowLeftover redirect

The old /preview/product/[productId] page still ships, only to redirect elsewhere.

What users experience
Users do not notice; they are sent on automatically.
Why it matters
Leftover code to maintain, and a sign that links elsewhere may still point at the old address.
Why low
Housekeeping, invisible to users.
Recommended fixDelete /preview/product/[productId] and point anything still referencing it at /product/[productId].
Where
The /preview/product/[productId] pagesrc/app/(lobby)/preview/product/[productId]/page.tsx:14
Technical details

legacy-route-live · /preview/product/[productId] · warning · confidence medium

/preview/product/[productId] is a stub whose only job is to redirect to /product/[productId].

Delete /preview/product/[productId] and point anything still referencing it at /product/[productId].

LowOne-way section

Users can enter product from collections but not come back.

What users experience
Going one way takes one click; returning takes several, or the menus.
Why it matters
Users feel lost and use the back button or restart, which breaks their flow.
Why low
An annoyance rather than a blocker.
Recommended fixAdd a direct way back where users arrive.
Technical details

one-way-cluster · collections->product · warning · confidence medium

3 CTAs cross from collections into product, and none come back. That is the shape of an ingested data source rather than a peer area of the product.

If a user working in product ever needs the collections context, add the return CTA.

LowOne-way section

Users can enter home from signin but not come back.

What users experience
Going one way takes one click; returning takes several, or the menus.
Why it matters
Users feel lost and use the back button or restart, which breaks their flow.
Why low
An annoyance rather than a blocker.
Recommended fixAdd a direct way back where users arrive.
Technical details

one-way-cluster · signin->home · warning · confidence medium

3 CTAs cross from signin into home, and none come back. That is the shape of an ingested data source rather than a peer area of the product.

If a user working in home ever needs the signin context, add the return CTA.

LowOne-way section

Users can enter dashboard from store but not come back.

What users experience
Going one way takes one click; returning takes several, or the menus.
Why it matters
Users feel lost and use the back button or restart, which breaks their flow.
Why low
An annoyance rather than a blocker.
Recommended fixAdd a direct way back where users arrive.
Technical details

one-way-cluster · store->dashboard · warning · confidence medium

14 CTAs cross from store into dashboard, and none come back. That is the shape of an ingested data source rather than a peer area of the product.

If a user working in dashboard ever needs the store context, add the return CTA.

LowOne-way section

Users can enter home from store but not come back.

What users experience
Going one way takes one click; returning takes several, or the menus.
Why it matters
Users feel lost and use the back button or restart, which breaks their flow.
Why low
An annoyance rather than a blocker.
Recommended fixAdd a direct way back where users arrive.
Technical details

one-way-cluster · store->home · warning · confidence medium

9 CTAs cross from store into home, and none come back. That is the shape of an ingested data source rather than a peer area of the product.

If a user working in home ever needs the store context, add the return CTA.

LowPossibly unreachable

The /blog/[...slug] page may be unreachable. Worth a two-minute check.

What users experience
No link we could read leads here, but the /blog page has a link whose address is computed while the app runs. That link is probably the way in.
Why it matters
If the computed link works, nothing is wrong. If not, users cannot open these pages.
Why low
Most likely fine; it just could not be proven from the code alone.
Recommended fixClick through once to confirm the link opens this page.
Technical details

orphan-unconfirmed · /blog/[...slug] · warning · confidence low

No resolved CTA leads to /blog/[...slug], but /blog has 1 whose destination is computed at runtime. One of them is probably the door. Check the evidence; if it is, nothing is wrong.

LowOnly in the menus

The /dashboard/billing page can only be reached from the menus.

What users experience
No screen links here in context. Users have to know to look for it in the navigation.
Why it matters
Users who would need it in the middle of a task do not discover it.
Why low
Reachable, just not where users would think to look.
Recommended fixLink to it from the screen where users need it.
Where
Technical details

rail-only-inbound · /dashboard/billing · warning · confidence medium

No screen links to /dashboard/billing; only the navigation rail does. Every journey to it costs a trip back to the rail.

Add an in-page CTA to /dashboard/billing from the screen a user is on when they need it.

LowOnly in the menus

The /dashboard/settings page can only be reached from the menus.

What users experience
No screen links here in context. Users have to know to look for it in the navigation.
Why it matters
Users who would need it in the middle of a task do not discover it.
Why low
Reachable, just not where users would think to look.
Recommended fixLink to it from the screen where users need it.
Where
Technical details

rail-only-inbound · /dashboard/settings · warning · confidence medium

No screen links to /dashboard/settings; only the navigation rail does. Every journey to it costs a trip back to the rail.

Add an in-page CTA to /dashboard/settings from the screen a user is on when they need it.

LowOnly in the menus

The /onboarding page can only be reached from the menus.

What users experience
No screen links here in context. Users have to know to look for it in the navigation.
Why it matters
Users who would need it in the middle of a task do not discover it.
Why low
Reachable, just not where users would think to look.
Recommended fixLink to it from the screen where users need it.
Technical details

rail-only-inbound · /onboarding · warning · confidence medium

No screen links to /onboarding; only the navigation rail does. Every journey to it costs a trip back to the rail.

Add an in-page CTA to /onboarding from the screen a user is on when they need it.

LowOnly in the menus

The /signout page can only be reached from the menus.

What users experience
No screen links here in context. Users have to know to look for it in the navigation.
Why it matters
Users who would need it in the middle of a task do not discover it.
Why low
Reachable, just not where users would think to look.
Recommended fixLink to it from the screen where users need it.
Technical details

rail-only-inbound · /signout/[[...signout]] · warning · confidence medium

No screen links to /signout/[[...signout]]; only the navigation rail does. Every journey to it costs a trip back to the rail.

Add an in-page CTA to /signout/[[...signout]] from the screen a user is on when they need it.

LowBusy crossroads

Many journeys pass through the home page.

What users experience
It is a hub: users cross it on the way to much of the product.
Why it matters
A problem on this page affects everything behind it. Test it with extra care.
Why low
A measurement to be aware of, not a defect.
Recommended fixKeep it fast and stable; consider a second route to what lies behind it.
Technical details

chokepoint · / · info · confidence medium

Most journeys between areas pass through /. Quality, performance and copy budget belong here first; a bug here breaks many flows.

LowBusy crossroads

Many journeys pass through the /cart page.

What users experience
It is a hub: users cross it on the way to much of the product.
Why it matters
A problem on this page affects everything behind it. Test it with extra care.
Why low
A measurement to be aware of, not a defect.
Recommended fixKeep it fast and stable; consider a second route to what lies behind it.
Technical details

chokepoint · /cart · info · confidence medium

Most journeys between areas pass through /cart. Quality, performance and copy budget belong here first; a bug here breaks many flows.

LowBusy crossroads

Many journeys pass through the /product/[productId] page.

What users experience
It is a hub: users cross it on the way to much of the product.
Why it matters
A problem on this page affects everything behind it. Test it with extra care.
Why low
A measurement to be aware of, not a defect.
Recommended fixKeep it fast and stable; consider a second route to what lies behind it.
Technical details

chokepoint · /product/[productId] · info · confidence medium

Most journeys between areas pass through /product/[productId]. Quality, performance and copy budget belong here first; a bug here breaks many flows.

LowBusy crossroads

Many journeys pass through the /signin page.

What users experience
It is a hub: users cross it on the way to much of the product.
Why it matters
A problem on this page affects everything behind it. Test it with extra care.
Why low
A measurement to be aware of, not a defect.
Recommended fixKeep it fast and stable; consider a second route to what lies behind it.
Technical details

chokepoint · /signin/[[...signin]] · info · confidence medium

Most journeys between areas pass through /signin/[[...signin]]. Quality, performance and copy budget belong here first; a bug here breaks many flows.

Structure

“With navigation” counts the header and menus, which sit on every screen. “In-page only” is what the screens themselves offer. The gap shows how much the product leans on its menus.

MeasureWith navigationIn-page only
Destinations (screens and dead-link targets)4242
Links between screens118112
Screen pairs connected40.1%18.7%
Average clicks between screens1.71.8
Longest shortest path44
Screens with no way in1519

Sections

No navigation was declared, so sections come from the first part of each URL.

SectionScreensLinks insideLongest path
dashboard1271
store900
signin322
blog211
checkout200
collections200
signup211
home100
[...slug]100
build-a-board100
cart100
onboarding100
preview100
product100
products100
signout100
sso-callback100

Not checked

Missing way inno navigation declared, so no entry claims a destination through its active state
Broken journeyno cycles declared under `cycles:` in .uxgraph.yml