Back to selected work
PERSONAL PROJECT / CASE STUDY 01 / 03

Real-time systems

Collaborative Notes

Many clients. One shared state.

Collaborative Notes explores the engineering behind shared state: authenticated users, concurrent editing, and live presence coordinated through a Blazor application and SignalR.

Open public project

SYSTEM ARCHITECTURE

A live document shared across connected clients

The interface stays focused on writing while a real-time channel distributes document and cursor activity between the participating sessions.

ENGINEERING STORY

01 / SHARED STATE

Editing becomes a distributed systems problem

Once several people can change the same note, the document is no longer local UI state. Client actions must move through a shared channel so every connected editor can observe the same evolving document.

02 / PRESENCE

Collaboration should feel visible

Live cursor coordinates, movement speed, and direction make other participants tangible. Presence is treated as part of the editing experience rather than an afterthought.

03 / ACCESS

Identity surrounds the real-time layer

Registration, login, authorization, and protected routes provide the application boundary around collaborative sessions and shared content.

TECHNICAL FOUNDATION

Layers of the system

Application

C#.NETBlazorASP.NET Core

Real time

SignalRJavaScript interop

Data

MySQLEntity Framework Core

Implemented capabilities

  • User registration, login, and protected application routes
  • Real-time editing of a shared note by multiple connected users
  • Live collaborator cursor tracking, including movement speed and direction
  • A custom editing surface integrated with the real-time application layer

Planned directions

  • Persistent note creation and loading
  • Selective collaborator invitations and group sharing
  • Version history, restore, and undo flows
  • Richer in-note elements and collaboration presence
An unhandled error has occurred. Reload 🗙

Rejoining the server...

Rejoin failed. Trying again in seconds.

Failed to rejoin. Please retry or reload the page.

The session has been paused by the server.

Failed to resume the session. Please retry or reload the page.