diff --git a/examples/getting-started/.eslintrc.js b/examples/getting-started/.eslintrc.js
new file mode 100644
index 0000000..cbbe2ca
--- /dev/null
+++ b/examples/getting-started/.eslintrc.js
@@ -0,0 +1,22 @@
+module.exports = {
+ parserOptions: {
+ sourceType: 'module',
+ ecmaFeatures: {
+ jsx: true,
+ },
+ },
+ env: {
+ node: true,
+ es2021: true,
+ },
+ extends: ['eslint:recommended', 'prettier', 'plugin:react/recommended'],
+ rules: {
+ 'react/react-in-jsx-scope': 'off',
+ 'react/prop-types': 'off',
+ },
+ settings: {
+ react: {
+ version: '18.1',
+ },
+ },
+};
diff --git a/examples/getting-started/.gitignore b/examples/getting-started/.gitignore
new file mode 100644
index 0000000..b1ecb93
--- /dev/null
+++ b/examples/getting-started/.gitignore
@@ -0,0 +1,3 @@
+node_modules/
+hubspot.config.yml
+dist
diff --git a/examples/getting-started/.node-version b/examples/getting-started/.node-version
new file mode 100644
index 0000000..8b0beab
--- /dev/null
+++ b/examples/getting-started/.node-version
@@ -0,0 +1 @@
+20.11.0
diff --git a/examples/getting-started/.prettierrc b/examples/getting-started/.prettierrc
new file mode 100644
index 0000000..dc75c8a
--- /dev/null
+++ b/examples/getting-started/.prettierrc
@@ -0,0 +1,6 @@
+{
+ "trailingComma": "all",
+ "tabWidth": 2,
+ "semi": true,
+ "singleQuote": true
+}
diff --git a/examples/getting-started/README.md b/examples/getting-started/README.md
new file mode 100644
index 0000000..235588a
--- /dev/null
+++ b/examples/getting-started/README.md
@@ -0,0 +1,99 @@
+# Getting Started Example
+
+The getting started example within this directory covers a variety of key features/components of working with CMS React within a HubSpot website. This guide outlines the specifics of using CMS React primitives such as Modules, Fields, and Islands, as well as integrating third-party dependencies, styling, assets, and setting up local development tooling for your project.
+
+## Setup
+
+### Environment
+
+To set up your development environment to work with CMS React, you’ll need the following:
+
+- A HubSpot account with CMS Free, Starter, Pro, or Enterprise access
+- Node.js v18.0 or higher and the associated version of NPM
+
+## Creating and Deploying a CMS React Project
+
+### 1. Clone the Repo
+
+First, clone the CMS React repository:
+
+```bash
+git clone https://github.com/HubSpot/cms-react.git
+```
+
+CMS React projects have a 3 significant directories:
+
+- `getting-started-project`: The HubSpot project directory that gets uploaded via the Projects system to build and deploy your CMS React code found in the `/src` directory.
+- `getting-started-project/src`: A package inside your project directory containing all your assets, styles, components, modules, islands, and any local development tooling you need, such as ESLint, Prettier, TypeScript, etc.
+- `getting-started-theme`: This is where your HubL templates and theme configuration lives.
+
+At the root of this example, you will configure any local dev tooling you want, such as ESLint, Prettier, TypeScript, etc.
+
+### 2. Install Dependencies
+
+Navigate to the `cms-react/examples/getting-started` directory in your terminal and run:
+
+```bash
+npm install
+```
+
+This will install all the local development tooling you need, including `@hubspot/cli`, `@hubspot/cms-dev-server`, and any other dev tooling you configured.
+
+### 3. Local Development
+
+To run this example project locally, navigate to the `getting-started-project/src` directory and run:
+
+```bash
+npm run start
+```
+
+Then navigate to [http://hslocal.net:3000](http://hslocal.net:3000) to see an index page that links to all your modules.
+
+### 4. Uploading and Deploying on HubSpot
+
+Run `hs init` from the root of the repository to configure it to upload to your HubSpot account using your personal access key. When setting up JavaScript assets for the first time, you will need to deactivate and regenerate your personal access key, ensuring it includes `CMS Pages`, `Design Manager`, `Developer Projects`, and `GraphQL Data Fetching` permissions. This will create a `hubspot.config.yaml` file required for both uploading changes and local development. See the [HubSpot CLI documentation](https://developers.hubspot.com/docs/cms/guides/getting-started-with-local-development) for more information.
+
+> **Warning:** If you are using an existing access key from a previous call to `hs init` or `hs auth`, you will need to deactivate and regenerate the access key to include new scopes necessary for local CMS React development.
+
+Double-check you are still in `getting-started/` and run:
+
+```bash
+npm run deploy
+```
+
+This will upload the `getting-started-project` to your HubSpot account. Once uploaded, built, and deployed, you can use your react modules in your website pages just as you would with any other modules.
+
+From the repository root, run:
+
+```bash
+npm run upload:hubl
+```
+
+This uploads the corresponding example HubL files to your account. You should now be able to create a page from one of the `getting-started-theme` templates and see the output of the React components in the page preview.
+
+### 5. Previewing Local Changes on Proxied Pages
+
+You can preview your local CMS React components inside live HubL-rendered pages. To do this, create a page:
+
+- Go to Website Pages
+- Click “Create”, then “Create Website Page"
+- Write a page name and click “Create page”
+- Switch your active theme to "CMS React - Getting Started Theme" and select one of the templates
+- Name the page in the settings tab, then publish and preview it
+
+To proxy that page locally:
+
+- Run the local dev server as described above
+- Visit the newly created page in your browser
+- Open the sprocket menu and select `Open Local Dev Server`
+- Your local JavaScript source changes will appear immediately in the context of the HubL page
+
+## Functionality
+
+This project includes modules, module fields, and islands. Modules are the primary building block of the HubSpot CMS, and Islands enable client-side interactivity for React-powered modules. We have 3 modules:
+
+- **Header**: A React module without islands.
+- **Footer**: Another example of a React module without islands.
+- **Weather**: A module leveraging our island architecture to fetch and render data from an API client-side, enabling users to change the data they wish to fetch, and formatting dates using a third-party dependency.
+
+In addition to the above, we are using module css to scope our styles to a given file. For more styling options, check out our [Styling example](https://github.com/HubSpot/cms-react/tree/main/examples/styling).
diff --git a/examples/getting-started/getting-started-project/hsproject.json b/examples/getting-started/getting-started-project/hsproject.json
new file mode 100644
index 0000000..7de2a73
--- /dev/null
+++ b/examples/getting-started/getting-started-project/hsproject.json
@@ -0,0 +1,5 @@
+{
+ "name": "getting-started-project",
+ "srcDir": ".",
+ "platformVersion": "2023.2"
+}
diff --git a/examples/getting-started/getting-started-project/src/Globals.d.ts b/examples/getting-started/getting-started-project/src/Globals.d.ts
new file mode 100644
index 0000000..60260a3
--- /dev/null
+++ b/examples/getting-started/getting-started-project/src/Globals.d.ts
@@ -0,0 +1 @@
+declare module '*.module.css';
diff --git a/examples/getting-started/getting-started-project/src/assets/clear.svg b/examples/getting-started/getting-started-project/src/assets/clear.svg
new file mode 100644
index 0000000..d192b7f
--- /dev/null
+++ b/examples/getting-started/getting-started-project/src/assets/clear.svg
@@ -0,0 +1,25 @@
+
diff --git a/examples/getting-started/getting-started-project/src/assets/cloudy.svg b/examples/getting-started/getting-started-project/src/assets/cloudy.svg
new file mode 100644
index 0000000..283e3cc
--- /dev/null
+++ b/examples/getting-started/getting-started-project/src/assets/cloudy.svg
@@ -0,0 +1,22 @@
+
diff --git a/examples/getting-started/getting-started-project/src/assets/fog.svg b/examples/getting-started/getting-started-project/src/assets/fog.svg
new file mode 100644
index 0000000..8431c61
--- /dev/null
+++ b/examples/getting-started/getting-started-project/src/assets/fog.svg
@@ -0,0 +1,71 @@
+
diff --git a/examples/getting-started/getting-started-project/src/assets/rain.svg b/examples/getting-started/getting-started-project/src/assets/rain.svg
new file mode 100644
index 0000000..d96ac2f
--- /dev/null
+++ b/examples/getting-started/getting-started-project/src/assets/rain.svg
@@ -0,0 +1,113 @@
+
diff --git a/examples/getting-started/getting-started-project/src/assets/snow.svg b/examples/getting-started/getting-started-project/src/assets/snow.svg
new file mode 100644
index 0000000..baf2f5f
--- /dev/null
+++ b/examples/getting-started/getting-started-project/src/assets/snow.svg
@@ -0,0 +1,143 @@
+
diff --git a/examples/getting-started/getting-started-project/src/assets/sprocket.svg b/examples/getting-started/getting-started-project/src/assets/sprocket.svg
new file mode 100644
index 0000000..cb945b6
--- /dev/null
+++ b/examples/getting-started/getting-started-project/src/assets/sprocket.svg
@@ -0,0 +1,14 @@
+
diff --git a/examples/getting-started/getting-started-project/src/assets/thunderstorm.svg b/examples/getting-started/getting-started-project/src/assets/thunderstorm.svg
new file mode 100644
index 0000000..0f09655
--- /dev/null
+++ b/examples/getting-started/getting-started-project/src/assets/thunderstorm.svg
@@ -0,0 +1,62 @@
+
diff --git a/examples/getting-started/getting-started-project/src/cms-assets.json b/examples/getting-started/getting-started-project/src/cms-assets.json
new file mode 100644
index 0000000..f7037b1
--- /dev/null
+++ b/examples/getting-started/getting-started-project/src/cms-assets.json
@@ -0,0 +1,4 @@
+{
+ "label": "Getting started",
+ "outputPath": ""
+}
diff --git a/examples/getting-started/getting-started-project/src/components/WeatherCards.tsx b/examples/getting-started/getting-started-project/src/components/WeatherCards.tsx
new file mode 100644
index 0000000..d76b41b
--- /dev/null
+++ b/examples/getting-started/getting-started-project/src/components/WeatherCards.tsx
@@ -0,0 +1,42 @@
+import dayjs from 'dayjs';
+import weatherStyles from '../styles/weather.module.css';
+import { getWeatherIcon } from '../utils.ts';
+
+export function CurrentWeatherCard({ weatherData }: any) {
+ const { location, forecast } = weatherData;
+ const { forecastday } = forecast;
+ const currentDay = forecastday[0].day;
+
+ return (
+
+ {% block header %}
+ {% module 'main header' path="@projects/getting-started-project/src/components/modules/Header.tsx" %}
+ {% endblock header %}
+
+ {# The main-content ID is used for the navigation skipper in the header.html file. More information on the navigation skipper can be found here: https://github.com/HubSpot/cms-theme-boilerplate/wiki/Accessibility #}
+
+ {% block body %}
+ {% endblock body %}
+
+ {% block footer %}
+ {% module 'footer' path="@projects/getting-started-project/src/components/modules/Footer.tsx" %}
+ {% endblock footer %}
+
+
+ {# To see a full list of what is included via standard_footer_includes please reference this article: https://developers.hubspot.com/docs/cms/hubl/variables#required-page-template-variables #}
+ {{ standard_footer_includes }}
+
+
diff --git a/examples/getting-started/getting-started-theme/theme.json b/examples/getting-started/getting-started-theme/theme.json
new file mode 100644
index 0000000..3e4f466
--- /dev/null
+++ b/examples/getting-started/getting-started-theme/theme.json
@@ -0,0 +1,3 @@
+{
+ "label": "CMS React - Getting Started Theme"
+}
diff --git a/examples/getting-started/getting-started-theme/weather.hubl.html b/examples/getting-started/getting-started-theme/weather.hubl.html
new file mode 100644
index 0000000..0ac10c2
--- /dev/null
+++ b/examples/getting-started/getting-started-theme/weather.hubl.html
@@ -0,0 +1,14 @@
+
+{% extends "./layouts/base.hubl.html" %}
+
+{% block body %}
+
+ {% module
+ path="@projects/getting-started-project/app/components/modules/Weather.tsx",
+ %}
+
+{% endblock body %}
diff --git a/examples/getting-started/package.json b/examples/getting-started/package.json
new file mode 100644
index 0000000..84f0430
--- /dev/null
+++ b/examples/getting-started/package.json
@@ -0,0 +1,26 @@
+{
+ "name": "getting-started-example",
+ "description": "Getting started with CMS-React",
+ "license": "Apache-2.0",
+ "devDependencies": {
+ "@hubspot/cli": "latest",
+ "@hubspot/prettier-plugin-hubl": "latest",
+ "eslint": "^8.24.0",
+ "eslint-config-prettier": "^8.5.0",
+ "eslint-plugin-react": "^7.31.10",
+ "prettier": "^2.7.1",
+ "yarpm": "^1.2.0"
+ },
+ "scripts": {
+ "start": "cd getting-started-project/src && yarpm start",
+ "postinstall": "cd getting-started-project/src && yarpm install",
+ "lint:js": "eslint . --ext .js,.jsx",
+ "prettier": "prettier . --check",
+ "watch:hubl": "hs watch getting-started-theme getting-started-theme",
+ "upload:hubl": "hs upload getting-started-theme getting-started-theme",
+ "deploy": "hs project upload getting-started-project"
+ },
+ "engines": {
+ "node": ">=16.0.0"
+ }
+}