Sean Murray / Case File 01 Back to project index ←

Case File 01

Collaborative Screen AnnotationA shared visual layer for remote explanation.

A cross-platform desktop proof of concept that lets several participants draw, point, highlight, and explain within the same visual session.

What the application does

The application behaves like a lightweight collaborative overlay. A host creates a session, shares a join code, and controls whether other participants can draw, point, erase, or only observe.

Each participant sees locally rendered input immediately while the application synchronises vector-based annotation events through a small session relay. New participants receive a snapshot of the current canvas before live events continue.

Primary workflow

Create session → join session → annotate → review or clear → export session image.

Illustrative stack

C#, .NET 10, Avalonia, MVVM, ASP.NET Core SignalR, JSON message contracts.

Core features

Pen, highlighter, arrow, participant pointers, per-user undo, host lock, reconnect, snapshot sync.

Target users

Remote teachers, support staff, design reviewers, technical teams, and collaborative presenters.

PenHighlighterArrowUndoLock session
HOST USER B

The problem behind the interface

Screen sharing gives everyone the same image, but not the same ability to point at or change that image. Verbal directions are slow and ambiguous when layouts move or several people need to contribute.

The application therefore needed to feel immediate for the person drawing, remain understandable when several cursors are active, and recover without losing context when a participant reconnects.

Primary design requirements

  • Render local input without waiting for a network round trip.
  • Preserve stroke ownership so undo and moderation remain predictable.
  • Allow a late-joining participant to reconstruct the current shared state.
  • Keep host controls visible without crowding the drawing surface.
  • Handle temporary disconnection without silently discarding user input.

My role and responsibilities

As Project Lead and the studio’s only developer, I treated the project as both a software system and a product exercise. I owned scope, technical direction, interface behaviour, implementation, testing, prioritisation, and the final portfolio narrative.

  • Defined the host and participant workflows and reduced the first release to one shared-session loop.
  • Built the Avalonia shell, tool palette, overlay surface, participant list, and session-state views.
  • Designed message contracts for strokes, pointers, permissions, snapshots, reconnects, and clears.
  • Implemented local-first drawing and remote event application in C#.
  • Created manual test scenarios for multi-client sync, delayed messages, reconnect, undo, and session lock.

How the proof of concept is structured

The proof of concept separates drawing, session state, and transport so the interface can be tested without requiring a live server.

Avalonia presentation layer

Views bind to tool state, participant state, and session commands through MVVM view models.

Annotation engine

A custom drawing surface stores strokes as vector point sequences with colour, thickness, tool type, owner, and sequence number.

Session client

A transport abstraction sends and receives strongly typed session messages and exposes connection state to the UI.

Relay service

An ASP.NET Core SignalR hub distributes live events and stores the latest session snapshot for reconnecting or late-joining clients.

Technical decisions worth discussing

The proof of concept is intentionally small, but the decisions below show how the application would remain understandable and maintainable as it grows.

Vector strokes over screenshots

Vector events are smaller, replayable, attributable to a participant, and easier to undo than repeatedly transmitting images.

Optimistic local rendering

A stroke appears immediately on the local device, then the remote acknowledgement reconciles ordering without blocking the user.

Host-authoritative permissions

The host owns session rules such as who can draw, clear, or lock the surface, reducing conflicting state changes.

Snapshot plus live event stream

A new participant loads the latest snapshot, then applies events that occurred after the snapshot sequence number.

Sample proof-of-concept evaluation

For a portfolio demonstration, the application was evaluated with three desktop clients on one local network and under simulated delay.

3 concurrent clients

The host and two participants could draw at the same time while strokes remained attributable to the correct user.

150 ms simulated delay

Local drawing remained responsive because rendering did not wait for the relay; remote movement became less fluid but remained understandable.

500-stroke session

The client reconstructed the canvas from a snapshot and continued applying live events without visible ordering errors in the sample run.

5-second disconnect

A participant rejoined, received the current snapshot, and resumed drawing without manually restarting the session.

Illustrative evaluation - replace with actual evidence

Result, limitations, and next steps

The proof of concept demonstrates the complete shared-annotation loop and the architectural boundaries needed for a larger collaboration product. Its main limitation is that the sample relay is suitable for demonstration, not production-scale identity, persistence, moderation, or security.

Current strength

The project demonstrates interaction design and shared-state reasoning rather than presenting drawing as an isolated canvas feature.

Known limitation

The proof of concept does not include production authentication, encrypted session history, large-room scaling, or full screen-capture integration.

Next step

Add persistent accounts, session recording, screen-selection capture, load testing, and moderated guest access.

Portfolio evidence

Show a two-minute multi-client demo, a message-flow diagram, reconnect tests, and one annotated code example.

What this project demonstrates

C# desktop development, Avalonia custom controls, MVVM, real-time state synchronisation, optimistic UI, failure-state design, and end-to-end ownership as a solo Project Lead.

Project links

See the application in context.