diff --git a/AGENTS.md b/AGENTS.md index 84ab844..72c2d10 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -75,7 +75,7 @@ This repository is divided into distinct domains, each with its own `AGENTS.md` * **Purpose**: Personal homepage and portfolio for Moritz Graf (`https://moritzgraf.de`). * **Manifest**: `k8s/web/moritzgrafde.yaml` (Namespace: `web`). * **Image**: `registry.haumdaucher.de/moritzgrafde:latest`. -* **Key Rules**: Static Hugo website using `hugo-goa` theme served via Nginx. Migrated from standalone `moritzgraf` repository into this monorepo. +* **Key Rules**: Executive portfolio built with Vue 3, Vite, TypeScript, and Tailwind CSS served via Nginx in Docker. Migrated from legacy Hugo to a modern reactive platform showcase. * **Read**: [projects/moritzgrafde/AGENTS.md](./projects/moritzgrafde/AGENTS.md) ## Global Constraints diff --git a/projects/moritzgrafde/.gitignore b/projects/moritzgrafde/.gitignore index d581bb5..eb61436 100644 --- a/projects/moritzgrafde/.gitignore +++ b/projects/moritzgrafde/.gitignore @@ -1,2 +1,8 @@ -**/.DS_Store -.hugo_build.lock +node_modules/ +dist/ +.DS_Store +*.local +*.tsbuildinfo +npm-debug.log* +yarn-debug.log* +yarn-error.log* diff --git a/projects/moritzgrafde/AGENTS.md b/projects/moritzgrafde/AGENTS.md index 733e279..8ee7f03 100644 --- a/projects/moritzgrafde/AGENTS.md +++ b/projects/moritzgrafde/AGENTS.md @@ -1,31 +1,37 @@ # AGENTS.md — Moritz Graf Personal Website (`moritzgrafde`) > [!NOTE] -> **Domain**: Personal portfolio and homepage for Moritz Graf. +> **Domain**: Personal executive portfolio and capabilities showcase for Moritz Graf. > **Live Production URL**: `https://moritzgraf.de` > **Kubernetes Manifest**: `k8s/web/moritzgrafde.yaml` (Namespace: `web`) > **Container Image**: `registry.haumdaucher.de/moritzgrafde:latest` -> **Source Location**: `projects/moritzgrafde/` (Migrated from standalone `moritzgraf` repo) +> **Source Location**: `projects/moritzgrafde/` --- -## 🏛️ Architecture & Build Pipeline +## 🏛️ Architecture & Tech Stack 1. **Stack**: - - Static site generated with [Hugo](https://gohugo.io/) using the `hugo-goa` theme. - - Served via lightweight `nginx` container (`Dockerfile`). - - The compiled static site is maintained in `public/`. + - **Frontend Framework**: Vue 3 (Composition API, ` + + diff --git a/projects/moritzgrafde/nginx.conf b/projects/moritzgrafde/nginx.conf new file mode 100644 index 0000000..a29902c --- /dev/null +++ b/projects/moritzgrafde/nginx.conf @@ -0,0 +1,30 @@ +server { + listen 80; + server_name localhost; + + root /usr/share/nginx/html; + index index.html; + + # Gzip compression + gzip on; + gzip_vary on; + gzip_min_length 1024; + gzip_proxied any; + gzip_types text/plain text/css text/xml application/javascript application/json application/xml+rss image/svg+xml; + + location / { + try_files $uri $uri/ /index.html; + } + + # Cache static assets + location ~* \.(?:css|js|jpg|jpeg|gif|png|ico|cur|gz|svg|svgz|mp4|ogg|ogv|webm|htc|woff2|woff)$ { + expires 1y; + add_header Cache-Control "public, immutable"; + } + + # Security headers + add_header X-Frame-Options "SAMEORIGIN" always; + add_header X-Content-Type-Options "nosniff" always; + add_header X-XSS-Protection "1; mode=block" always; + add_header Referrer-Policy "strict-origin-when-cross-origin" always; +} diff --git a/projects/moritzgrafde/package-lock.json b/projects/moritzgrafde/package-lock.json new file mode 100644 index 0000000..3eb3b8a --- /dev/null +++ b/projects/moritzgrafde/package-lock.json @@ -0,0 +1,2251 @@ +{ + "name": "moritzgrafde", + "version": "2.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "moritzgrafde", + "version": "2.0.0", + "dependencies": { + "lucide-vue-next": "^0.468.0", + "vue": "^3.5.13" + }, + "devDependencies": { + "@tailwindcss/vite": "^4.0.9", + "@types/node": "^22.10.2", + "@vitejs/plugin-vue": "^5.2.1", + "tailwindcss": "^4.0.9", + "typescript": "^5.7.2", + "vite": "^6.2.0", + "vue-tsc": "^2.2.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.9", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.9.tgz", + "integrity": "sha512-CjXrNHTnvqBVqHgdBysY3vk2T8tpJHb5/RMeHJBTyVa9xgugCB0CJTx/3oO8RV2QRQP391RWpB7D6hLjm8V9uA==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.8" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz", + "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz", + "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz", + "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz", + "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz", + "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz", + "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz", + "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz", + "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz", + "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz", + "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz", + "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz", + "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz", + "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz", + "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz", + "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz", + "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz", + "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz", + "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz", + "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz", + "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz", + "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz", + "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz", + "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz", + "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz", + "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz", + "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz", + "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.6.0.tgz", + "integrity": "sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@napi-rs/lzma-linux-x64-gnu": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@napi-rs/lzma-linux-x64-gnu/-/lzma-linux-x64-gnu-1.5.1.tgz", + "integrity": "sha512-oTXEIha4SsuXdTA4Iyskj0kpdx2yVXdhd75c2v3xGrHFfVMsbhTPZU/nMPL4sWKo4pBHm3aucLaqGlF696dTyQ==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^22.20 || ^24.12 || >=25" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.63.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.63.5.tgz", + "integrity": "sha512-J25QJU+B78T4FhhBsNpLJyVWOi31mwtpcMwywHmOKH65Q9IWGA81gPj+dnwlhU8wktVriYE+tFAaQgrnJRzAZg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.63.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.63.5.tgz", + "integrity": "sha512-LDopB3zuZM5Ux9TT2luNEBJW/tYbGU2g1d+VpKk6I+gSKDb+/7sYE6M225gRQt4RbMX6MSwMsVR/phdjVUgRLg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.63.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.63.5.tgz", + "integrity": "sha512-wlJEERGfeuHeBavCL2qVnNacOK43NDoZM4sjkeRPymd04OAE9T1zBqDJgmZ+CIsPTYKwdzpUC8vmOw84dwY4Tg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.63.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.63.5.tgz", + "integrity": "sha512-4nJJGg5jbo2wwPP4JP+LfEBA3bvP8rU9CLuhp7jWvq9sxEyhjQFTFdrqi+/dHEin/pd8jpT0vcehIpnZtmEdcQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.63.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.63.5.tgz", + "integrity": "sha512-DrZbyCDF1hneuO6jRbvZ2D7+PIBM6yIwYnJpg2vIk58T+wuFpiaGZrfUr59lDWw45bg+IrpTGLPiNi/Fk4w3Cg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.63.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.63.5.tgz", + "integrity": "sha512-gqfUVMJMB3mehqywxp6hTBFfgtMQykZY19+cfiaYP0toIJLb/1DZRJHVkQQGP13W4TAwfZDWeg1qBcheTRioXQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.63.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.63.5.tgz", + "integrity": "sha512-CFmhpvAwzSaWMlN3VN7UtmoTihlZNzoP0juQib5TQRnYUyDV8dXeWOp29sobWAT6gXl/hQgAClLlEiYozQG3OQ==", + "cpu": [ + "arm" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.63.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.63.5.tgz", + "integrity": "sha512-Uc9H8eXCOayV6JLTH5bXKMId6qbhNHa818/BgYjm4jrlq3vZquC9cqyvHBw17xy5Mnj5f+I3gFK5JcEf3hSqrw==", + "cpu": [ + "arm" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.63.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.63.5.tgz", + "integrity": "sha512-VcPr/szv/1BFw112Kt//fxulXt/JPqzzidU84iW68L2DdjnOO8QFUv2zTSYBEPHD6movBD4z+bbr5y60GYM7Jw==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.63.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.63.5.tgz", + "integrity": "sha512-BnxtJ5/91BrIHYIkGrmjz/lbMhqEHt1dPFqIxIFR+jPn0xVc/oUSCtIT089zfp5ufwGDlYz2UC+Fe1SRBpYFbQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.63.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.63.5.tgz", + "integrity": "sha512-LrYcHZwF+fAMNKHYTOQ5osWM4AZF7YF6D+XtsjDyEvljtt11twc+zHVXBLNEjxVSUnKYsOhvVz4Z213eW02COQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.63.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.63.5.tgz", + "integrity": "sha512-nj7QKQePAAUpCpJHtg0pR0W/b92A9NO17JS3BAQmHDn/yhmkir2p8llrKY9TOhleKIaSzy1JhxS3T9FVld6coA==", + "cpu": [ + "loong64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.63.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.63.5.tgz", + "integrity": "sha512-5ylkX6dWMeBKge9nTU+Rxfb+ZfaCIJ9lRqIFaK0eAMcWp7OJbYnLveLgXmm0VrvuLKb8qIK+mHyH0qu88RM+iA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.63.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.63.5.tgz", + "integrity": "sha512-oHK4ZHYFDKjZviK34I+NwgfbGxgI7ztrNxj2hPTSSNFgeq1a/lEd7dHV2fdGAuTH4Iym3RHJg+vAbWaWG4B7Zg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.63.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.63.5.tgz", + "integrity": "sha512-UcetmHZ6XOXuUByiKZyQmb55ZPr0LABr3Ec/HB9wKZn6CEAFWZkE+hsJErJ9hbPBC7nI0dKuELx7CoV6IM7TMg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.63.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.63.5.tgz", + "integrity": "sha512-C5CmDPQBtvjVo8cgQsBs+w6WB0JLkiixhgi6hVLV11hERWdn/p0XcPU2OUcZzac9BPOFq7SbaHFa8r3SWEysCQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.63.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.63.5.tgz", + "integrity": "sha512-lHVQHJFKsuuxLMi3MQO9XVL8Tje3JR82CzB+QDKC5NWBcsIWuwsn9uIM5e3lBhI+fF1/s63qnyYqsg65+8rV/w==", + "cpu": [ + "s390x" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.63.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.63.5.tgz", + "integrity": "sha512-3W9bTFcQNJn71cSJVM9RKIiZOy8DO/XLDii8Uv/Pm6WKqDRj7JV3ZfuXIEfyuy5LXpIzAbB/1M4Ukp9GKNa7nA==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.63.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.63.5.tgz", + "integrity": "sha512-VDC7rRJlee/scpki96GZ27Omf6yU87s1YXwVTpjE5841faVlDYYT565rgfmoR1U0sqL7z5ivQSDjcsF6VRXyBA==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.63.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.63.5.tgz", + "integrity": "sha512-z86Ok2p4pTdv5xqCKZsTooO7yBEiaJR/HzU3Wx8RmWsPoLppnMKROhJusQob8B3IE1ghC343kUW9rC2r+Wf3ig==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.63.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.63.5.tgz", + "integrity": "sha512-IzQmj+xXwQFGhMAMKMQVXkMwMZN3TqkJgAE0nSsqvVwWWciP4AIPMmWRqOQ2GfX7TUDZr+xqGFcBS36CRPGw0g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.63.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.63.5.tgz", + "integrity": "sha512-F6qpTaPc9bwBH85kjy0/BLmLSW1uv7AoOXCoRIkg2arlgCYlWYcAbiMkvZuAcaWk9TpCRG//okznLAqLGshkMw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.63.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.63.5.tgz", + "integrity": "sha512-igoDsTFhhwECBeGbUuLeIk7t8Y1apa+cs6mDWpx2EZ0ch7oEQgzHbFUXN9euoHekCAQzXdXApAGkV6jznS7tWw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.63.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.63.5.tgz", + "integrity": "sha512-U3teMeMbXFmaM5D+OTJpsOXd+wV/qftIeYF9kBKL4v73641qyJmoXFtA28DQLsnmlyayEsTe72xpLHrArq6vHw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.63.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.63.5.tgz", + "integrity": "sha512-ypfC34F3RKXvCXBglGqGMsUSMKlgwd1HX9AOAlx9RoZZ6GaI42YHVeKpzg3JG+wpBUJYTG+NNZhqbDWL8tBZkw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@tailwindcss/node": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.3.3.tgz", + "integrity": "sha512-/T8IKEsf9VTU6tLjgC7+sv2mOPtQxzE2jMw7u4Tt40Tx+QSZxpzh95/H6cMKoja9XuW7iMdLJYBB0o9G1CaAgg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/remapping": "^2.3.5", + "enhanced-resolve": "^5.24.1", + "jiti": "^2.7.0", + "lightningcss": "1.32.0", + "magic-string": "^0.30.21", + "source-map-js": "^1.2.1", + "tailwindcss": "4.3.3" + } + }, + "node_modules/@tailwindcss/oxide": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.3.3.tgz", + "integrity": "sha512-krXjAikiaFSPaK/FkAQT5UTx3VormQaiZ5hBFlJZ9UFQGB/rwg1MZIhHAG9smMQRTdyJxP6Qt5MwMtdyU5FWrA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20" + }, + "optionalDependencies": { + "@tailwindcss/oxide-android-arm64": "4.3.3", + "@tailwindcss/oxide-darwin-arm64": "4.3.3", + "@tailwindcss/oxide-darwin-x64": "4.3.3", + "@tailwindcss/oxide-freebsd-x64": "4.3.3", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.3.3", + "@tailwindcss/oxide-linux-arm64-gnu": "4.3.3", + "@tailwindcss/oxide-linux-arm64-musl": "4.3.3", + "@tailwindcss/oxide-linux-x64-gnu": "4.3.3", + "@tailwindcss/oxide-linux-x64-musl": "4.3.3", + "@tailwindcss/oxide-wasm32-wasi": "4.3.3", + "@tailwindcss/oxide-win32-arm64-msvc": "4.3.3", + "@tailwindcss/oxide-win32-x64-msvc": "4.3.3" + } + }, + "node_modules/@tailwindcss/oxide-android-arm64": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.3.3.tgz", + "integrity": "sha512-Y85A2gmPSkl5Ve5qR86GL4HT509cFqQh1aes9p3sSkyTPwt0Pppf3GkwGe4JPACcRYjgJIEhQgM6dBClnr0NYw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-darwin-arm64": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.3.3.tgz", + "integrity": "sha512-BiaWatpBcERQFDlOjRDpIVXuFK5PJez5SA4JMg6VYZdBYU+qKfV/vqjcIs+IYmtitf1xYQZTwXvU/8y4lfZUGw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-darwin-x64": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.3.3.tgz", + "integrity": "sha512-fAeUqfV5ndhxRwai8cXGzdLvul9utWOmeTkv69unv4ZXixjn61Z+p9lCWdwOwA3TYboG3BwdVuN/RDjhBRl0mw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-freebsd-x64": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.3.3.tgz", + "integrity": "sha512-iyf5bV6+wnAlflVeEy7R25dupxTNECZN5QMI0qNT6eT+EgaGdZcKhGkr5SdoaWiLJ3spLqIY9VCeSGrwmtg4kw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.3.3.tgz", + "integrity": "sha512-aAYUprJAJQWWbRrPvtjdroZ56Md+JM8pMiopS6xGEwDfLhqj+2ver2p4nU4Mb3CRqcMmNBjo8KkUgcxhkzVQGQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.3.3.tgz", + "integrity": "sha512-nDxldcEENOxZRzC2uu9jrutZdAAQtb+8WWDCSnWL1zvBk1+FN+x6MtDViPB5AJMfttVCUhehGWus3XBPgatM/w==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-musl": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.3.3.tgz", + "integrity": "sha512-Md44bD6veX/PC5iyF8cDVnw4HBIANZepRZZ7a8DQOvkfo5WUBwcp6iAuCUz23u+4SUkhJlD3eL7hNdW8ezd/kA==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-gnu": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.3.3.tgz", + "integrity": "sha512-tx7us1muwOKAKWao2v/GaafFeQboE6aj88vC6ziN2NCGcRm8gWUhwjzg+YdVB1e4boAtdtma4L43onunI6NS4w==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-musl": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.3.3.tgz", + "integrity": "sha512-SJxX60smvHgasZoBy11dX6YRjXJFovwWBoedhbQPOBzgFWBHGB+TVPWB9BxzR7TTxU8FQZAI2AyiNCMzFm8Img==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.3.3.tgz", + "integrity": "sha512-jx1+rPhY/5Ympkktd656HBWEBLxP7dH06losBLjjf5vgCODXvi9KhtftWcMIwTFIDqBr7cRnQkdLnAG+IOlGvQ==", + "bundleDependencies": [ + "@napi-rs/wasm-runtime", + "@emnapi/core", + "@emnapi/runtime", + "@tybys/wasm-util", + "@emnapi/wasi-threads", + "tslib" + ], + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.11.1", + "@emnapi/runtime": "^1.11.1", + "@emnapi/wasi-threads": "^1.2.2", + "@napi-rs/wasm-runtime": "^1.1.4", + "@tybys/wasm-util": "^0.10.2", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.3.3.tgz", + "integrity": "sha512-3rc292Ca2ceK6Ulcc/bAVnTs/3nDtoPhyEKlgPv+yQJQi/JS/AMJlqzxvlDacL1nekbrcf6bTqp/jV4qgnPxNQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-win32-x64-msvc": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.3.3.tgz", + "integrity": "sha512-yJ0pwIVc/nYeGoV02WtsN8KYyLQv7kyI2wDnkezyJlGGjkd4QLwDGAwl47YpPJeuI0M0ObaXGSPjvWDPeTPggw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/vite": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.3.3.tgz", + "integrity": "sha512-yYU8cogLeSh/ms2jh8Fj7jaba/EWa7Ja6GoUqYZaraEuCI5YS6ms6ObZgjjedm+jm6XZjdNRWBpPP6Z86oOxcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tailwindcss/node": "4.3.3", + "@tailwindcss/oxide": "4.3.3", + "tailwindcss": "4.3.3" + }, + "peerDependencies": { + "vite": "^5.2.0 || ^6 || ^7 || ^8" + } + }, + "node_modules/@types/estree": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", + "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "22.20.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.20.4.tgz", + "integrity": "sha512-zJRE40jpHtKqE/C4fgHrAKQLJuSpzEnP9ff9Y7YtoR3Wd2pwqzlekDeEuUQXjRd+QCYnVnNwuJYmhdk9XV8gvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/@vitejs/plugin-vue": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.2.4.tgz", + "integrity": "sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "vite": "^5.0.0 || ^6.0.0", + "vue": "^3.2.25" + } + }, + "node_modules/@volar/language-core": { + "version": "2.4.15", + "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.15.tgz", + "integrity": "sha512-3VHw+QZU0ZG9IuQmzT68IyN4hZNd9GchGPhbD9+pa8CVv7rnoOZwo7T8weIbrRmihqy3ATpdfXFnqRrfPVK6CA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/source-map": "2.4.15" + } + }, + "node_modules/@volar/source-map": { + "version": "2.4.15", + "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.15.tgz", + "integrity": "sha512-CPbMWlUN6hVZJYGcU/GSoHu4EnCHiLaXI9n8c9la6RaI9W5JHX+NqG+GSQcB0JdC2FIBLdZJwGsfKyBB71VlTg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@volar/typescript": { + "version": "2.4.15", + "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.4.15.tgz", + "integrity": "sha512-2aZ8i0cqPGjXb4BhkMsPYDkkuc2ZQ6yOpqwAuNwUoncELqoy5fRgOQtLR9gB0g902iS0NAkvpIzs27geVyVdPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/language-core": "2.4.15", + "path-browserify": "^1.0.1", + "vscode-uri": "^3.0.8" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.5.43", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.43.tgz", + "integrity": "sha512-zdiLhnbe1QQqgDT8xZMpNmyqZ3qlI+/Q/FHQco57Kwl/b05HhCzN6eVGN9QU9rbga4CrS0H5SYY8VGHZCt/1Hg==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.8", + "@vue/shared": "3.5.43", + "entities": "^7.0.1", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.5.43", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.43.tgz", + "integrity": "sha512-PEZoAk3NQmsn/ejMzSOCyTYqwGqczrWm70PuhBKjjv1+TCoQAaO/zOqNwjV+honlNstT5ILxtc+8r8UUfj+iEQ==", + "license": "MIT", + "dependencies": { + "@vue/compiler-core": "3.5.43", + "@vue/shared": "3.5.43" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.5.43", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.43.tgz", + "integrity": "sha512-FCbrG3XNCRl+js3huuKx4IVHBLTvMkJhVepjbxSPu1gn4yWLaYtGNQdjJGZaMytXB6qb76qQDDmDSLy/vkmleQ==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.8", + "@vue/compiler-core": "3.5.43", + "@vue/compiler-dom": "3.5.43", + "@vue/compiler-ssr": "3.5.43", + "@vue/shared": "3.5.43", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.21", + "postcss": "^8.5.28", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.5.43", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.43.tgz", + "integrity": "sha512-GF62orf7KiJX9RqrHNGrYBudsQGD0OhJ5nDs90O8UiDuS40+YMYomiXu6w6EuvtXuRDc3MSNis3EaaSKAVSWpg==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.43", + "@vue/shared": "3.5.43" + } + }, + "node_modules/@vue/compiler-vue2": { + "version": "2.7.16", + "resolved": "https://registry.npmjs.org/@vue/compiler-vue2/-/compiler-vue2-2.7.16.tgz", + "integrity": "sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==", + "dev": true, + "license": "MIT", + "dependencies": { + "de-indent": "^1.0.2", + "he": "^1.2.0" + } + }, + "node_modules/@vue/language-core": { + "version": "2.2.12", + "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-2.2.12.tgz", + "integrity": "sha512-IsGljWbKGU1MZpBPN+BvPAdr55YPkj2nB/TBNGNC32Vy2qLG25DYu/NBN2vNtZqdRbTRjaoYrahLrToim2NanA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/language-core": "2.4.15", + "@vue/compiler-dom": "^3.5.0", + "@vue/compiler-vue2": "^2.7.16", + "@vue/shared": "^3.5.0", + "alien-signals": "^1.0.3", + "minimatch": "^9.0.3", + "muggle-string": "^0.4.1", + "path-browserify": "^1.0.1" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@vue/reactivity": { + "version": "3.5.43", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.43.tgz", + "integrity": "sha512-G/c9GyOZNI2jVaaS6OX1EF1SSFSv7H0ERqNTl4+DTFMlZmB5eVAB53aLQNam/7NL2NPtaDD7RdVrzf8uJzMuOA==", + "license": "MIT", + "dependencies": { + "@vue/shared": "3.5.43" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.5.43", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.43.tgz", + "integrity": "sha512-hU6U6VnVhBGQDpvlnnDlIB8ZGJBiOcgk2lh/0InltHiz3D8oSkluvuvY+do1G2H3+udeKFsmaBlgVYP7gXQzEw==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.43", + "@vue/shared": "3.5.43" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.5.43", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.43.tgz", + "integrity": "sha512-Bb2Jc0YjjJdMt1SJmb9b2L/IWd3I8lIT9x9eS/xvvP9CiVgna0ffua74xKRmt4/uSJ+0r4iN8ex1jrqkhQGWQw==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.43", + "@vue/runtime-core": "3.5.43", + "@vue/shared": "3.5.43", + "csstype": "^3.2.3" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.5.43", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.43.tgz", + "integrity": "sha512-l2Ygjv9NehV94PSBxNWsAHC0j/eIIKbn92mBuWXAPGLnn6HfJ6MH5ubsd+Nk0YoZ5FRuxWI1P2VSoh+dbPQhCQ==", + "license": "MIT", + "dependencies": { + "@vue/compiler-ssr": "3.5.43", + "@vue/runtime-dom": "3.5.43", + "@vue/shared": "3.5.43" + } + }, + "node_modules/@vue/shared": { + "version": "3.5.43", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.43.tgz", + "integrity": "sha512-uksS7YGMR5NZyr4JNq0Rp+QyLns0ueaz20KwzIPW9R0LH1Vnt4E+XUM29PNseEbf1www2gOuhuDi5AKOIXag9Q==", + "license": "MIT" + }, + "node_modules/alien-signals": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/alien-signals/-/alien-signals-1.0.13.tgz", + "integrity": "sha512-OGj9yyTnJEttvzhTUWuscOvtqxq5vrhF7vL9oS0xJ2mK0ItPYP1/y+vCFebfxoEyAz0++1AIwJ5CMr+Fk3nDmg==", + "dev": true, + "license": "MIT" + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/brace-expansion": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.7.tgz", + "integrity": "sha512-uZbew1NqdmPDTMJ8ah1y+b+9QEJrfkXFk3RcTQw3X0jW/xRUvFKsg1CfQdSYGdTbXZWExtU3J3ccxtnfw1Fi0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "license": "MIT" + }, + "node_modules/de-indent": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", + "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==", + "dev": true, + "license": "MIT" + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.25.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.25.1.tgz", + "integrity": "sha512-nGXts5znJzmWPu+mIE9izCOzdg63oJca2mDzGWWTth7sr4aCToKcoyFVBQwN75Ij5Pf6p510EwkTqViTRzDV+w==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.3.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/entities": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz", + "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/esbuild": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz", + "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.12", + "@esbuild/android-arm": "0.25.12", + "@esbuild/android-arm64": "0.25.12", + "@esbuild/android-x64": "0.25.12", + "@esbuild/darwin-arm64": "0.25.12", + "@esbuild/darwin-x64": "0.25.12", + "@esbuild/freebsd-arm64": "0.25.12", + "@esbuild/freebsd-x64": "0.25.12", + "@esbuild/linux-arm": "0.25.12", + "@esbuild/linux-arm64": "0.25.12", + "@esbuild/linux-ia32": "0.25.12", + "@esbuild/linux-loong64": "0.25.12", + "@esbuild/linux-mips64el": "0.25.12", + "@esbuild/linux-ppc64": "0.25.12", + "@esbuild/linux-riscv64": "0.25.12", + "@esbuild/linux-s390x": "0.25.12", + "@esbuild/linux-x64": "0.25.12", + "@esbuild/netbsd-arm64": "0.25.12", + "@esbuild/netbsd-x64": "0.25.12", + "@esbuild/openbsd-arm64": "0.25.12", + "@esbuild/openbsd-x64": "0.25.12", + "@esbuild/openharmony-arm64": "0.25.12", + "@esbuild/sunos-x64": "0.25.12", + "@esbuild/win32-arm64": "0.25.12", + "@esbuild/win32-ia32": "0.25.12", + "@esbuild/win32-x64": "0.25.12" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "license": "MIT" + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "license": "MIT", + "bin": { + "he": "bin/he" + } + }, + "node_modules/jiti": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.7.0.tgz", + "integrity": "sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/lightningcss": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz", + "integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.32.0", + "lightningcss-darwin-arm64": "1.32.0", + "lightningcss-darwin-x64": "1.32.0", + "lightningcss-freebsd-x64": "1.32.0", + "lightningcss-linux-arm-gnueabihf": "1.32.0", + "lightningcss-linux-arm64-gnu": "1.32.0", + "lightningcss-linux-arm64-musl": "1.32.0", + "lightningcss-linux-x64-gnu": "1.32.0", + "lightningcss-linux-x64-musl": "1.32.0", + "lightningcss-win32-arm64-msvc": "1.32.0", + "lightningcss-win32-x64-msvc": "1.32.0" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz", + "integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz", + "integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz", + "integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz", + "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz", + "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz", + "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz", + "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz", + "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz", + "integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz", + "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz", + "integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lucide-vue-next": { + "version": "0.468.0", + "resolved": "https://registry.npmjs.org/lucide-vue-next/-/lucide-vue-next-0.468.0.tgz", + "integrity": "sha512-quV/6T8YB1XK0VOEnebg3Byd8Rsan5/m95cvjnuHV4vcS3qEnLAybkrSh0hk3ppavx+V7R1PjNW+mGDvcBdz4A==", + "deprecated": "Package deprecated. Please use @lucide/vue instead.", + "license": "ISC", + "peerDependencies": { + "vue": ">=3.0.1" + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/minimatch": { + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", + "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.2" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/muggle-string": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.4.1.tgz", + "integrity": "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.19", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.19.tgz", + "integrity": "sha512-Y2tUNy4ouw6tq5oDSKeQYGOyhkUBhNOcGV/02KC+6kd9eDGqdZd++mjMiIDilrBYvjEnCYvVtsuHCuP+okSfug==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "dev": true, + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.7.tgz", + "integrity": "sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.28", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.28.tgz", + "integrity": "sha512-RRuzqDtt5Y9h3quz5hWhK+TPnsmVs6WwSU6LkJMeY4HstUEDuYTG8UJSdawMRzmzAtV+KEoG8N3Qg2qLy5vM/A==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.18", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/rollup": { + "version": "4.63.5", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.63.5.tgz", + "integrity": "sha512-KRWwmNLlPw5M7HcdYfm15oBv9n9LPtjzpzCIxS/phwqvPyxHSoKX6Y2YU3pxSPfy0CLquVgsx/j/hBi6OvH1Nw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.9" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@napi-rs/lzma-linux-x64-gnu": "1.5.1", + "@rollup/rollup-android-arm-eabi": "4.63.5", + "@rollup/rollup-android-arm64": "4.63.5", + "@rollup/rollup-darwin-arm64": "4.63.5", + "@rollup/rollup-darwin-x64": "4.63.5", + "@rollup/rollup-freebsd-arm64": "4.63.5", + "@rollup/rollup-freebsd-x64": "4.63.5", + "@rollup/rollup-linux-arm-gnueabihf": "4.63.5", + "@rollup/rollup-linux-arm-musleabihf": "4.63.5", + "@rollup/rollup-linux-arm64-gnu": "4.63.5", + "@rollup/rollup-linux-arm64-musl": "4.63.5", + "@rollup/rollup-linux-loong64-gnu": "4.63.5", + "@rollup/rollup-linux-loong64-musl": "4.63.5", + "@rollup/rollup-linux-ppc64-gnu": "4.63.5", + "@rollup/rollup-linux-ppc64-musl": "4.63.5", + "@rollup/rollup-linux-riscv64-gnu": "4.63.5", + "@rollup/rollup-linux-riscv64-musl": "4.63.5", + "@rollup/rollup-linux-s390x-gnu": "4.63.5", + "@rollup/rollup-linux-x64-gnu": "4.63.5", + "@rollup/rollup-linux-x64-musl": "4.63.5", + "@rollup/rollup-openbsd-x64": "4.63.5", + "@rollup/rollup-openharmony-arm64": "4.63.5", + "@rollup/rollup-win32-arm64-msvc": "4.63.5", + "@rollup/rollup-win32-ia32-msvc": "4.63.5", + "@rollup/rollup-win32-x64-gnu": "4.63.5", + "@rollup/rollup-win32-x64-msvc": "4.63.5", + "fsevents": "~2.3.2" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tailwindcss": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.3.3.tgz", + "integrity": "sha512-gOhV3P7ufE62QDGg1zVaTgCR+EtPv92k2nIhVcVKcLmxT1sUBsQGhnZj175j+MqRt4zLF7ic+sCYjfhxMxj7YQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/tapable": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.3.tgz", + "integrity": "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "devOptional": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/vite": { + "version": "6.4.3", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.4.3.tgz", + "integrity": "sha512-NTKlcQjlAK7MlQoyb6LgaqHc8sso/pVyUJYWMws3jg21uTJw/LddqIFPcPqP6PzpgbIcZyKI85sFE4HBrQDA8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.4.4", + "picomatch": "^4.0.2", + "postcss": "^8.5.3", + "rollup": "^4.34.9", + "tinyglobby": "^0.2.13" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "jiti": ">=1.21.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vscode-uri": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.2.0.tgz", + "integrity": "sha512-m2gXo3bn0G1kT9InzMf07fTbqMbGtyckj3bH5ktLO+1Ssv+yiATZ4dhwaQv9UZWxJh6E9IFGnQyjgWVDWVBDrg==", + "dev": true, + "license": "MIT" + }, + "node_modules/vue": { + "version": "3.5.43", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.43.tgz", + "integrity": "sha512-o5qZoksdnjIKvW1srZ3ab7pcDNYAerBjRe54D0LBLfRdCYFrSgBHVXokMas35czQc0//lmx4/tuY4ZNQ+Rf2Ng==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.43", + "@vue/compiler-sfc": "3.5.43", + "@vue/runtime-dom": "3.5.43", + "@vue/server-renderer": "3.5.43", + "@vue/shared": "3.5.43" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/vue-tsc": { + "version": "2.2.12", + "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-2.2.12.tgz", + "integrity": "sha512-P7OP77b2h/Pmk+lZdJ0YWs+5tJ6J2+uOQPo7tlBnY44QqQSPYvS0qVT4wqDJgwrZaLe47etJLLQRFia71GYITw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/typescript": "2.4.15", + "@vue/language-core": "2.2.12" + }, + "bin": { + "vue-tsc": "bin/vue-tsc.js" + }, + "peerDependencies": { + "typescript": ">=5.0.0" + } + } + } +} diff --git a/projects/moritzgrafde/package.json b/projects/moritzgrafde/package.json new file mode 100644 index 0000000..f5f13ad --- /dev/null +++ b/projects/moritzgrafde/package.json @@ -0,0 +1,25 @@ +{ + "name": "moritzgrafde", + "private": true, + "version": "2.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vue-tsc -b && vite build", + "preview": "vite preview", + "typecheck": "vue-tsc --noEmit" + }, + "dependencies": { + "lucide-vue-next": "^0.468.0", + "vue": "^3.5.13" + }, + "devDependencies": { + "@tailwindcss/vite": "^4.0.9", + "@types/node": "^22.10.2", + "@vitejs/plugin-vue": "^5.2.1", + "tailwindcss": "^4.0.9", + "typescript": "^5.7.2", + "vite": "^6.2.0", + "vue-tsc": "^2.2.0" + } +} diff --git a/projects/moritzgrafde/public/404.html b/projects/moritzgrafde/public/404.html deleted file mode 100644 index 8aefb09..0000000 --- a/projects/moritzgrafde/public/404.html +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - - - - - - - - - -Moritz Graf - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - -
-

