Skip to content

fix(events): show start time even when no end time is set - #260

Draft
dccakes wants to merge 1 commit into
mainfrom
claude/sharp-feynman-rzheig
Draft

dccakes wants to merge 1 commit into
mainfrom
claude/sharp-feynman-rzheig

Conversation

@dccakes

@dccakes dccakes commented Aug 16, 2026

Copy link
Copy Markdown
Owner

Daily Product Improvement

Summary

Event cards previously suppressed the time row entirely when only a start time was set — requiring both startTime and endTime to render. This meant ceremonies and other events with an open-ended duration showed no time at all. The fix displays start time unconditionally when present and appends the end time with an en-dash separator when available. A Clock icon is also added so the time row visually matches the Calendar (date) and MapPin (venue) rows above it.


TLDR

Event cards now show start time even when no end time is set; adds Clock icon to match sibling info rows.

Description

Events like ceremonies and cocktail hours commonly have a defined start time but no fixed end time. The previous time display condition (event.startTime && event.endTime) hid the row completely for these events, leaving users with no time context on the card.

This Change

  • Removes the event.endTime requirement from the time visibility condition
  • Appends end time with an en-dash only when it exists
  • Adds Clock icon to align the time row visually with Calendar and MapPin rows

Recommendations Reviewed

Area: event-card.tsx — Events page
Issue: Time row suppressed when only start time is set
Recommendation: Show start time whenever present; append end time with separator only when available
Type: UX/UI
Priority: High
Effort: Small


Area: category-form.tsx — Budget section form
Issue: Editing a category with no planned amount pre-fills the input with "0" because String(0) === "0", forcing users to manually clear it
Recommendation: Change String(category.plannedAmount) to category?.plannedAmount ? String(category.plannedAmount) : ''
Type: UX/UI
Priority: Medium
Effort: Small


Area: planning-overview.tsx — MilestonesCard
Issue: When no milestones exist, the card body renders empty with no message or CTA
Recommendation: Add a contextual empty state: "Set your wedding date to see your planning timeline" with link to /checklist
Type: UX/UI
Priority: Medium
Effort: Small


Area: checklist-page-client.tsx — Checklist page
Issue: The tRPC invalidation block (Promise.all([task.list, task.getPriorityQueue, dashboard.getForActiveWorkspace])) is copy-pasted across four mutation handlers
Recommendation: Extract to a single shared invalidateTasks() helper
Type: Frontend cleanup
Priority: Low
Effort: Small


Area: planning-overview.tsx — TasksCard
Issue: Optimistic task toggle has no rollback on error — toggling a task when offline leaves the checkbox permanently in the wrong state until next refetch
Recommendation: Add optimistic update with rollback in the onError handler
Type: Frontend cleanup
Priority: High
Effort: Medium


Area: events-page-client.tsx — Events page
Issue: RSVP context banner has no dismiss button; appears when eventId is in the URL and persists until the user navigates away
Recommendation: Add an X dismiss button that clears the eventId search param
Type: UX/UI
Priority: Medium
Effort: Small


Area: sidebar-nav.tsx — Sidebar
Issue: Collapse preference loaded from localStorage in a useEffect causes a visible 168px width layout shift on every page load for users who prefer the collapsed sidebar
Recommendation: Set sidebar width via a cookie read server-side, or use a CSS variable injected via a <script> in <head> before hydration (same pattern as dark mode)
Type: UX/UI
Priority: Medium
Effort: Large


Selected Improvement

Fix event card time display to show start time even when no end time is set, and add a Clock icon.

Why This Was Selected

Many real-world wedding events (ceremonies, cocktail hours) have a start time but no defined end time. The old condition completely hid time information for these events, leaving an empty gap where guests and planners expect timing details. The fix is small, zero-risk, immediately visible to all users, and consistent with the existing Calendar/MapPin row pattern.

