Mawla / Agency-Starter-Framework

GNU Affero General Public License v3.0
51 stars 19 forks source link

Agency Starter Framework!

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

Deploy with Vercel

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/

Features:

In CMS theming

https://github.com/Mawla/Agency-Starter-Framework/assets/1926968/6ef5fa6d-1e8c-4258-8124-92f4024d4563

Block Building System

https://github.com/Mawla/Agency-Starter-Framework/assets/1926968/26bde983-d3d5-40ea-8e27-be0811e4422d

Versatile Page Building

https://github.com/Mawla/Agency-Starter-Framework/assets/1926968/7095e1f6-4147-44d2-88dd-e9c80bb959d4

Scalability

https://github.com/Mawla/Agency-Starter-Framework/assets/1926968/2365dd3f-f0f5-417f-ac0f-71455d3bae29

image

> yarn dev # next.js localhost:3000
> yarn cms # sanity localhost:3333
> yarn storybook

Get started

See /docs for some more information.

App flow

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>…"}

...