404

-

Sorry! That page does not exist. It may have been removed or moved to a new section on the site. Click here go back to the home page.

-
- - - - - -
- - - - - - - - - - - - - - - - - diff --git a/projects/moritzgrafde/public/apple-touch-icon.png b/projects/moritzgrafde/public/apple-touch-icon.png deleted file mode 100644 index 5fd7600..0000000 Binary files a/projects/moritzgrafde/public/apple-touch-icon.png and /dev/null differ diff --git a/projects/moritzgrafde/public/browserconfig.xml b/projects/moritzgrafde/public/browserconfig.xml deleted file mode 100644 index b97aacb..0000000 --- a/projects/moritzgrafde/public/browserconfig.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - #ffc40d - - - diff --git a/projects/moritzgrafde/public/categories/index.html b/projects/moritzgrafde/public/categories/index.html deleted file mode 100644 index fab74f9..0000000 --- a/projects/moritzgrafde/public/categories/index.html +++ /dev/null @@ -1,89 +0,0 @@ - - - - - - - - - - - - - - -Moritz Graf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - -
- -
- - - - - - - - -
- - - - - - - - - - - - - - - - - diff --git a/projects/moritzgrafde/public/categories/index.xml b/projects/moritzgrafde/public/categories/index.xml deleted file mode 100644 index 9e79db4..0000000 --- a/projects/moritzgrafde/public/categories/index.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - Categories on Moritz Graf - https://moritzgraf.de/categories/ - Recent content in Categories on Moritz Graf - Hugo - en-US - - - diff --git a/projects/moritzgrafde/public/css/main.css b/projects/moritzgrafde/public/css/main.css deleted file mode 100644 index e37a2a3..0000000 --- a/projects/moritzgrafde/public/css/main.css +++ /dev/null @@ -1,257 +0,0 @@ -@-ms-viewport -{ - width: device-width; -} -@-o-viewport -{ - width: device-width; -} -@viewport -{ - width: device-width; -} -a, -a:hover, -a:visited, -a:link -{ - text-decoration: none; - - color: #526d7a; -} -body -{ - font-family: 'Roboto Slab', 'Roboto', 'Lato', sans-serif; - font-size: 20px; - font-weight: 400; - - width: auto; - height: 100%; - min-height: 100%; - margin: 0; - - background-color: #fcfcfc; -} -html -{ - position: relative; - - height: 100%; - min-height: 100%; - margin: 0; -} -.author -{ - color: #444; -} -.author h1, -.author h2, -.author h3, -.author h4, -.author h5, -.author h6, -.author p -{ - font-family: 'Roboto Slab', serif; -} -.category -{ - color: #966 !important; -} -.container -{ - overflow: auto; - - max-width: 680px; - padding: 0 15px; -} -.content -{ - margin-top: 20px; - margin-bottom: 20px; -} -div.content -{ - font-family: 'Roboto', sans-serif; - font-size: 18px; - font-weight: 300; - - color: #777; -} -.copyright -{ - font-family: 'Roboto', sans-serif; - font-size: 12px; - font-weight: 200; -} -.description -{ - font-family: 'Roboto', sans-serif; - font-weight: 200; - color: #bbb; -} -.error -{ - font-family: 'Roboto', sans-serif; - - margin-top: 100px; -} -.error h1 -{ - font-size: 80px; - - color: #bbb; -} -.error p -{ - margin-top: 150px; - - color: #777; -} -.excerpt -{ - font-family: 'Lato', sans-serif; - font-size: 18px; - font-weight: 200; - - color: #555; - margin-bottom: 20px; -} -.footer -{ - margin-top: 10px; - - color: #bbb; -} -.header -{ - margin-top: 60px; - margin-bottom: 20px; -} -.headshot -{ - width: 200px; - height: 200px; -} -.info -{ - margin-top: 10px; - margin-bottom: 20px; -} -.intro -{ - font-family: 'Roboto Slab', serif; - font-weight: 200; - color: #777; -} -h3.intro -{ - margin-top: 0px -} -.list -{ - font-family: 'Roboto', sans-serif; - - margin-top: 50px; -} -.list li -{ - list-style: none; -} -.list-entry -{ - font-family: 'Roboto Slab', serif; - font-size: 25px; - font-weight: 400; - - margin-top: 10px; - margin-bottom: 20px; -} -.list-entry-link -{ - padding: 0; -} -.main-menu -{ - margin-top: 10px; - margin-bottom: 20px; -} -.menu -{ - margin-top: 10px; - margin-bottom: 20px; -} -.menu-item -{ - font-family: 'Lato', sans-serif; - font-size: 20px; - font-weight: 300; - - text-decoration: none; - - color: #966 !important; -} -.meta -{ - font-family: 'Roboto', sans-serif; - font-size: 12px; - font-weight: 200; - - color: #bbb; -} -a.meta -{ - color: #966; -} -h6.meta -{ - font-family: 'Roboto', sans-serif; - font-size: 12px; - font-weight: 200; - - color: #bbb; -} -section.meta { - margin-top: -} -.powered -{ - font-family: 'Roboto', sans-serif; - font-size: 12px; - font-weight: 300; -} -.social { - margin-top: 10px; - margin-bottom: 20px; -} -.social, -.social a -{ - color: #526d7a; -} -.title -{ - font-family: 'Roboto Slab', serif; - font-weight: 400; - - color: #555; -} -header.title -{ - margin-top: 50px; - padding: 0 15px; -} -@media (max-width: 991px) -{ - .header - { - margin-top: 50px; - margin-bottom: 20px; - } - .list - { - font-family: 'Roboto', sans-serif; - - margin-top: 30px; - } -} diff --git a/projects/moritzgrafde/public/favicon-16x16.png b/projects/moritzgrafde/public/favicon-16x16.png deleted file mode 100644 index dd1c94f..0000000 Binary files a/projects/moritzgrafde/public/favicon-16x16.png and /dev/null differ diff --git a/projects/moritzgrafde/public/favicon-32x32.png b/projects/moritzgrafde/public/favicon-32x32.png deleted file mode 100644 index b2758da..0000000 Binary files a/projects/moritzgrafde/public/favicon-32x32.png and /dev/null differ diff --git a/projects/moritzgrafde/public/img/headshot.jpg b/projects/moritzgrafde/public/headshot.jpg similarity index 100% rename from projects/moritzgrafde/public/img/headshot.jpg rename to projects/moritzgrafde/public/headshot.jpg diff --git a/projects/moritzgrafde/public/img/.gitkeep b/projects/moritzgrafde/public/img/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/projects/moritzgrafde/public/img/Ohne Titel.jpg b/projects/moritzgrafde/public/img/Ohne Titel.jpg deleted file mode 100644 index 9d45aa8..0000000 Binary files a/projects/moritzgrafde/public/img/Ohne Titel.jpg and /dev/null differ diff --git a/projects/moritzgrafde/public/index.html b/projects/moritzgrafde/public/index.html deleted file mode 100644 index 5ed40be..0000000 --- a/projects/moritzgrafde/public/index.html +++ /dev/null @@ -1,127 +0,0 @@ - - - - - - - - - - - - - - -Moritz Graf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - -
- Author Image -

Moritz Graf

-
- - -
- -


-

- - -


-

- -
- - -
- - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - -
- - - - - - - - - - - - - - - - - diff --git a/projects/moritzgrafde/public/index.xml b/projects/moritzgrafde/public/index.xml deleted file mode 100644 index a14ccbe..0000000 --- a/projects/moritzgrafde/public/index.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - Moritz Graf - https://moritzgraf.de/ - Recent content on Moritz Graf - Hugo - en-US - - - diff --git a/projects/moritzgrafde/public/js/main.js b/projects/moritzgrafde/public/js/main.js deleted file mode 100644 index 3070117..0000000 --- a/projects/moritzgrafde/public/js/main.js +++ /dev/null @@ -1,11 +0,0 @@ -// Copyright 2014-2015 Twitter, Inc. -// Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) -if (navigator.userAgent.match(/IEMobile\/10\.0/)) { - var msViewportStyle = document.createElement('style') - msViewportStyle.appendChild( - document.createTextNode( - '@-ms-viewport{width:auto!important}' - ) - ) - document.querySelector('head').appendChild(msViewportStyle) -} diff --git a/projects/moritzgrafde/public/manifest.json b/projects/moritzgrafde/public/manifest.json deleted file mode 100644 index e5c3ddd..0000000 --- a/projects/moritzgrafde/public/manifest.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "name": "hugo-goa", - "icons": [ - ], - "theme_color": "#ffffff", - "display": "standalone" -} diff --git a/projects/moritzgrafde/public/mstile-150x150.png b/projects/moritzgrafde/public/mstile-150x150.png deleted file mode 100644 index 207186f..0000000 Binary files a/projects/moritzgrafde/public/mstile-150x150.png and /dev/null differ diff --git a/projects/moritzgrafde/public/safari-pinned-tab.svg b/projects/moritzgrafde/public/safari-pinned-tab.svg deleted file mode 100644 index 66d5958..0000000 --- a/projects/moritzgrafde/public/safari-pinned-tab.svg +++ /dev/null @@ -1,30 +0,0 @@ - - - - -Created by potrace 1.11, written by Peter Selinger 2001-2013 - - - - - diff --git a/projects/moritzgrafde/public/sitemap.xml b/projects/moritzgrafde/public/sitemap.xml deleted file mode 100644 index aa3d697..0000000 --- a/projects/moritzgrafde/public/sitemap.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - https://moritzgraf.de/categories/ - - https://moritzgraf.de/ - - https://moritzgraf.de/tags/ - - diff --git a/projects/moritzgrafde/public/tags/index.html b/projects/moritzgrafde/public/tags/index.html deleted file mode 100644 index 74856fa..0000000 --- a/projects/moritzgrafde/public/tags/index.html +++ /dev/null @@ -1,89 +0,0 @@ - - - - - - - - - - - - - - -Moritz Graf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - -
- -
- - - - - - - - -
- - - - - - - - - - - - - - - - - diff --git a/projects/moritzgrafde/public/tags/index.xml b/projects/moritzgrafde/public/tags/index.xml deleted file mode 100644 index f0c9584..0000000 --- a/projects/moritzgrafde/public/tags/index.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - Tags on Moritz Graf - https://moritzgraf.de/tags/ - Recent content in Tags on Moritz Graf - Hugo - en-US - - - diff --git a/projects/moritzgrafde/src/App.vue b/projects/moritzgrafde/src/App.vue new file mode 100644 index 0000000..6ac35fa --- /dev/null +++ b/projects/moritzgrafde/src/App.vue @@ -0,0 +1,47 @@ + + + diff --git a/projects/moritzgrafde/src/components/CapabilityDossiers.vue b/projects/moritzgrafde/src/components/CapabilityDossiers.vue new file mode 100644 index 0000000..fe55ad4 --- /dev/null +++ b/projects/moritzgrafde/src/components/CapabilityDossiers.vue @@ -0,0 +1,115 @@ + + + diff --git a/projects/moritzgrafde/src/components/ContactSection.vue b/projects/moritzgrafde/src/components/ContactSection.vue new file mode 100644 index 0000000..f2519f8 --- /dev/null +++ b/projects/moritzgrafde/src/components/ContactSection.vue @@ -0,0 +1,133 @@ + + + diff --git a/projects/moritzgrafde/src/components/EngineeringPhilosophy.vue b/projects/moritzgrafde/src/components/EngineeringPhilosophy.vue new file mode 100644 index 0000000..84d0dde --- /dev/null +++ b/projects/moritzgrafde/src/components/EngineeringPhilosophy.vue @@ -0,0 +1,60 @@ + + + diff --git a/projects/moritzgrafde/src/components/Hero.vue b/projects/moritzgrafde/src/components/Hero.vue new file mode 100644 index 0000000..98dd625 --- /dev/null +++ b/projects/moritzgrafde/src/components/Hero.vue @@ -0,0 +1,164 @@ + + + diff --git a/projects/moritzgrafde/src/components/ImpactStats.vue b/projects/moritzgrafde/src/components/ImpactStats.vue new file mode 100644 index 0000000..4d0f944 --- /dev/null +++ b/projects/moritzgrafde/src/components/ImpactStats.vue @@ -0,0 +1,43 @@ + + + diff --git a/projects/moritzgrafde/src/components/ImpressumModal.vue b/projects/moritzgrafde/src/components/ImpressumModal.vue new file mode 100644 index 0000000..85de0ca --- /dev/null +++ b/projects/moritzgrafde/src/components/ImpressumModal.vue @@ -0,0 +1,79 @@ + + + diff --git a/projects/moritzgrafde/src/components/Navbar.vue b/projects/moritzgrafde/src/components/Navbar.vue new file mode 100644 index 0000000..e9316ed --- /dev/null +++ b/projects/moritzgrafde/src/components/Navbar.vue @@ -0,0 +1,149 @@ + + + diff --git a/projects/moritzgrafde/src/components/SkillMatrix.vue b/projects/moritzgrafde/src/components/SkillMatrix.vue new file mode 100644 index 0000000..0b604b5 --- /dev/null +++ b/projects/moritzgrafde/src/components/SkillMatrix.vue @@ -0,0 +1,202 @@ + + + diff --git a/projects/moritzgrafde/src/data/portfolioData.ts b/projects/moritzgrafde/src/data/portfolioData.ts new file mode 100644 index 0000000..28260f2 --- /dev/null +++ b/projects/moritzgrafde/src/data/portfolioData.ts @@ -0,0 +1,290 @@ +import type { + Credential, + StatItem, + CapabilityDossier, + SkillItem, + Principle, + SocialLink +} from '@/types' + +export const personalInfo = { + name: 'Moritz Graf', + title: 'Cloud Platform & Infrastructure Leader', + tagline: 'Architecting resilient multi-cloud foundations, scaling Kubernetes platforms, and steering enterprise carve-out migrations.', + bioSummary: 'Central Platform Engineer and Engineering Leader with over a decade of production operations experience. I specialize in building autonomous developer platforms on Google Cloud and AWS, operating Kubernetes at scale, and orchestrating complex enterprise cloud spin-offs. Grounded in low-level systems engineering, network routing (BGP, SIP), and maker craft.', + location: 'Regensburg, Germany', + email: 'contact-moritz@moritzgraf.de', + headshotUrl: '/headshot.jpg', + availabilityBadge: 'Active in Central Platform Engineering', + credentialsSummary: 'CKA · PSM II · M.Sc. Computer Science' +} + +export const credentials: Credential[] = [ + { + id: 'cka', + title: 'Certified Kubernetes Administrator (CKA)', + issuer: 'Cloud Native Computing Foundation (CNCF)', + badgeText: 'CKA Certified', + icon: 'ShieldCheck', + highlight: true + }, + { + id: 'psm2', + title: 'Professional Scrum Master II (PSM II)', + issuer: 'Scrum.org', + badgeText: 'PSM II Advanced', + icon: 'Award', + highlight: true + }, + { + id: 'msc', + title: 'M.Sc. Computer Science (Technical Systems)', + issuer: 'OTH Regensburg', + badgeText: 'M.Sc. Degree', + icon: 'GraduationCap' + }, + { + id: 'psm1', + title: 'Professional Scrum Master I (PSM I)', + issuer: 'Scrum.org', + badgeText: 'PSM I', + icon: 'Award' + }, + { + id: 'itil', + title: 'ITIL Foundation (v3)', + issuer: 'AXELOS', + badgeText: 'ITIL Certified', + icon: 'CheckCircle2' + }, + { + id: 'lang', + title: 'UNIcert III Technical English (C1)', + issuer: 'Language Center Regensburg', + badgeText: 'C1 Fluent', + icon: 'Globe' + } +] + +export const impactStats: StatItem[] = [ + { + value: 'Multi-Cloud', + label: 'Hyperscaler Mastery', + description: 'Central Platform on GCP & enterprise analytics platforms on AWS' + }, + { + value: 'Spin-Off', + label: 'Carve-Out Leadership', + description: 'Technical cloud separation & migration from Continental to AUMOVIO' + }, + { + value: 'K8s at Scale', + label: 'CKA-Certified GitOps', + description: 'Bare-metal & cloud clusters managed via Kubespray, Helm, & Istio' + }, + { + value: '12+ Years', + label: 'Infrastructure Depth', + description: 'Continuous production operations, high-availability & on-call leadership' + } +] + +export const capabilityDossiers: CapabilityDossier[] = [ + { + id: 'cloud-platforms', + title: 'Enterprise Multi-Cloud Platforms', + category: 'Cloud Architecture & Governance', + tagline: 'Resilient, secure, and self-service landing zones across Google Cloud and AWS.', + overview: 'Designing and maintaining centralized enterprise cloud foundations that balance developer velocity with enterprise-grade guardrails. Leading central platform strategy for Google Cloud (GCP) and enterprise analytics platforms on AWS.', + icon: 'Cloud', + keyAreas: [ + 'GCP Organization & Landing Zones architecture with fine-grained IAM & VPC Service Controls', + 'AWS multi-account governance (Control Tower, SCPs, Transit Gateway, Direct Connect)', + 'Automated tenant onboarding with self-service project/account vending machines', + 'Cost governance, FinOps visibility, resource tagging, and budget alerting automation' + ], + technologies: ['Google Cloud (GCP)', 'AWS', 'IAM', 'VPC Service Controls', 'Transit Gateway', 'Organizations', 'FinOps'], + impactNote: 'Powers centralized platform capabilities across hundreds of projects and thousands of internal users.' + }, + { + id: 'kubernetes-cncf', + title: 'Kubernetes & Cloud-Native Ecosystem', + category: 'Container Orchestration & GitOps', + tagline: 'CKA-certified cluster architecture, service meshes, and GitOps delivery pipelines.', + overview: 'Deep hands-on expertise operating production Kubernetes clusters on bare-metal and in cloud environments. Specializing in immutable cluster provisioning, zero-trust service mesh networking, and declarative GitOps pipelines.', + icon: 'Server', + keyAreas: [ + 'Production cluster lifecycle provisioning via Kubespray, Ansible, and managed cloud engines', + 'Service mesh routing, mutual TLS (mTLS), and traffic shaping with Istio and Traefik Ingress', + 'Declarative GitOps deployment workflows using ArgoCD, Flux, and Kustomize overlays', + 'Full-stack cluster observability with Prometheus, Thanos, Loki, and custom Grafana dashboards' + ], + technologies: ['Kubernetes (CKA)', 'Kubespray', 'Istio', 'Traefik', 'Helm', 'Kustomize', 'ArgoCD', 'Prometheus', 'Grafana'], + impactNote: 'Maintains zero-downtime microservice environments with automated certificate lifecycle management.' + }, + { + id: 'data-platforms', + title: 'Enterprise Data Lake & Analytics Enablement', + category: 'Data Engineering & Service Ownership', + tagline: 'Product & Service Ownership of global enterprise data lake platforms.', + overview: 'Led the Continental.datalake platform as Global Team Lead, Service Owner, and Product Owner. Bridging business data requirements with rock-solid infrastructure to deliver self-service analytics for data scientists and engineers.', + icon: 'Database', + keyAreas: [ + 'Global Service & Product Ownership of an enterprise data lake serving hundreds of data workloads', + 'Scalable analytical storage pipelines leveraging Amazon S3, Redshift, Glue, and Matillion ETL', + 'Data governance, cataloging, compliance, and granular data access control policies', + 'High-throughput telemetry and metrics processing with real-time alerting' + ], + technologies: ['Amazon Redshift', 'S3 Data Lake', 'AWS Glue', 'Matillion', 'Kafka', 'Python Data Tooling', 'Athena'], + impactNote: 'Delivered mission-critical data lake services supporting global enterprise analytics and machine learning initiatives.' + }, + { + id: 'iac-automation', + title: 'Declarative Infrastructure as Code (IaC)', + category: 'Automation & Continuous Delivery', + tagline: '100% Everything as Code: repeatable, testable, and drift-resistant infrastructure.', + overview: 'Pioneer of GitOps and automated infrastructure workflows. Managing multi-region infrastructure exclusively through declarative manifests, pull-request driven automation, and automated validation tests.', + icon: 'Code2', + keyAreas: [ + 'Modular Terraform and Terragrunt architectures with DRY module reuse and remote state locking', + 'Automated PR workflows with Atlantis, Renovatebot, and pre-commit security validation', + 'Configuration management and server templating using Ansible and Packer', + 'Robust CI/CD pipelines in Jenkins and GitHub Actions with automated linting and security scanning' + ], + technologies: ['Terraform', 'Terragrunt', 'Atlantis', 'Ansible', 'GitHub Actions', 'Jenkins', 'Packer', 'Renovatebot'], + impactNote: 'Eliminated manual infrastructure changes, enforcing peer review and automated compliance across all environments.' + }, + { + id: 'leadership-governance', + title: 'Engineering Leadership & Enterprise Spin-Offs', + category: 'People, Culture & Organizational Transformation', + tagline: 'Steering high-stakes cloud carve-outs and cultivating high-trust engineering teams.', + overview: 'Experienced team lead and PSM II Scrum Master with a proven track record of guiding engineering teams through structural corporate carve-outs. Steered the cloud infrastructure separation during the spin-off from Continental to AUMOVIO.', + icon: 'Users', + keyAreas: [ + 'Technical leadership of the cloud platform carve-out and migration from Continental to AUMOVIO', + 'Serving as Global Team Lead and Agile Coach (PSM II) fostering psychological safety and autonomy', + 'Founding and hosting technical exchange forums (DevOps Office Hours, Architecture Syncs)', + 'Mentoring junior and mid-level platform engineers in infrastructure best practices' + ], + technologies: ['Scrum (PSM II)', 'Carve-Out Strategy', 'Service Management', 'Team Mentorship', 'DevOps Advocacy', 'Stakeholder Management'], + impactNote: 'Executed seamless platform transition during enterprise spin-off without operational downtime.' + }, + { + id: 'systems-networking-iot', + title: 'Systems Depth, Telecom Roots & Maker Craft', + category: 'Low-Level Engineering & Physical Hardware', + tagline: 'From BGP and VoIP SIP protocols to physical IoT sensors and microcontroller labs.', + overview: 'Unlike purely conceptual architects, my foundation is built on deep telecommunications engineering, Linux kernel performance tuning, and hands-on physical hardware hacking. Understanding the metal makes cloud abstractions trivial.', + icon: 'Cpu', + keyAreas: [ + 'Telecom infrastructure: SIP redirect servers, dynamic least-cost routing, ISDN, and Cisco ASR platforms', + 'Enterprise networking: BGP routing and troubleshooting, Fortinet firewalls, DMZ segmentation', + 'Deep Linux performance engineering and kernel diagnostics using atop, eBPF, and system tools', + 'Physical IoT and hardware tinkering: ESPHome firmware, BLE sensor mesh, and home automation nodes' + ], + technologies: ['BGP', 'Cisco ASR', 'VoIP (SIP/ISDN)', 'Linux Internals (atop)', 'ESPHome', 'ESP32 / BLE', 'Fortinet', 'Python / Bash'], + impactNote: 'Applies deep understanding of physical networking and hardware constraints to diagnose complex distributed systems.' + } +] + +export const skills: SkillItem[] = [ + // Cloud & Multi-Cloud + { name: 'Google Cloud (GCP)', category: 'cloud', tags: ['Central Platform', 'Landing Zones', 'IAM', 'VPC Service Controls'], description: 'Leading central enterprise platform architecture and organizational governance.', featured: true }, + { name: 'Amazon Web Services (AWS)', category: 'cloud', tags: ['Enterprise Scale', 'Control Tower', 'EKS', 'S3', 'Redshift'], description: 'Multi-account AWS landing zones, analytics architectures, and automation.', featured: true }, + { name: 'Multi-Cloud Architecture', category: 'cloud', tags: ['Enterprise Strategy', 'Hybrid Cloud', 'Zero-Trust'], description: 'Designing unified identity and network boundaries across disparate providers.' }, + { name: 'FinOps & Cost Governance', category: 'cloud', tags: ['Budgets', 'Tagging Enforcement', 'Cost Optimization'], description: 'Algorithmic cost allocation, rightsizing, and spend visibility.' }, + + // Kubernetes & CNCF + { name: 'Kubernetes (CKA)', category: 'k8s', tags: ['Certified', 'Cluster Architecture', 'Production Operations'], description: 'Certified Kubernetes Administrator with bare-metal and cloud cluster expertise.', featured: true }, + { name: 'Kubespray & Kubeadm', category: 'k8s', tags: ['Ansible', 'Bare Metal', 'Cluster Lifecycle'], description: 'Automated cluster bootstrapping, OS hardening, and zero-downtime upgrades.', featured: true }, + { name: 'Istio Service Mesh', category: 'k8s', tags: ['mTLS', 'Traffic Management', 'Security'], description: 'Zero-trust networking, traffic splitting, and service-to-service encryption.' }, + { name: 'Traefik & Ingress-Nginx', category: 'k8s', tags: ['Ingress Controllers', 'Let\'s Encrypt', 'Cert-Manager'], description: 'Edge routing, automatic SSL/TLS certificate lifecycle, and header mutation.' }, + { name: 'Helm & Kustomize', category: 'k8s', tags: ['Package Management', 'Overlays', 'GitOps'], description: 'Declarative workload templating across staging and production clusters.' }, + { name: 'ArgoCD & Flux', category: 'k8s', tags: ['GitOps', 'Continuous Deployment', 'Reconciliation'], description: 'Pull-based deployment engines enforcing cluster state synchronization.' }, + + // IaC & Automation + { name: 'Terraform', category: 'iac', tags: ['HCL', 'State Management', 'Provider Authoring'], description: 'Declarative cloud provisioning with reusable, modular design patterns.', featured: true }, + { name: 'Terragrunt', category: 'iac', tags: ['DRY Modules', 'Multi-Account', 'State Locking'], description: 'Orchestrating complex multi-account and multi-region infrastructure hierarchies.', featured: true }, + { name: 'Atlantis', category: 'iac', tags: ['GitOps for IaC', 'PR Workflows', 'Automated Plans'], description: 'PR-based Terraform execution ensuring full transparency and compliance.' }, + { name: 'Ansible', category: 'iac', tags: ['Playbooks', 'Roles', 'Configuration Management'], description: 'Server provisioning, fleet configuration, and Kubespray automation.' }, + { name: 'GitHub Actions & Jenkins', category: 'iac', tags: ['CI/CD Pipelines', 'Automated Testing', 'Docker Builds'], description: 'Building resilient automated pipelines for container builds and lint checks.' }, + { name: 'Python (Scripting & Boto3)', category: 'iac', tags: ['Automation', 'CLI Tooling', 'AWS SDK'], description: 'Custom cloud automation scripts, CLI utilities, and API wrappers.' }, + + // Systems & Networking + { name: 'BGP & IP Routing', category: 'systems', tags: ['Border Gateway Protocol', 'Troubleshooting', 'Autonomous Systems'], description: 'Dynamic routing protocols, peering troubleshooting, and route reflection.', featured: true }, + { name: 'VoIP, SIP & ISDN', category: 'systems', tags: ['Telecom', 'Least Cost Routing', 'Cirpack', 'Oracle SBC'], description: 'Architected SIP redirect servers and enterprise telephony carrier routing.', featured: true }, + { name: 'Cisco ASR & Switching', category: 'systems', tags: ['Hardware Routers', 'VLANs', 'Core Infrastructure'], description: 'Carrier-grade hardware router operation, interface diagnostics, and QoS.' }, + { name: 'Linux Performance & Internals', category: 'systems', tags: ['atop', 'eBPF', 'Kernel Diagnostics', 'Troubleshooting'], description: 'Deep performance analysis, memory leak isolation, and system optimization.' }, + { name: 'Network Security & Firewalls', category: 'systems', tags: ['Fortinet', 'DMZ Design', 'Security Zones'], description: 'Designing perimeter security zones, DMZ isolation, and packet filtering.' }, + + // Data & Observability + { name: 'Enterprise Data Lake', category: 'data', tags: ['Product Owner', 'Service Owner', 'Architecture'], description: 'End-to-end service management of enterprise analytics and data pipelines.', featured: true }, + { name: 'Amazon Redshift & S3', category: 'data', tags: ['Columnar Storage', 'Data Warehousing', 'Query Optimization'], description: 'Analytical storage layers and performance tuning for big data analytics.' }, + { name: 'Prometheus & Grafana', category: 'data', tags: ['PromQL', 'Metrics', 'Dashboards', 'Alertmanager'], description: 'Comprehensive observability stacks and custom operational dashboards.' }, + { name: 'Loki & ELK Stack', category: 'data', tags: ['Log Aggregation', 'LogQL', 'Elasticsearch'], description: 'Centralized log aggregation, fast querying, and audit retention.' }, + { name: 'Matillion & ETL', category: 'data', tags: ['Pipelines', 'Transformation', 'Data Loading'], description: 'Automating high-volume data transforms and warehouse ingestion.' }, + + // Leadership & Agile + { name: 'Global Team Leadership', category: 'leadership', tags: ['People Management', 'Platform Strategy', 'Hiring'], description: 'Leading cross-functional distributed platform engineering teams.', featured: true }, + { name: 'Enterprise Spin-Off Management', category: 'leadership', tags: ['Carve-Out', 'Separation', 'Migration Strategy'], description: 'Successfully governed IT infrastructure carve-out from Continental to AUMOVIO.', featured: true }, + { name: 'Professional Scrum Master (PSM II)', category: 'leadership', tags: ['Agile Coaching', 'Scrum.org', 'Continuous Improvement'], description: 'Advanced Scrum Master fostering psychological safety and iterative delivery.', featured: true }, + { name: 'Service & Product Ownership', category: 'leadership', tags: ['ITIL', 'SLAs / SLOs', 'Stakeholder Alignment'], description: 'Full lifecycle responsibility for enterprise platforms and user satisfaction.' }, + { name: 'Community & Office Hours', category: 'leadership', tags: ['DevOps Advocacy', 'Knowledge Sharing', 'Mentorship'], description: 'Founded internal technical office hours to bridge platform teams and users.' }, + + // Hardware & IoT + { name: 'ESPHome & Microcontrollers', category: 'iot', tags: ['ESP32', 'Firmware', 'Sensor Networks'], description: 'Building custom firmware for environmental sensors and smart controllers.', featured: true }, + { name: 'BLE & Sensor Telemetry', category: 'iot', tags: ['Bluetooth LE', 'Soil/Plant Monitors', 'Telemetry'], description: 'Low-power wireless telemetry pipelines bridging edge devices to MQTT.' }, + { name: 'Self-Hosted Home Lab', category: 'iot', tags: ['Bare-Metal K8s', 'Storage', 'Home Automation'], description: 'Private infrastructure testing ground running production-grade workloads.' } +] + +export const engineeringPrinciples: Principle[] = [ + { + title: 'Declarative Everything', + statement: 'If it is not written in code and version-controlled, it does not exist.', + explanation: 'From cloud landing zones and Kubernetes manifests to firewall policies and firmware: every single component is defined declaratively, reviewed via pull requests, and deployed through automated GitOps pipelines.', + icon: 'FileCode' + }, + { + title: 'Self-Service over Gatekeeping', + statement: 'A platform team is a product team whose customers are developers.', + explanation: 'Great platform engineering does not create bureaucratic approval tickets. It provides secure, automated guardrails, golden paths, and self-service APIs so product developers can move fast with complete confidence.', + icon: 'Zap' + }, + { + title: 'Ground-Up Systems Thinking', + statement: 'Higher-level cloud abstractions always rest on physical networks and kernels.', + explanation: 'Troubleshooting distributed microservices becomes effortless when you truly understand BGP routing, TCP handshake latency, Linux memory paging, and hardware constraints. Real-world reliability requires full-stack depth.', + icon: 'Layers' + }, + { + title: 'Pragmatic & Sustainable Agility', + statement: 'Scrum exists to empower engineers, not to worship dogma.', + explanation: 'As a PSM II Scrum Master, I treat agility as a tool to protect team focus, foster psychological safety, align on clear goals, and eliminate friction so high-performing engineers can do their best work sustainably.', + icon: 'HeartHandshake' + } +] + +export const socialLinks: SocialLink[] = [ + { + platform: 'LinkedIn', + label: 'Connect on LinkedIn', + url: 'https://www.linkedin.com/in/moritz-graf-92abaa91/', + icon: 'Linkedin', + handle: 'moritz-graf-92abaa91' + }, + { + platform: 'GitHub', + label: 'Follow on GitHub', + url: 'https://github.com/iptizer', + icon: 'Github', + handle: 'iptizer' + }, + { + platform: 'Email', + label: 'Email Moritz', + url: 'mailto:contact-moritz@moritzgraf.de', + icon: 'Mail', + handle: 'contact-moritz@moritzgraf.de' + } +] diff --git a/projects/moritzgrafde/src/main.ts b/projects/moritzgrafde/src/main.ts new file mode 100644 index 0000000..2425c0f --- /dev/null +++ b/projects/moritzgrafde/src/main.ts @@ -0,0 +1,5 @@ +import { createApp } from 'vue' +import './style.css' +import App from './App.vue' + +createApp(App).mount('#app') diff --git a/projects/moritzgrafde/src/style.css b/projects/moritzgrafde/src/style.css new file mode 100644 index 0000000..fb5c407 --- /dev/null +++ b/projects/moritzgrafde/src/style.css @@ -0,0 +1,38 @@ +@import "tailwindcss"; + +@layer base { + html { + scroll-behavior: smooth; + font-family: 'Plus Jakarta Sans', system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif; + } + + code, pre, .font-mono { + font-family: 'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace; + } +} + +/* Smooth transitions for theme switching */ +body, nav, header, section, footer, div, button, input { + transition-property: background-color, border-color, color, fill, stroke; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; +} + +/* Custom scrollbar */ +::-webkit-scrollbar { + width: 7px; + height: 7px; +} + +::-webkit-scrollbar-track { + background: transparent; +} + +::-webkit-scrollbar-thumb { + background: rgba(148, 163, 184, 0.3); + border-radius: 9999px; +} + +::-webkit-scrollbar-thumb:hover { + background: rgba(100, 116, 139, 0.5); +} diff --git a/projects/moritzgrafde/src/types.ts b/projects/moritzgrafde/src/types.ts new file mode 100644 index 0000000..1c88427 --- /dev/null +++ b/projects/moritzgrafde/src/types.ts @@ -0,0 +1,59 @@ +export interface Credential { + id: string + title: string + issuer: string + badgeText: string + icon: string + highlight?: boolean +} + +export interface StatItem { + value: string + label: string + description: string +} + +export interface CapabilityDossier { + id: string + title: string + category: string + tagline: string + overview: string + icon: string + keyAreas: string[] + technologies: string[] + impactNote: string +} + +export type SkillCategory = + | 'all' + | 'cloud' + | 'k8s' + | 'iac' + | 'systems' + | 'data' + | 'leadership' + | 'iot' + +export interface SkillItem { + name: string + category: Exclude + tags: string[] + description: string + featured?: boolean +} + +export interface Principle { + title: string + statement: string + explanation: string + icon: string +} + +export interface SocialLink { + platform: string + label: string + url: string + icon: string + handle: string +} diff --git a/projects/moritzgrafde/static/img/Ohne Titel.jpg b/projects/moritzgrafde/static/img/Ohne Titel.jpg deleted file mode 100644 index 9d45aa8..0000000 Binary files a/projects/moritzgrafde/static/img/Ohne Titel.jpg and /dev/null differ diff --git a/projects/moritzgrafde/static/img/headshot.jpg b/projects/moritzgrafde/static/img/headshot.jpg deleted file mode 100644 index 80cf137..0000000 Binary files a/projects/moritzgrafde/static/img/headshot.jpg and /dev/null differ diff --git a/projects/moritzgrafde/themes/hugo-goa/.gitignore b/projects/moritzgrafde/themes/hugo-goa/.gitignore deleted file mode 100644 index 484126b..0000000 --- a/projects/moritzgrafde/themes/hugo-goa/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -exampleSite/public -.DS_Store -*/**/.DS_Store -*.sw* diff --git a/projects/moritzgrafde/themes/hugo-goa/LICENSE b/projects/moritzgrafde/themes/hugo-goa/LICENSE deleted file mode 100644 index 66c46f7..0000000 --- a/projects/moritzgrafde/themes/hugo-goa/LICENSE +++ /dev/null @@ -1,9 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2016 [Rajesh Shenoy](https://github.com/shenoybr) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/projects/moritzgrafde/themes/hugo-goa/README.md b/projects/moritzgrafde/themes/hugo-goa/README.md deleted file mode 100644 index 1f30344..0000000 --- a/projects/moritzgrafde/themes/hugo-goa/README.md +++ /dev/null @@ -1,210 +0,0 @@ - -# Goa - -Goa is a clean, simple and minimalist theme for blogs and personal websites. - - - -[![GitHub license](https://img.shields.io/badge/license-MIT-blue.svg?style=flat-square)](https://raw.githubusercontent.com/shenoybr/hugo-goa/master/LICENSE) -[![GitHub stars](https://img.shields.io/github/stars/shenoybr/hugo-goa.svg?style=flat-square)](https://github.com/shenoybr/hugo-goa/stargazers) -[![GitHub forks](https://img.shields.io/github/forks/shenoybr/hugo-goa.svg?style=flat-square)](https://github.com/shenoybr/hugo-goa/network) -[![quality badge](https://img.shields.io/badge/cuteness-overload-blue.svg?style=flat-square)](http://www.emergencykitten.com/) -[![Twitter](https://img.shields.io/twitter/url/https/github.com/shenoybr/hugo-goa.svg?style=social&style=flat-square)](https://twitter.com/intent/tweet?text=Wow:&url=%5Bobject%20Object%5D) -## Demo - -You can find the demo site in action [here](https://shenoybr.github.io/hugo-goa-demo) and the source [here](https://github.com/shenoybr/hugo-goa-demo). - -## Installation - -From the root of your blog: - -``` -mkdir -p themes -cd themes -git clone https://github.com/shenoybr/hugo-goa -``` - -## Content creation - -### Creating a post - -To create a new page or post: - -```` -hugo new about.md -```` -or - -```` -hugo new posts/first.md -```` - -You can now go ahead an edit the newly created file under the `content` directory. Once you are finished editing, to have hugo generate the page, set `draft = false` in the articles front matter. - -### Organizing pages - -The above example demonstrates how to create a pages and posts. Hugo automatically applies the list templates for a directory of pages/posts, which works well for blogs and posts. However, you may want at times want to override this behavior and create a standalone page (like an about page or projects page) or have more control of what content is listed from within the directory. In such cases, you can override the default behavior by placing an index.md file in the corresponding content -directory. - -```` -hugo new projects/index.md -```` - -### Page settings - -These settings are at the page level. - -- `showpagemeta`: default=`true`. This allows you to disable page meta information from being displayed. For example, this setting is disabled [here](https://shenoybr.github.io/hugo-goa-demo/about/) and enabled [here](https://shenoybr.github.io/hugo-goa-demo/coderag/). -- `showcomments`: default=`true`. Enables or disable comments. For example, this setting is disabled [here](https://shenoybr.github.io/hugo-goa-demo/blog/third/) and enabled [here](https://shenoybr.github.io/hugo-goa-demo/blog/first/). - -## Configuration - -The provided [config.toml](https://github.com/shenoybr/hugo-goa/blob/master/exampleSite/config.toml) describes all options and features that are supported. Configure it your way! - -### Basic Configuration - -These are site wide configuration parameters that are used by this template. - -- `baseurl`: This is the root of your site. -- `builddrafts`: default=`false`. Enables or Disable building drafts when hugo is run. -- `canonifyurls`: default=`false`. Prefix all relative URLs with your base URL. [More Information](https://gohugo.io/extras/urls#canonicalization). -- `languageCode`: Used to set site localization preferences. eg. `en-US`. -- `contentdir`: Where hugo can find your content. eg. `content`. -- `layoutdir`: Where hugo can find your templates. eg. `layouts`. -- `publishdir`: Where hugo generates the static site. eg. `public`. -- `author`: Site author name. eg. `Erlich Bachman`. -- `title`: Site title name. eg. `Erlich Bachman`. -- `theme`: Your theme name should be set to `hugo-goa` if using this theme. - -## Hugo Built-in Features - -These are features that hugo provides and are used by this template. - -- `disqusShortname`: Your discusShortname if you want to enable comments on your posts. -- `googleAnalytics`: Your google analytics id for tracking. -- `enableRobotsTXT`: Enable or disable search engines from crawling your site. - -## Site Settings `[params]` - -These are settings that are specific to this theme. - -- `author`: Main author name. eg. `Erlich Bachman`. -- `intro`: Author introduction. This field supports markdown. eg. `Startup Guru Extraordinaire`. -- `description`: Author description. This field supports markdown. eg. `Now @Pied Piper. Previously @Hacker Hostel, @Bachmanity and @Aviato.
\"What is F times 5? It's Fleventy-five.\"`. -- `authorimage`: Location of author image under static/img directory. eg. `headshot.jpg` -- `dateformat`: Golang date format to be used on this site. eg. `Jan 2, 2006` - -### Site Meta Settings `[params.meta]` - -These settings are included in the site's meta section. - -- `description`: User this field to describe your site to search engines. eg. `Simple minimalist theme`. -- `keywords`: Keywords that desribe your site. eg. `minimalist,blog,goa,hugo,developer`. - -### Social Accounts `[params.social]` - -These settings to display your social accounts. - -- `github`: Your github username. -- `instagram`: Your instagram username. -- `xing`: Your xing username. -- `linkedin`: Your linkedIn username. -- `twitter`: Your twitter username. -- `facebook`: Your facebook username. -- `google`: Your google username. -- `email`: Your email. - -### Extras `[params.extra]` - -These settings for extra features that this site uses. - -- `copyright`: Add a copyright statement to the bottom of the theme. eg. `© 2016. Erlich Bachman. [Some Rights Reserved](http://creativecommons.org/licenses/by/3.0/)."` -- `poweredby`: Help promote this theme and give the authors credit. eg. `true` or `false`. -- `highlightjs`: Use highlightJS to highlight code on your site. eg. `true` or `false`. - -### Main Menu `[[menu.main]]` - -These settings for the main menu that is displayed on the home page. - -- `name`: Name of menu item. eg. `blog` -- `weight`: Weight of this menu item. Higher items go to the bottom. eg. `100` -- `url`: Root URL for this section/page. eg. `/blog/`. - -Example: -``` -[[menu.main]] - name = "blog" - weight = 100 - url = "/blog/" -[[menu.main]] - name = "about" - weight = 200 - url = "/about/" -[[menu.main]] - name = "coderag" - weight = 300 - url = "/coderag/" -``` - -## Features - -* Responsive -* Minimalist -* Bootstrap 3 -* Fontawesome -* HighlighJS -* Disqus support for commenting -* Built-in support for 404 pages, Disqus comments and Google Analytics. - -## Screenshots - - - - - - - - - - - - -## Contributing - -### Bug Reports - -1. Search Github Issues to see if the bug has been previously filed. -2. If it has been filed, +1 the post. This helps us in assessing impact and priortitizing the bug. -3. If not previously filed, open a new Github Issue and describe in detail. Attach error traces and provide relavant details to help us solve it. -4. For Hugo issues, search the Hugo [Forum](https://discuss.gohugo.io/) - -### Feature Requests - -1. Search Github Issues to see if the feature has been previously requested. -2. If it has been filed, +1 the post. This helps us in assessing popularity and priortitizing the feature. -3. If not previously filed, open a new Github Issue and describe it in detail. - -### Pull Requests - -1. Clone the repository, create the feature/bug branch. -2. Code. -3. Make sure your code follows the style of the project. -4. Test it thoroughly. -5. Open a PR requesting for it to be merged. -6. Describe the feature or issue your are solving in detail. -7. Wait for its approval. -8. Merge and Rejoice. - -## Attribution - -The theme's design was inspired by many blogs and themes: - -1. Bruno de Carvalho's [blog](http://biasedbit.com). -2. [Hugo Cocoa](http://themes.gohugo.io/cocoa/). -3. [Hugo Vec](http://themes.gohugo.io/hugo-theme-vec/). -4. [Hugo Agency](http://themes.gohugo.io/hugo-agency/). - -## License - -Licensed under the [MIT](https://opensource.org/licenses/MIT) License. See the [LICENSE](https://raw.githubusercontent.com/shenoybr/hugo-goa/master/LICENSE) file for more details. - diff --git a/projects/moritzgrafde/themes/hugo-goa/archetypes/default.md b/projects/moritzgrafde/themes/hugo-goa/archetypes/default.md deleted file mode 100644 index 091fcb4..0000000 --- a/projects/moritzgrafde/themes/hugo-goa/archetypes/default.md +++ /dev/null @@ -1,10 +0,0 @@ -+++ -draft = false -comments = false -slug = "" -tags = [] -categories = [] - -showpagemeta = true -showcomments = true -+++ diff --git a/projects/moritzgrafde/themes/hugo-goa/exampleSite/.gitignore b/projects/moritzgrafde/themes/hugo-goa/exampleSite/.gitignore deleted file mode 100644 index 1fca712..0000000 --- a/projects/moritzgrafde/themes/hugo-goa/exampleSite/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -.DS_Store -*/**/.DS_Store -public diff --git a/projects/moritzgrafde/themes/hugo-goa/exampleSite/LICENSE b/projects/moritzgrafde/themes/hugo-goa/exampleSite/LICENSE deleted file mode 100644 index 66c46f7..0000000 --- a/projects/moritzgrafde/themes/hugo-goa/exampleSite/LICENSE +++ /dev/null @@ -1,9 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2016 [Rajesh Shenoy](https://github.com/shenoybr) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/projects/moritzgrafde/themes/hugo-goa/exampleSite/README.md b/projects/moritzgrafde/themes/hugo-goa/exampleSite/README.md deleted file mode 100644 index 7be3a39..0000000 --- a/projects/moritzgrafde/themes/hugo-goa/exampleSite/README.md +++ /dev/null @@ -1,16 +0,0 @@ -# Hugo Goa Demo - -## About - -This site demonstrates the use of the [Hugo Goa Theme](https://github.com/shenoybr/hugo-goa) by [@shenoybr](https://github.com/shenoybr). - -## Usage - -* Install [Hugo](gohugo.io) -* git clone https://github.com/shenoybr/hugo-goa-demo -* Run `hugo server -w -v` from the root directory -* Site will be visible at `localhost:1313` - -## License - -Licensed under the [MIT](https://opensource.org/licenses/MIT) License. See the [LICENSE](https://raw.githubusercontent.com/shenoybr/hugo-goa-demo/master/LICENSE) file for more details. diff --git a/projects/moritzgrafde/themes/hugo-goa/exampleSite/config.toml b/projects/moritzgrafde/themes/hugo-goa/exampleSite/config.toml deleted file mode 100644 index 5944399..0000000 --- a/projects/moritzgrafde/themes/hugo-goa/exampleSite/config.toml +++ /dev/null @@ -1,68 +0,0 @@ -## Basic Configuration - -baseurl = "https://shenoybr.github.io/hugo-goa-demo/" -builddrafts = false -canonifyurls = false -languageCode = "en-US" - -contentdir = "content" -layoutdir = "layouts" -publishdir = "public" - -author = "Erlich Bachman" -title = "Erlich Bachman" - -theme = "hugo-goa" - -## Hugo Built-in Features -disqusShortname = "https-shenoybr-github-io-hugo-goa-demo" # Comment out to disable Disqus. -googleAnalytics = "XYZ" -enableRobotsTXT = true - -## Site Settings -[params] -author = "Erlich Bachman" -intro = "Startup Guru Extraordinaire" -description = "Now @Pied Piper. Previously @Hacker Hostel, @Bachmanity and @Aviato.
\"What is F times 5? It's Fleventy-five.\"" -authorimage = "headshot.jpg" -dateformat = "Jan 2, 2006" - -## Site Meta Settings -[params.meta] -description = "Simple minimalist theme" -keywords = "minimalist,blog,goa,hugo,developer" - -## Social Accounts -[params.social] -github = "" -instagram = "" -xing = "" -linkedin = "" -twitter = "" -facebook = "" -google = "" -stackoverflow = "" -email = "you@example.com" - -## Extras -[params.extra] -copyright = "© 2016. Erlich Bachman. [Some Rights Reserved](http://creativecommons.org/licenses/by/3.0/)." -poweredby = true -highlightjs = true - -## Main Menu -[[menu.main]] - name = "blog" - weight = 100 - identifier = "blog" - url = "/blog/" -[[menu.main]] - name = "about" - identifier = "about" - weight = 200 - url = "/about/" -[[menu.main]] - name = "coderag" - identifier = "coderag" - weight = 300 - url = "/coderag/" diff --git a/projects/moritzgrafde/themes/hugo-goa/exampleSite/content/about/index.md b/projects/moritzgrafde/themes/hugo-goa/exampleSite/content/about/index.md deleted file mode 100644 index d98f5e2..0000000 --- a/projects/moritzgrafde/themes/hugo-goa/exampleSite/content/about/index.md +++ /dev/null @@ -1,18 +0,0 @@ -+++ -categories = ["about"] -comments = false -date = "2016-10-02T22:55:05-04:00" -draft = false -slug = "" -tags = ["about"] -title = "About" - -showpagemeta = false -+++ - -Erlich administers the Hacker Hostel, a tech incubator where Richard, Big Head, Dinesh, and Gilfoyle live and work in exchange for 10 percent of their potential businesses. Erlich clings to his glory days, when he sold aviation start-up Aviato, a move that, at least in his mind, qualifies him to be a svengali lording over other tech nerds. He still drives a car emblazoned with multiple Aviato logos and smokes copious amounts of weed.[1] - -In Fiduciary Duties, a drunk Richard makes Erlich a Pied Piper board member, a decision he later regrets. - -In Two Days of the Condor, it is revealed that Erlich no longer codes due to carpal tunnel syndrome. - diff --git a/projects/moritzgrafde/themes/hugo-goa/exampleSite/content/blog/first.md b/projects/moritzgrafde/themes/hugo-goa/exampleSite/content/blog/first.md deleted file mode 100644 index f699ccd..0000000 --- a/projects/moritzgrafde/themes/hugo-goa/exampleSite/content/blog/first.md +++ /dev/null @@ -1,28 +0,0 @@ -+++ -categories = ["ad"] -comments = false -date = "2016-10-02T15:59:13-04:00" -draft = false -showpagemeta = true -showcomments = true -slug = "" -tags = ["gavin", "belson", "hooli", "hardware"] -title = "Gavin Belson" -description = "A post about the amazingness of Gavin Belson" - -+++ - -Note: This article originally appeared in [CodeRag](http://www.coderag.com/10-facts-you-didnt-know-about-gavin-belson/). - -Gavin Belson’s name has long been synonymous with innovation—but beyond his work at Hooli, do we even know the man behind the rampant success? In a Code/Rag exclusive, Belson revealed to us 10 things about himself that aren’t common knowledge. - -* He’s a nature fanatic! “It’s important to me that Hooli has an effective recycling program, and a personal passion of mine is donating to elephant sanctuaries. In fact, I’ve recently spearheaded the creation of Hooli’s newest charity: the Hooli Elephant Wildlife Trust.” -* He likes to go analog! His company may have been founded on email, but Belson has a soft spot for the written word. “There’s something nostalgic about receiving a letter—it’s a message from the past.” -* He’s an honorary shaman! “I studied at the Institute of Spiritual Therapy and Vision Quests, where I was honored with the title of shaman. The Institute has fundamentally furthered my understanding of the world and its capacity for greatness.” -* His favorite pizza topping is pepperoni! “Uncured, preferably, with some aged parmesan.” -* He drives a Tesla! “Black. I try not to bee too conspicuous. And of course, the benefit to the environment is incomparable.” -* His health is important to him! “I eat at least one piece of unprocessed fruit a day.” -* He has bad habits too! “I never reboot my laptop. I know it’s bad, but I’m always in a hurry.” -* He doesn’t have a Nobel Peace Prize…yet! “It’s a common misconception, especially with the amount of charity work I do with Hooli, and sometimes people associate my status as a shaman with working towards world peace, which of course is something I’m striving for.” -* He’s loyal to his barber! “I’ve been going to the same barber for years—he was based in Palo Alto, but I’ve convinced him to move to the South Bay.” -* He really, really loves animals! “I would say I’m a cat person. And a dog person. I’m an animal person, and I don’t just mean that human beings are animals. Did you know the African bush elephant is still an endangered species? Programs like the Hooli Elephant Wildlife Trust won’t save them immediately, but it’s a start.” diff --git a/projects/moritzgrafde/themes/hugo-goa/exampleSite/content/blog/second.md b/projects/moritzgrafde/themes/hugo-goa/exampleSite/content/blog/second.md deleted file mode 100644 index 2d7bf4e..0000000 --- a/projects/moritzgrafde/themes/hugo-goa/exampleSite/content/blog/second.md +++ /dev/null @@ -1,21 +0,0 @@ -+++ -categories = ["propaganda"] -comments = false -date = "2016-10-01T16:59:13-04:00" -draft = false -showpagemeta = true -slug = "" -tags = ["gavin", "belson", "hooli", "ceo"] -title = "Belson Back on Top" -description = "Hooli’s CEO Focusing on the Bottom Line" - -+++ -Note: This post originally appeared in [CodeRag](http://www.coderag.com/belson-back-on-top-hoolis-ceo-focusing-on-the-bottom-line/) - -Gavin Belson’s brilliant leadership is unstoppable. While allegedly taking a personal hiatus from day-to-day operations at Hooli, Belson couldn’t resist brokering a blockbuster deal between Hooli and Maleant Data Systems, deploying Hooli’s innovative new Hooli/Endframe Box. The multi-year deal brings handsome margins for Hooli and can easily be a template to apply across the entire Fortune 1000. An inside source tells me that, no surprise, the board was no longer satisfied to let Belson fade into the background. Hat in hand, they begged Belson to come back to the helm. - -It’s been barely two months since Belson announced he would be taking a leave from his leadership role in order to focus on spiritual wellness and family. What drove Belson to this decision remains unclear. Was it additional fallout from the Hooli-Search scandal we broke at this very blog? Or perhaps his cutthroat methods in managing Hooli-Search results indicate a demand across the board for higher standards, and as such, Belson could not tolerate the sloppy security upgrades we also reported on. In any case, it seems the company’s electrical issues are resolved, and with it, any spirituality Belson felt the need to examine. The company’s Chief Innovation Officer has returned. - -Belson, who is single, has had a slew of successes at Hooli this past year. When he announced the dissolution of the Nucleus project, his bravery was rewarded as Hooli stock jumped 7 percent. The cost savings was compounded when Belson pulled the trigger on company-wide layoffs, and the hole left by Nucleus was quickly filled when he acquired middle-out company Endframe. Endframe’s tech has long dominated the middle-out space, and it’s no surprise that the Hooli/Endframe relationship has combined Hooli’s resources and innovation with Endframe’s impressive tech to create something obscenely profitable: the Hooli/Endframe Box. - -With Belson back on top at Hooli, shareholders can breathe a sigh of relief. While Belson’s career is certainly not without drama, his shrewd business sense and innovative technological accomplishments are what’s shaped Hooli into the company it is today. Without Gavin Belson, there is no Hooli. And without Hooli, where would any of us be? diff --git a/projects/moritzgrafde/themes/hugo-goa/exampleSite/content/blog/third.md b/projects/moritzgrafde/themes/hugo-goa/exampleSite/content/blog/third.md deleted file mode 100644 index d10ccdf..0000000 --- a/projects/moritzgrafde/themes/hugo-goa/exampleSite/content/blog/third.md +++ /dev/null @@ -1,23 +0,0 @@ -+++ -categories = ["propaganda"] -comments = false -date = "2016-10-03T16:59:13-04:00" -draft = false -showpagemeta = true -showcomments = false -slug = "" -tags = ["gavin", "belson", "hooli"] -title = "Hooli’s Hot New Hardware" -description = "Middle out compression technology for the win!" - -+++ - -Note: This article originally appeared in [CodeRag](http://www.coderag.com/hoolis-hot-new-hardware/). - -When Hooli acquired Endframe, no one could wait to see what the tech giant would do with the revolutionary, middle-out compression technology. The wait is over: In a savvy pivot, Hooli took the software and created their newest hardware: the Hooli/Endframe Box. While initially conceived as a consumer-facing platform, the Endframe technology has been repurposed to “make the world a better place through secure, high-capacity enterprise data storage servers utilizing middle-out compression technology.” - -Insanely simple and beautifully crafted, the hardware backs up large amounts of data at a fraction of what it used to cost, so it’s no surprise that enterprise top dog Maleant Data System Solutions jumped at the chance to make a multi-year deal for the product. At a press conference announcing the blockbuster deal, CEO Calvin Greene stated, “The Hooli/Endframe Box is a welcome integration with our banking and medical system clients, who need to process large amounts of secure data at an accelerated pace.” Hooli’s Gavin Belson quipped that the world “always needs more money and doctors.” - -The hardware features a Dual Intel Haswell 2.6 Ghz processor, NVIDIA Tesla K80, Lightnight Eco Gen II SanDisk (800 TB, no less) and two 4TB Seagate hard drives. Matched with Endframe’s middle out algorithm, there’s a reason Maleant promises a 200 percent ROI to any client who elects to incorporate the Hooli/Endframe Box into their service deal with Maleant. - -The two companies flirted with multiple deal options before sealing the deal on a white label agreement, and becoming the power couple of enterprise data storage. Hooli could sell upgraded versions of these boxes to Maleant indefinitely, and Maleant’s penetration in the enterprise market ensures high demand for more Hooli/Endframe Boxes as long as Hooli can keep making them. Hundreds of millions of dollars could follow for Hooli’s enterprise sales division. With these two joining to sell storage solutions, no one will be able to touch their profits—or their data. diff --git a/projects/moritzgrafde/themes/hugo-goa/exampleSite/content/coderag/index.md b/projects/moritzgrafde/themes/hugo-goa/exampleSite/content/coderag/index.md deleted file mode 100644 index 08b5a6d..0000000 --- a/projects/moritzgrafde/themes/hugo-goa/exampleSite/content/coderag/index.md +++ /dev/null @@ -1,19 +0,0 @@ -+++ -categories = ["articles"] -comments = false -date = "2016-10-02T22:55:05-04:00" -draft = false -slug = "" -tags = ["bachman", "pied piper", "aviato"] -title = "CodeRag" - -showpagemeta = true -+++ -Notes: This article originally appeared in [CodeRag](http://www.coderag.com/-note-from-the-editor/). - -Code/Rag has always been more than just another online tech blog. We strive to be part of the tech community—serving an essential, fundamental look at what’s going on in the valley. It’s why our tagline is “Know Your Code.” We think a tech news publication should know the basics. Be the source. Get down to brass tacks. We can do that because we’re part of the very ecosystem we’re reporting on. And like any other company in the Silicon Valley community, Code/Rag is an ever-evolving entity. - -Part of Code/Rag’s evolution includes our new investor: Bachmanity Capital. Bachmanity, as of this writing, owns a 50 percent stake in Code/Rag. I want to assure our readers this will in no way affect the quality or integrity of our journalism (it takes more than a couple dollars to shut me up). It simply means we have more funds to chase down the story, more resources to analyze trends and more assurances that when you read Code/Rag, you’ll know your code. - -C.J. Cantwell -Editor-in-Chief diff --git a/projects/moritzgrafde/themes/hugo-goa/exampleSite/data/.gitkeep b/projects/moritzgrafde/themes/hugo-goa/exampleSite/data/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/projects/moritzgrafde/themes/hugo-goa/exampleSite/layouts/.gitkeep b/projects/moritzgrafde/themes/hugo-goa/exampleSite/layouts/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/projects/moritzgrafde/themes/hugo-goa/exampleSite/static/.gitkeep b/projects/moritzgrafde/themes/hugo-goa/exampleSite/static/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/projects/moritzgrafde/themes/hugo-goa/exampleSite/static/apple-touch-icon.png b/projects/moritzgrafde/themes/hugo-goa/exampleSite/static/apple-touch-icon.png deleted file mode 100644 index 5fd7600..0000000 Binary files a/projects/moritzgrafde/themes/hugo-goa/exampleSite/static/apple-touch-icon.png and /dev/null differ diff --git a/projects/moritzgrafde/themes/hugo-goa/exampleSite/static/browserconfig.xml b/projects/moritzgrafde/themes/hugo-goa/exampleSite/static/browserconfig.xml deleted file mode 100644 index b97aacb..0000000 --- a/projects/moritzgrafde/themes/hugo-goa/exampleSite/static/browserconfig.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - #ffc40d - - - diff --git a/projects/moritzgrafde/themes/hugo-goa/exampleSite/static/favicon-16x16.png b/projects/moritzgrafde/themes/hugo-goa/exampleSite/static/favicon-16x16.png deleted file mode 100644 index dd1c94f..0000000 Binary files a/projects/moritzgrafde/themes/hugo-goa/exampleSite/static/favicon-16x16.png and /dev/null differ diff --git a/projects/moritzgrafde/themes/hugo-goa/exampleSite/static/favicon-32x32.png b/projects/moritzgrafde/themes/hugo-goa/exampleSite/static/favicon-32x32.png deleted file mode 100644 index b2758da..0000000 Binary files a/projects/moritzgrafde/themes/hugo-goa/exampleSite/static/favicon-32x32.png and /dev/null differ diff --git a/projects/moritzgrafde/themes/hugo-goa/exampleSite/static/img/.gitkeep b/projects/moritzgrafde/themes/hugo-goa/exampleSite/static/img/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/projects/moritzgrafde/themes/hugo-goa/exampleSite/static/img/headshot.jpg b/projects/moritzgrafde/themes/hugo-goa/exampleSite/static/img/headshot.jpg deleted file mode 100644 index 682d7c5..0000000 Binary files a/projects/moritzgrafde/themes/hugo-goa/exampleSite/static/img/headshot.jpg and /dev/null differ diff --git a/projects/moritzgrafde/themes/hugo-goa/exampleSite/static/manifest.json b/projects/moritzgrafde/themes/hugo-goa/exampleSite/static/manifest.json deleted file mode 100644 index e5c3ddd..0000000 --- a/projects/moritzgrafde/themes/hugo-goa/exampleSite/static/manifest.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "name": "hugo-goa", - "icons": [ - ], - "theme_color": "#ffffff", - "display": "standalone" -} diff --git a/projects/moritzgrafde/themes/hugo-goa/exampleSite/static/mstile-150x150.png b/projects/moritzgrafde/themes/hugo-goa/exampleSite/static/mstile-150x150.png deleted file mode 100644 index 207186f..0000000 Binary files a/projects/moritzgrafde/themes/hugo-goa/exampleSite/static/mstile-150x150.png and /dev/null differ diff --git a/projects/moritzgrafde/themes/hugo-goa/exampleSite/static/safari-pinned-tab.svg b/projects/moritzgrafde/themes/hugo-goa/exampleSite/static/safari-pinned-tab.svg deleted file mode 100644 index 66d5958..0000000 --- a/projects/moritzgrafde/themes/hugo-goa/exampleSite/static/safari-pinned-tab.svg +++ /dev/null @@ -1,30 +0,0 @@ - - - - -Created by potrace 1.11, written by Peter Selinger 2001-2013 - - - - - diff --git a/projects/moritzgrafde/themes/hugo-goa/images/screenshot.png b/projects/moritzgrafde/themes/hugo-goa/images/screenshot.png deleted file mode 100644 index 951792f..0000000 Binary files a/projects/moritzgrafde/themes/hugo-goa/images/screenshot.png and /dev/null differ diff --git a/projects/moritzgrafde/themes/hugo-goa/images/tn.png b/projects/moritzgrafde/themes/hugo-goa/images/tn.png deleted file mode 100644 index fe7f294..0000000 Binary files a/projects/moritzgrafde/themes/hugo-goa/images/tn.png and /dev/null differ diff --git a/projects/moritzgrafde/themes/hugo-goa/layouts/404.html b/projects/moritzgrafde/themes/hugo-goa/layouts/404.html deleted file mode 100644 index bfbd8f9..0000000 --- a/projects/moritzgrafde/themes/hugo-goa/layouts/404.html +++ /dev/null @@ -1,5 +0,0 @@ -{{ partial "header.html" . }} - -{{ partial "error.html" . }} - -{{ partial "footer.html" . }} diff --git a/projects/moritzgrafde/themes/hugo-goa/layouts/_default/list.html b/projects/moritzgrafde/themes/hugo-goa/layouts/_default/list.html deleted file mode 100644 index 20c1e14..0000000 --- a/projects/moritzgrafde/themes/hugo-goa/layouts/_default/list.html +++ /dev/null @@ -1,7 +0,0 @@ -{{ partial "header.html" . }} - -{{ partial "li.html" . }} - -{{ partial "menu.html" . }} - -{{ partial "footer.html" . }} diff --git a/projects/moritzgrafde/themes/hugo-goa/layouts/_default/single.html b/projects/moritzgrafde/themes/hugo-goa/layouts/_default/single.html deleted file mode 100644 index d1a031b..0000000 --- a/projects/moritzgrafde/themes/hugo-goa/layouts/_default/single.html +++ /dev/null @@ -1,14 +0,0 @@ -{{ partial "header.html" . }} - -{{ partial "content.html" . }} - -{{ if ne .Params.showcomments false }} - -{{ template "_internal/disqus.html" . }} - -{{ end }} - -{{ partial "menu.html" . }} - -{{ partial "footer.html" . }} - diff --git a/projects/moritzgrafde/themes/hugo-goa/layouts/index.html b/projects/moritzgrafde/themes/hugo-goa/layouts/index.html deleted file mode 100644 index 6adba9a..0000000 --- a/projects/moritzgrafde/themes/hugo-goa/layouts/index.html +++ /dev/null @@ -1,11 +0,0 @@ -{{ partial "header.html" . }} - -{{ partial "avatar.html" . }} - -{{ partial "info.html" . }} - -{{ partial "social.html" . }} - -{{ partial "main_menu.html" . }} - -{{ partial "footer.html" . }} diff --git a/projects/moritzgrafde/themes/hugo-goa/layouts/partials/avatar.html b/projects/moritzgrafde/themes/hugo-goa/layouts/partials/avatar.html deleted file mode 100644 index ccdc6af..0000000 --- a/projects/moritzgrafde/themes/hugo-goa/layouts/partials/avatar.html +++ /dev/null @@ -1,4 +0,0 @@ -
- {{ with .Site.Params.authorimage }} Author Image {{ end }} -

{{ .Site.Params.author }}

-
diff --git a/projects/moritzgrafde/themes/hugo-goa/layouts/partials/content.html b/projects/moritzgrafde/themes/hugo-goa/layouts/partials/content.html deleted file mode 100644 index bc6eacc..0000000 --- a/projects/moritzgrafde/themes/hugo-goa/layouts/partials/content.html +++ /dev/null @@ -1,45 +0,0 @@ -
-

{{ .Title }}

-
-
- {{ if ne .Params.showpagemeta false }} -
-
- PUBLISHED ON {{ .Date.Format .Site.Params.dateformat | upper }} - {{ if isset .Params "categories" }} - {{ $total := len .Params.categories }} - {{ if gt $total 0 }} - — - {{ $total := sub $total 1 }} - {{ range $i, $cat := sort $.Params.categories }} - {{ $cat | upper }}{{ if lt $i $total }}, {{ end }} - {{ end }} - {{ end }} - {{ end }} -
-
- {{ end }} -
-
-
- {{ .Content }} -
-
-
- {{ if ne .Params.showpagemeta false }} -
-
- {{ if isset .Params "tags" }} - {{ $total := len .Params.tags }} - {{ if gt $total 0 }} - TAGS: - {{ $subtotal := sub $total 1 }} - {{ range $i, $tag := sort $.Params.tags }} - {{ $tag | upper }}{{ if lt $i $subtotal }}, {{ end }} - {{ end }} - {{ end }} - {{ end }} -
-
- {{ end }} -
diff --git a/projects/moritzgrafde/themes/hugo-goa/layouts/partials/error.html b/projects/moritzgrafde/themes/hugo-goa/layouts/partials/error.html deleted file mode 100644 index b79e2ae..0000000 --- a/projects/moritzgrafde/themes/hugo-goa/layouts/partials/error.html +++ /dev/null @@ -1,4 +0,0 @@ -
-

404

-

Sorry! That page does not exist. It may have been removed or moved to a new section on the site. Click here go back to the home page.

-
diff --git a/projects/moritzgrafde/themes/hugo-goa/layouts/partials/footer.html b/projects/moritzgrafde/themes/hugo-goa/layouts/partials/footer.html deleted file mode 100644 index 21a9b33..0000000 --- a/projects/moritzgrafde/themes/hugo-goa/layouts/partials/footer.html +++ /dev/null @@ -1,23 +0,0 @@ - -{{ partial "sub_footer.html" . }} - - -{{ with .Site.Params.extra }} -{{ if .highlightjs }} - - {{ range .highlightjslanguages }} - - {{ end }} - - -{{ end }} -{{ end }} - -{{ template "_internal/google_analytics.html" . }} - - - - - diff --git a/projects/moritzgrafde/themes/hugo-goa/layouts/partials/header.html b/projects/moritzgrafde/themes/hugo-goa/layouts/partials/header.html deleted file mode 100644 index 531b55d..0000000 --- a/projects/moritzgrafde/themes/hugo-goa/layouts/partials/header.html +++ /dev/null @@ -1,48 +0,0 @@ - - - - - - - - - -{{ with .Site.Params.meta.description }}{{ end }} -{{ with .Site.Params.meta.keywords }}{{ end }} - - - -{{ .Site.Title }} - -{{ hugo.Generator }} - -{{ with .OutputFormats.Get "rss" }} - - -{{ end }} - -{{ if .Site.Params.extra.highlightjs }} - -{{ end }} - - - - - - - - - - - - - - - - - - -
diff --git a/projects/moritzgrafde/themes/hugo-goa/layouts/partials/info.html b/projects/moritzgrafde/themes/hugo-goa/layouts/partials/info.html deleted file mode 100644 index 414986d..0000000 --- a/projects/moritzgrafde/themes/hugo-goa/layouts/partials/info.html +++ /dev/null @@ -1,8 +0,0 @@ -
- {{ with .Site.Params.intro }} -

{{ . | markdownify }}

- {{ end }} - {{ with .Site.Params.description }} -

{{ . | markdownify }}

- {{ end }} -
diff --git a/projects/moritzgrafde/themes/hugo-goa/layouts/partials/li.html b/projects/moritzgrafde/themes/hugo-goa/layouts/partials/li.html deleted file mode 100644 index b59816e..0000000 --- a/projects/moritzgrafde/themes/hugo-goa/layouts/partials/li.html +++ /dev/null @@ -1,27 +0,0 @@ -
-
    - {{ range .Data.Pages.ByPublishDate }} -
  • - {{ .Title }} -

    - {{ .Date.Format .Site.Params.dateformat | upper }} - - {{ if isset .Params "categories" }} - {{ $total := len .Params.categories }} - {{ if gt $total 0 }} - — - {{ $total := sub $total 1 }} - {{ range $i, $cat := sort .Params.categories }} - {{ $cat | upper }}{{ if lt $i $total }}, {{ end }} - {{ end }} - {{ end }} - {{ end }} - -

    -

    - {{ .Description }} -

    -
  • - {{ end }} -
-
diff --git a/projects/moritzgrafde/themes/hugo-goa/layouts/partials/main_menu.html b/projects/moritzgrafde/themes/hugo-goa/layouts/partials/main_menu.html deleted file mode 100644 index 84070c8..0000000 --- a/projects/moritzgrafde/themes/hugo-goa/layouts/partials/main_menu.html +++ /dev/null @@ -1,7 +0,0 @@ - diff --git a/projects/moritzgrafde/themes/hugo-goa/layouts/partials/menu.html b/projects/moritzgrafde/themes/hugo-goa/layouts/partials/menu.html deleted file mode 100644 index c9d95b5..0000000 --- a/projects/moritzgrafde/themes/hugo-goa/layouts/partials/menu.html +++ /dev/null @@ -1,14 +0,0 @@ - diff --git a/projects/moritzgrafde/themes/hugo-goa/layouts/partials/social.html b/projects/moritzgrafde/themes/hugo-goa/layouts/partials/social.html deleted file mode 100644 index 34a392e..0000000 --- a/projects/moritzgrafde/themes/hugo-goa/layouts/partials/social.html +++ /dev/null @@ -1,38 +0,0 @@ - diff --git a/projects/moritzgrafde/themes/hugo-goa/layouts/partials/sub_footer.html b/projects/moritzgrafde/themes/hugo-goa/layouts/partials/sub_footer.html deleted file mode 100644 index 1d3974e..0000000 --- a/projects/moritzgrafde/themes/hugo-goa/layouts/partials/sub_footer.html +++ /dev/null @@ -1,9 +0,0 @@ -
-
- {{ with .Site.Params.extra }} - - {{ if ne .poweredby false }} -
Powered by Hugo & Goa.
- {{ end }} - {{ end }} -
diff --git a/projects/moritzgrafde/themes/hugo-goa/static/apple-touch-icon.png b/projects/moritzgrafde/themes/hugo-goa/static/apple-touch-icon.png deleted file mode 100644 index 5fd7600..0000000 Binary files a/projects/moritzgrafde/themes/hugo-goa/static/apple-touch-icon.png and /dev/null differ diff --git a/projects/moritzgrafde/themes/hugo-goa/static/browserconfig.xml b/projects/moritzgrafde/themes/hugo-goa/static/browserconfig.xml deleted file mode 100644 index b97aacb..0000000 --- a/projects/moritzgrafde/themes/hugo-goa/static/browserconfig.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - #ffc40d - - - diff --git a/projects/moritzgrafde/themes/hugo-goa/static/css/main.css b/projects/moritzgrafde/themes/hugo-goa/static/css/main.css deleted file mode 100644 index e37a2a3..0000000 --- a/projects/moritzgrafde/themes/hugo-goa/static/css/main.css +++ /dev/null @@ -1,257 +0,0 @@ -@-ms-viewport -{ - width: device-width; -} -@-o-viewport -{ - width: device-width; -} -@viewport -{ - width: device-width; -} -a, -a:hover, -a:visited, -a:link -{ - text-decoration: none; - - color: #526d7a; -} -body -{ - font-family: 'Roboto Slab', 'Roboto', 'Lato', sans-serif; - font-size: 20px; - font-weight: 400; - - width: auto; - height: 100%; - min-height: 100%; - margin: 0; - - background-color: #fcfcfc; -} -html -{ - position: relative; - - height: 100%; - min-height: 100%; - margin: 0; -} -.author -{ - color: #444; -} -.author h1, -.author h2, -.author h3, -.author h4, -.author h5, -.author h6, -.author p -{ - font-family: 'Roboto Slab', serif; -} -.category -{ - color: #966 !important; -} -.container -{ - overflow: auto; - - max-width: 680px; - padding: 0 15px; -} -.content -{ - margin-top: 20px; - margin-bottom: 20px; -} -div.content -{ - font-family: 'Roboto', sans-serif; - font-size: 18px; - font-weight: 300; - - color: #777; -} -.copyright -{ - font-family: 'Roboto', sans-serif; - font-size: 12px; - font-weight: 200; -} -.description -{ - font-family: 'Roboto', sans-serif; - font-weight: 200; - color: #bbb; -} -.error -{ - font-family: 'Roboto', sans-serif; - - margin-top: 100px; -} -.error h1 -{ - font-size: 80px; - - color: #bbb; -} -.error p -{ - margin-top: 150px; - - color: #777; -} -.excerpt -{ - font-family: 'Lato', sans-serif; - font-size: 18px; - font-weight: 200; - - color: #555; - margin-bottom: 20px; -} -.footer -{ - margin-top: 10px; - - color: #bbb; -} -.header -{ - margin-top: 60px; - margin-bottom: 20px; -} -.headshot -{ - width: 200px; - height: 200px; -} -.info -{ - margin-top: 10px; - margin-bottom: 20px; -} -.intro -{ - font-family: 'Roboto Slab', serif; - font-weight: 200; - color: #777; -} -h3.intro -{ - margin-top: 0px -} -.list -{ - font-family: 'Roboto', sans-serif; - - margin-top: 50px; -} -.list li -{ - list-style: none; -} -.list-entry -{ - font-family: 'Roboto Slab', serif; - font-size: 25px; - font-weight: 400; - - margin-top: 10px; - margin-bottom: 20px; -} -.list-entry-link -{ - padding: 0; -} -.main-menu -{ - margin-top: 10px; - margin-bottom: 20px; -} -.menu -{ - margin-top: 10px; - margin-bottom: 20px; -} -.menu-item -{ - font-family: 'Lato', sans-serif; - font-size: 20px; - font-weight: 300; - - text-decoration: none; - - color: #966 !important; -} -.meta -{ - font-family: 'Roboto', sans-serif; - font-size: 12px; - font-weight: 200; - - color: #bbb; -} -a.meta -{ - color: #966; -} -h6.meta -{ - font-family: 'Roboto', sans-serif; - font-size: 12px; - font-weight: 200; - - color: #bbb; -} -section.meta { - margin-top: -} -.powered -{ - font-family: 'Roboto', sans-serif; - font-size: 12px; - font-weight: 300; -} -.social { - margin-top: 10px; - margin-bottom: 20px; -} -.social, -.social a -{ - color: #526d7a; -} -.title -{ - font-family: 'Roboto Slab', serif; - font-weight: 400; - - color: #555; -} -header.title -{ - margin-top: 50px; - padding: 0 15px; -} -@media (max-width: 991px) -{ - .header - { - margin-top: 50px; - margin-bottom: 20px; - } - .list - { - font-family: 'Roboto', sans-serif; - - margin-top: 30px; - } -} diff --git a/projects/moritzgrafde/themes/hugo-goa/static/favicon-16x16.png b/projects/moritzgrafde/themes/hugo-goa/static/favicon-16x16.png deleted file mode 100644 index dd1c94f..0000000 Binary files a/projects/moritzgrafde/themes/hugo-goa/static/favicon-16x16.png and /dev/null differ diff --git a/projects/moritzgrafde/themes/hugo-goa/static/favicon-32x32.png b/projects/moritzgrafde/themes/hugo-goa/static/favicon-32x32.png deleted file mode 100644 index b2758da..0000000 Binary files a/projects/moritzgrafde/themes/hugo-goa/static/favicon-32x32.png and /dev/null differ diff --git a/projects/moritzgrafde/themes/hugo-goa/static/img/.gitkeep b/projects/moritzgrafde/themes/hugo-goa/static/img/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/projects/moritzgrafde/themes/hugo-goa/static/js/main.js b/projects/moritzgrafde/themes/hugo-goa/static/js/main.js deleted file mode 100644 index 3070117..0000000 --- a/projects/moritzgrafde/themes/hugo-goa/static/js/main.js +++ /dev/null @@ -1,11 +0,0 @@ -// Copyright 2014-2015 Twitter, Inc. -// Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) -if (navigator.userAgent.match(/IEMobile\/10\.0/)) { - var msViewportStyle = document.createElement('style') - msViewportStyle.appendChild( - document.createTextNode( - '@-ms-viewport{width:auto!important}' - ) - ) - document.querySelector('head').appendChild(msViewportStyle) -} diff --git a/projects/moritzgrafde/themes/hugo-goa/static/manifest.json b/projects/moritzgrafde/themes/hugo-goa/static/manifest.json deleted file mode 100644 index e5c3ddd..0000000 --- a/projects/moritzgrafde/themes/hugo-goa/static/manifest.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "name": "hugo-goa", - "icons": [ - ], - "theme_color": "#ffffff", - "display": "standalone" -} diff --git a/projects/moritzgrafde/themes/hugo-goa/static/mstile-150x150.png b/projects/moritzgrafde/themes/hugo-goa/static/mstile-150x150.png deleted file mode 100644 index 207186f..0000000 Binary files a/projects/moritzgrafde/themes/hugo-goa/static/mstile-150x150.png and /dev/null differ diff --git a/projects/moritzgrafde/themes/hugo-goa/static/safari-pinned-tab.svg b/projects/moritzgrafde/themes/hugo-goa/static/safari-pinned-tab.svg deleted file mode 100644 index 66d5958..0000000 --- a/projects/moritzgrafde/themes/hugo-goa/static/safari-pinned-tab.svg +++ /dev/null @@ -1,30 +0,0 @@ - - - - -Created by potrace 1.11, written by Peter Selinger 2001-2013 - - - - - diff --git a/projects/moritzgrafde/themes/hugo-goa/theme.toml b/projects/moritzgrafde/themes/hugo-goa/theme.toml deleted file mode 100644 index 64d0be2..0000000 --- a/projects/moritzgrafde/themes/hugo-goa/theme.toml +++ /dev/null @@ -1,12 +0,0 @@ -name = "Goa" -license = "MIT" -licenselink = "https://github.com/shenoybr/hugo-goa/blob/master/LICENSE.md" -description = "Simple Minimalist Hugo Theme" -homepage = "https://github.com/shenoybr/hugo-goa" -tags = ["Roboto", "Lato", "Roboto Slab", "bootstrap", "font awesome", "minimal", "clean"] -features = ["blog", "pages", "minimal", "responsive", "404", "icons", "disqus", "anlaytics"] -min_version = 0.16 - -[author] - name = "Rajesh Shenoy" - homepage = "https://github.com/shenoybr" diff --git a/projects/moritzgrafde/tsconfig.json b/projects/moritzgrafde/tsconfig.json new file mode 100644 index 0000000..ad6d173 --- /dev/null +++ b/projects/moritzgrafde/tsconfig.json @@ -0,0 +1,23 @@ +{ + "compilerOptions": { + "target": "ES2020", + "useDefineForClassFields": true, + "module": "ESNext", + "lib": ["ES2020", "DOM", "DOM.Iterable"], + "skipLibCheck": true, + "moduleResolution": "bundler", + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "preserve", + "strict": true, + "noUnusedLocals": false, + "noUnusedParameters": false, + "noFallthroughCasesInSwitch": true, + "baseUrl": ".", + "paths": { + "@/*": ["src/*"] + } + }, + "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"] +} diff --git a/projects/moritzgrafde/vite.config.ts b/projects/moritzgrafde/vite.config.ts new file mode 100644 index 0000000..dc8c1b2 --- /dev/null +++ b/projects/moritzgrafde/vite.config.ts @@ -0,0 +1,21 @@ +import { defineConfig } from 'vite' +import vue from '@vitejs/plugin-vue' +import tailwindcss from '@tailwindcss/vite' +import path from 'path' + +// https://vite.dev/config/ +export default defineConfig({ + plugins: [ + vue(), + tailwindcss(), + ], + resolve: { + alias: { + '@': path.resolve(__dirname, './src'), + }, + }, + server: { + port: 3000, + host: true, + }, +})