SPA framework