diff --git a/packages/layers/base/.editorconfig b/packages/layers/base/.editorconfig
new file mode 100644
index 0000000..007463b
--- /dev/null
+++ b/packages/layers/base/.editorconfig
@@ -0,0 +1,12 @@
+root = true
+
+[*]
+indent_size = 2
+indent_style = space
+end_of_line = lf
+charset = utf-8
+trim_trailing_whitespace = true
+insert_final_newline = true
+
+[*.md]
+trim_trailing_whitespace = false
diff --git a/packages/layers/base/.gitignore b/packages/layers/base/.gitignore
new file mode 100644
index 0000000..259809b
--- /dev/null
+++ b/packages/layers/base/.gitignore
@@ -0,0 +1,24 @@
+node_modules
+*.log
+.nuxt
+nuxt.d.ts
+.output
+.data
+.env
+package-lock.json
+framework
+dist
+.DS_Store
+
+# Yarn
+.yarn/cache
+.yarn/*state*
+
+# Local History
+.history
+
+# VSCode
+.vscode/
+
+# JetBrains/WebStorm
+.idea/
diff --git a/packages/layers/base/.npmrc b/packages/layers/base/.npmrc
new file mode 100644
index 0000000..cf04042
--- /dev/null
+++ b/packages/layers/base/.npmrc
@@ -0,0 +1,2 @@
+shamefully-hoist=true
+strict-peer-dependencies=false
diff --git a/packages/layers/base/.nuxtrc b/packages/layers/base/.nuxtrc
new file mode 100644
index 0000000..9eb49a5
--- /dev/null
+++ b/packages/layers/base/.nuxtrc
@@ -0,0 +1 @@
+typescript.includeWorkspace = true
diff --git a/packages/layers/base/.playground/app.config.ts b/packages/layers/base/.playground/app.config.ts
new file mode 100644
index 0000000..2e818ca
--- /dev/null
+++ b/packages/layers/base/.playground/app.config.ts
@@ -0,0 +1,5 @@
+export default defineAppConfig({
+ myLayer: {
+ name: 'My amazing Nuxt layer (overwritten)'
+ }
+})
diff --git a/packages/layers/base/.playground/nuxt.config.ts b/packages/layers/base/.playground/nuxt.config.ts
new file mode 100644
index 0000000..969a646
--- /dev/null
+++ b/packages/layers/base/.playground/nuxt.config.ts
@@ -0,0 +1,12 @@
+import { fileURLToPath } from 'node:url'
+
+export default defineNuxtConfig({
+ extends: ['..'],
+ modules: ['@nuxt/eslint'],
+ eslint: {
+ config: {
+ // Use the generated ESLint config for lint root project as well
+ rootDir: fileURLToPath(new URL('..', import.meta.url))
+ }
+ }
+})
diff --git a/packages/layers/base/README.md b/packages/layers/base/README.md
new file mode 100644
index 0000000..8a884c0
--- /dev/null
+++ b/packages/layers/base/README.md
@@ -0,0 +1,73 @@
+# Nuxt Layer Starter
+
+Create Nuxt extendable layer with this GitHub template.
+
+## Setup
+
+Make sure to install the dependencies:
+
+```bash
+pnpm install
+```
+
+## Working on your layer
+
+Your layer is at the root of this repository, it is exactly like a regular Nuxt project, except you can publish it on NPM.
+
+The `.playground` directory should help you on trying your layer during development.
+
+Running `pnpm dev` will prepare and boot `.playground` directory, which imports your layer itself.
+
+## Distributing your layer
+
+Your Nuxt layer is shaped exactly the same as any other Nuxt project, except you can publish it on NPM.
+
+To do so, you only have to check if `files` in `package.json` are valid, then run:
+
+```bash
+npm publish --access public
+```
+
+Once done, your users will only have to run:
+
+```bash
+npm install --save your-layer
+```
+
+Then add the dependency to their `extends` in `nuxt.config`:
+
+```ts
+defineNuxtConfig({
+ extends: 'your-layer'
+})
+```
+
+## Development Server
+
+Start the development server on http://localhost:3000
+
+```bash
+pnpm dev
+```
+
+## Production
+
+Build the application for production:
+
+```bash
+pnpm build
+```
+
+Or statically generate it with:
+
+```bash
+pnpm generate
+```
+
+Locally preview production build:
+
+```bash
+pnpm preview
+```
+
+Checkout the [deployment documentation](https://nuxt.com/docs/getting-started/deployment) for more information.
diff --git a/packages/layers/base/app.config.ts b/packages/layers/base/app.config.ts
new file mode 100644
index 0000000..e3276b7
--- /dev/null
+++ b/packages/layers/base/app.config.ts
@@ -0,0 +1,14 @@
+export default defineAppConfig({
+ myLayer: {
+ name: 'Hello from Nuxt layer'
+ }
+})
+
+declare module '@nuxt/schema' {
+ interface AppConfigInput {
+ myLayer?: {
+ /** Project name */
+ name?: string
+ }
+ }
+}
diff --git a/packages/layers/base/app.vue b/packages/layers/base/app.vue
new file mode 100644
index 0000000..f9b5dfc
--- /dev/null
+++ b/packages/layers/base/app.vue
@@ -0,0 +1,3 @@
+
+
+
diff --git a/packages/layers/base/components/HelloWorld.vue b/packages/layers/base/components/HelloWorld.vue
new file mode 100644
index 0000000..937eedb
--- /dev/null
+++ b/packages/layers/base/components/HelloWorld.vue
@@ -0,0 +1,10 @@
+
+
+
+
+
Hello World!
+
{{ myLayer }}
+
+
diff --git a/packages/layers/base/eslint.config.js b/packages/layers/base/eslint.config.js
new file mode 100644
index 0000000..be2024e
--- /dev/null
+++ b/packages/layers/base/eslint.config.js
@@ -0,0 +1,3 @@
+import withNuxt from './.playground/.nuxt/eslint.config.mjs'
+
+export default withNuxt()
diff --git a/packages/layers/base/nuxt.config.ts b/packages/layers/base/nuxt.config.ts
new file mode 100644
index 0000000..9d825c4
--- /dev/null
+++ b/packages/layers/base/nuxt.config.ts
@@ -0,0 +1,4 @@
+// https://nuxt.com/docs/api/configuration/nuxt-config
+export default defineNuxtConfig({
+ devtools: { enabled: true },
+})
diff --git a/packages/layers/base/package.json b/packages/layers/base/package.json
new file mode 100644
index 0000000..4d91ff0
--- /dev/null
+++ b/packages/layers/base/package.json
@@ -0,0 +1,21 @@
+{
+ "name": "@webapps/layers/base",
+ "type": "module",
+ "version": "0.0.1",
+ "main": "./nuxt.config.ts",
+ "scripts": {
+ "dev": "nuxi dev .playground",
+ "dev:prepare": "nuxt prepare .playground",
+ "build": "nuxt build .playground",
+ "generate": "nuxt generate .playground",
+ "preview": "nuxt preview .playground",
+ "lint": "eslint ."
+ },
+ "devDependencies": {
+ "@nuxt/eslint": "latest",
+ "eslint": "^9.36.0",
+ "nuxt": "^4.1.2",
+ "typescript": "^5.9.2",
+ "vue": "latest"
+ }
+}
diff --git a/packages/layers/base/tsconfig.json b/packages/layers/base/tsconfig.json
new file mode 100644
index 0000000..1d746c1
--- /dev/null
+++ b/packages/layers/base/tsconfig.json
@@ -0,0 +1,3 @@
+{
+ "extends": "./.playground/.nuxt/tsconfig.json"
+}