├── api
├── src
│ ├── api
│ │ ├── .gitkeep
│ │ └── page
│ │ │ ├── routes
│ │ │ └── page.js
│ │ │ ├── services
│ │ │ └── page.js
│ │ │ ├── controllers
│ │ │ └── page.js
│ │ │ └── content-types
│ │ │ └── page
│ │ │ └── schema.json
│ ├── extensions
│ │ └── .gitkeep
│ ├── components
│ │ └── post
│ │ │ ├── rich-text.json
│ │ │ ├── quote.json
│ │ │ └── image.json
│ ├── admin
│ │ ├── webpack.config.example.js
│ │ └── app.example.js
│ └── index.js
├── public
│ ├── uploads
│ │ └── .gitkeep
│ └── robots.txt
├── database
│ └── migrations
│ │ └── .gitkeep
├── .yarnrc.yml
├── .eslintignore
├── favicon.png
├── config
│ ├── api.js
│ ├── admin.js
│ ├── server.js
│ ├── middlewares.js
│ └── database.js
├── .editorconfig
├── .eslintrc
├── package.json
├── .gitignore
└── README.md
├── client
├── .yarnrc.yml
├── .gitignore
├── tsconfig.json
├── layouts
│ └── default.vue
├── package.json
├── nuxt.config.ts
├── components
│ ├── footer.vue
│ ├── hero.vue
│ ├── NavBar.vue
│ └── ContentGrid.vue
├── query
│ └── content.js
├── README.md
├── app.vue
└── pages
│ ├── index.vue
│ ├── about.vue
│ ├── team.vue
│ └── testimonials.vue
├── .gitignore
├── screenshot.png
└── README.md
/api/src/api/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/api/public/uploads/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/api/src/extensions/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/api/database/migrations/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/api/.yarnrc.yml:
--------------------------------------------------------------------------------
1 | nodeLinker: node-modules
2 |
--------------------------------------------------------------------------------
/client/.yarnrc.yml:
--------------------------------------------------------------------------------
1 | nodeLinker: node-modules
2 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | vscode
2 | .env
3 | .yarn
4 | .DS_Store
--------------------------------------------------------------------------------
/api/.eslintignore:
--------------------------------------------------------------------------------
1 | .cache
2 | build
3 | **/node_modules/**
4 | .env
--------------------------------------------------------------------------------
/screenshot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/malgamves/strapi-dynamic-zones-company-site/HEAD/screenshot.png
--------------------------------------------------------------------------------
/api/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/malgamves/strapi-dynamic-zones-company-site/HEAD/api/favicon.png
--------------------------------------------------------------------------------
/client/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | *.log*
3 | .nuxt
4 | .nitro
5 | .cache
6 | .output
7 | .env
8 | dist
9 | .yarn
10 |
--------------------------------------------------------------------------------
/client/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | // https://nuxt.com/docs/guide/concepts/typescript
3 | "extends": "./.nuxt/tsconfig.json"
4 | }
5 |
--------------------------------------------------------------------------------
/api/config/api.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | rest: {
3 | defaultLimit: 25,
4 | maxLimit: 100,
5 | withCount: true,
6 | },
7 | };
8 |
--------------------------------------------------------------------------------
/api/public/robots.txt:
--------------------------------------------------------------------------------
1 | # To prevent search engines from seeing the site altogether, uncomment the next two lines:
2 | # User-Agent: *
3 | # Disallow: /
4 |
--------------------------------------------------------------------------------
/client/layouts/default.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
Hmmm
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/api/config/admin.js:
--------------------------------------------------------------------------------
1 | module.exports = ({ env }) => ({
2 | auth: {
3 | secret: env('ADMIN_JWT_SECRET'),
4 | },
5 | apiToken: {
6 | salt: env('API_TOKEN_SALT'),
7 | },
8 | });
9 |
--------------------------------------------------------------------------------
/api/config/server.js:
--------------------------------------------------------------------------------
1 | module.exports = ({ env }) => ({
2 | host: env('HOST', '0.0.0.0'),
3 | port: env.int('PORT', 1337),
4 | app: {
5 | keys: env.array('APP_KEYS'),
6 | },
7 | });
8 |
--------------------------------------------------------------------------------
/api/src/api/page/routes/page.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | /**
4 | * page router
5 | */
6 |
7 | const { createCoreRouter } = require('@strapi/strapi').factories;
8 |
9 | module.exports = createCoreRouter('api::page.page');
10 |
--------------------------------------------------------------------------------
/api/src/api/page/services/page.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | /**
4 | * page service
5 | */
6 |
7 | const { createCoreService } = require('@strapi/strapi').factories;
8 |
9 | module.exports = createCoreService('api::page.page');
10 |
--------------------------------------------------------------------------------
/api/src/api/page/controllers/page.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | /**
4 | * page controller
5 | */
6 |
7 | const { createCoreController } = require('@strapi/strapi').factories;
8 |
9 | module.exports = createCoreController('api::page.page');
10 |
--------------------------------------------------------------------------------
/api/config/middlewares.js:
--------------------------------------------------------------------------------
1 | module.exports = [
2 | 'strapi::errors',
3 | 'strapi::security',
4 | 'strapi::cors',
5 | 'strapi::poweredBy',
6 | 'strapi::logger',
7 | 'strapi::query',
8 | 'strapi::body',
9 | 'strapi::session',
10 | 'strapi::favicon',
11 | 'strapi::public',
12 | ];
13 |
--------------------------------------------------------------------------------
/api/src/components/post/rich-text.json:
--------------------------------------------------------------------------------
1 | {
2 | "collectionName": "components_post_rich_texts",
3 | "info": {
4 | "displayName": "RichText",
5 | "icon": "bacon"
6 | },
7 | "options": {},
8 | "attributes": {
9 | "richText": {
10 | "type": "richtext"
11 | }
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/api/config/database.js:
--------------------------------------------------------------------------------
1 | const path = require('path');
2 |
3 | module.exports = ({ env }) => ({
4 | connection: {
5 | client: 'sqlite',
6 | connection: {
7 | filename: path.join(__dirname, '..', env('DATABASE_FILENAME', '.tmp/data.db')),
8 | },
9 | useNullAsDefault: true,
10 | },
11 | });
12 |
--------------------------------------------------------------------------------
/api/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*]
4 | indent_style = space
5 | indent_size = 2
6 | end_of_line = lf
7 | charset = utf-8
8 | trim_trailing_whitespace = true
9 | insert_final_newline = true
10 |
11 | [{package.json,*.yml}]
12 | indent_style = space
13 | indent_size = 2
14 |
15 | [*.md]
16 | trim_trailing_whitespace = false
17 |
--------------------------------------------------------------------------------
/api/src/admin/webpack.config.example.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | /* eslint-disable no-unused-vars */
4 | module.exports = (config, webpack) => {
5 | // Note: we provide webpack above so you should not `require` it
6 | // Perform customizations to webpack config
7 | // Important: return the modified config
8 | return config;
9 | };
10 |
--------------------------------------------------------------------------------
/api/src/components/post/quote.json:
--------------------------------------------------------------------------------
1 | {
2 | "collectionName": "components_post_quotes",
3 | "info": {
4 | "displayName": "Quote",
5 | "icon": "align-left",
6 | "description": ""
7 | },
8 | "options": {},
9 | "attributes": {
10 | "quote": {
11 | "type": "text"
12 | },
13 | "quoter": {
14 | "type": "string"
15 | }
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/client/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "private": true,
3 | "scripts": {
4 | "build": "nuxt build",
5 | "dev": "nuxt dev",
6 | "generate": "nuxt generate",
7 | "cleanup": "nuxt cleanup",
8 | "preview": "nuxt preview",
9 | "postinstall": "nuxt prepare"
10 | },
11 | "devDependencies": {
12 | "@nuxt/image-edge": "^1.0.0-27954023.4cee565",
13 | "@nuxtjs/strapi": "^1.6.3",
14 | "nuxt": "3.2.2"
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/client/nuxt.config.ts:
--------------------------------------------------------------------------------
1 | // https://nuxt.com/docs/api/configuration/nuxt-config
2 | export default defineNuxtConfig({
3 | modules: [
4 | '@nuxtjs/strapi',
5 | '@nuxt/image-edge'
6 | ],
7 | strapi: {
8 |
9 | url: process.env.STRAPI_URL || 'http://localhost:1337',
10 | prefix: '/api',
11 | version: 'v4',
12 | cookie: {},
13 | cookieName: 'strapi_jwt',
14 | }
15 |
16 | })
17 |
--------------------------------------------------------------------------------
/api/src/components/post/image.json:
--------------------------------------------------------------------------------
1 | {
2 | "collectionName": "components_post_images",
3 | "info": {
4 | "displayName": "Image",
5 | "icon": "chalkboard"
6 | },
7 | "options": {},
8 | "attributes": {
9 | "caption": {
10 | "type": "string"
11 | },
12 | "image": {
13 | "allowedTypes": [
14 | "images",
15 | "files",
16 | "videos",
17 | "audios"
18 | ],
19 | "type": "media",
20 | "multiple": false
21 | }
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/api/src/index.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | module.exports = {
4 | /**
5 | * An asynchronous register function that runs before
6 | * your application is initialized.
7 | *
8 | * This gives you an opportunity to extend code.
9 | */
10 | register(/*{ strapi }*/) {},
11 |
12 | /**
13 | * An asynchronous bootstrap function that runs before
14 | * your application gets started.
15 | *
16 | * This gives you an opportunity to set up your data model,
17 | * run jobs, or perform some special logic.
18 | */
19 | bootstrap(/*{ strapi }*/) {},
20 | };
21 |
--------------------------------------------------------------------------------
/api/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "parser": "babel-eslint",
3 | "extends": "eslint:recommended",
4 | "env": {
5 | "commonjs": true,
6 | "es6": true,
7 | "node": true,
8 | "browser": false
9 | },
10 | "parserOptions": {
11 | "ecmaFeatures": {
12 | "experimentalObjectRestSpread": true,
13 | "jsx": false
14 | },
15 | "sourceType": "module"
16 | },
17 | "globals": {
18 | "strapi": true
19 | },
20 | "rules": {
21 | "indent": ["error", 2, { "SwitchCase": 1 }],
22 | "linebreak-style": ["error", "unix"],
23 | "no-console": 0,
24 | "quotes": ["error", "single"],
25 | "semi": ["error", "always"]
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/api/src/api/page/content-types/page/schema.json:
--------------------------------------------------------------------------------
1 | {
2 | "kind": "collectionType",
3 | "collectionName": "pages",
4 | "info": {
5 | "singularName": "page",
6 | "pluralName": "pages",
7 | "displayName": "Page"
8 | },
9 | "options": {
10 | "draftAndPublish": true
11 | },
12 | "pluginOptions": {},
13 | "attributes": {
14 | "Title": {
15 | "type": "string"
16 | },
17 | "Description": {
18 | "type": "text"
19 | },
20 | "pageZone": {
21 | "type": "dynamiczone",
22 | "components": [
23 | "post.image",
24 | "post.quote",
25 | "post.rich-text"
26 | ]
27 | }
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/client/components/footer.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
9 |
10 |
11 |
16 |
17 |
20 |
21 |
--------------------------------------------------------------------------------
/api/src/admin/app.example.js:
--------------------------------------------------------------------------------
1 | const config = {
2 | locales: [
3 | // 'ar',
4 | // 'fr',
5 | // 'cs',
6 | // 'de',
7 | // 'dk',
8 | // 'es',
9 | // 'he',
10 | // 'id',
11 | // 'it',
12 | // 'ja',
13 | // 'ko',
14 | // 'ms',
15 | // 'nl',
16 | // 'no',
17 | // 'pl',
18 | // 'pt-BR',
19 | // 'pt',
20 | // 'ru',
21 | // 'sk',
22 | // 'sv',
23 | // 'th',
24 | // 'tr',
25 | // 'uk',
26 | // 'vi',
27 | // 'zh-Hans',
28 | // 'zh',
29 | ],
30 | };
31 |
32 | const bootstrap = (app) => {
33 | console.log(app);
34 | };
35 |
36 | export default {
37 | config,
38 | bootstrap,
39 | };
40 |
--------------------------------------------------------------------------------
/client/query/content.js:
--------------------------------------------------------------------------------
1 |
2 | export const contentQuery = `
3 | query Pages($Page: String!){
4 | pages: pages(filters: { Title: { eq: $Page }}) {
5 | data {
6 | attributes {
7 | Title
8 | Description
9 | pageZone {
10 | __typename
11 | ... on ComponentPostImage {
12 | caption
13 | image {
14 | data {
15 | attributes {
16 | url
17 | }
18 | }
19 | }
20 | }
21 | ... on ComponentPostQuote {
22 | quote
23 | quoter
24 | }
25 | ... on ComponentPostRichText {
26 | richText
27 | }
28 | }
29 | }
30 | }
31 | }
32 | }`
--------------------------------------------------------------------------------
/api/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "api",
3 | "private": true,
4 | "version": "0.1.0",
5 | "description": "A Strapi application",
6 | "scripts": {
7 | "develop": "strapi develop",
8 | "start": "strapi start",
9 | "build": "strapi build",
10 | "strapi": "strapi"
11 | },
12 | "dependencies": {
13 | "@strapi/plugin-graphql": "4.5.2",
14 | "@strapi/plugin-i18n": "4.5.2",
15 | "@strapi/plugin-users-permissions": "4.5.2",
16 | "@strapi/strapi": "4.5.2",
17 | "better-sqlite3": "7.4.6"
18 | },
19 | "author": {
20 | "name": "A Strapi developer"
21 | },
22 | "strapi": {
23 | "uuid": "a98dc7c2-dac6-4652-a5db-ad1497faaacf"
24 | },
25 | "engines": {
26 | "node": ">=14.19.1 <=18.x.x",
27 | "npm": ">=6.0.0"
28 | },
29 | "license": "MIT"
30 | }
31 |
--------------------------------------------------------------------------------
/client/README.md:
--------------------------------------------------------------------------------
1 | # Nuxt 3 Minimal Starter
2 |
3 | Look at the [Nuxt 3 documentation](https://nuxt.com/docs/getting-started/introduction) to learn more.
4 |
5 | ## Setup
6 |
7 | Make sure to install the dependencies:
8 |
9 | ```bash
10 | # yarn
11 | yarn install
12 |
13 | # npm
14 | npm install
15 |
16 | # pnpm
17 | pnpm install --shamefully-hoist
18 | ```
19 |
20 | ## Development Server
21 |
22 | Start the development server on http://localhost:3000
23 |
24 | ```bash
25 | npm run dev
26 | ```
27 |
28 | ## Production
29 |
30 | Build the application for production:
31 |
32 | ```bash
33 | npm run build
34 | ```
35 |
36 | Locally preview production build:
37 |
38 | ```bash
39 | npm run preview
40 | ```
41 |
42 | Check out the [deployment documentation](https://nuxt.com/docs/getting-started/deployment) for more information.
43 |
--------------------------------------------------------------------------------
/client/components/hero.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
13 |
14 |
24 |
25 |
--------------------------------------------------------------------------------
/client/app.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
12 |
13 |
62 |
--------------------------------------------------------------------------------
/client/pages/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/api/.gitignore:
--------------------------------------------------------------------------------
1 | ############################
2 | # OS X
3 | ############################
4 |
5 | .DS_Store
6 | .AppleDouble
7 | .LSOverride
8 | Icon
9 | .Spotlight-V100
10 | .Trashes
11 | ._*
12 |
13 |
14 | ############################
15 | # Linux
16 | ############################
17 |
18 | *~
19 |
20 |
21 | ############################
22 | # Windows
23 | ############################
24 |
25 | Thumbs.db
26 | ehthumbs.db
27 | Desktop.ini
28 | $RECYCLE.BIN/
29 | *.cab
30 | *.msi
31 | *.msm
32 | *.msp
33 |
34 |
35 | ############################
36 | # Packages
37 | ############################
38 |
39 | *.7z
40 | *.csv
41 | *.dat
42 | *.dmg
43 | *.gz
44 | *.iso
45 | *.jar
46 | *.rar
47 | *.tar
48 | *.zip
49 | *.com
50 | *.class
51 | *.dll
52 | *.exe
53 | *.o
54 | *.seed
55 | *.so
56 | *.swo
57 | *.swp
58 | *.swn
59 | *.swm
60 | *.out
61 | *.pid
62 |
63 |
64 | ############################
65 | # Logs and databases
66 | ############################
67 |
68 | .tmp
69 | *.log
70 | *.sql
71 | *.sqlite
72 | *.sqlite3
73 |
74 |
75 | ############################
76 | # Misc.
77 | ############################
78 |
79 | *#
80 | ssl
81 | .idea
82 | nbproject
83 | public/uploads/*
84 | !public/uploads/.gitkeep
85 |
86 | ############################
87 | # Node.js
88 | ############################
89 |
90 | lib-cov
91 | lcov.info
92 | pids
93 | logs
94 | results
95 | node_modules
96 | .node_history
97 |
98 | ############################
99 | # Tests
100 | ############################
101 |
102 | testApp
103 | coverage
104 |
105 | ############################
106 | # Strapi
107 | ############################
108 |
109 | .env
110 | license.txt
111 | exports
112 | *.cache
113 | dist
114 | build
115 | .strapi-updater.json
116 |
--------------------------------------------------------------------------------
/client/pages/about.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/client/pages/team.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/client/pages/testimonials.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/client/components/NavBar.vue:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
19 |
24 |
25 |
28 |
29 |
30 |
--------------------------------------------------------------------------------
/client/components/ContentGrid.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
{{ zone.richText }}
7 |
8 |
9 |
10 |
11 |
{{ zone.quote }}
12 |
by {{ zone.quoter}}
13 |
14 |
15 |
16 |
17 |
18 |
{{ zone.caption }}
19 |
20 |
21 |
22 |
23 |
24 |
33 |
34 |
44 |
45 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Company Site using [Dynamic Zones](https://strapi.io/blog/release-beta-18-dynamic-zones) built with Strapi
2 |
3 | This application helps you get started building a company website with modular content thanks to Dynamic Zones.
4 |
5 | That means you can make changes and add components in your Strapi backend without having to change your frontend code.
6 | It is built with Nuxt and Strapi. Feel free to fork, edit and customise it for your own use.
7 |
8 | 
9 |
10 | ## Features
11 | - Minimal design
12 | - Dynamic Zones for modular content
13 | - GraphQL first approach
14 |
15 | ## Content Model
16 | - `Title` : Text
17 | - `Description` : Text
18 | - `Published` : Date
19 | - `pageZone` : Dynamic Zone
20 | - `Quote` : Component
21 | - `quote` : Text
22 | - `quoter` : Text
23 | - `Image` : Component
24 | - `caption` : Text
25 | - `image` : Media
26 | - `RichText` : Component
27 | - `richText` : richText
28 |
29 |
30 | ## In the works
31 | - Fixing Navbar on smaller screens
32 |
33 | ## Pages
34 | - A home page :`/`
35 | - An about us page :`/about`
36 | - A team page :`/team`
37 | - A testimonials page :`/testimonials`
38 |
39 | ## Getting Started
40 |
41 | To get started clone the repo
42 | ```bash
43 | git clone https://github.com/malgamves/strapi-dynamic-zones-company-site.git
44 | cd strapi-dynamic-zones-company-site
45 | ```
46 |
47 | The project has two folders `frontend` for your Nuxt frontend and `backend` for your Strapi backend.
48 |
49 |
50 | ### Frontend
51 | The frontend is built with Nuxt. This sets up your frontend.
52 | ```bash
53 | cd frontend
54 |
55 | yarn install
56 | ```
57 |
58 | Then run `yarn dev` to start your frontend server.
59 |
60 | ### Backend
61 | The backend is built with Strapi. This sets up your backend.
62 | ```bash
63 | cd backend
64 |
65 | yarn install
66 | ```
67 |
68 | Then run `yarn develop` to start your backend server.
69 |
70 |
71 | ## Deployment
72 |
73 | You can deploy your frontend by following the Nuxt [deployment guide](https://nuxtjs.org/guide/commands/#production-deployment).
74 |
75 | For your backend, Strapi has numerous options in it's [deployment guide](https://strapi.io/documentation/3.0.0-beta.x/getting-started/deployment.html).
76 |
77 |
78 | ## Contributing
79 |
80 | Feel free to send over a PR for any changes you think should be included.
81 |
--------------------------------------------------------------------------------
/api/README.md:
--------------------------------------------------------------------------------
1 | # 🚀 Getting started with Strapi
2 |
3 | Strapi comes with a full featured [Command Line Interface](https://docs.strapi.io/developer-docs/latest/developer-resources/cli/CLI.html) (CLI) which lets you scaffold and manage your project in seconds.
4 |
5 | ### `develop`
6 |
7 | Start your Strapi application with autoReload enabled. [Learn more](https://docs.strapi.io/developer-docs/latest/developer-resources/cli/CLI.html#strapi-develop)
8 |
9 | ```
10 | npm run develop
11 | # or
12 | yarn develop
13 | ```
14 |
15 | ### `start`
16 |
17 | Start your Strapi application with autoReload disabled. [Learn more](https://docs.strapi.io/developer-docs/latest/developer-resources/cli/CLI.html#strapi-start)
18 |
19 | ```
20 | npm run start
21 | # or
22 | yarn start
23 | ```
24 |
25 | ### `build`
26 |
27 | Build your admin panel. [Learn more](https://docs.strapi.io/developer-docs/latest/developer-resources/cli/CLI.html#strapi-build)
28 |
29 | ```
30 | npm run build
31 | # or
32 | yarn build
33 | ```
34 |
35 | ## ⚙️ Deployment
36 |
37 | Strapi gives you many possible deployment options for your project. Find the one that suits you on the [deployment section of the documentation](https://docs.strapi.io/developer-docs/latest/setup-deployment-guides/deployment.html).
38 |
39 | ## 📚 Learn more
40 |
41 | - [Resource center](https://strapi.io/resource-center) - Strapi resource center.
42 | - [Strapi documentation](https://docs.strapi.io) - Official Strapi documentation.
43 | - [Strapi tutorials](https://strapi.io/tutorials) - List of tutorials made by the core team and the community.
44 | - [Strapi blog](https://docs.strapi.io) - Official Strapi blog containing articles made by the Strapi team and the community.
45 | - [Changelog](https://strapi.io/changelog) - Find out about the Strapi product updates, new features and general improvements.
46 |
47 | Feel free to check out the [Strapi GitHub repository](https://github.com/strapi/strapi). Your feedback and contributions are welcome!
48 |
49 | ## ✨ Community
50 |
51 | - [Discord](https://discord.strapi.io) - Come chat with the Strapi community including the core team.
52 | - [Forum](https://forum.strapi.io/) - Place to discuss, ask questions and find answers, show your Strapi project and get feedback or just talk with other Community members.
53 | - [Awesome Strapi](https://github.com/strapi/awesome-strapi) - A curated list of awesome things related to Strapi.
54 |
55 | ---
56 |
57 | 🤫 Psst! [Strapi is hiring](https://strapi.io/careers).
58 |
--------------------------------------------------------------------------------