first pass at what I think the back-end data structures could be