SculptForge
ZBrush 스타일 조각으로 VFX·애니메이션·게임 제작
Drawstuff는 손그림 느낌의 다이어그램을 쉽게 그릴 수 있는 가상 협업 화이트보드 도구
Drawstuff is a virtual collaborative whiteboard tool that lets you easily sketch diagrams that have a hand-drawn feel to them. It's powered by Excalidraw and built with Next.js and Tailwind CSS.
디자인TypeScript · JavaScriptGitHub @EricTsai83온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기A cloud-synced whiteboard app built on Excalidraw, with end-to-end encrypted sharing and workspace management.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
A cloud-backed whiteboard built on Excalidraw.
Live app ·
Documentation
drawstuff combines a full-screen Excalidraw editor with cloud persistence, workspace organization,
encrypted sharing, real-time collaboration, and public read-only pages.
• Import, export, autosave, thumbnails, and attached binary assets
• Workspaces with scene search, filters, and categories
• Client-side compressed and AES-GCM-encrypted private share links
• End-to-end encrypted collaboration through a Cloudflare Durable Object gateway
• Public read-only pages at /p/[slug]
• English and Traditional Chinese UIREADME 전문 보기 ↗drawstuff is Excalidraw with an account: draw instantly without signing in, then keep your scenes in the cloud, organize them, share them, and edit them together in real time.
/p/[slug] with link previewsOnly share links are end-to-end encrypted. Collaboration rooms are protected by sign-in and access rules; see the threat model.
| Layer | Technology |
|---|---|
| Framework | Next.js 16, React 19 |
| Drawing engine | Excalidraw |
| API | tRPC v11 |
| Database | PostgreSQL, Drizzle ORM |
| Authentication | Better Auth, Google OAuth |
| Storage | UploadThing |
| UI | Tailwind CSS v4, Base UI, Sonner |
| Realtime | Cloudflare Durable Objects |
git clone https://github.com/EricTsai83/drawstuff.git
cd drawstuff
pnpm install
cp apps/web/.env.example apps/web/.env
Fill in apps/web/.env, then initialize the database and start the web app:
pnpm db:push
pnpm dev
Open http://localhost:3000. The collaboration Worker runs separately from pnpm dev; see
apps/collaboration-do/README.md for its configuration and
deployment workflow.
The complete template is apps/web/.env.example, and the validation schema is apps/web/src/env.ts.
| Purpose | Variables |
|---|---|
| Database | POSTGRES_URL, POSTGRES_URL_NON_POOLING |
| Authentication | BETTER_AUTH_SECRET, BETTER_AUTH_URL, GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET |
| Storage | UPLOADTHING_TOKEN |
| Public origin | NEXT_PUBLIC_BASE_URL |
| Collaboration | COLLAB_IDENTITY_SECRET, COLLAB_AUTHORITY_SECRET, COLLAB_ADAPTER_SECRET, COLLAB_CONTROL_URL |
| Rate limiting | UPSTASH_REDIS_REST_URL, UPSTASH_REDIS_REST_TOKEN |
| Maintenance | CRON_SECRET, CLEANUP_OWNER_EMAIL |
The three collaboration secrets must each be at least 32 characters and match the Worker secrets of
the same name (full list).
BETTER_AUTH_URL and NEXT_PUBLIC_BASE_URL must be the same origin, and Google OAuth needs
<origin>/api/auth/callback/google as an authorized redirect URI.
apps/
web/ # Next.js UI, tRPC API, and persistence
collaboration-do/ # Cloudflare Worker and room/lifecycle Durable Objects
packages/
excalidraw-adapter/ # The only package allowed to import Excalidraw
collaboration/ # Transport-neutral protocol, authority contracts, codecs, and recovery
Dependencies flow one way: the web app consumes both shared packages, while the Worker consumes only the server-safe collaboration entries. See the architecture contract for ownership rules.
| Command | Purpose |
|---|---|
pnpm dev | Start the web development server |
pnpm build | Build all workspaces |
pnpm check | Run formatting, lint, types, tests, and dead-code checks |
pnpm lint | Run ESLint |
pnpm typecheck | Run TypeScript checks |
pnpm test | Run unit tests |
pnpm check:affected | Lint, typecheck, and test only packages changed vs main |
pnpm --filter @drawstuff/web test:changed | Run only web tests that import files changed vs main |
pnpm test:e2e | Run Playwright tests |
pnpm db:push | Push the Drizzle schema to the configured database |
pnpm admin:bootstrap --email [email protected] | Provision the first operator |
Cloudflare commands such as pnpm cf:preflight, pnpm cf:deploy, and pnpm cf:smoke are described
in the Worker README.
pnpm admin:bootstrap --email <you>; use /admin afterwards
(admin runbook).COLLAB_ROOMS_DISABLED kill switch are in the
Worker deployment runbook.POST /api/maintenance/cleanup with Authorization: Bearer <CRON_SECRET>; review
its retention behavior before enabling the default Vercel schedule (30 3 * * 1).Start with the documentation guide for architecture contracts, ADRs, operations, performance budgets, and reusable system-design notes.