#15: introduce site reading API