Changes Made

  • Changed {event.startTime && event.endTime && ...} to {event.startTime && ...}
  • Rendered end time conditionally: {event.endTime ? \ – ${event.endTime}` : ''}`
  • Added Clock icon matching the size/style of Calendar and MapPin icons
  • Added Clock to the lucide-react import line

Files Changed

  • src/app/(authenicated)/events/_components/event-card.tsx

Verification

  • Biome check: no issues (Checked 1 file in 11ms. No fixes applied.)
  • TypeScript: no new errors
  • Full unit test suite: 2023 tests passed across 233 suites

Future Recommendations

Recommendation: Fix CategoryForm "0" pre-fill when editing a section with no planned budget
Priority: Medium
Effort: Small
Reason not included: Different area (budget), separate concern; would widen the diff unnecessarily
Should become GitHub issue: No — one-line fix, can be the next daily improvement

Recommendation: Add empty state to MilestonesCard when no milestones exist
Priority: Medium
Effort: Small
Reason not included: Dashboard already has multiple open PRs; keeping scope focused
Should become GitHub issue: No — small, self-contained

Recommendation: Extract shared task invalidation helper in checklist-page-client.tsx
Priority: Low
Effort: Small
Reason not included: Frontend cleanup with no user-facing impact; lower priority than UX fixes
Should become GitHub issue: No — minor code quality improvement

Recommendation: Add RSVP context banner dismiss button
Priority: Medium
Effort: Small
Reason not included: Separate screen and concern from this fix
Should become GitHub issue: No — small, self-contained

Recommendation: Fix sidebar collapse layout shift (SSR cookie or head script approach)
Priority: Medium
Effort: Large
Reason not included: Large effort; touches layout infrastructure and server/client boundary
Should become GitHub issue: Yes — cross-cutting, needs careful implementation

Recommendation: Add optimistic update rollback to task toggle on the dashboard
Priority: High
Effort: Medium
Reason not included: Separate component and concern; warrants its own focused PR
Should become GitHub issue: No — medium effort, can be a standalone daily improvement

GitHub Issues Created or Proposed

Proposed issue — sidebar collapse layout shift:

Title: [Sidebar] Eliminate layout shift when restoring collapsed sidebar preference

  • Problem: Collapse state stored in localStorage is read in a useEffect, so the sidebar always renders expanded first (w-56) and then snaps to collapsed (w-14) after hydration. Users who prefer collapsed sidebar see a 168px width jump on every page load.
  • Recommended solution: Persist collapse preference in a cookie; read it server-side in the layout and inject the initial class before hydration. This is the same pattern used for dark mode.
  • Expected benefit: No visible layout shift; collapsed-sidebar users get a consistent experience
  • Suggested acceptance criteria: Navigating between pages with sidebar collapsed preference does not cause a width transition on load
  • Priority: Medium
  • Effort: Large
  • Source: Daily product improvement review

No issue created today — the sidebar issue is the only one warranting separate tracking, and it is proposed above rather than filed to allow the team to prioritize it alongside other open work.


Generated by Claude Code

Many events (ceremonies, cocktail hours) have a defined start time
but no end time. The previous condition required both startTime and
endTime to display the time row, so events with only a start time
showed nothing. Now start time is always shown when present, and
the end time is appended with an en-dash when it exists.

Also adds a Clock icon to the time row so it visually matches the
Calendar (date) and MapPin (venue) rows above it.
@vercel

vercel Bot commented Aug 16, 2026 •

Copy link
Copy Markdown
Contributor

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
scv Ready Ready Preview Aug 16, 2026 2:24pm

@github-actions

Copy link
Copy Markdown
Contributor

Jest Test Coverage

Coverage Summary

Lines Statements Branches Functions
Coverage: 81%
81.71% (35125/42986) 82.94% (3734/4502) 68.04% (1037/1524)

This branch was successfully deployed

1 active deployment
Preview — 1df798f0 Deployed Aug 16, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant