single page application framework