SculptForge
ZBrush-style sculpting for VFX, animation and games. VFX Reference Platform CY2026 and CY2027 builds, OpenUSD, a Python API and Send to Unreal. Free built-in AI: describe a brush and get it, or turn a
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.
DesignTypeScript · JavaScriptGitHub @EricTsai83OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
A cloud-synced whiteboard app built on Excalidraw, with end-to-end encrypted sharing and workspace management.
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
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 UIRead the full README ↗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.