M4RKYU.SYSEdition 2027
Skip to content
LOCZH/安大略 · 加拿大/▸work · ui studio待机OK/--:--:--EST
M4M4RK_YUportfolio
  • 创作创作
    创作Overview
    • 作品精选案例与项目记录
    • 游戏可玩原型与游戏开发日志
  • 影像影像
    影像Overview
    • 照片影像合集与视觉实验
    • 商店印刷品、海报和限量物件
  • 写作写作
    写作Overview
    • 博客长篇开发日志与现场笔记
    • 笔记短观察、链接与代码片段
  • 资源资源
    资源Overview
    • 工具38 款浏览器内开发工具
    • 链接每日使用的开发与设计书签
  • 关于关于
  • 联系联系
EN
← 项目档案
Web 应用 · 2024就绪

UI Studio

实时协作设计画布,多人可以在同一块画板上同时绘制、排布与编辑。

关键信息

角色
Solo developer: canvas architecture, multiplayer state, interface, and deployment.
周期
2024-2026
平台
Desktop editor · Mobile read-only viewer
在线源码

本页导航

  • >这是什么
  • >界面一览
  • >技术栈
  • >亮点功能
  • >工程实现
  • >实现细节
  • >结果
  • >规划与心得
UI Studio home screen offering a new shareable collaborative board
Fig. 01 — UI Studio

为什么做这个

多人协作在我看来一直像某种魔法,所以我做了一个能做到的最小的共享画布,盯着别人的光标移动,直到它不再像魔法为止。

01

这是什么

#

问题

设计工具往往要么是单人使用,要么过于笨重。UI Studio 探索一个共享画布能做到多轻量,同时仍能处理实时在线状态与并发编辑。

方案

基于 Next.js 的画布,使用 Fabric.js 实现矢量编辑、Liveblocks 处理多人状态,让光标、选区和图形改动在协作者之间实时同步。

02

界面一览

#
  • Documented scopeThe public repository documents the shipped room, canvas, presence, comments, history, layer, and export systems.
03

技术栈

#

Product

  • Next.js 14
  • TypeScript
  • Tailwind CSS

Canvas

  • Fabric.js 5
  • Layers
  • Inspector

Realtime

  • Liveblocks Storage
  • Presence
  • Comments
  • History

Export

  • PNG
  • PDF
  • JSON
  • jsPDF
04

亮点功能

#
  • No-login room URLs with active-user presence and live cursors
  • Shapes, text, images, multi-select, alignment, ordering, and layers
  • Cursor chat, emoji reactions, and pinned comments
  • Shared undo/redo and visible connection state
  • PNG/PDF/JSON export plus JSON import
  • Pan and zoom from 20% to 400% with a mobile read-only view
05

工程实现

#
  1. 过程 01

    Separate durable objects from ephemeral presence

    背景
    Canvas objects and comments must persist, while cursors, selection, and active-user state update too frequently for the same storage path.
    方法
    Use Liveblocks storage for durable room data and presence for transient collaboration signals.
    结果
    Cursor feedback stays responsive, but synchronization code must coordinate two kinds of shared state.
  2. 过程 02

    Make rooms link-first and account-free

    背景
    Authentication would add friction before the multiplayer canvas proved useful.
    方法
    Generate a unique room URL and let collaborators enter directly.
    结果
    Sharing is immediate, but ownership, discovery, and access control remain intentionally limited.
06

实现细节

#

架构笔记

  • Fabric.js owns the canvas object model; Liveblocks owns the shared state.
  • Ephemeral cursor and user presence is separated from durable room storage and comment threads.
  • Shared history keeps undo/redo collaborative instead of treating every browser as an isolated editor.
  • Unique room identifiers make collaboration link-first and remove an authentication step from the prototype.

挑战

  • Synchronizing Fabric object mutations with durable multiplayer storage without creating feedback loops.
  • The mobile experience is intentionally read-only; the full editor is designed for pointer-and-keyboard input.
  • Automated headless verification reached the deployed room URL but did not render the canvas surface, so the case study does not claim cross-browser coverage beyond the documented implementation.
07

结果

#
“
A deployed, source-available multiplayer canvas with a notably broad prototype surface: presence, comments, shared history, layers, inspector tools, and three export formats.
08

规划与心得

#

复盘

  1. 01Multiplayer feels magical only when presence is instant and edits never fight.
  2. 02Separating ephemeral presence from durable storage keeps the canvas responsive.

下一步

  1. 01Restore reliable automated canvas rendering
  2. 02Add focused multiplayer integration tests
  3. 03Decide whether mobile editing belongs in scope

相关案例

Web 应用

Nimbus

A passwordless cloud workspace for organizing, sharing, beaming, and asking questions about your files.

Web 应用

M4rketView

A free, no-key crypto dashboard with live prices, resilient public-data fallbacks, local portfolios, alerts, and comparison tools.

上一篇Descent Into MadnessA published Unity WebGL dungeon shooter with procedural floors, sanity pressure, classes, bosses, loot, and fast-travel exploration.
返回全部作品
下一篇AI Agent ToolkitA personal Windows-first toolkit for local AI coding: PowerShell automation, Ollama, a Streamlit control center, and conservative repo workers.
返回档案
M4RKYUM4RKYUM4RKYUM4RKYUM4RKYUM4RKYUM4RKYUM4RKYU
始于 2024
ZhenXiao Mark YuZhenXiao Mark Yu
联系

看到什么有意思的?和我聊聊。

这是一个作品集,不是服务 · 但每一条留言我都会看 — 如果哪里让你有所触动,或者只想打个招呼,欢迎写信过来。

开启对话
频道开放

随时打个招呼 · 2026

--:--:--EST加拿大 安大略
  • 邮件
  • GitHub
  • dev.to
  • 领英
  • 推特 / X
  • Instagram
  • Facebook
  • YouTube
  • CodePen
  • Spotify
  • Snapchat

订阅

偶尔收到一封简讯

来自 m4rkyu.com 的笔记与日志——简短、标注日期、没有杂音。随时可退订。

作品

线上发布、游戏作品与视觉档案。

  • 项目
  • 游戏
  • 档案
  • 日志

资源

每日好用的工具与个人收藏的链接库。

  • 搜索
  • 最新
  • 工具
  • 链接
  • 笔记
  • 主题
  • 商店
RSSJSON Feed

工作室

背景、联系方式以及合作渠道。

  • 关于
  • 联系
  • 更新日志
  • 技术说明
  • 简历筹备中

社交

在常去的平台上找到我。

  • GitHub
  • dev.to
  • 领英
  • 推特 / X
  • Instagram
  • Facebook
  • YouTube
  • CodePen
  • Spotify
  • Snapchat
  • 邮件
© 2026 ZhenXiao Mark Yumarkyu0615@gmail.com
  • 邮件
  • GitHub
  • dev.to
  • 领英
  • 推特 / X
  • Instagram
  • Facebook
  • YouTube
  • CodePen
  • Spotify
  • Snapchat
隐私条款由 Next.js 16 · React 19 · Tailwind 4 构建