diff --git a/.devfile.yaml b/.devfile.yaml
new file mode 100644
index 00000000..0dcfafcd
--- /dev/null
+++ b/.devfile.yaml
@@ -0,0 +1,126 @@
+# 
+# Copyright 2023 Red Hat, Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+schemaVersion: 2.2.0
+metadata:
+  name: devfile-web
+  displayName: Devfile Web Services
+  description: A devworkspace of web services for devfile.
+  language: TypeScript
+  projectType: Next.js
+  tags:
+    - TypeScript
+    - Node.js
+    - Next.js
+    - Devfile
+    - Registry
+    - Documentation
+    - devfile.io
+  version: 1.0.0
+components:
+  - name: image-builder
+    image:
+      imageName: "quay.io/{{profile}}/{{project}}:{{imageTag}}"
+      dockerfile:
+        args:
+          - --build-arg=PROJECT_NAME={{project}}
+        uri: Dockerfile
+  - name: runner
+    attributes:
+      container-overrides:
+        securityContext:
+          runAsUser: 1001
+          allowPrivilegeEscalation: false
+          runAsNonRoot: true
+          capabilities:
+            drop: ["ALL"]
+          seccompProfile:
+            type: "RuntimeDefault"
+    container:
+      image: node:16-alpine
+      command: ['tail', '-f', '/dev/null']
+      mountSources: true
+      memoryLimit: "{{memoryLimit}}"
+      volumeMounts:
+        - name: cache
+          path: /.cache
+        - name: yarn-global
+          path: /.yarn
+        - name: npm-global
+          path: /.npm
+      endpoints:
+        - name: http-4200
+          protocol: http
+          targetPort: 4200
+      env:
+        - name: DEPLOY_CONFIG
+          value: "{{deployConfig}}"
+  - name: cache
+    volume:
+      ephemeral: true
+      size: 10Gi
+  - name: yarn-global
+    volume:
+      ephemeral: true
+  - name: npm-global
+    volume:
+      ephemeral: true
+commands:
+  # Install dependency packages
+  - id: build
+    exec:
+      commandLine: yarn install --frozen-lockfile --global-folder /.yarn
+      component: runner
+      workingDir: ${PROJECT_SOURCE}
+      hotReloadCapable: true
+      group:
+        isDefault: true
+        kind: build
+  # Run tests in project
+  - id: test
+    exec:
+      commandLine: yarn nx test {{project}}
+      component: runner
+      workingDir: ${PROJECT_SOURCE}
+      group:
+        isDefault: true
+        kind: test
+  # Run development runtime
+  - id: run
+    exec:
+      commandLine: yarn nx serve {{project}} --configuration ${DEPLOY_CONFIG}
+      component: runner
+      workingDir: ${PROJECT_SOURCE}
+      group:
+        isDefault: true
+        kind: run
+  # Deploy image
+  - id: build-and-deploy-image
+    apply:
+      component: image-builder
+      group:
+        isDefault: true
+        kind: deploy
+variables:
+  # Web project to be run, default: landing-page
+  project: landing-page
+  # Image tag
+  imageTag: next
+  # Profile of the image on quay.io
+  profile: devfile
+  # Memory limit on runner, default: 1Gi
+  memoryLimit: 1Gi
+  # Deployment configuration to use
+  deployConfig: development