Skip to content

[Bug / UX]: Overlap Detection Does Not Provide Specific Conflict Details to the User #2081

Description

@prince-pokharna

Summary

DailyForge's conflict detection prevents overlapping tasks on the same day — a core feature highlighted in the README. However, when a conflict is detected, the user receives no actionable information about which existing task is causing the conflict or what time slot is already occupied. This makes the feature feel like a black box and forces users to manually scan the grid to identify the problematic placement.

Problem

  • When a task is dropped onto a conflicting time slot, the user sees a generic rejection (the task snaps back), but receives no toast, modal, or inline message identifying the conflict.
  • The user does not know: which existing task occupies that slot, what time range is blocked, or which days are available for the dropped task.
  • This is particularly problematic for tasks with long durations (e.g., a 3-hour task) where the overlap range is non-obvious from the grid.

Steps to Reproduce

  1. Create two tasks with overlapping durations.
  2. Drag the second task to the same day/time as the first task.
  3. Observe: the task is rejected without any user-facing explanation.

Impact

  • New users may assume the drag-and-drop is broken rather than understanding that overlap protection is active.
  • The silent rejection is especially confusing on mobile, where the drop zone is smaller and visual feedback is harder to perceive.
  • This gap undermines one of the project's core selling points: "Automatically detects and prevents scheduling conflicts."

Proposed Solution

I would like to improve the conflict feedback mechanism as follows:

  1. Toast Notification with Conflict Detail: When a drop is rejected, display a toast (using the existing UI pattern in the codebase) with a message such as: "Conflict with '[Task Name]' already scheduled at [Start Time]–[End Time] on [Day]." This requires passing the conflicting task's metadata back from the conflict detection function.

  2. Visual Highlight of Conflicting Slot: Briefly highlight the existing conflicting task card with a pulsing red border (CSS @keyframes animation) for 2 seconds after the rejected drop, drawing the user's eye to the conflict source.

  3. Suggested Free Slots (stretch goal): Display up to 2 available time slots on the same day where the dropped task would fit, making it easier to reschedule without leaving the drag context.

Tech scope: Frontend only. The conflict detection logic in the Routine Builder component will need to be refactored to return the conflicting task object in addition to a boolean flag.

I would be happy to take this on. Could you assign this issue to me?

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingdocumentationImprovements or additions to documentationfeatureImprove existing feature or add newfrontendIssues related to UI/UX

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions