Building a sketch pad in a browser sounds like a one-evening job. Then someone tries it with an Apple Pencil and the pressure data is gone , because the code listens for mousemove . Or with a mouse and the line is half as thick as it should be, because it reads e.pressure blindly and a mouse reports 0.5 . Or with a fast hand on an iPad and the line is jagged , because the browser only emits one pointermove per 60 Hz frame and the Apple Pencil samples at 240 Hz. This 300-line page solves all three. 🌐 Demo : https://sen.ltd/portfolio/canvas-notebook/ 📦 GitHub : https://github.com/sen-ltd/canvas-notebook Why drop MouseEvent / TouchEvent entirely The web's input APIs grew in three layers: MouseEvent ( mousedown / mousemove / mouseup ) — mouse only. TouchEvent ( touchstart / touchmove / touchend ) — touch only, multi-finger. PointerEvent ( pointerdown / pointermove / pointerup ) — the unification, plus a stylus story.…