WeeWikiPaint

Minimum Marketable Features:
+ marketing home page (episodes 1-32)
+ single-user painting on home page (episodes 33-200)
+ replace home page with professional design (episodes 201-321)
+ IE 11 support (and get rid of IE 8) (episodes 322-324)
+ Android support (episodes 325-327)
+ iOS 8 support (episode 328)
+ replace 404 page with professional design (episodes 329-369)
* collaborative painting (episode 370+)
- multiple servers
- responsive design
- accessibility
- polish
  - clear button retains focus when drawing (IE8, 9, Chrome)
  - drawing glitches occur when exiting drawing area that is flush against side of browser
  - one-pixel gap on right side of drawing area (Firefox, others unknown)
  - favicon
	- 'clear' button flashes rather than depressing (iOS)
	- 'clear' button depresses diagonally rather than vertically (IE 9, IE 11)
- multiple painting/erasing tools
- save the pages (persistence / databases)
- wiki-fy the pages
- more complex painting?
- more collaborative features?

User Stories to finish current MMF:
- reconnect and resync when client is disconnected/reconnected
- show disconnection warning / other UX when client is disconnected
- handle server reset smoothly (clear the drawing? re-sync to browsers? not persistence/DB)
- handle packet loss (What packet loss is possible? TCP handles this? What about unstable cellular connections?)
	- at least handle glitches in Socket.IO where we don't receive a message

- version synchronization across client/server
- collision-handling / conflicts / race conditions
- load management
- server monitoring / error handling
- security (handling bad data, denial of service attacks)
	- nsp, snyk
- performance optimization
	- garbage collection pauses
	- network tick rate is currently unbounded
	- event repo stores everything, no culling
- bug: shows ghost pointer on other clients when tapping 'clear' button on mobile browsers
	- see onTouchClick_spike branch (but note document.elementFromPoint may not be testable on IE 11)
	- retire support for IE 11 first?
- bug: ghost pointers block other actions
	- e.g., starting a drag on top of a ghost pointer drags the pointer instead of drawing a line
	- e.g., clicking clear button if ghost pointer is in the way prevents button from clicking
	- investigate 'pointer-events: none' CSS
- polish:
	- make 'clear' button depress when clear event received?
	- when user tabs away, tabs back, then clicks, the mouse pointer doesn't re-appear

Engineering Tasks:

To Do on current task: