diff --git a/src/.vuepress/components/FirstExample.vue b/src/.vuepress/components/FirstExample.vue
new file mode 100644
index 0000000000..86a9209ed1
--- /dev/null
+++ b/src/.vuepress/components/FirstExample.vue
@@ -0,0 +1,40 @@
+
+
+
Counter: {{ counter }}
+
+
+
+
+
+
+
diff --git a/src/guide/introduction.md b/src/guide/introduction.md
index 301eb4640c..b5581fc363 100644
--- a/src/guide/introduction.md
+++ b/src/guide/introduction.md
@@ -29,31 +29,41 @@ The [Installation](installation.md) page provides more options of installing Vue
At the core of Vue.js is a system that enables us to declaratively render data to the DOM using straightforward template syntax:
```html
-
- {{ message }}
+
+ Counter: {{ counter }}
```
```js
-const HelloVueApp = {
+const CounterApp = {
data() {
return {
- message: 'Hello Vue!'
+ counter: 0
}
}
}
-Vue.createApp(HelloVueApp).mount('#hello-vue')
+Vue.createApp(CounterApp).mount('#counter')
```
-We have already created our very first Vue app! This looks pretty similar to rendering a string template, but Vue has done a lot of work under the hood. The data and the DOM are now linked, and everything is now **reactive**. How do we know? Change the `message` property in the code snippet below to a different value and the rendered example will update accordingly:
+We have already created our very first Vue app! This looks pretty similar to rendering a string template, but Vue has done a lot of work under the hood. The data and the DOM are now linked, and everything is now **reactive**. How do we know? Take a look at the example below where `counter` property increments every second and you will see how rendered DOM changes:
-