mirror of
https://github.com/Rakantor/personal-portfolio.git
synced 2026-05-06 12:41:05 +02:00
Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 830d8b8f94 |
@@ -1,13 +0,0 @@
|
|||||||
# editorconfig.org
|
|
||||||
root = true
|
|
||||||
|
|
||||||
[*]
|
|
||||||
indent_style = space
|
|
||||||
indent_size = 2
|
|
||||||
end_of_line = lf
|
|
||||||
charset = utf-8
|
|
||||||
trim_trailing_whitespace = true
|
|
||||||
insert_final_newline = true
|
|
||||||
|
|
||||||
[*.md]
|
|
||||||
trim_trailing_whitespace = false
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
module.exports = {
|
|
||||||
root: true,
|
|
||||||
env: {
|
|
||||||
browser: true,
|
|
||||||
node: true,
|
|
||||||
},
|
|
||||||
parserOptions: {
|
|
||||||
parser: '@babel/eslint-parser',
|
|
||||||
requireConfigFile: false,
|
|
||||||
},
|
|
||||||
extends: ['@nuxtjs', 'plugin:nuxt/recommended', 'prettier'],
|
|
||||||
plugins: [],
|
|
||||||
// add your custom rules here
|
|
||||||
rules: {},
|
|
||||||
}
|
|
||||||
-90
@@ -1,90 +0,0 @@
|
|||||||
# Created by .ignore support plugin (hsz.mobi)
|
|
||||||
### Node template
|
|
||||||
# Logs
|
|
||||||
/logs
|
|
||||||
*.log
|
|
||||||
npm-debug.log*
|
|
||||||
yarn-debug.log*
|
|
||||||
yarn-error.log*
|
|
||||||
|
|
||||||
# Runtime data
|
|
||||||
pids
|
|
||||||
*.pid
|
|
||||||
*.seed
|
|
||||||
*.pid.lock
|
|
||||||
|
|
||||||
# Directory for instrumented libs generated by jscoverage/JSCover
|
|
||||||
lib-cov
|
|
||||||
|
|
||||||
# Coverage directory used by tools like istanbul
|
|
||||||
coverage
|
|
||||||
|
|
||||||
# nyc test coverage
|
|
||||||
.nyc_output
|
|
||||||
|
|
||||||
# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
|
|
||||||
.grunt
|
|
||||||
|
|
||||||
# Bower dependency directory (https://bower.io/)
|
|
||||||
bower_components
|
|
||||||
|
|
||||||
# node-waf configuration
|
|
||||||
.lock-wscript
|
|
||||||
|
|
||||||
# Compiled binary addons (https://nodejs.org/api/addons.html)
|
|
||||||
build/Release
|
|
||||||
|
|
||||||
# Dependency directories
|
|
||||||
node_modules/
|
|
||||||
jspm_packages/
|
|
||||||
|
|
||||||
# TypeScript v1 declaration files
|
|
||||||
typings/
|
|
||||||
|
|
||||||
# Optional npm cache directory
|
|
||||||
.npm
|
|
||||||
|
|
||||||
# Optional eslint cache
|
|
||||||
.eslintcache
|
|
||||||
|
|
||||||
# Optional REPL history
|
|
||||||
.node_repl_history
|
|
||||||
|
|
||||||
# Output of 'npm pack'
|
|
||||||
*.tgz
|
|
||||||
|
|
||||||
# Yarn Integrity file
|
|
||||||
.yarn-integrity
|
|
||||||
|
|
||||||
# dotenv environment variables file
|
|
||||||
.env
|
|
||||||
|
|
||||||
# parcel-bundler cache (https://parceljs.org/)
|
|
||||||
.cache
|
|
||||||
|
|
||||||
# next.js build output
|
|
||||||
.next
|
|
||||||
|
|
||||||
# nuxt.js build output
|
|
||||||
.nuxt
|
|
||||||
|
|
||||||
# Nuxt generate
|
|
||||||
dist
|
|
||||||
|
|
||||||
# vuepress build output
|
|
||||||
.vuepress/dist
|
|
||||||
|
|
||||||
# Serverless directories
|
|
||||||
.serverless
|
|
||||||
|
|
||||||
# IDE / Editor
|
|
||||||
.idea
|
|
||||||
|
|
||||||
# Service worker
|
|
||||||
sw.*
|
|
||||||
|
|
||||||
# macOS
|
|
||||||
.DS_Store
|
|
||||||
|
|
||||||
# Vim swap files
|
|
||||||
*.swp
|
|
||||||
@@ -1,96 +0,0 @@
|
|||||||
###
|
|
||||||
# Place your Prettier ignore content here
|
|
||||||
|
|
||||||
###
|
|
||||||
# .gitignore content is duplicated here due to https://github.com/prettier/prettier/issues/8506
|
|
||||||
|
|
||||||
# Created by .ignore support plugin (hsz.mobi)
|
|
||||||
### Node template
|
|
||||||
# Logs
|
|
||||||
/logs
|
|
||||||
*.log
|
|
||||||
npm-debug.log*
|
|
||||||
yarn-debug.log*
|
|
||||||
yarn-error.log*
|
|
||||||
|
|
||||||
# Runtime data
|
|
||||||
pids
|
|
||||||
*.pid
|
|
||||||
*.seed
|
|
||||||
*.pid.lock
|
|
||||||
|
|
||||||
# Directory for instrumented libs generated by jscoverage/JSCover
|
|
||||||
lib-cov
|
|
||||||
|
|
||||||
# Coverage directory used by tools like istanbul
|
|
||||||
coverage
|
|
||||||
|
|
||||||
# nyc test coverage
|
|
||||||
.nyc_output
|
|
||||||
|
|
||||||
# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
|
|
||||||
.grunt
|
|
||||||
|
|
||||||
# Bower dependency directory (https://bower.io/)
|
|
||||||
bower_components
|
|
||||||
|
|
||||||
# node-waf configuration
|
|
||||||
.lock-wscript
|
|
||||||
|
|
||||||
# Compiled binary addons (https://nodejs.org/api/addons.html)
|
|
||||||
build/Release
|
|
||||||
|
|
||||||
# Dependency directories
|
|
||||||
node_modules/
|
|
||||||
jspm_packages/
|
|
||||||
|
|
||||||
# TypeScript v1 declaration files
|
|
||||||
typings/
|
|
||||||
|
|
||||||
# Optional npm cache directory
|
|
||||||
.npm
|
|
||||||
|
|
||||||
# Optional eslint cache
|
|
||||||
.eslintcache
|
|
||||||
|
|
||||||
# Optional REPL history
|
|
||||||
.node_repl_history
|
|
||||||
|
|
||||||
# Output of 'npm pack'
|
|
||||||
*.tgz
|
|
||||||
|
|
||||||
# Yarn Integrity file
|
|
||||||
.yarn-integrity
|
|
||||||
|
|
||||||
# dotenv environment variables file
|
|
||||||
.env
|
|
||||||
|
|
||||||
# parcel-bundler cache (https://parceljs.org/)
|
|
||||||
.cache
|
|
||||||
|
|
||||||
# next.js build output
|
|
||||||
.next
|
|
||||||
|
|
||||||
# nuxt.js build output
|
|
||||||
.nuxt
|
|
||||||
|
|
||||||
# Nuxt generate
|
|
||||||
dist
|
|
||||||
|
|
||||||
# vuepress build output
|
|
||||||
.vuepress/dist
|
|
||||||
|
|
||||||
# Serverless directories
|
|
||||||
.serverless
|
|
||||||
|
|
||||||
# IDE / Editor
|
|
||||||
.idea
|
|
||||||
|
|
||||||
# Service worker
|
|
||||||
sw.*
|
|
||||||
|
|
||||||
# macOS
|
|
||||||
.DS_Store
|
|
||||||
|
|
||||||
# Vim swap files
|
|
||||||
*.swp
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
{
|
|
||||||
"semi": false,
|
|
||||||
"singleQuote": true
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<title>Manuel Veigel</title>
|
||||||
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||||
|
<link rel="preconnect" href="https://fonts.gstatic.com">
|
||||||
|
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Inter&display=swap">
|
||||||
|
<link rel="stylesheet" href="/_nuxt/entry.BG44tMHF.css" crossorigin>
|
||||||
|
<link rel="modulepreload" as="script" crossorigin href="/_nuxt/Dhg5knF6.js">
|
||||||
|
<script type="module" src="/_nuxt/Dhg5knF6.js" crossorigin></script>
|
||||||
|
<meta name="format-detection" content="telephone=no">
|
||||||
|
<link rel="icon" type="image/x-icon" href="/favicon.ico">
|
||||||
|
<script id="unhead:payload" type="application/json">{"title":"Manuel Veigel"}</script></head><body><div id="__nuxt"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{cdn:"d29l6egdxvgg9c.cloudfront.net/",myName:"Manuel Veigel",myEmail:"maveigel@gmail.com",i18n:{baseUrl:"",defaultLocale:"",defaultDirection:"ltr",strategy:"prefix_except_default",lazy:false,rootRedirect:"",routesNameSeparator:"___",defaultLocaleRouteNameSuffix:"default",skipSettingLocaleOnNavigate:false,differentDomains:false,trailingSlash:false,locales:[],detectBrowserLanguage:{alwaysRedirect:false,cookieCrossOrigin:false,cookieDomain:"",cookieKey:"i18n_redirected",cookieSecure:false,fallbackLocale:"",redirectOn:"root",useCookie:true},experimental:{localeDetector:"",switchLocalePathLinkSSR:false,autoImportTranslationFunctions:false,typedPages:true,typedOptionsAndMessages:false,generatedLocaleFilePathFormat:"absolute",alternateLinkCanonicalQueries:false,hmr:true},multiDomainLocales:false,domainLocales:{}}},app:{baseURL:"/",buildId:"59de4f49-4f4c-4256-a61d-535d6efee325",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script>
|
||||||
|
<script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1775577375602,false]</script></body></html>
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<title>Manuel Veigel</title>
|
||||||
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||||
|
<link rel="preconnect" href="https://fonts.gstatic.com">
|
||||||
|
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Inter&display=swap">
|
||||||
|
<link rel="stylesheet" href="/_nuxt/entry.BG44tMHF.css" crossorigin>
|
||||||
|
<link rel="modulepreload" as="script" crossorigin href="/_nuxt/Dhg5knF6.js">
|
||||||
|
<script type="module" src="/_nuxt/Dhg5knF6.js" crossorigin></script>
|
||||||
|
<meta name="format-detection" content="telephone=no">
|
||||||
|
<link rel="icon" type="image/x-icon" href="/favicon.ico">
|
||||||
|
<script id="unhead:payload" type="application/json">{"title":"Manuel Veigel"}</script></head><body><div id="__nuxt"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{cdn:"d29l6egdxvgg9c.cloudfront.net/",myName:"Manuel Veigel",myEmail:"maveigel@gmail.com",i18n:{baseUrl:"",defaultLocale:"",defaultDirection:"ltr",strategy:"prefix_except_default",lazy:false,rootRedirect:"",routesNameSeparator:"___",defaultLocaleRouteNameSuffix:"default",skipSettingLocaleOnNavigate:false,differentDomains:false,trailingSlash:false,locales:[],detectBrowserLanguage:{alwaysRedirect:false,cookieCrossOrigin:false,cookieDomain:"",cookieKey:"i18n_redirected",cookieSecure:false,fallbackLocale:"",redirectOn:"root",useCookie:true},experimental:{localeDetector:"",switchLocalePathLinkSSR:false,autoImportTranslationFunctions:false,typedPages:true,typedOptionsAndMessages:false,generatedLocaleFilePathFormat:"absolute",alternateLinkCanonicalQueries:false,hmr:true},multiDomainLocales:false,domainLocales:{}}},app:{baseURL:"/",buildId:"59de4f49-4f4c-4256-a61d-535d6efee325",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script>
|
||||||
|
<script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1775577375603,false]</script></body></html>
|
||||||
@@ -1,21 +0,0 @@
|
|||||||
MIT License
|
|
||||||
|
|
||||||
Copyright (c) 2022 Rakantor
|
|
||||||
|
|
||||||
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.
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
# mave.dev
|
|
||||||
|
|
||||||
My personal website/portfolio. Built with [Nuxt](https://nuxt.com) and [Vuetify](https://vuetifyjs.com). Hosted with [GitHub Pages](https://pages.github.com/).
|
|
||||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
|||||||
|
import{_ as a}from"./wKjIcb_L.js";import{_ as i,u,o as c,c as l,a as e,t as r,b as d,w as p,d as f}from"./Dhg5knF6.js";const m={class:"antialiased bg-white dark:bg-black dark:text-white font-sans grid min-h-screen overflow-hidden place-content-center text-black"},g={class:"max-w-520px text-center z-20"},b=["textContent"],h=["textContent"],x={class:"flex items-center justify-center w-full"},y={__name:"error-404",props:{appName:{type:String,default:"Nuxt"},version:{type:String,default:""},status:{type:Number,default:404},statusText:{type:String,default:"Not Found"},description:{type:String,default:"Sorry, the page you are looking for could not be found."},backHome:{type:String,default:"Go back home"}},setup(t){const n=t;return u({title:`${n.status} - ${n.statusText} | ${n.appName}`,script:[{innerHTML:`!function(){const e=document.createElement("link").relList;if(!(e&&e.supports&&e.supports("modulepreload"))){for(const e of document.querySelectorAll('link[rel="modulepreload"]'))r(e);new MutationObserver(e=>{for(const o of e)if("childList"===o.type)for(const e of o.addedNodes)"LINK"===e.tagName&&"modulepreload"===e.rel&&r(e)}).observe(document,{childList:!0,subtree:!0})}function r(e){if(e.ep)return;e.ep=!0;const r=function(e){const r={};return e.integrity&&(r.integrity=e.integrity),e.referrerPolicy&&(r.referrerPolicy=e.referrerPolicy),"use-credentials"===e.crossOrigin?r.credentials="include":"anonymous"===e.crossOrigin?r.credentials="omit":r.credentials="same-origin",r}(e);fetch(e.href,r)}}();`}],style:[{innerHTML:'*,:after,:before{border-color:var(--un-default-border-color,#e5e7eb);border-style:solid;border-width:0;box-sizing:border-box}:after,:before{--un-content:""}html{line-height:1.5;-webkit-text-size-adjust:100%;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-moz-tab-size:4;tab-size:4;-webkit-tap-highlight-color:transparent}body{line-height:inherit;margin:0}h1{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}h1,p{margin:0}*,:after,:before{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 transparent;--un-ring-shadow:0 0 transparent;--un-shadow-inset: ;--un-shadow:0 0 transparent;--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgba(147,197,253,.5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: }'}]}),(k,o)=>{const s=a;return c(),l("div",m,[o[0]||(o[0]=e("div",{class:"fixed left-0 right-0 spotlight z-10"},null,-1)),e("div",g,[e("h1",{class:"font-medium mb-8 sm:text-10xl text-8xl",textContent:r(t.status)},null,8,b),e("p",{class:"font-light leading-tight mb-16 px-8 sm:px-0 sm:text-4xl text-xl",textContent:r(t.description)},null,8,h),e("div",x,[d(s,{to:"/",class:"cursor-pointer gradient-border px-4 py-2 sm:px-6 sm:py-3 sm:text-xl text-md"},{default:p(()=>[f(r(t.backHome),1)]),_:1})])])])}}},v=i(y,[["__scopeId","data-v-1bd9e11a"]]);export{v as default};
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
import{_ as c}from"./wKjIcb_L.js";import{_ as l,h as p,w as t,V as d,r as m,o as _,b as e,e as a,a as f,t as s,d as n,m as u}from"./Dhg5knF6.js";const h={name:"IndexPage"},x={class:"text-h4 text-md-h3 text-lg-h2 text-high-emphasis"};function g(o,$,y,V,k,w){const i=c,r=m("i18n-t");return _(),p(d,{justify:"center"},{default:t(()=>[e(a,{cols:"12"},{default:t(()=>[f("span",x,s(o.$t("greeting")),1)]),_:1}),e(a,{cols:"12",class:"my-6"},{default:t(()=>[e(r,{keypath:"introduction",tag:"p",class:"text-body-1 text-md-h6 text-medium-emphasis",style:{"max-width":"550px"}},{portfolio:t(()=>[e(i,{to:"/portfolio"},{default:t(()=>[n(s(o.$t("portfolio")),1)]),_:1})]),_:1})]),_:1}),e(a,{cols:"12"},{default:t(()=>[e(u,{variant:"outlined",color:"primary","prepend-icon":"mdi-email-outline",href:`mailto:<${o.$config.public.myEmail}>`},{default:t(()=>[n(s(o.$t("getInTouch")),1)]),_:1},8,["href"])]),_:1})]),_:1})}const b=l(h,[["render",g]]);export{b as default};
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
import{_ as s,u as a,o as i,c as u,a as e,t as o}from"./Dhg5knF6.js";const l={class:"antialiased bg-white dark:bg-black dark:text-white font-sans grid min-h-screen overflow-hidden place-content-center text-black"},c={class:"max-w-520px text-center"},d=["textContent"],p=["textContent"],f={__name:"error-500",props:{appName:{type:String,default:"Nuxt"},version:{type:String,default:""},status:{type:Number,default:500},statusText:{type:String,default:"Server error"},description:{type:String,default:"This page is temporarily unavailable."}},setup(t){const n=t;return a({title:`${n.status} - ${n.statusText} | ${n.appName}`,script:[{innerHTML:`!function(){const e=document.createElement("link").relList;if(!(e&&e.supports&&e.supports("modulepreload"))){for(const e of document.querySelectorAll('link[rel="modulepreload"]'))r(e);new MutationObserver(e=>{for(const o of e)if("childList"===o.type)for(const e of o.addedNodes)"LINK"===e.tagName&&"modulepreload"===e.rel&&r(e)}).observe(document,{childList:!0,subtree:!0})}function r(e){if(e.ep)return;e.ep=!0;const r=function(e){const r={};return e.integrity&&(r.integrity=e.integrity),e.referrerPolicy&&(r.referrerPolicy=e.referrerPolicy),"use-credentials"===e.crossOrigin?r.credentials="include":"anonymous"===e.crossOrigin?r.credentials="omit":r.credentials="same-origin",r}(e);fetch(e.href,r)}}();`}],style:[{innerHTML:'*,:after,:before{border-color:var(--un-default-border-color,#e5e7eb);border-style:solid;border-width:0;box-sizing:border-box}:after,:before{--un-content:""}html{line-height:1.5;-webkit-text-size-adjust:100%;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-moz-tab-size:4;tab-size:4;-webkit-tap-highlight-color:transparent}body{line-height:inherit;margin:0}h1{font-size:inherit;font-weight:inherit}h1,p{margin:0}*,:after,:before{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 transparent;--un-ring-shadow:0 0 transparent;--un-shadow-inset: ;--un-shadow:0 0 transparent;--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgba(147,197,253,.5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: }'}]}),(g,r)=>(i(),u("div",l,[r[0]||(r[0]=e("div",{class:"-bottom-1/2 fixed h-1/2 left-0 right-0 spotlight"},null,-1)),e("div",c,[e("h1",{class:"font-medium mb-8 sm:text-10xl text-8xl",textContent:o(t.status)},null,8,d),e("p",{class:"font-light leading-tight mb-16 px-8 sm:px-0 sm:text-4xl text-xl",textContent:o(t.description)},null,8,p)])]))}},b=s(f,[["__scopeId","data-v-a01dd0ba"]]);export{b as default};
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
Before Width: | Height: | Size: 76 KiB After Width: | Height: | Size: 76 KiB |
@@ -0,0 +1 @@
|
|||||||
|
{"id":"59de4f49-4f4c-4256-a61d-535d6efee325","timestamp":1775577367830}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
{"id":"59de4f49-4f4c-4256-a61d-535d6efee325","timestamp":1775577367830,"prerendered":[]}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
.v-app-bg[data-v-49c35caf]{background:rgb(var(--v-theme-background))}.link-active[data-v-49c35caf]{color:rgb(var(--v-theme-primary))!important}.v-btn--variant-plain[data-v-49c35caf]{color:rgb(var(--v-theme-on-background));opacity:1;transition:all .28s cubic-bezier(.4,0,.2,1)}.v-btn--variant-plain[data-v-49c35caf]:focus,.v-btn--variant-plain[data-v-49c35caf]:hover{color:rgb(var(--v-theme-primary))}
|
||||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
|||||||
|
.spotlight[data-v-1bd9e11a]{background:linear-gradient(45deg,#00dc82,#36e4da 50%,#0047e1);bottom:-30vh;filter:blur(20vh);height:40vh}.gradient-border[data-v-1bd9e11a]{-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-radius:.5rem;position:relative}@media(prefers-color-scheme:light){.gradient-border[data-v-1bd9e11a]{background-color:#ffffff4d}.gradient-border[data-v-1bd9e11a]:before{background:linear-gradient(90deg,#e2e2e2,#e2e2e2 25%,#00dc82,#36e4da 75%,#0047e1)}}@media(prefers-color-scheme:dark){.gradient-border[data-v-1bd9e11a]{background-color:#1414144d}.gradient-border[data-v-1bd9e11a]:before{background:linear-gradient(90deg,#303030,#303030 25%,#00dc82,#36e4da 75%,#0047e1)}}.gradient-border[data-v-1bd9e11a]:before{background-size:400% auto;border-radius:.5rem;content:"";inset:0;-webkit-mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);-webkit-mask-composite:xor;mask-composite:exclude;opacity:.5;padding:2px;position:absolute;transition:background-position .3s ease-in-out,opacity .2s ease-in-out;width:100%}.gradient-border[data-v-1bd9e11a]:hover:before{background-position:-50% 0;opacity:1}.fixed[data-v-1bd9e11a]{position:fixed}.left-0[data-v-1bd9e11a]{left:0}.right-0[data-v-1bd9e11a]{right:0}.z-10[data-v-1bd9e11a]{z-index:10}.z-20[data-v-1bd9e11a]{z-index:20}.grid[data-v-1bd9e11a]{display:grid}.mb-16[data-v-1bd9e11a]{margin-bottom:4rem}.mb-8[data-v-1bd9e11a]{margin-bottom:2rem}.max-w-520px[data-v-1bd9e11a]{max-width:520px}.min-h-screen[data-v-1bd9e11a]{min-height:100vh}.w-full[data-v-1bd9e11a]{width:100%}.flex[data-v-1bd9e11a]{display:flex}.cursor-pointer[data-v-1bd9e11a]{cursor:pointer}.place-content-center[data-v-1bd9e11a]{place-content:center}.items-center[data-v-1bd9e11a]{align-items:center}.justify-center[data-v-1bd9e11a]{justify-content:center}.overflow-hidden[data-v-1bd9e11a]{overflow:hidden}.bg-white[data-v-1bd9e11a]{--un-bg-opacity:1;background-color:rgb(255 255 255/var(--un-bg-opacity))}.px-4[data-v-1bd9e11a]{padding-left:1rem;padding-right:1rem}.px-8[data-v-1bd9e11a]{padding-left:2rem;padding-right:2rem}.py-2[data-v-1bd9e11a]{padding-bottom:.5rem;padding-top:.5rem}.text-center[data-v-1bd9e11a]{text-align:center}.text-8xl[data-v-1bd9e11a]{font-size:6rem;line-height:1}.text-xl[data-v-1bd9e11a]{font-size:1.25rem;line-height:1.75rem}.text-black[data-v-1bd9e11a]{--un-text-opacity:1;color:rgb(0 0 0/var(--un-text-opacity))}.font-light[data-v-1bd9e11a]{font-weight:300}.font-medium[data-v-1bd9e11a]{font-weight:500}.leading-tight[data-v-1bd9e11a]{line-height:1.25}.font-sans[data-v-1bd9e11a]{font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.antialiased[data-v-1bd9e11a]{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@media(prefers-color-scheme:dark){.dark\:bg-black[data-v-1bd9e11a]{--un-bg-opacity:1;background-color:rgb(0 0 0/var(--un-bg-opacity))}.dark\:text-white[data-v-1bd9e11a]{--un-text-opacity:1;color:rgb(255 255 255/var(--un-text-opacity))}}@media(min-width:640px){.sm\:px-0[data-v-1bd9e11a]{padding-left:0;padding-right:0}.sm\:px-6[data-v-1bd9e11a]{padding-left:1.5rem;padding-right:1.5rem}.sm\:py-3[data-v-1bd9e11a]{padding-bottom:.75rem;padding-top:.75rem}.sm\:text-4xl[data-v-1bd9e11a]{font-size:2.25rem;line-height:2.5rem}.sm\:text-xl[data-v-1bd9e11a]{font-size:1.25rem;line-height:1.75rem}}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
.spotlight[data-v-a01dd0ba]{background:linear-gradient(45deg,#00dc82,#36e4da 50%,#0047e1);filter:blur(20vh)}.fixed[data-v-a01dd0ba]{position:fixed}.-bottom-1\/2[data-v-a01dd0ba]{bottom:-50%}.left-0[data-v-a01dd0ba]{left:0}.right-0[data-v-a01dd0ba]{right:0}.grid[data-v-a01dd0ba]{display:grid}.mb-16[data-v-a01dd0ba]{margin-bottom:4rem}.mb-8[data-v-a01dd0ba]{margin-bottom:2rem}.h-1\/2[data-v-a01dd0ba]{height:50%}.max-w-520px[data-v-a01dd0ba]{max-width:520px}.min-h-screen[data-v-a01dd0ba]{min-height:100vh}.place-content-center[data-v-a01dd0ba]{place-content:center}.overflow-hidden[data-v-a01dd0ba]{overflow:hidden}.bg-white[data-v-a01dd0ba]{--un-bg-opacity:1;background-color:rgb(255 255 255/var(--un-bg-opacity))}.px-8[data-v-a01dd0ba]{padding-left:2rem;padding-right:2rem}.text-center[data-v-a01dd0ba]{text-align:center}.text-8xl[data-v-a01dd0ba]{font-size:6rem;line-height:1}.text-xl[data-v-a01dd0ba]{font-size:1.25rem;line-height:1.75rem}.text-black[data-v-a01dd0ba]{--un-text-opacity:1;color:rgb(0 0 0/var(--un-text-opacity))}.font-light[data-v-a01dd0ba]{font-weight:300}.font-medium[data-v-a01dd0ba]{font-weight:500}.leading-tight[data-v-a01dd0ba]{line-height:1.25}.font-sans[data-v-a01dd0ba]{font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.antialiased[data-v-a01dd0ba]{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@media(prefers-color-scheme:dark){.dark\:bg-black[data-v-a01dd0ba]{--un-bg-opacity:1;background-color:rgb(0 0 0/var(--un-bg-opacity))}.dark\:text-white[data-v-a01dd0ba]{--un-text-opacity:1;color:rgb(255 255 255/var(--un-text-opacity))}}@media(min-width:640px){.sm\:px-0[data-v-a01dd0ba]{padding-left:0;padding-right:0}.sm\:text-4xl[data-v-a01dd0ba]{font-size:2.25rem;line-height:2.5rem}}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
h1[data-v-f5e084b9]{font-size:20px}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
import{_ as p}from"./wKjIcb_L.js";import{_,o as t,h as u,w as r,c as s,t as a,b as i,d as l,T as h}from"./Dhg5knF6.js";const m={name:"EmptyLayout",layout:"empty",props:{error:{type:Object,default:null}},data(){return{pageNotFound:"404 Not Found",otherError:"An error occurred"}},head(){return{title:this.error.statusCode===404?this.pageNotFound:this.otherError}}},f={key:0},y={key:1};function k(n,e,c,x,o,N){const d=p;return t(),u(h,{dark:""},{default:r(()=>[c.error.statusCode===404?(t(),s("h1",f,a(o.pageNotFound),1)):(t(),s("h1",y,a(o.otherError),1)),i(d,{to:"/"},{default:r(()=>[...e[0]||(e[0]=[l(" Home page ",-1)])]),_:1})]),_:1})}const F=_(m,[["render",k],["__scopeId","data-v-f5e084b9"]]);export{F as default};
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
h1[data-v-7bb417f6],h2[data-v-7bb417f6],h3[data-v-7bb417f6],h4[data-v-7bb417f6],h5[data-v-7bb417f6],h6[data-v-7bb417f6],ul[data-v-7bb417f6]{margin-bottom:1rem}p[data-v-7bb417f6],table[data-v-7bb417f6]{margin-bottom:2rem}li[data-v-7bb417f6]{margin-left:2rem}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
import{_ as w,o as n,h as d,w as e,b as t,G as _,H as f,c as m,F as h,g as v,I as g,J as y,t as o,n as L,a as c,m as r,d as i,K as C,z as D,L as A,p as B,E as I,x as N,M as S,N as b,O as z,P as E,V as U,e as u,D as $,Q as F,R as M,S as R,T,U as H}from"./Dhg5knF6.js";const j=""+new URL("avatar_blueish.DLBh9fAt.png",import.meta.url).href,P={name:"DefaultLayout",setup(){const{smAndDown:a}=H();return{smAndDown:a}},data:()=>({projectUrl:"https://github.com/Rakantor/personal-portfolio",availableLocales:[{code:"en",name:"English"},{code:"de",name:"Deutsch"}],pages:[{icon:"mdi-home",title:"headerHome",url:"/"},{icon:"mdi-text-account",title:"headerAbout",url:"/bio"},{icon:"mdi-briefcase",title:"headerWork",url:"/portfolio"}],drawer:!1}),methods:{changeLocale(a){this.$i18n.setLocale(a),localStorage.setItem("lang",a)}},created(){const a=localStorage.getItem("lang")||this.$i18n.locale;a!=this.$i18n.locale&&this.$i18n.setLocale(a)}},W={class:"pa-2"},G={class:"text-caption text-no-wrap"};function J(a,s,K,V,O,k){return n(),d(T,{class:"v-app-bg"},{default:e(()=>[t(_,{"model-value":a.drawer,location:"right",app:"","disable-resize-watcher":""},{append:e(()=>[c("div",W,[t(r,{block:"",outlined:"",color:"primary","prepend-icon":"mdi-email-outline",href:`mailto:<${a.$config.public.myEmail}>`},{default:e(()=>[...s[2]||(s[2]=[i(" Contact ",-1)])]),_:1},8,["href"])])]),default:e(()=>[t(f,{nav:"",lines:!1},{default:e(()=>[(n(!0),m(h,null,v(a.pages,(l,p)=>(n(),d(g,{key:p,to:l.url,"active-color":"primary",router:"",exact:""},{prepend:e(()=>[t(L,{icon:l.icon},null,8,["icon"])]),default:e(()=>[t(y,{textContent:o(a.$t(l.title))},null,8,["textContent"])]),_:2},1032,["to"]))),128))]),_:1})]),_:1},8,["model-value"]),t(C,{app:"",color:"background",class:"px-md-10 py-md-4"},{prepend:e(()=>[t(N,{size:"48",color:"surface",style:{cursor:"pointer"},onClick:s[0]||(s[0]=l=>a.$router.push("/"))},{default:e(()=>[...s[3]||(s[3]=[c("img",{src:j,width:"55"},null,-1)])]),_:1})]),default:e(()=>[t(D),V.smAndDown?(n(),d(A,{key:0,onClick:s[1]||(s[1]=B(l=>a.drawer=!a.drawer,["stop"]))})):(n(),d(I,{key:1,"model-value":0,mandatory:"",variant:"plain","selected-class":"link-active"},{default:e(()=>[t(r,{ripple:!1,to:"/"},{default:e(()=>[i(o(a.$t("headerHome")),1)]),_:1}),t(r,{ripple:!1,to:"/bio"},{default:e(()=>[i(o(a.$t("headerAbout")),1)]),_:1}),t(r,{ripple:!1,to:"/portfolio"},{default:e(()=>[i(o(a.$t("headerWork")),1)]),_:1}),t(r,{ripple:!1,href:`mailto:<${a.$config.public.myEmail}>`},{default:e(()=>[i(o(a.$t("headerContact")),1)]),_:1},8,["href"])]),_:1}))]),_:1}),t(S,null,{default:e(()=>[t(b,{class:"pa-md-16 my-16"},{default:e(()=>[z(a.$slots,"default",{},void 0,!0)]),_:3})]),_:3}),t(E,{app:"",absolute:"",color:"transparent",style:{"border-top":"1px solid rgba(var(--v-theme-on-surface), 0.1)"}},{default:e(()=>[t(b,{class:"d-flex py-0 my-0"},{default:e(()=>[t(U,{"no-gutters":""},{default:e(()=>[t(u,{cols:"4",class:$(["my-auto",a.$vuetify.display.mobile?"text-left":"text-center"])},{default:e(()=>[t(r,{variant:"plain",size:"x-small",density:"compact",color:"on-surface",ripple:!1,class:"link",to:"/imprint"},{default:e(()=>[i(o(a.$t("imprint")),1)]),_:1})]),_:1},8,["class"]),t(u,{cols:"4",class:"text-center my-auto"},{default:e(()=>[c("span",G," © "+o(new Date().getFullYear())+" "+o(a.$config.public.myName),1)]),_:1}),t(u,{cols:"4",class:$(["my-auto",a.$vuetify.display.mobile?"text-right":"text-center"])},{default:e(()=>[t(r,{variant:"plain",icon:"mdi-github",density:"comfortable",color:"on-surface",ripple:!1,class:"link",href:a.projectUrl,target:"_blank"},null,8,["href"]),t(F,{location:"top right","close-on-content-click":!1},{activator:e(({props:l})=>[t(r,R(l,{variant:"plain",icon:"mdi-translate",density:"comfortable",color:"on-surface",ripple:!1,class:"link"}),null,16)]),default:e(()=>[t(f,{nav:"","min-width":"150"},{default:e(()=>[t(M,null,{default:e(()=>[i(o(a.$t("lang").toUpperCase()),1)]),_:1}),(n(!0),m(h,null,v(a.availableLocales,l=>(n(),d(g,{key:l.code,value:l,active:l.code==a.$i18n.locale,"active-color":"primary"},{default:e(()=>[t(y,{onClick:p=>k.changeLocale(l.code)},{default:e(()=>[i(o(l.name),1)]),_:2},1032,["onClick"])]),_:2},1032,["value","active"]))),128))]),_:1})]),_:1})]),_:1},8,["class"])]),_:1})]),_:1})]),_:1})]),_:3})}const Y=w(P,[["render",J],["__scopeId","data-v-49c35caf"]]);export{Y as default};
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1 @@
|
|||||||
|
.img-height[data-v-47fe2410]{height:calc(90vh - 50px)}
|
||||||
File diff suppressed because one or more lines are too long
Binary file not shown.
|
Before Width: | Height: | Size: 216 KiB |
@@ -1,44 +0,0 @@
|
|||||||
// Ref: https://github.com/nuxt-community/vuetify-module#customvariables
|
|
||||||
//
|
|
||||||
// The variables you want to modify
|
|
||||||
// $font-size-root: 20px;
|
|
||||||
|
|
||||||
$font-inter: 'Inter', sans-serif;
|
|
||||||
@use 'vuetify' with (
|
|
||||||
$body-font-family: $font-inter,
|
|
||||||
);
|
|
||||||
|
|
||||||
p a {
|
|
||||||
color: rgb(var(--v-theme-primary));
|
|
||||||
text-decoration: none;
|
|
||||||
position: relative;
|
|
||||||
|
|
||||||
&:before {
|
|
||||||
content: '';
|
|
||||||
position: absolute;
|
|
||||||
width: 100%;
|
|
||||||
height: 2px;
|
|
||||||
border-radius: 2px;
|
|
||||||
background-color: rgb(var(--v-theme-primary));
|
|
||||||
bottom: 0;
|
|
||||||
left: 0;
|
|
||||||
transform-origin: right;
|
|
||||||
transform: scaleX(0);
|
|
||||||
transition: transform .3s ease-in-out;
|
|
||||||
}
|
|
||||||
|
|
||||||
&:hover::before {
|
|
||||||
transform-origin: left;
|
|
||||||
transform: scaleX(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.link {
|
|
||||||
color: inherit;
|
|
||||||
text-decoration: none;
|
|
||||||
transition: all 0.28s cubic-bezier(0.4, 0, 0.2, 1);
|
|
||||||
|
|
||||||
&:hover {
|
|
||||||
color: rgb(var(--v-theme-primary));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<title>Manuel Veigel</title>
|
||||||
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||||
|
<link rel="preconnect" href="https://fonts.gstatic.com">
|
||||||
|
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Inter&display=swap">
|
||||||
|
<link rel="stylesheet" href="/_nuxt/entry.BG44tMHF.css" crossorigin>
|
||||||
|
<link rel="modulepreload" as="script" crossorigin href="/_nuxt/Dhg5knF6.js">
|
||||||
|
<script type="module" src="/_nuxt/Dhg5knF6.js" crossorigin></script>
|
||||||
|
<meta name="format-detection" content="telephone=no">
|
||||||
|
<link rel="icon" type="image/x-icon" href="/favicon.ico">
|
||||||
|
<script id="unhead:payload" type="application/json">{"title":"Manuel Veigel"}</script></head><body><div id="__nuxt"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{cdn:"d29l6egdxvgg9c.cloudfront.net/",myName:"Manuel Veigel",myEmail:"maveigel@gmail.com",i18n:{baseUrl:"",defaultLocale:"",defaultDirection:"ltr",strategy:"prefix_except_default",lazy:false,rootRedirect:"",routesNameSeparator:"___",defaultLocaleRouteNameSuffix:"default",skipSettingLocaleOnNavigate:false,differentDomains:false,trailingSlash:false,locales:[],detectBrowserLanguage:{alwaysRedirect:false,cookieCrossOrigin:false,cookieDomain:"",cookieKey:"i18n_redirected",cookieSecure:false,fallbackLocale:"",redirectOn:"root",useCookie:true},experimental:{localeDetector:"",switchLocalePathLinkSSR:false,autoImportTranslationFunctions:false,typedPages:true,typedOptionsAndMessages:false,generatedLocaleFilePathFormat:"absolute",alternateLinkCanonicalQueries:false,hmr:true},multiDomainLocales:false,domainLocales:{}}},app:{baseURL:"/",buildId:"59de4f49-4f4c-4256-a61d-535d6efee325",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script>
|
||||||
|
<script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1775577375601,false]</script></body></html>
|
||||||
@@ -1,25 +0,0 @@
|
|||||||
<template>
|
|
||||||
<v-dialog v-model="show" class="d-flex align-center justify-center">
|
|
||||||
<v-carousel
|
|
||||||
:model-value="index"
|
|
||||||
:show-arrows="images.length > 1"
|
|
||||||
hide-delimiters
|
|
||||||
>
|
|
||||||
<v-carousel-item v-for="image of images" :key="image"
|
|
||||||
:src="image"
|
|
||||||
class="ma-auto"
|
|
||||||
></v-carousel-item>
|
|
||||||
</v-carousel>
|
|
||||||
</v-dialog>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
export default {
|
|
||||||
name: 'ImageCarousel',
|
|
||||||
data: () => ({
|
|
||||||
show: false,
|
|
||||||
images: [],
|
|
||||||
index: 0
|
|
||||||
})
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
<template>
|
|
||||||
<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<title>Apple</title>
|
|
||||||
<path d="M12.152 6.896c-.948 0-2.415-1.078-3.96-1.04-2.04.027-3.91 1.183-4.961 3.014-2.117 3.675-.546 9.103 1.519 12.09 1.013 1.454 2.208 3.09 3.792 3.039 1.52-.065 2.09-.987 3.935-.987 1.831 0 2.35.987 3.96.948 1.637-.026 2.676-1.48 3.676-2.948 1.156-1.688 1.636-3.325 1.662-3.415-.039-.013-3.182-1.221-3.22-4.857-.026-3.04 2.48-4.494 2.597-4.559-1.429-2.09-3.623-2.324-4.39-2.376-2-.156-3.675 1.09-4.61 1.09zM15.53 3.83c.843-1.012 1.4-2.427 1.245-3.83-1.207.052-2.662.805-3.532 1.818-.78.896-1.454 2.338-1.273 3.714 1.338.104 2.715-.688 3.559-1.701"/>
|
|
||||||
</svg>
|
|
||||||
</template>
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
<template>
|
|
||||||
<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<title>Heroku</title>
|
|
||||||
<path d="M20.61 0H3.39C2.189 0 1.23.96 1.23 2.16v19.681c0 1.198.959 2.159 2.16 2.159h17.22c1.2 0 2.159-.961 2.159-2.159V2.16C22.77.96 21.811 0 20.61 0zm.96 21.841c0 .539-.421.96-.96.96H3.39c-.54 0-.96-.421-.96-.96V2.16c0-.54.42-.961.96-.961h17.22c.539 0 .96.421.96.961v19.681zM6.63 20.399L9.33 18l-2.7-2.4v4.799zm9.72-9.719c-.479-.48-1.379-1.08-2.879-1.08-1.621 0-3.301.421-4.5.84V3.6h-2.4v10.38l1.68-.78s2.76-1.26 5.16-1.26c1.2 0 1.5.66 1.5 1.26v7.2h2.4v-7.2c.059-.179.059-1.501-.961-2.52zM13.17 7.5h2.4c1.08-1.26 1.62-2.521 1.8-3.9h-2.399c-.241 1.379-.841 2.64-1.801 3.9z"/>
|
|
||||||
</svg>
|
|
||||||
</template>
|
|
||||||
|
Before Width: | Height: | Size: 8.4 KiB After Width: | Height: | Size: 8.4 KiB |
@@ -1,28 +0,0 @@
|
|||||||
#!/usr/bin/env sh
|
|
||||||
|
|
||||||
# abort on errors
|
|
||||||
set -e
|
|
||||||
|
|
||||||
# build
|
|
||||||
npx nuxi generate
|
|
||||||
|
|
||||||
# navigate into the build output directory
|
|
||||||
cd .output/public
|
|
||||||
touch .nojekyll
|
|
||||||
|
|
||||||
# if you are deploying to a custom domain
|
|
||||||
echo 'mave.dev' > CNAME
|
|
||||||
|
|
||||||
git init
|
|
||||||
git add -A
|
|
||||||
git config --local user.email "rakantor.dev@gmail.com"
|
|
||||||
git config --local user.name "Rakantor"
|
|
||||||
git commit -m 'deploy'
|
|
||||||
|
|
||||||
# if you are deploying to https://<USERNAME>.github.io
|
|
||||||
# git push -f git@github.com:<USERNAME>/<USERNAME>.github.io.git main
|
|
||||||
|
|
||||||
# if you are deploying to https://<USERNAME>.github.io/<REPO>
|
|
||||||
git push -f https://github.com/Rakantor/personal-portfolio.git master:gh-pages
|
|
||||||
|
|
||||||
cd -
|
|
||||||
@@ -1,42 +0,0 @@
|
|||||||
export default defineI18nConfig(nuxt => ({
|
|
||||||
legacy: false,
|
|
||||||
locale: 'en',
|
|
||||||
messages: {
|
|
||||||
en: {
|
|
||||||
greeting: 'Hey. I\'m Manuel.',
|
|
||||||
iuGamerApp: `An Android app designed to help a group of board game enthusiasts\
|
|
||||||
better organize their regular evening game sessions.\
|
|
||||||
Users will be reliably informed about the time and location of the next appointment.\
|
|
||||||
They can suggest games, vote on suggested games, rate past appointments,\
|
|
||||||
and communicate with each other via an integrated chat feature.`,
|
|
||||||
iuQuizApp: 'An online quiz system that supports distance learning students at IU in solidifying their learning content in preparation for the exam. It enables students to cooperatively and collaboratively find answers to subject-related questions. The focus is particularly on working together and playing/learning together. Similar to the popular app Quizduel, students can, but do not have to, play against each other.',
|
|
||||||
personalWebsite: 'My first portfolio website.',
|
|
||||||
pmb: 'A 2D game inspired by the 2000s Pokémon games. Built from scratch! Features include animated battles (online multiplayer), overworld sprites, custom maps built with Tiled, game sound, 3 difficulty levels and so much more.',
|
|
||||||
toriiJava: 'A Japanese vocabulary learning tool that harnesses the power of spaced repetition to make memorizing new words a breeze.',
|
|
||||||
toriiWeb: `Version 2 of my Japanese vocabulary learning tool brings significant enhancements\
|
|
||||||
over its predecessor. New features include offline functionality (thanks to utilizing IndexedDB),\
|
|
||||||
an integrated dictionary for single-click word addition,\
|
|
||||||
additional review methods for learned words,\
|
|
||||||
a review forecast chart for planning study sessions,\
|
|
||||||
and improved word search and statistics for better user insights.`
|
|
||||||
},
|
|
||||||
de: {
|
|
||||||
greeting: 'Hey. Ich bin Manuel.',
|
|
||||||
iuGamerApp: `Eine Android App, die einer Gruppe von Brettspielfans dabei helfen soll,\
|
|
||||||
ihre regelmäßigen abendlichen Spieltermine besser zu organisieren.\
|
|
||||||
Benutzer werden zuverlässig über Zeit & Ort des nächsten Termins informiert.\
|
|
||||||
Sie können Spiele vorschlagen und über Vorschläge abstimmen, vergangene Termine bewerten\
|
|
||||||
und sich über einen integrierten Chat gegenseitig Nachrichten zukommen lassen.`,
|
|
||||||
iuQuizApp: 'Ein Online-Quizsystem, das Studierende des Fernstudiums der IU bei der Festigung der Lerninhalte zur Vorbereitung auf die Klausur unterstützt. Es ermöglicht Studierenden, kooperativ und kollaborativ Antworten zu fachlichen Fragen zu finden. Das miteinander bzw. das gemeinsame Spielen/Erarbeiten steht dabei besonders im Fokus. Ähnlich wie bei der populären App Quizduell kann, jedoch muss nicht gegeneinander gespielt werden.',
|
|
||||||
personalWebsite: 'Meine erste Portfolio-Website.',
|
|
||||||
pmb: 'A 2D game inspired by the 2000s Pokémon games. Built from scratch! Features animated battles (online multiplayer), overworld sprites, custom maps, sound, 3 difficulty levels and so much more.',
|
|
||||||
toriiJava: 'DEU',
|
|
||||||
toriiWeb: `Version 2 meiner Vokabeltrainer-App bringt bedeutende Verbesserungen\
|
|
||||||
gegenüber seinem Vorgänger. Neue Funktionen umfassen Offline-Funktionalität (dank der Nutzung von IndexedDB),\
|
|
||||||
ein integriertes Wörterbuch für das Hinzufügen neuer Wörter mit nur einem Klick,\
|
|
||||||
zusätzliche Überprüfungsmethoden für gelernte Vokabeln,\
|
|
||||||
ein Vorschau-Diagramm zur Planung von Lernsitzungen sowie\
|
|
||||||
verbesserte Wortsuche und Statistiken.`
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}))
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
import { h } from 'vue'
|
|
||||||
import type { IconSet, IconProps } from 'vuetify'
|
|
||||||
import apple from '~/components/svg/apple.vue'
|
|
||||||
import heroku from '~/components/svg/heroku.vue'
|
|
||||||
|
|
||||||
const customSvgNameToComponent: any = {
|
|
||||||
apple,
|
|
||||||
heroku,
|
|
||||||
}
|
|
||||||
|
|
||||||
const brands: IconSet = {
|
|
||||||
component: (props: IconProps) => h(customSvgNameToComponent[props.icon], { class: 'v-icon__svg' }),
|
|
||||||
}
|
|
||||||
|
|
||||||
export { brands }
|
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<title>Manuel Veigel</title>
|
||||||
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||||
|
<link rel="preconnect" href="https://fonts.gstatic.com">
|
||||||
|
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Inter&display=swap">
|
||||||
|
<link rel="stylesheet" href="/_nuxt/entry.BG44tMHF.css" crossorigin>
|
||||||
|
<link rel="modulepreload" as="script" crossorigin href="/_nuxt/Dhg5knF6.js">
|
||||||
|
<script type="module" src="/_nuxt/Dhg5knF6.js" crossorigin></script>
|
||||||
|
<meta name="format-detection" content="telephone=no">
|
||||||
|
<link rel="icon" type="image/x-icon" href="/favicon.ico">
|
||||||
|
<script id="unhead:payload" type="application/json">{"title":"Manuel Veigel"}</script></head><body><div id="__nuxt"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{cdn:"d29l6egdxvgg9c.cloudfront.net/",myName:"Manuel Veigel",myEmail:"maveigel@gmail.com",i18n:{baseUrl:"",defaultLocale:"",defaultDirection:"ltr",strategy:"prefix_except_default",lazy:false,rootRedirect:"",routesNameSeparator:"___",defaultLocaleRouteNameSuffix:"default",skipSettingLocaleOnNavigate:false,differentDomains:false,trailingSlash:false,locales:[],detectBrowserLanguage:{alwaysRedirect:false,cookieCrossOrigin:false,cookieDomain:"",cookieKey:"i18n_redirected",cookieSecure:false,fallbackLocale:"",redirectOn:"root",useCookie:true},experimental:{localeDetector:"",switchLocalePathLinkSSR:false,autoImportTranslationFunctions:false,typedPages:true,typedOptionsAndMessages:false,generatedLocaleFilePathFormat:"absolute",alternateLinkCanonicalQueries:false,hmr:true},multiDomainLocales:false,domainLocales:{}}},app:{baseURL:"/",buildId:"59de4f49-4f4c-4256-a61d-535d6efee325",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script>
|
||||||
|
<script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1775577375602,false]</script></body></html>
|
||||||
+13
@@ -0,0 +1,13 @@
|
|||||||
|
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<title>Manuel Veigel</title>
|
||||||
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||||
|
<link rel="preconnect" href="https://fonts.gstatic.com">
|
||||||
|
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Inter&display=swap">
|
||||||
|
<link rel="stylesheet" href="/_nuxt/entry.BG44tMHF.css" crossorigin>
|
||||||
|
<link rel="modulepreload" as="script" crossorigin href="/_nuxt/Dhg5knF6.js">
|
||||||
|
<script type="module" src="/_nuxt/Dhg5knF6.js" crossorigin></script>
|
||||||
|
<meta name="format-detection" content="telephone=no">
|
||||||
|
<link rel="icon" type="image/x-icon" href="/favicon.ico">
|
||||||
|
<script id="unhead:payload" type="application/json">{"title":"Manuel Veigel"}</script></head><body><div id="__nuxt"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{cdn:"d29l6egdxvgg9c.cloudfront.net/",myName:"Manuel Veigel",myEmail:"maveigel@gmail.com",i18n:{baseUrl:"",defaultLocale:"",defaultDirection:"ltr",strategy:"prefix_except_default",lazy:false,rootRedirect:"",routesNameSeparator:"___",defaultLocaleRouteNameSuffix:"default",skipSettingLocaleOnNavigate:false,differentDomains:false,trailingSlash:false,locales:[],detectBrowserLanguage:{alwaysRedirect:false,cookieCrossOrigin:false,cookieDomain:"",cookieKey:"i18n_redirected",cookieSecure:false,fallbackLocale:"",redirectOn:"root",useCookie:true},experimental:{localeDetector:"",switchLocalePathLinkSSR:false,autoImportTranslationFunctions:false,typedPages:true,typedOptionsAndMessages:false,generatedLocaleFilePathFormat:"absolute",alternateLinkCanonicalQueries:false,hmr:true},multiDomainLocales:false,domainLocales:{}}},app:{baseURL:"/",buildId:"59de4f49-4f4c-4256-a61d-535d6efee325",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script>
|
||||||
|
<script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1775577375603,false]</script></body></html>
|
||||||
@@ -1,131 +0,0 @@
|
|||||||
<template>
|
|
||||||
<v-app class="v-app-bg">
|
|
||||||
<v-navigation-drawer
|
|
||||||
:model-value="drawer"
|
|
||||||
location="right"
|
|
||||||
app
|
|
||||||
disable-resize-watcher
|
|
||||||
>
|
|
||||||
<v-list nav :lines="false">
|
|
||||||
<v-list-item
|
|
||||||
v-for="(page, i) in pages"
|
|
||||||
:key="i"
|
|
||||||
:to="page.url"
|
|
||||||
active-color="primary"
|
|
||||||
router
|
|
||||||
exact
|
|
||||||
>
|
|
||||||
<template v-slot:prepend>
|
|
||||||
<v-icon :icon="page.icon"></v-icon>
|
|
||||||
</template>
|
|
||||||
<v-list-item-title v-text="page.title" />
|
|
||||||
</v-list-item>
|
|
||||||
</v-list>
|
|
||||||
<template #append>
|
|
||||||
<div class="pa-2">
|
|
||||||
<v-btn
|
|
||||||
block
|
|
||||||
outlined
|
|
||||||
color="primary"
|
|
||||||
prepend-icon="mdi-email-outline"
|
|
||||||
:href="`mailto:<${$myEmail}>`"
|
|
||||||
>
|
|
||||||
Contact
|
|
||||||
</v-btn>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
</v-navigation-drawer>
|
|
||||||
<v-app-bar app color="background" class="px-md-10 py-md-4">
|
|
||||||
<template v-slot:prepend>
|
|
||||||
<v-avatar
|
|
||||||
size="48"
|
|
||||||
color="surface"
|
|
||||||
style="cursor: pointer"
|
|
||||||
@click.native="$router.push('/')"
|
|
||||||
>
|
|
||||||
<img src="~/assets/avatar_transparent.png" width="55" />
|
|
||||||
</v-avatar>
|
|
||||||
</template>
|
|
||||||
<!-- v-app-bar-title class="text-subtitle-1" v-text="$myName" /-->
|
|
||||||
<v-spacer />
|
|
||||||
<v-app-bar-nav-icon
|
|
||||||
v-if="smAndDown"
|
|
||||||
@click.stop="drawer = !drawer"
|
|
||||||
/>
|
|
||||||
<v-btn-toggle v-else :model-value="0" mandatory variant="plain" selected-class="link-active">
|
|
||||||
<v-btn :ripple="false" to="/">Home</v-btn>
|
|
||||||
<v-btn :ripple="false" to="/bio">About</v-btn>
|
|
||||||
<v-btn :ripple="false" to="/portfolio">Work</v-btn>
|
|
||||||
<v-btn :ripple="false" :href="`mailto:<${$myEmail}>`">Contact</v-btn>
|
|
||||||
</v-btn-toggle>
|
|
||||||
</v-app-bar>
|
|
||||||
<v-main>
|
|
||||||
<v-container class="pa-md-16 my-16">
|
|
||||||
<slot />
|
|
||||||
</v-container>
|
|
||||||
</v-main>
|
|
||||||
<v-footer app absolute color="transparent">
|
|
||||||
<v-row justify="center" no-gutters>
|
|
||||||
<v-col cols="12" class="text-center">
|
|
||||||
<span class="text-caption">
|
|
||||||
© {{ new Date().getFullYear() }} {{ $myName }}
|
|
||||||
</span>
|
|
||||||
</v-col>
|
|
||||||
</v-row>
|
|
||||||
</v-footer>
|
|
||||||
</v-app>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
import { useDisplay } from 'vuetify'
|
|
||||||
|
|
||||||
export default {
|
|
||||||
name: 'DefaultLayout',
|
|
||||||
setup () {
|
|
||||||
const { smAndDown } = useDisplay()
|
|
||||||
return { smAndDown }
|
|
||||||
},
|
|
||||||
data: () => ({
|
|
||||||
drawer: false,
|
|
||||||
pages: [
|
|
||||||
{
|
|
||||||
icon: 'mdi-home',
|
|
||||||
title: 'Home',
|
|
||||||
url: '/',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
icon: 'mdi-text-account',
|
|
||||||
title: 'About',
|
|
||||||
url: '/bio',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
icon: 'mdi-briefcase',
|
|
||||||
title: 'Work',
|
|
||||||
url: '/portfolio',
|
|
||||||
}
|
|
||||||
]
|
|
||||||
})
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style scoped lang="scss">
|
|
||||||
.v-app-bg {
|
|
||||||
background: rgb(var(--v-theme-background))
|
|
||||||
}
|
|
||||||
.link-active {
|
|
||||||
color: rgb(var(--v-theme-primary)) !important;
|
|
||||||
}
|
|
||||||
.v-btn--variant-plain {
|
|
||||||
color: rgb(var(--v-theme-on-background));
|
|
||||||
transition: all 0.28s cubic-bezier(0.4, 0, 0.2, 1);
|
|
||||||
opacity: 1;
|
|
||||||
|
|
||||||
&:hover {
|
|
||||||
color: rgb(var(--v-theme-primary));
|
|
||||||
}
|
|
||||||
|
|
||||||
&:focus {
|
|
||||||
color: rgb(var(--v-theme-primary));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
@@ -1,43 +0,0 @@
|
|||||||
<template>
|
|
||||||
<v-app dark>
|
|
||||||
<h1 v-if="error.statusCode === 404">
|
|
||||||
{{ pageNotFound }}
|
|
||||||
</h1>
|
|
||||||
<h1 v-else>
|
|
||||||
{{ otherError }}
|
|
||||||
</h1>
|
|
||||||
<NuxtLink to="/"> Home page </NuxtLink>
|
|
||||||
</v-app>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
export default {
|
|
||||||
name: 'EmptyLayout',
|
|
||||||
layout: 'empty',
|
|
||||||
props: {
|
|
||||||
error: {
|
|
||||||
type: Object,
|
|
||||||
default: null,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
data() {
|
|
||||||
return {
|
|
||||||
pageNotFound: '404 Not Found',
|
|
||||||
otherError: 'An error occurred',
|
|
||||||
}
|
|
||||||
},
|
|
||||||
head() {
|
|
||||||
const title =
|
|
||||||
this.error.statusCode === 404 ? this.pageNotFound : this.otherError
|
|
||||||
return {
|
|
||||||
title,
|
|
||||||
}
|
|
||||||
},
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style scoped>
|
|
||||||
h1 {
|
|
||||||
font-size: 20px;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
-105
@@ -1,105 +0,0 @@
|
|||||||
import vuetify from 'vite-plugin-vuetify'
|
|
||||||
|
|
||||||
// https://v3.nuxtjs.org/api/configuration/nuxt.config
|
|
||||||
export default defineNuxtConfig({
|
|
||||||
ssr: false,
|
|
||||||
|
|
||||||
css: [
|
|
||||||
'vuetify/styles',
|
|
||||||
'~/assets/variables.scss'
|
|
||||||
],
|
|
||||||
|
|
||||||
vite: {
|
|
||||||
ssr: {
|
|
||||||
noExternal: ['vuetify'] // add the vuetify vite plugin
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
build: {
|
|
||||||
transpile: ['vuetify']
|
|
||||||
},
|
|
||||||
|
|
||||||
app: {
|
|
||||||
head: {
|
|
||||||
// titleTemplate: '%s | Home',
|
|
||||||
title: 'Manuel Veigel',
|
|
||||||
htmlAttrs: {
|
|
||||||
lang: 'en',
|
|
||||||
},
|
|
||||||
meta: [
|
|
||||||
{ charset: 'utf-8' },
|
|
||||||
{ name: 'viewport', content: 'width=device-width, initial-scale=1' },
|
|
||||||
{ hid: 'description', name: 'description', content: '' },
|
|
||||||
{ name: 'format-detection', content: 'telephone=no' },
|
|
||||||
],
|
|
||||||
link: [
|
|
||||||
{ rel: 'icon', type: 'image/x-icon', href: '/favicon.ico' },
|
|
||||||
{ rel: 'preconnect', href: 'https://fonts.googleapis.com' },
|
|
||||||
{ rel: 'preconnect', href: 'https://fonts.gstatic.com' },
|
|
||||||
{ rel: 'stylesheet', href: 'https://fonts.googleapis.com/css2?family=Inter&display=swap' }
|
|
||||||
],
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
// Plugins to run before rendering page: https://go.nuxtjs.dev/config-plugins
|
|
||||||
plugins: [],
|
|
||||||
|
|
||||||
// Modules: https://go.nuxtjs.dev/config-modules
|
|
||||||
modules: [
|
|
||||||
[
|
|
||||||
'@nuxtjs/i18n',
|
|
||||||
// { vueI18n: './i18n.config.ts' }
|
|
||||||
// TODO: Revert to config file once the bug in 8.0.0-beta.11 has been fixed
|
|
||||||
// https://github.com/nuxt-modules/i18n/issues/1990
|
|
||||||
{ vueI18n: {
|
|
||||||
legacy: false,
|
|
||||||
locale: 'en',
|
|
||||||
messages: {
|
|
||||||
en: {
|
|
||||||
greeting: 'Hey. I\'m Manuel.',
|
|
||||||
iuGamerApp: `An Android app designed to help a group of board game enthusiasts\
|
|
||||||
better organize their regular evening game sessions.\
|
|
||||||
Users will be reliably informed about the time and location of the next appointment.\
|
|
||||||
They can suggest games, vote on suggested games, rate past appointments,\
|
|
||||||
and communicate with each other via an integrated chat feature.`,
|
|
||||||
iuQuizApp: 'An online quiz system that supports distance learning students at IU in solidifying their learning content in preparation for the exam. It enables students to cooperatively and collaboratively find answers to subject-related questions. The focus is particularly on working together and playing/learning together. Similar to the popular app Quizduel, students can, but do not have to, play against each other.',
|
|
||||||
personalWebsite: 'My first portfolio website.',
|
|
||||||
pmb: 'A 2D game inspired by the 2000s Pokémon games. Built from scratch! Features include animated battles (online multiplayer), overworld sprites, custom maps built with Tiled, game sound, 3 difficulty levels and so much more.',
|
|
||||||
toriiJava: 'A Japanese vocabulary learning tool that harnesses the power of spaced repetition to make memorizing new words a breeze.',
|
|
||||||
toriiWeb: `Version 2 of my Japanese vocabulary learning tool brings significant enhancements\
|
|
||||||
over its predecessor. New features include offline functionality (thanks to utilizing IndexedDB),\
|
|
||||||
an integrated dictionary for single-click word addition,\
|
|
||||||
additional review methods for learned words,\
|
|
||||||
a review forecast chart for planning study sessions,\
|
|
||||||
and improved word search and statistics for better user insights.`
|
|
||||||
},
|
|
||||||
de: {
|
|
||||||
greeting: 'Hey. Ich bin Manuel.',
|
|
||||||
iuGamerApp: `Eine Android App, die einer Gruppe von Brettspielfans dabei helfen soll,\
|
|
||||||
ihre regelmäßigen abendlichen Spieltermine besser zu organisieren.\
|
|
||||||
Benutzer werden zuverlässig über Zeit & Ort des nächsten Termins informiert.\
|
|
||||||
Sie können Spiele vorschlagen und über Vorschläge abstimmen, vergangene Termine bewerten\
|
|
||||||
und sich über einen integrierten Chat gegenseitig Nachrichten zukommen lassen.`,
|
|
||||||
iuQuizApp: 'Ein Online-Quizsystem, das Studierende des Fernstudiums der IU bei der Festigung der Lerninhalte zur Vorbereitung auf die Klausur unterstützt. Es ermöglicht Studierenden, kooperativ und kollaborativ Antworten zu fachlichen Fragen zu finden. Das miteinander bzw. das gemeinsame Spielen/Erarbeiten steht dabei besonders im Fokus. Ähnlich wie bei der populären App Quizduell kann, jedoch muss nicht gegeneinander gespielt werden.',
|
|
||||||
personalWebsite: 'Meine erste Portfolio-Website.',
|
|
||||||
pmb: 'A 2D game inspired by the 2000s Pokémon games. Built from scratch! Features animated battles (online multiplayer), overworld sprites, custom maps, sound, 3 difficulty levels and so much more.',
|
|
||||||
toriiJava: 'DEU',
|
|
||||||
toriiWeb: `Version 2 meiner Vokabeltrainer-App bringt bedeutende Verbesserungen\
|
|
||||||
gegenüber seinem Vorgänger. Neue Funktionen umfassen Offline-Funktionalität (dank der Nutzung von IndexedDB),\
|
|
||||||
ein integriertes Wörterbuch für das Hinzufügen neuer Wörter mit nur einem Klick,\
|
|
||||||
zusätzliche Überprüfungsmethoden für gelernte Vokabeln,\
|
|
||||||
ein Vorschau-Diagramm zur Planung von Lernsitzungen sowie\
|
|
||||||
verbesserte Wortsuche und Statistiken.`
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} }
|
|
||||||
],
|
|
||||||
// https://go.nuxtjs.dev/axios
|
|
||||||
// ['@nuxtjs/axios', { proxyHeaders: false }],
|
|
||||||
// this adds the vuetify vite plugin
|
|
||||||
// also produces type errors in the current beta release
|
|
||||||
async (options, nuxt) => {
|
|
||||||
nuxt.hooks.hook('vite:extendConfig', config => config.plugins.push(vuetify()))
|
|
||||||
}
|
|
||||||
]
|
|
||||||
})
|
|
||||||
Generated
-9065
File diff suppressed because it is too large
Load Diff
@@ -1,26 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "personal-portfolio",
|
|
||||||
"version": "1.0.0",
|
|
||||||
"private": true,
|
|
||||||
"scripts": {
|
|
||||||
"build": "nuxt build",
|
|
||||||
"dev": "nuxt dev",
|
|
||||||
"generate": "nuxt generate",
|
|
||||||
"preview": "nuxt preview",
|
|
||||||
"postinstall": "nuxt prepare"
|
|
||||||
},
|
|
||||||
"devDependencies": {
|
|
||||||
"@mdi/font": "^7.0.96",
|
|
||||||
"@nuxtjs/i18n": "8.0.0-beta.10",
|
|
||||||
"nuxt": "^3.4.0"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"@nuxtjs/axios": "^5.13.6",
|
|
||||||
"badgen": "^3.2.2",
|
|
||||||
"lodash-es": "^4.17.21",
|
|
||||||
"sass": "^1.56.0",
|
|
||||||
"simple-icons": "^8.11.0",
|
|
||||||
"vite-plugin-vuetify": "^1.0.0",
|
|
||||||
"vuetify": "^3.0.0"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
-142
@@ -1,142 +0,0 @@
|
|||||||
<template>
|
|
||||||
<v-row>
|
|
||||||
<v-col cols="12">
|
|
||||||
<span class="text-h4 text-high-emphasis">My Journey as a Developer</span>
|
|
||||||
</v-col>
|
|
||||||
<v-col cols="12">
|
|
||||||
<v-sheet color="transparent" class="text-medium-emphasis">
|
|
||||||
<p>
|
|
||||||
My interest in programming was sparked in 2007 when I began tinkering with SQL
|
|
||||||
in an attempt to setup a private server for my favorite
|
|
||||||
<a :href="mmorpgWikiUrl" target="_blank">MMORPG</a>
|
|
||||||
(it was a success!)
|
|
||||||
Eager to dive deeper into the world of coding, I attended a
|
|
||||||
<a :href="htlWikiUrl" target="_blank">HTL</a>
|
|
||||||
specializing in IT in 2009, where I learned C, Java, HTML and CSS.
|
|
||||||
Some years later, I pursued a degree in
|
|
||||||
<a :href="biWikiUrl" target="_blank">BI</a>
|
|
||||||
with a specialization in Web and App development.
|
|
||||||
</p>
|
|
||||||
<br/>
|
|
||||||
<p>
|
|
||||||
Here's some of the tech that I've used and worked with before:
|
|
||||||
</p>
|
|
||||||
</v-sheet>
|
|
||||||
</v-col>
|
|
||||||
<v-col v-for="set, ind in sets" :key="ind" cols="12">
|
|
||||||
<v-card>
|
|
||||||
<v-card-item>
|
|
||||||
<v-card-title>{{ set.title }}</v-card-title>
|
|
||||||
</v-card-item>
|
|
||||||
<v-card-text class="text-center">
|
|
||||||
<v-row>
|
|
||||||
<v-col v-for="(v, i) in set.data" :key="i" cols="12">
|
|
||||||
<v-tooltip v-for="(value, index) in v" :key="index" location="bottom" :text="value.title">
|
|
||||||
<template #activator="{ props }">
|
|
||||||
<v-btn
|
|
||||||
variant="text"
|
|
||||||
:icon="value.icon"
|
|
||||||
:size="getButtonSize(value.level)"
|
|
||||||
color="primary"
|
|
||||||
class="mx-1"
|
|
||||||
:href="`https://${value.url}`"
|
|
||||||
target="_blank"
|
|
||||||
v-bind="props"
|
|
||||||
>
|
|
||||||
<v-icon :icon="value.icon" :size="getButtonSize(value.level) - 10"></v-icon>
|
|
||||||
</v-btn>
|
|
||||||
</template>
|
|
||||||
</v-tooltip>
|
|
||||||
</v-col>
|
|
||||||
</v-row>
|
|
||||||
</v-card-text>
|
|
||||||
</v-card>
|
|
||||||
</v-col>
|
|
||||||
</v-row>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
import _groupBy from 'lodash-es/groupBy'
|
|
||||||
|
|
||||||
export default {
|
|
||||||
name: 'BioPage',
|
|
||||||
data: () => ({
|
|
||||||
mmorpgWikiUrl: 'https://en.wikipedia.org/wiki/Massively_multiplayer_online_role-playing_game',
|
|
||||||
htlWikiUrl: 'https://en.wikipedia.org/wiki/H%C3%B6here_Technische_Lehranstalt',
|
|
||||||
biWikiUrl: 'https://en.wikipedia.org/wiki/Business_informatics',
|
|
||||||
languages: [
|
|
||||||
{ title: 'Java', icon: 'mdi-language-java', url: 'java.com', level: 3 },
|
|
||||||
{ title: 'C/C++', icon: 'mdi-language-cpp', url: 'isocpp.org', level: 1 },
|
|
||||||
{ title: 'Python', icon: 'mdi-language-python', url: 'python.org', level: 1 },
|
|
||||||
{ title: 'JavaScript (ES6+)', icon: 'mdi-language-javascript', url: 'javascript.com', level: 3 },
|
|
||||||
{ title: 'TypeScript', icon: 'mdi-language-typescript', url: 'typescriptlang.org/', level: 1 },
|
|
||||||
{ title: 'HTML', icon: 'mdi-language-html5', url: 'html.spec.whatwg.org/multipage', level: 2 },
|
|
||||||
{ title: 'CSS', icon: 'mdi-language-css3', url: 'w3.org/Style/CSS', level: 2 },
|
|
||||||
{ title: 'PHP', icon: 'mdi-language-php', url: 'php.net', level: 2 },
|
|
||||||
{ title: 'SQL', icon: 'mdi-database', url: 'iso.org/standard/63555.html', level: 2 },
|
|
||||||
{ title: 'Lua', icon: 'mdi-language-lua', url: 'lua.org', level: 2 }
|
|
||||||
],
|
|
||||||
frameworks: [
|
|
||||||
{ title: 'Android', icon: 'mdi-android', url: 'android.com', level: 2 },
|
|
||||||
{ title: 'Vue.js', icon: 'mdi-vuejs', url: 'vuejs.org', level: 3 },
|
|
||||||
{ title: 'Nuxt.js', icon: 'mdi-nuxt', url: 'nuxt.com', level: 3 },
|
|
||||||
{ title: 'Vuetify.js', icon: 'mdi-vuetify', url: 'vuetifyjs.com', level: 3 },
|
|
||||||
{ title: 'BootstrapVue', icon: 'mdi-bootstrap', url: 'bootstrap-vue.org', level: 1 },
|
|
||||||
{ title: 'libGDX', icon: 'mdi-alpha-l-box-outline', url: 'libgdx.com', level: 1 }
|
|
||||||
],
|
|
||||||
tech: [
|
|
||||||
{ title: 'Amazon Web Services', icon: 'mdi-aws', url: 'aws.amazon.com', level: 3 },
|
|
||||||
{ title: 'Google Firebase', icon: 'mdi-firebase', url: 'firebase.google.com', level: 3 },
|
|
||||||
{ title: 'Microsoft Azure', icon: 'mdi-microsoft-azure', url: 'azure.microsoft.com', level: 1 },
|
|
||||||
{ title: 'Heroku', icon: 'brands:heroku', url: 'heroku.com', level: 1 },
|
|
||||||
{ title: 'WordPress', icon: 'mdi-wordpress', url: 'wordpress.com', level: 1 },
|
|
||||||
{ title: 'Unity', icon: 'mdi-unity', url: 'unity.com', level: 1 },
|
|
||||||
{ title: 'Unreal Engine', icon: 'mdi-unreal', url: 'unrealengine.com', level: 1 }
|
|
||||||
],
|
|
||||||
os: [
|
|
||||||
{ title: 'Microsoft Windows', icon: 'mdi-microsoft-windows', url: 'microsoft.com/windows', level: 3 },
|
|
||||||
{ title: 'Apple macOS', icon: 'brands:apple', url: 'apple.com/macos', level: 3 },
|
|
||||||
{ title: 'Linux Mint', icon: 'mdi-linux-mint', url: 'linuxmint.com', level: 3 },
|
|
||||||
{ title: 'Fedora Workstation', icon: 'mdi-fedora', url: 'getfedora.org', level: 3 },
|
|
||||||
{ title: 'Arch Linux', icon: 'mdi-arch', url: 'archlinux.org', level: 1 },
|
|
||||||
{ title: 'Ubuntu', icon: 'mdi-ubuntu', url: 'ubuntu.com', level: 1 },
|
|
||||||
{ title: 'Apple iOS', icon: 'mdi-apple-ios', url: 'apple.com/ios', level: 1 },
|
|
||||||
{ title: 'Android', icon: 'mdi-android', url: 'android.com', level: 1 },
|
|
||||||
]
|
|
||||||
}),
|
|
||||||
computed: {
|
|
||||||
sets () {
|
|
||||||
const languages = _groupBy([...this.languages, ...this.frameworks], e => e.level)
|
|
||||||
// const frameworks = _groupBy(this.frameworks, e => e.level)
|
|
||||||
const tech = _groupBy(this.tech, e => e.level)
|
|
||||||
const os = _groupBy(this.os, e => e.level)
|
|
||||||
return [
|
|
||||||
{
|
|
||||||
title: "Languages & Frameworks",
|
|
||||||
data: Object.keys(languages).sort().reverse().map(e => languages[e])
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: "Tools & Platforms",
|
|
||||||
data: Object.keys(tech).sort().reverse().map(e => tech[e])
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: "Operating Systems",
|
|
||||||
data: Object.keys(os).sort().reverse().map(e => os[e])
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
skills () {
|
|
||||||
return [...this.languages, ...this.frameworks, ...this.tech, ...this.os]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
getButtonSize (level) {
|
|
||||||
switch (level) {
|
|
||||||
case 1: return 48
|
|
||||||
case 2: return 64
|
|
||||||
default: return 96
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
@@ -1,32 +0,0 @@
|
|||||||
<template>
|
|
||||||
<v-row justify="center">
|
|
||||||
<v-col cols="12">
|
|
||||||
<span class="text-h4 text-md-h3 text-lg-h2 text-high-emphasis">
|
|
||||||
{{ $t('greeting') }}
|
|
||||||
</span>
|
|
||||||
</v-col>
|
|
||||||
<v-col cols="12" class="my-6">
|
|
||||||
<p class="text-body-1 text-md-h6 text-medium-emphasis" style="max-width: 550px;">
|
|
||||||
I'm a Software Developer based in Vienna, Austria.<br/>
|
|
||||||
I develop various types of applications.
|
|
||||||
Explore my <NuxtLink to="/portfolio">portfolio</NuxtLink> to view a showcase of my projects.
|
|
||||||
</p>
|
|
||||||
</v-col>
|
|
||||||
<v-col cols="12">
|
|
||||||
<v-btn
|
|
||||||
variant="outlined"
|
|
||||||
color="primary"
|
|
||||||
prepend-icon="mdi-email-outline"
|
|
||||||
:href="`mailto:<${$myEmail}>`"
|
|
||||||
>
|
|
||||||
Get in touch
|
|
||||||
</v-btn>
|
|
||||||
</v-col>
|
|
||||||
</v-row>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
export default {
|
|
||||||
name: 'IndexPage'
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
@@ -1,271 +0,0 @@
|
|||||||
<template>
|
|
||||||
<ImageCarousel ref="imageCarousel" />
|
|
||||||
<v-row>
|
|
||||||
<v-col cols="12">
|
|
||||||
<span class="text-h5 font-weight-medium">Some of my projects</span>
|
|
||||||
</v-col>
|
|
||||||
<v-col v-for="(project, index) of projects" :key="index" cols="12" lg="4" md="6">
|
|
||||||
<v-card height="100%" class="d-flex flex-column">
|
|
||||||
<v-carousel
|
|
||||||
v-model="carouselIndex[index]"
|
|
||||||
:show-arrows="project.images.length > 1 ? 'hover' : false"
|
|
||||||
:hide-delimiters="project.images.length <= 1"
|
|
||||||
hide-delimiter-background
|
|
||||||
height="auto"
|
|
||||||
>
|
|
||||||
<v-carousel-item v-for="image of project.images" :key="image"
|
|
||||||
:src="`${cdn}${image}`"
|
|
||||||
@click="showImageCarousel(project.images, carouselIndex[index])"
|
|
||||||
></v-carousel-item>
|
|
||||||
</v-carousel>
|
|
||||||
<v-card-item>
|
|
||||||
<v-card-title class="d-flex">
|
|
||||||
<span>{{ project.title }}</span>
|
|
||||||
<v-spacer></v-spacer>
|
|
||||||
<v-btn
|
|
||||||
v-if="project.repoUrl"
|
|
||||||
variant="text"
|
|
||||||
icon="mdi-github"
|
|
||||||
density="comfortable"
|
|
||||||
color="on-surface"
|
|
||||||
:href="`https://${project.repoUrl}`"
|
|
||||||
target="_blank"
|
|
||||||
class="link"
|
|
||||||
/>
|
|
||||||
<v-btn
|
|
||||||
v-if="project.projectUrl"
|
|
||||||
variant="text"
|
|
||||||
icon="mdi-open-in-new"
|
|
||||||
density="comfortable"
|
|
||||||
color="on-surface"
|
|
||||||
:href="`https://${project.projectUrl}`"
|
|
||||||
target="_blank"
|
|
||||||
class="link"
|
|
||||||
/>
|
|
||||||
</v-card-title>
|
|
||||||
<v-card-subtitle>{{ project.subtitle }}</v-card-subtitle>
|
|
||||||
</v-card-item>
|
|
||||||
<v-spacer></v-spacer>
|
|
||||||
<v-card-text>{{ $t(project.description) }}</v-card-text>
|
|
||||||
<v-spacer></v-spacer>
|
|
||||||
<v-card-actions class="d-flex flex-row flex-wrap justify-center align-center">
|
|
||||||
<img v-for="t of project.tech" :key="tech[t].title"
|
|
||||||
:src="generateBadgen(tech[t].title, tech[t].iconUrl)"
|
|
||||||
:height="20"
|
|
||||||
class="ma-1"
|
|
||||||
/>
|
|
||||||
|
|
||||||
<!-- colored badges
|
|
||||||
<img v-for="t of project.tech" :key="tech[t].title"
|
|
||||||
:src="`https://badgen.net/badge/icon/${tech[t].title}?icon=${tech[t].iconUrl}${tech[t].color}&label`"
|
|
||||||
:height="20"
|
|
||||||
class="ma-1"
|
|
||||||
/>
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!-- colored badges w/ links to brand websites
|
|
||||||
<a v-for="t of project.tech" :key="tech[t].title"
|
|
||||||
:href="`https://${tech[t].projectUrl}`"
|
|
||||||
target="_blank"
|
|
||||||
>
|
|
||||||
<img v-for="t of project.tech" :key="tech[t].title"
|
|
||||||
:src="`https://badgen.net/badge/icon/${tech[t].title}?icon=${tech[t].iconUrl}${tech[t].color}&label`"
|
|
||||||
:height="20"
|
|
||||||
class="ma-1"
|
|
||||||
/>
|
|
||||||
</a>
|
|
||||||
-->
|
|
||||||
|
|
||||||
</v-card-actions>
|
|
||||||
</v-card>
|
|
||||||
</v-col>
|
|
||||||
</v-row>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
import { badgen } from 'badgen'
|
|
||||||
import { siAndroid, siAmazonaws, siMicrosoftazure, siFirebase, siGithub,
|
|
||||||
siHeroku, siCoffeescript, siYoutubegaming, siMysql, siNuxtdotjs, siPhp,
|
|
||||||
siVuedotjs, siVuetify, siIbmwatson, siWordpress } from 'simple-icons'
|
|
||||||
|
|
||||||
export default {
|
|
||||||
name: 'PortfolioComponent',
|
|
||||||
data: () => ({
|
|
||||||
cdn: 'https://d29l6egdxvgg9c.cloudfront.net/',
|
|
||||||
projects: [
|
|
||||||
{
|
|
||||||
title: 'Torii SRS (v2-beta)',
|
|
||||||
subtitle: 'Progressive Web App',
|
|
||||||
description: 'toriiWeb',
|
|
||||||
tech: ['vue2', 'vuetify2', 'mysql', 'php', 'aws', 'azure', 'watson', 'heroku'],
|
|
||||||
projectUrl: 'beta.torii-srs.com',
|
|
||||||
images: [
|
|
||||||
'torii-v2-01.jpg', 'torii-v2-03.jpg', 'torii-v2-04.jpg',
|
|
||||||
'torii-v2-05.jpg', 'torii-v2-06.jpg', 'torii-v2-07.jpg',
|
|
||||||
'torii-v2-08.jpg', 'torii-v2-09.jpg', 'torii-v2-10.jpg'
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: 'Torii SRS (v1)',
|
|
||||||
subtitle: 'Cross-platform app',
|
|
||||||
description: 'toriiJava',
|
|
||||||
tech: ['java', 'libgdx', 'mysql', 'php', 'aws', 'wordpress'],
|
|
||||||
projectUrl: 'torii-srs.com',
|
|
||||||
images: [
|
|
||||||
'torii-v1-1.jpg', 'torii-v1-2.png', 'torii-v1-3.png',
|
|
||||||
'torii-v1-4.png', 'torii-v1-5.png', 'torii-v1-6.png'
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: 'IU Quiz App',
|
|
||||||
subtitle: 'Web App',
|
|
||||||
description: 'iuQuizApp',
|
|
||||||
tech: ['nuxt2', 'vuetify2', 'firebase'],
|
|
||||||
repoUrl: 'github.com/Rakantor/iu-quiz-app',
|
|
||||||
projectUrl: 'iu-quiz-app.web.app',
|
|
||||||
images: ['iu-quiz-app-2.jpg']
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: 'Menacing Blue',
|
|
||||||
subtitle: 'Cross-platform app',
|
|
||||||
description: 'pmb',
|
|
||||||
tech: ['java', 'libgdx'],
|
|
||||||
images: ['pmb-6.png', 'pmb-1.png', 'pmb-2.png', 'pmb-3.png', 'pmb-4.png', 'pmb-5.png', 'pmb-7.jpg']
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: 'Personal Website',
|
|
||||||
subtitle: 'Web App',
|
|
||||||
description: 'personalWebsite',
|
|
||||||
tech: ['nuxt3', 'vuetify3', 'ghpages'],
|
|
||||||
repoUrl: 'github.com/Rakantor/personal-portfolio',
|
|
||||||
projectUrl: 'mave.dev',
|
|
||||||
images: ['personal-website-1.jpg']
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: 'IU Gamer App',
|
|
||||||
subtitle: 'Android app',
|
|
||||||
description: 'iuGamerApp',
|
|
||||||
tech: ['android', 'firebase'],
|
|
||||||
repoUrl: 'github.com/Rakantor/iubh-gamer-app',
|
|
||||||
images: []
|
|
||||||
}
|
|
||||||
],
|
|
||||||
tech: {
|
|
||||||
android: {
|
|
||||||
title: 'Android',
|
|
||||||
color: '3DDC84',
|
|
||||||
iconUrl: siAndroid,
|
|
||||||
},
|
|
||||||
aws: {
|
|
||||||
title: 'AWS',
|
|
||||||
color: '232F3E',
|
|
||||||
iconUrl: siAmazonaws,
|
|
||||||
},
|
|
||||||
azure: {
|
|
||||||
title: 'Azure',
|
|
||||||
color: '0078D4',
|
|
||||||
iconUrl: siMicrosoftazure,
|
|
||||||
},
|
|
||||||
firebase: {
|
|
||||||
title: 'Firebase',
|
|
||||||
color: 'FFCA28',
|
|
||||||
iconUrl: siFirebase,
|
|
||||||
},
|
|
||||||
ghpages: {
|
|
||||||
title: 'GH Pages',
|
|
||||||
color: '222222',
|
|
||||||
iconUrl: siGithub,
|
|
||||||
},
|
|
||||||
heroku: {
|
|
||||||
title: 'Heroku',
|
|
||||||
color: '430098',
|
|
||||||
iconUrl: siHeroku,
|
|
||||||
},
|
|
||||||
java: {
|
|
||||||
title: 'Java',
|
|
||||||
color: 'FF7800',
|
|
||||||
iconUrl: siCoffeescript,
|
|
||||||
},
|
|
||||||
libgdx: {
|
|
||||||
title: 'libGDX',
|
|
||||||
color: '990000',
|
|
||||||
iconUrl: siYoutubegaming,
|
|
||||||
},
|
|
||||||
mysql: {
|
|
||||||
title: 'MySQL',
|
|
||||||
color: '4479A1',
|
|
||||||
iconUrl: siMysql,
|
|
||||||
},
|
|
||||||
nuxt2: {
|
|
||||||
title: 'Nuxt 2',
|
|
||||||
color: '00DC82',
|
|
||||||
iconUrl: siNuxtdotjs,
|
|
||||||
},
|
|
||||||
nuxt3: {
|
|
||||||
title: 'Nuxt 3',
|
|
||||||
color: '00DC82',
|
|
||||||
iconUrl: siNuxtdotjs,
|
|
||||||
},
|
|
||||||
php: {
|
|
||||||
title: 'PHP',
|
|
||||||
color: '777BB4',
|
|
||||||
iconUrl: siPhp,
|
|
||||||
},
|
|
||||||
vue2: {
|
|
||||||
title: 'Vue 2',
|
|
||||||
color: '4FC08D',
|
|
||||||
iconUrl: siVuedotjs,
|
|
||||||
},
|
|
||||||
vuetify2: {
|
|
||||||
title: 'Vuetify 2',
|
|
||||||
color: '1867C0',
|
|
||||||
iconUrl: siVuetify,
|
|
||||||
},
|
|
||||||
vuetify3: {
|
|
||||||
title: 'Vuetify 3',
|
|
||||||
color: '1867C0',
|
|
||||||
iconUrl: siVuetify,
|
|
||||||
},
|
|
||||||
watson: {
|
|
||||||
title: 'Watson',
|
|
||||||
color: 'BE95FF',
|
|
||||||
iconUrl: siIbmwatson,
|
|
||||||
},
|
|
||||||
wordpress: {
|
|
||||||
title: 'WordPress',
|
|
||||||
color: '21759B',
|
|
||||||
iconUrl: siWordpress,
|
|
||||||
}
|
|
||||||
},
|
|
||||||
carouselIndex: []
|
|
||||||
}),
|
|
||||||
methods: {
|
|
||||||
generateBadgen (label, iconUrl) {
|
|
||||||
// const iconColor = iconUrl.hex
|
|
||||||
const iconColor = 'FFFFFF'
|
|
||||||
const iconSvg = iconUrl.svg.replace('<path ', `<path fill="#${iconColor}" `)
|
|
||||||
const svg = badgen({
|
|
||||||
label: '',
|
|
||||||
status: label,
|
|
||||||
// color: iconColor,
|
|
||||||
color: this.$vuetify.theme.current.colors.backgroundTertiary.slice(1),
|
|
||||||
style: 'classic',
|
|
||||||
icon: `data:image/svg+xml;utf8,${encodeURIComponent(iconSvg)}`
|
|
||||||
})
|
|
||||||
|
|
||||||
return `data:image/svg+xml;utf8,${encodeURIComponent(svg)}`
|
|
||||||
},
|
|
||||||
showImageCarousel (images, carouselIndex) {
|
|
||||||
this.$refs.imageCarousel.images = images.map(i => this.cdn+i)
|
|
||||||
this.$refs.imageCarousel.index = carouselIndex
|
|
||||||
this.$refs.imageCarousel.show = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style>
|
|
||||||
path {
|
|
||||||
fill: #fff !IMPORTANT;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
@@ -1,74 +0,0 @@
|
|||||||
import { createVuetify, ThemeDefinition } from 'vuetify'
|
|
||||||
import * as components from 'vuetify/components'
|
|
||||||
import * as directives from 'vuetify/directives'
|
|
||||||
import { md3 } from 'vuetify/blueprints'
|
|
||||||
import '@mdi/font/css/materialdesignicons.css'
|
|
||||||
import { mdi } from 'vuetify/iconsets/mdi'
|
|
||||||
import { brands } from '~/iconsets/brands'
|
|
||||||
// @ts-expect-error Missing type definitions
|
|
||||||
import colors from 'vuetify/lib/util/colors'
|
|
||||||
|
|
||||||
const myCustomDarkTheme: ThemeDefinition = {
|
|
||||||
dark: true,
|
|
||||||
colors: {
|
|
||||||
background: '#0A192F',
|
|
||||||
surface: '#112240',
|
|
||||||
backgroundTertiary: '#134074',
|
|
||||||
primary: '#00DC82',
|
|
||||||
// primary: '#64FFDA',
|
|
||||||
secondary: '#8892B0',
|
|
||||||
"on-background": '#CCD6F6',
|
|
||||||
"on-surface": '#CCD6F6',
|
|
||||||
},
|
|
||||||
variables: {
|
|
||||||
'border-color': '#FFFFFF',
|
|
||||||
'border-opacity': 0.12,
|
|
||||||
'high-emphasis-opacity': 1, // default: 0.87
|
|
||||||
'medium-emphasis-opacity': 0.7, // default: 0.60
|
|
||||||
'disabled-opacity': 0.38,
|
|
||||||
'idle-opacity': 0.10,
|
|
||||||
'hover-opacity': 0.04,
|
|
||||||
'focus-opacity': 0.12,
|
|
||||||
'selected-opacity': 0.08,
|
|
||||||
'activated-opacity': 0.12,
|
|
||||||
'pressed-opacity': 0.16,
|
|
||||||
'dragged-opacity': 0.08,
|
|
||||||
'theme-kbd': '#212529',
|
|
||||||
'theme-on-kbd': '#FFFFFF',
|
|
||||||
'theme-code': '#343434',
|
|
||||||
'theme-on-code': '#CCCCCC',
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export default defineNuxtPlugin(nuxtApp => {
|
|
||||||
const vuetify = createVuetify({
|
|
||||||
components,
|
|
||||||
directives,
|
|
||||||
blueprint: md3,
|
|
||||||
defaults: {
|
|
||||||
VCard: {
|
|
||||||
elevation: 0
|
|
||||||
},
|
|
||||||
},
|
|
||||||
theme: {
|
|
||||||
// customVariables: ['~/assets/variables.scss'],
|
|
||||||
defaultTheme: 'myCustomDarkTheme',
|
|
||||||
themes: {
|
|
||||||
myCustomDarkTheme,
|
|
||||||
}
|
|
||||||
},
|
|
||||||
icons: {
|
|
||||||
defaultSet: 'mdi',
|
|
||||||
sets: {
|
|
||||||
mdi,
|
|
||||||
brands
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
nuxtApp.vueApp.use(vuetify)
|
|
||||||
|
|
||||||
// Define global variables
|
|
||||||
nuxtApp.provide('myName', 'Manuel Veigel')
|
|
||||||
nuxtApp.provide('myEmail', 'maveigel@gmail.com')
|
|
||||||
})
|
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<title>Manuel Veigel</title>
|
||||||
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||||
|
<link rel="preconnect" href="https://fonts.gstatic.com">
|
||||||
|
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Inter&display=swap">
|
||||||
|
<link rel="stylesheet" href="/_nuxt/entry.BG44tMHF.css" crossorigin>
|
||||||
|
<link rel="modulepreload" as="script" crossorigin href="/_nuxt/Dhg5knF6.js">
|
||||||
|
<script type="module" src="/_nuxt/Dhg5knF6.js" crossorigin></script>
|
||||||
|
<meta name="format-detection" content="telephone=no">
|
||||||
|
<link rel="icon" type="image/x-icon" href="/favicon.ico">
|
||||||
|
<script id="unhead:payload" type="application/json">{"title":"Manuel Veigel"}</script></head><body><div id="__nuxt"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{cdn:"d29l6egdxvgg9c.cloudfront.net/",myName:"Manuel Veigel",myEmail:"maveigel@gmail.com",i18n:{baseUrl:"",defaultLocale:"",defaultDirection:"ltr",strategy:"prefix_except_default",lazy:false,rootRedirect:"",routesNameSeparator:"___",defaultLocaleRouteNameSuffix:"default",skipSettingLocaleOnNavigate:false,differentDomains:false,trailingSlash:false,locales:[],detectBrowserLanguage:{alwaysRedirect:false,cookieCrossOrigin:false,cookieDomain:"",cookieKey:"i18n_redirected",cookieSecure:false,fallbackLocale:"",redirectOn:"root",useCookie:true},experimental:{localeDetector:"",switchLocalePathLinkSSR:false,autoImportTranslationFunctions:false,typedPages:true,typedOptionsAndMessages:false,generatedLocaleFilePathFormat:"absolute",alternateLinkCanonicalQueries:false,hmr:true},multiDomainLocales:false,domainLocales:{}}},app:{baseURL:"/",buildId:"59de4f49-4f4c-4256-a61d-535d6efee325",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script>
|
||||||
|
<script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1775577375602,false]</script></body></html>
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
{
|
|
||||||
// https://v3.nuxtjs.org/concepts/typescript
|
|
||||||
"extends": "./.nuxt/tsconfig.json"
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user