// the find
mirayatech/excalidraw-clone
🥷 Excalidraw clone built with React and TypeScript.
A from-scratch Excalidraw clone built as a learning project, implementing canvas drawing with rough.js for the hand-drawn aesthetic. Covers the core interaction loop: draw, move, resize, undo/redo, pan, zoom. Explicitly not production software — the author says so plainly.
The utility functions are properly decomposed into single-responsibility files (adjust-element-coordinates, cursor-for-position, get-element-at-position) rather than one giant App.tsx blob. Both Vitest unit tests and Cypress e2e tests exist and cover each tool type individually, which is more discipline than most learning projects bother with. The useHistory hook is extracted cleanly, making undo/redo logic inspectable in isolation. Rough.js integration is a good choice — it handles the sketchy rendering so the author could focus on the interaction model.
Last commit was April 2024 and the author's own roadmap lists missing basics (eraser, circle, dark mode) with no sign of follow-through, so this is effectively abandoned. No persistence layer at all — refresh the tab and everything is gone. Responsiveness is explicitly skipped, which is fine for a learning project but means you can't actually use it on anything but a desktop. The `any` type issue the author flagged in their own TODO is still there, so TypeScript isn't doing real work in the rough.js element handling.