Con respecto a #1, acá tenés un par de archivos para empezar.

Tuve un rato libre y me pareció copado implementar lo discutido acá #1