Repository navigation
Conversation
…hildren The "New Event" Button rendered as a direct child of the ul in EventsTabs, violating the HTML spec (ul may only contain li elements as direct children) and breaking the accessibility tree for screen readers. Wrap it in a li to restore valid HTML structure. Co-Authored-By: AgenticDiego <noreply@carvallo.io> Claude-Session: https://claude.ai/code/session_01XDWDzCQ5ob6jVrz8tEpqrX
Contributor
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Contributor
This branch had an error being deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Daily Product Improvement
Summary
Fixes an HTML validity and accessibility bug in
EventsTabs(src/components/guest-list/event-tabs.tsx): the "+ New Event"<Button>was rendered as a direct child of the<ul>, which the HTML spec does not allow — a<ul>may only contain<li>elements as direct children. The button is now wrapped in a<li>.Recommendations Reviewed
Area:
src/components/guest-list/event-tabs.tsxIssue:
<Button>("+ New Event") rendered as a direct child of<ul>, violating the HTML spec. Browsers are forgiving but the ARIA list structure is broken for screen readers — assistive technology expects only list items as children, so the button appears outside the list in the accessibility tree.Recommendation: Wrap the button in a
<li>element.Type: Frontend cleanup / Accessibility
Priority: Medium
Effort: Small
Area:
src/app/(authenicated)/events/_components/event-card.tsxIssue: When
event.collectRsvpis true, an "RSVPs"<Badge>is shown in the card header alongside the "Collect RSVPs" toggle — these two elements always reflect the same state, making the badge purely redundant.Recommendation: Remove the badge; the Switch state already communicates whether RSVPs are collected.
Type: UX/UI
Priority: Low
Effort: Small
Area:
src/app/(authenicated)/events/_components/events-page-client.tsxIssue: The "General RSVP questions" button is
disabled={websiteQuestions === null}while the query is loading, with no tooltip or spinner to explain why. Users see an unresponsive button with no indication it will become available.Recommendation: Show a loading spinner or a
titletooltip on the button while the query resolves.Type: UX/UI
Priority: Medium
Effort: Small
Area:
src/app/(authenicated)/events/_components/events-page-client.tsx(lines 237–244)Issue: The
if (isLoading && initialEvents.length === 0)branch is unreachable. WheninitialDatais provided to a tRPC query,isLoadingis nevertrueon the first render — the query starts satisfied. Future developers may rely on this branch and be surprised.Recommendation: Remove the dead branch.
Type: Frontend cleanup
Priority: Low
Effort: Small
Area:
src/app/(authenicated)/vendors/page.tsx(lines 27–29)Issue:
if (vendors === null) { redirect('/') }is unreachable — thecatchblock already redirects, so this path is only reached after a successful assignment.Recommendation: Remove the dead null check.
Type: Frontend cleanup
Priority: Low
Effort: Small
Area:
src/app/(authenicated)/vendors/page.tsxandsrc/app/(authenicated)/budget/page.tsxIssue: Both pages catch all errors (including transient network failures) and redirect silently to
/. Users lose context with no explanation.Recommendation: Use the route-level
error.tsxfor unexpected errors rather than a silent redirect.Type: UX/UI / Backend cleanup
Priority: Medium
Effort: Medium
Selected Improvement
Wrap the "+ New Event"
<Button>in a<li>inEventsTabs.Why This Was Selected
<ul>to contain only<li>elements as direct children. The button was the sole violator in this component.<ul>contents as a list; a bare<button>among<li>elements breaks that structure in the accessibility tree.Changes Made
<Button variant='ghost' size='sm'>+ New Event</Button>in<li>inEventsTabs.<ul>isflex items-center gap-5, so the<li>naturally becomes a flex item.Files Changed
src/components/guest-list/event-tabs.tsxVerification
baseUrldeprecation warning unrelated to this change).<li>wrapper added; all button props and styling unchanged.Future Recommendations
Recommendation: Remove redundant "RSVPs" badge from EventCard — the Collect RSVPs toggle already communicates the same state.
Priority: Low
Effort: Small
Reason not included: Low priority, different area; keeps this PR focused.
Should become GitHub issue: No
Recommendation: Add loading indicator to "General RSVP questions" button while websiteQuestions is loading.
Priority: Medium
Effort: Small
Reason not included: Different component and concern; better reviewed separately.
Should become GitHub issue: No
Recommendation: Remove unreachable
isLoadingbranch inevents-page-client.tsx.Priority: Low
Effort: Small
Reason not included: Low priority dead-code cleanup; small enough for a follow-up daily run.
Should become GitHub issue: No
Recommendation: Fix silent redirect-on-catch in vendors and budget page server components — use
error.tsxinstead.Priority: Medium
Effort: Medium
Reason not included: Touches error-handling architecture across two pages; warrants its own focused review.
Should become GitHub issue: Yes
GitHub Issues Created or Proposed
No issues created in this run. The silent-redirect-on-catch pattern in vendors and budget pages is Medium priority and Medium effort — it warrants a tracked issue, but requires a decision on the preferred error handling strategy (error.tsx vs. toast vs. inline error state) before implementing.
🤖 Generated with Claude Code
https://claude.ai/code/session_01XDWDzCQ5ob6jVrz8tEpqrX
Generated by Claude Code