Help us measure site usage?

With your permission, we use self-hosted analytics to understand page usage. It is optional and does not affect the Service. Learn more.

C#advancedwebAI generated

Realtime Collaboration Board

Build a Trello-style board with ASP.NET Core where several people move and edit cards at the same time and see each other's changes instantly. Changes are pushed to every open browser through SignalR (part of ASP.NET Core). The hard part is conflicts: if two people edit the same card at once, the second save must not silently overwrite the first. Each card has a version number; a save based on an outdated version is rejected, and the user sees the latest version to redo their change. Card order within a column is kept consistent when people drag at the same time. You'll learn SignalR, optimistic concurrency, ordering items without renumbering everything, JSON contracts with System.Text.Json, and testing concurrent behavior.

Estimate
~17.5h
Steps
7
Completed by
0
Proposed by
codeseed.app

ASP.NET Core · System.Text.Json

Project roadmap

  1. 01

    Design the model and messages

    ~2.5h

    Write DESIGN.md: boards, columns and cards (title, description, column, position, version); the commands a client sends (create, edit, move and delete card) each including the version it's based on; and the events the server broadcasts. Store positions as fractional values (a card dropped between 1.0 and 2.0 gets 1.5), so a move changes only one card. Define the message types as C# records serialized with System.Text.Json. Done when: DESIGN.md covers every command, event and conflict case.

  2. 02

    Build the storage and REST API

    ~2.5h

    Store boards, columns and cards with EF Core (SQLite or PostgreSQL), using the card version as a concurrency token. Add REST endpoints to load a board with all its columns and cards in order. Add a way to rebalance positions in a column when the fractional values get too close together. Done when: a board loads in the correct order through the API.

  3. 03

    Add live updates with SignalR

    ~2.5h

    Create a BoardHub where clients join a group per board. Commands are sent to the hub, validated, saved, and then broadcast as events to everyone in that board's group, including the sender, whose screen updates from the event. Show who is viewing the board. Done when: two browsers on the same board see each other's changes instantly.

  4. 04

    Detect and resolve conflicts

    ~3h

    When a command's version doesn't match the stored version, reject it with a conflict event containing the current card, and don't change anything. In the browser, show the conflict clearly (your change and the current version) and let the user reapply or discard. A move that conflicts with a delete must fail cleanly. Done when: two users editing the same card at once never lose an edit without being told.

  5. 05

    Build the board page

    ~3h

    Build the board with columns and cards, drag and drop (with SortableJS or native drag events), inline editing and new card forms. After a drag, calculate the new position from the neighboring cards and send the move. Apply incoming events to the page without reloading, and reload the whole board after a reconnect so nothing is missed. Done when: dragging and editing work smoothly, and reconnecting catches up.

  6. 06

    Add limits and logging

    ~1.5h

    Validate lengths (title up to 200 characters), limit commands per connection (for example 20 per second) and limit the number of cards per board. Log every command with the user, card, result and duration using structured logging. Done when: invalid and excessive commands are rejected, and the logs show every change.

  7. 07

    Test concurrency

    ~2.5h

    Write tests: unit tests for position calculation and rebalancing, and integration tests using WebApplicationFactory with two SignalR clients that edit the same card at once (exactly one succeeds, the other gets a conflict), move cards at the same time (the final order is consistent), and edit a deleted card. Done when: dotnet test passes reliably when run several times.

Ready to build this?

Get a GitHub repo and start building. Your AI reviewer checks each step as you go.

~17.5h · 7 steps

Tech stack

ASP.NET CoreSystem.Text.Json