Skip to content

Real-Time Cursor Tracking & Collaborative Presence Indicators #33

@bchou9

Description

@bchou9

Feature Description

Add real-time cursor tracking and visual presence indicators to show where other users are drawing, hovering, or interacting with the canvas.

Current State

ResCanvas shows user lists (setUserList) and basic join/leave notifications via Socket.IO, but users cannot see:

  • Where other users' cursors are positioned
  • What tools/colors other users are using
  • Active drawing zones of collaborators
  • Who is currently viewing vs. actively drawing

Proposed Features

1. Live Cursor Positions:

  • Display colored cursors for each user on canvas
  • Show username label next to cursor
  • Cursor color matches user's color theme
  • Hide cursor after 2-3 seconds of inactivity

2. Drawing Intent Indicators:

  • Show preview box when user is about to draw a shape
  • Display selection rectangle when user is selecting
  • Highlight pan/zoom activity areas

3. User Activity Status:

  • Active (currently drawing)
  • Idle (viewing)
  • Away (inactive > 5 minutes)
  • Status badge in user list component

4. Viewport Awareness:

  • Mini-map showing where other users are viewing
  • Highlight active viewport rectangles on overview

Technical Implementation

Backend (Socket.IO events):

  • cursor_move - Emit cursor position (throttled to 60Hz max)
  • user_status_change - Active/idle/away status
  • tool_change - When user changes tool/color
  • Room-based broadcasting in backend/routes/socketio_handlers.py

Frontend:

  • New CursorLayer component overlaying canvas
  • Store cursor positions in React state
  • Throttle cursor emission with requestAnimationFrame
  • Add to frontend/src/components/Canvas.js

Optimization:

  • Cursor updates only broadcast to users in same room
  • Throttle to prevent network flooding
  • Use WebSocket binary format for position data
  • Cache cursor SVG elements

Implementation Files

  • backend/routes/socketio_handlers.py - Add cursor event handlers
  • frontend/src/components/Canvas.js - Integrate cursor tracking
  • frontend/src/components/CursorLayer.jsx - New component (to create)
  • frontend/src/services/socket.js - Add cursor event listeners

Benefits

  • Enhanced collaboration awareness
  • Reduced accidental conflicts (users avoid same areas)
  • Better UX for real-time teamwork
  • Professional collaborative drawing tool feature

Performance Considerations

  • Cursor position updates limited to 60fps
  • Only transmit when cursor moves > 5px (dead zone)
  • Automatically disconnect inactive users
  • Batch cursor updates for multiple users

Related Issues

Metadata

Metadata

Assignees

No one assigned

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions