An Agency Starter framework using Sanity & NextJS.
A page builder with a no code experience The flexibility to change site structure 40 unique blocks pre-configured to look awesome responsively
To try out with images download this zip and use import like below.
To try out the demo site without images:
sanity dataset import production-1720544495.tar.gz production
Example Website: https://sgw-template-saas-1.vercel.app/
screen-20240614-190509.mp4
- Empowering page building for common page types and comprehensive content variety
- e.g. content pages, landing pages, blogs, case studies, pricing, press releases etc
- 20 Common blocks (hero, feature list, pricing plan, card grid, article, faq, logo cloud, video etc)
- Ready-made presets, or create your own
SaaS.Growth.Websites.video.mp4
- Global accessibility with Multi-language Support
- Seamless page linking, guaranteed 0 broken internal links
- Reusable document collections like pricing plans, people, faq's and testimonials
- Advanced tagging and Algolia search
- Fast live previews
- Flexible theming from CMS
SaaS.Growth.Websites.Clicks.mp4
- Unlimited pages
- Fine grained SEO control, opengraph images, sitemaps, redirects, GTM integration
- Effortless Deployment
- Mobile first design, fully responsive
- Fast load times, optimised images
- Copy blocks between pages
- Youtube, Vimeo and script embeds
Features.SaaS.Growth.mp4
> yarn dev # next.js localhost:3000
> yarn cms # sanity localhost:3333
> yarn storybook
Get started
-
yarn dev
runs next.js -
yarn cms
runs sanity -
yarn storybook
runs storybook -
yarn test
runs tests -
yarn create-page
runs the cli to add a page -
yarn create-block
runs the cli to create a block
See /docs for some more information.
graph TD
SCHEMAS["Sanity schemas<br>/studio"]-->CMS
CMS[(Sanity CMS)]-->|single catch all route|DATA{"[...slug.tsx] <br>getStaticProps"}
PREVIEW_MODE((live preview? fa:fa-spinner))--->CMS
DATA -->|"get sitemap<br>(all routes)"| QUERY_SITEMAP[sitemap.ts]-->CATCH_ALL_RENDER
DATA -->|"get page content<br>(all blocks)"| QUERY_PAGE[page.ts]-->CATCH_ALL_RENDER
DATA -->|get config| QUERY_CONFIG[config.ts]-->CATCH_ALL_RENDER
DATA -->|get navigation| QUERY_NAV[navigation.ts] -->CATCH_ALL_RENDER
DATA -->|get footer| QUERY_FOOTER[footer.ts] -->CATCH_ALL_RENDER
CATCH_ALL_RENDER{"[...slug.tsx]"} -->RENDER
CATCH_ALL_RENDER-->PREVIEW_MODE
RENDER -->RENDER_BLOCKS
RENDER_BLOCKS[BlockBuilder.tsx]-->BLOCK
BLOCK[Block.tsx<br>block.schema.tsx<br>block.query.tsx<br>block.test.tsx<br>block.stories.tsx<br>block.options.ts]-->PAGE
PAGE{"<br>BROWSER<br>…"}
...