diff --git a/vue/.eslintrc.cjs b/vue/.eslintrc.cjs
new file mode 100644
index 0000000..6f40582
--- /dev/null
+++ b/vue/.eslintrc.cjs
@@ -0,0 +1,15 @@
+/* eslint-env node */
+require('@rushstack/eslint-patch/modern-module-resolution')
+
+module.exports = {
+ root: true,
+ 'extends': [
+ 'plugin:vue/vue3-essential',
+ 'eslint:recommended',
+ '@vue/eslint-config-typescript',
+ '@vue/eslint-config-prettier/skip-formatting'
+ ],
+ parserOptions: {
+ ecmaVersion: 'latest'
+ }
+}
diff --git a/vue/.gitignore b/vue/.gitignore
new file mode 100644
index 0000000..8ee54e8
--- /dev/null
+++ b/vue/.gitignore
@@ -0,0 +1,30 @@
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+lerna-debug.log*
+
+node_modules
+.DS_Store
+dist
+dist-ssr
+coverage
+*.local
+
+/cypress/videos/
+/cypress/screenshots/
+
+# Editor directories and files
+.vscode/*
+!.vscode/extensions.json
+.idea
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?
+
+*.tsbuildinfo
diff --git a/vue/.nginx/nginx.conf b/vue/.nginx/nginx.conf
new file mode 100644
index 0000000..be7a25e
--- /dev/null
+++ b/vue/.nginx/nginx.conf
@@ -0,0 +1,16 @@
+server {
+
+ listen 80;
+
+ location / {
+ root /usr/share/nginx/html;
+ index index.html index.htm;
+ try_files $uri /index.html =404;
+ }
+
+ error_page 500 502 503 504 /50x.html;
+
+ location = /50x.html {
+ root /usr/share/nginx/html;
+ }
+}
diff --git a/vue/.prettierrc.json b/vue/.prettierrc.json
new file mode 100644
index 0000000..66e2335
--- /dev/null
+++ b/vue/.prettierrc.json
@@ -0,0 +1,8 @@
+{
+ "$schema": "https://json.schemastore.org/prettierrc",
+ "semi": false,
+ "tabWidth": 2,
+ "singleQuote": true,
+ "printWidth": 100,
+ "trailingComma": "none"
+}
\ No newline at end of file
diff --git a/vue/Dockerfile b/vue/Dockerfile
new file mode 100644
index 0000000..7333d48
--- /dev/null
+++ b/vue/Dockerfile
@@ -0,0 +1,30 @@
+FROM node:lts as development
+
+WORKDIR /app
+
+COPY package*.json ./
+RUN npm ci
+
+COPY . .
+
+ENV CI=true
+ENV PORT=3000
+
+CMD [ "npm", "start" ]
+
+FROM development as builder
+
+RUN npm run build
+
+FROM nginx:alpine
+
+# Copy config nginx
+COPY --from=builder /app/.nginx/nginx.conf /etc/nginx/conf.d/default.conf
+
+WORKDIR /usr/share/nginx/html
+
+# Remove default nginx static assets
+RUN rm -rf ./*
+
+# Copy static assets from builder stage
+COPY --from=builder /app/dist .
diff --git a/vue/README.md b/vue/README.md
new file mode 100644
index 0000000..c62edb1
--- /dev/null
+++ b/vue/README.md
@@ -0,0 +1,41 @@
+# Vue App Dockerfile Example
+
+## Description
+
+This repository provides a Dockerfile example for containerizing a Vue app.
+
+## Getting Started
+
+1. Copy the `Dockerfile` and files used in the Dockerfile in your application
+2. Build the Docker image by running the following command:
+
+```bash
+docker build -t image-name .
+```
+
+3. Once the image is built successfully, you can run a container using the following command:
+
+```bash
+docker run image-name
+```
+
+If the container needs specifying port and volumes if the container needed it.
+
+4. Test your application container
+
+## Customization
+
+You can customize the Dockerfile example to fit your specific application needs. Here are a few areas you might consider modifying:
+
+- **Dependencies**: If your application requires additional dependencies, you can use the RUN command in the Dockerfile to install them. Make sure to update the appropriate package manager command based on your application setup.
+- **Environment Variables**: If your application requires environment variables, you can pass them to the container using the -e flag when running the docker run command.
+
+## Contributing
+
+Contributions to this Dockerfile example are welcome! If you have any improvements or suggestions, feel free to submit a pull request.
+
+Please ensure that your changes align with the best practices and conventions outlined in the Docker and language/framework documentation.
+
+## Disclaimer
+
+The Dockerfile example provided in this repository is for educational and reference purposes. It is important to review and adapt it to meet the specific security and performance requirements of your case before using it in a production environment.
diff --git a/vue/env.d.ts b/vue/env.d.ts
new file mode 100644
index 0000000..11f02fe
--- /dev/null
+++ b/vue/env.d.ts
@@ -0,0 +1 @@
+///
diff --git a/vue/index.html b/vue/index.html
new file mode 100644
index 0000000..a888544
--- /dev/null
+++ b/vue/index.html
@@ -0,0 +1,13 @@
+
+
+
+ You’ve successfully created a project with
+ Vite +
+ Vue 3. What's next?
+
+
+
+
+
diff --git a/vue/src/components/TheWelcome.vue b/vue/src/components/TheWelcome.vue
new file mode 100644
index 0000000..49d8f73
--- /dev/null
+++ b/vue/src/components/TheWelcome.vue
@@ -0,0 +1,88 @@
+
+
+
+
+
+
+
+ Documentation
+
+ Vue’s
+ official documentation
+ provides you with all information you need to get started.
+
+
+
+
+
+
+ Tooling
+
+ This project is served and bundled with
+ Vite. The
+ recommended IDE setup is
+ VSCode +
+ Volar. If
+ you need to test your components and web pages, check out
+ Cypress and
+ Cypress Component Testing.
+
+
+
+ More instructions are available in README.md.
+
+
+
+
+
+
+ Ecosystem
+
+ Get official tools and libraries for your project:
+ Pinia,
+ Vue Router,
+ Vue Test Utils, and
+ Vue Dev Tools. If
+ you need more resources, we suggest paying
+ Awesome Vue
+ a visit.
+
+
+
+
+
+
+ Community
+
+ Got stuck? Ask your question on
+ Vue Land, our official
+ Discord server, or
+ StackOverflow. You should also subscribe to
+ our mailing list and follow
+ the official
+ @vuejs
+ twitter account for latest news in the Vue world.
+
+
+
+
+
+
+ Support Vue
+
+ As an independent project, Vue relies on community backing for its sustainability. You can help
+ us by
+ becoming a sponsor.
+
+
diff --git a/vue/src/components/WelcomeItem.vue b/vue/src/components/WelcomeItem.vue
new file mode 100644
index 0000000..6d7086a
--- /dev/null
+++ b/vue/src/components/WelcomeItem.vue
@@ -0,0 +1,87 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vue/src/components/icons/IconCommunity.vue b/vue/src/components/icons/IconCommunity.vue
new file mode 100644
index 0000000..2dc8b05
--- /dev/null
+++ b/vue/src/components/icons/IconCommunity.vue
@@ -0,0 +1,7 @@
+
+
+
diff --git a/vue/src/components/icons/IconDocumentation.vue b/vue/src/components/icons/IconDocumentation.vue
new file mode 100644
index 0000000..6d4791c
--- /dev/null
+++ b/vue/src/components/icons/IconDocumentation.vue
@@ -0,0 +1,7 @@
+
+
+
diff --git a/vue/src/components/icons/IconEcosystem.vue b/vue/src/components/icons/IconEcosystem.vue
new file mode 100644
index 0000000..c3a4f07
--- /dev/null
+++ b/vue/src/components/icons/IconEcosystem.vue
@@ -0,0 +1,7 @@
+
+
+
diff --git a/vue/src/components/icons/IconSupport.vue b/vue/src/components/icons/IconSupport.vue
new file mode 100644
index 0000000..7452834
--- /dev/null
+++ b/vue/src/components/icons/IconSupport.vue
@@ -0,0 +1,7 @@
+
+
+
diff --git a/vue/src/components/icons/IconTooling.vue b/vue/src/components/icons/IconTooling.vue
new file mode 100644
index 0000000..660598d
--- /dev/null
+++ b/vue/src/components/icons/IconTooling.vue
@@ -0,0 +1,19 @@
+
+
+
+
diff --git a/vue/src/main.ts b/vue/src/main.ts
new file mode 100644
index 0000000..5a5dbdb
--- /dev/null
+++ b/vue/src/main.ts
@@ -0,0 +1,11 @@
+import './assets/main.css'
+
+import { createApp } from 'vue'
+import App from './App.vue'
+import router from './router'
+
+const app = createApp(App)
+
+app.use(router)
+
+app.mount('#app')
diff --git a/vue/src/router/index.ts b/vue/src/router/index.ts
new file mode 100644
index 0000000..a49ae50
--- /dev/null
+++ b/vue/src/router/index.ts
@@ -0,0 +1,23 @@
+import { createRouter, createWebHistory } from 'vue-router'
+import HomeView from '../views/HomeView.vue'
+
+const router = createRouter({
+ history: createWebHistory(import.meta.env.BASE_URL),
+ routes: [
+ {
+ path: '/',
+ name: 'home',
+ component: HomeView
+ },
+ {
+ path: '/about',
+ name: 'about',
+ // route level code-splitting
+ // this generates a separate chunk (About.[hash].js) for this route
+ // which is lazy-loaded when the route is visited.
+ component: () => import('../views/AboutView.vue')
+ }
+ ]
+})
+
+export default router
diff --git a/vue/src/views/AboutView.vue b/vue/src/views/AboutView.vue
new file mode 100644
index 0000000..756ad2a
--- /dev/null
+++ b/vue/src/views/AboutView.vue
@@ -0,0 +1,15 @@
+
+