UX Backlog

Remaining improvements identified during a UX audit of the dashboard and itinerary flows. High-impact items were addressed in PR #21.


Medium Impact

Silent failures on toggle/archive/update

ToggleFavorite, ArchiveButton, and updateItinerary all use updateMany or have empty error paths. The UI can show success even when the server silently did nothing (e.g. wrong user ID, 0 rows updated). Each should check the result and surface a toast on failure.

Files: components/dashboard/toggle-favorite.tsx, components/dashboard/archive-button.tsx, app/actions/update-itinerary.ts


Navigation asymmetry

  • The back arrow only appears on the locked/paywall view — unlocked itinerary view has no back button.
  • Restoring an archived itinerary has no confirmation dialog, but archiving does. Either both should confirm or neither should.

Files: app/dashboard/itinerary/[id]/page.tsx, components/dashboard/archive-button.tsx


Form state not persisted across navigation

  • Sliders and date fields on the trip generator form reset if the user hits browser back.
  • Clearing travel dates doesn't re-enable the manual duration input — the field stays hidden.

Files: components/dashboard/trip-generator-form.tsx


No filtering or sorting on the itineraries list

The saved trips page always sorts by createdAt: desc with no UI to change it. As the list grows, users can't filter by trip type, unlocked status, date range, or favorites.

Files: app/dashboard/saved/page.tsx


Lower Impact / Polish

Truncated titles have no tooltip

line-clamp-1 cuts off long itinerary titles with no way to read the full text. A tooltip or title attribute on the element would fix this.

Files: components/dashboard/itinerary-card.tsx


ToggleFavorite aria-label doesn't reflect current state

The aria-label is static — screen readers can't tell whether an itinerary is currently favorited or not. It should toggle between "Add to favorites" and "Remove from favorites".

Files: components/dashboard/toggle-favorite.tsx


No aria-busy on long-running operations

Generation, unlock, and date-save operations don't set aria-busy="true" on relevant containers. Screen reader users get no indication that something is in progress.


"Add Place" button duplicated in editor portal

The button appears twice on app/editor/page.tsx — once in the header area and once above the table. One should be removed.

Files: app/editor/page.tsx


Map "not available" message is misleading

When geocoding fails, the card reads "Generate a new itinerary to get interactive route maps" — but the user is already looking at a generated itinerary. The copy should explain that location data wasn't available for this trip rather than implying they need to start over.

Files: components/dashboard/itinerary-content.tsx


No undo / restore original after editing

Once edits to an itinerary section are saved, the AI-generated version is permanently overwritten with no way to revert. Consider storing the original generated content separately or adding a "Reset to original" option per section.

Files: components/dashboard/itinerary-content.tsx, app/actions/update-itinerary.ts