Initial commit
This commit is contained in:
commit
5533be613b
22 changed files with 294 additions and 0 deletions
7
.vscode/extensions.json
vendored
Normal file
7
.vscode/extensions.json
vendored
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
{
|
||||||
|
"recommendations": [
|
||||||
|
"bradlc.vscode-tailwindcss",
|
||||||
|
"vue.volar",
|
||||||
|
"rvest.vs-code-prettier-eslint"
|
||||||
|
]
|
||||||
|
}
|
||||||
18
.vscode/settings.json
vendored
Normal file
18
.vscode/settings.json
vendored
Normal file
|
|
@ -0,0 +1,18 @@
|
||||||
|
{
|
||||||
|
"files.associations": {
|
||||||
|
"*.css": "tailwindcss"
|
||||||
|
},
|
||||||
|
"editor.quickSuggestions": {
|
||||||
|
"other": "on",
|
||||||
|
"comments": "off",
|
||||||
|
"strings": "on"
|
||||||
|
},
|
||||||
|
"tailwindCSS.classAttributes": [
|
||||||
|
"class",
|
||||||
|
"ui"
|
||||||
|
],
|
||||||
|
"tailwindCSS.experimental.classRegex": [
|
||||||
|
["ui:\\s*{([^)]*)\\s*}", "(?:'|\"|`)([^']*)(?:'|\"|`)"]
|
||||||
|
],
|
||||||
|
"editor.tabSize": 2
|
||||||
|
}
|
||||||
5
README.md
Normal file
5
README.md
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
# zervo.dev website
|
||||||
|
|
||||||
|
This repository contains the source code for the zervo.dev website stack.
|
||||||
|
|
||||||
|
|
||||||
24
frontend/.gitignore
vendored
Normal file
24
frontend/.gitignore
vendored
Normal file
|
|
@ -0,0 +1,24 @@
|
||||||
|
# Nuxt dev/build outputs
|
||||||
|
.output
|
||||||
|
.data
|
||||||
|
.nuxt
|
||||||
|
.nitro
|
||||||
|
.cache
|
||||||
|
dist
|
||||||
|
|
||||||
|
# Node dependencies
|
||||||
|
node_modules
|
||||||
|
|
||||||
|
# Logs
|
||||||
|
logs
|
||||||
|
*.log
|
||||||
|
|
||||||
|
# Misc
|
||||||
|
.DS_Store
|
||||||
|
.fleet
|
||||||
|
.idea
|
||||||
|
|
||||||
|
# Local env files
|
||||||
|
.env
|
||||||
|
.env.*
|
||||||
|
!.env.example
|
||||||
5
frontend/README.md
Normal file
5
frontend/README.md
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
# zervo.dev frontend
|
||||||
|
|
||||||
|
This is the frontend code for the zervo.dev website.
|
||||||
|
|
||||||
|
It is built with the Nuxt framework.
|
||||||
13
frontend/app/app.config.ts
Normal file
13
frontend/app/app.config.ts
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
export default defineAppConfig({
|
||||||
|
ui: {
|
||||||
|
colors: {
|
||||||
|
primary: 'indigo',
|
||||||
|
secondary: 'amber',
|
||||||
|
neutral: 'slate'
|
||||||
|
},
|
||||||
|
icons: {
|
||||||
|
light: 'i-line-md-sun-rising-twotone-loop',
|
||||||
|
dark: 'i-line-md-moon-twotone-alt-loop'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
15
frontend/app/app.vue
Normal file
15
frontend/app/app.vue
Normal file
|
|
@ -0,0 +1,15 @@
|
||||||
|
<template>
|
||||||
|
<NuxtRouteAnnouncer />
|
||||||
|
<UApp>
|
||||||
|
<AppHeader />
|
||||||
|
|
||||||
|
<UMain>
|
||||||
|
<Title>ZervoDev</Title>
|
||||||
|
<NuxtLayout>
|
||||||
|
<NuxtPage />
|
||||||
|
</NuxtLayout>
|
||||||
|
</UMain>
|
||||||
|
|
||||||
|
<AppFooter />
|
||||||
|
</UApp>
|
||||||
|
</template>
|
||||||
8
frontend/app/assets/css/main.css
Normal file
8
frontend/app/assets/css/main.css
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
@import "tailwindcss";
|
||||||
|
@import "@nuxt/ui";
|
||||||
|
|
||||||
|
@theme {
|
||||||
|
--font-sans: 'Public Sans', system-ui, sans-serif;
|
||||||
|
--font-mono: 'JetBrains Mono', monospace;
|
||||||
|
}
|
||||||
|
|
||||||
45
frontend/app/components/AppFooter.vue
Normal file
45
frontend/app/components/AppFooter.vue
Normal file
|
|
@ -0,0 +1,45 @@
|
||||||
|
<script setup lang="ts">
|
||||||
|
import type { NavigationMenuItem } from '@nuxt/ui';
|
||||||
|
|
||||||
|
const items: NavigationMenuItem[] = [
|
||||||
|
{
|
||||||
|
label: 'Contact',
|
||||||
|
to: '/contact'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'Source Code',
|
||||||
|
to: 'https://git.zervo.dev/zervo/website',
|
||||||
|
target: '_blank'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'FriendZone',
|
||||||
|
to: 'https://friendzone.zervo.dev/',
|
||||||
|
target: '_blank'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<UFooter>
|
||||||
|
<template #left>
|
||||||
|
<p class="text-muted text-sm">Copyright © {{ new Date().getFullYear() }} Zervó Zadachin</p>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<UNavigationMenu :items="items" variant="link" />
|
||||||
|
|
||||||
|
<template #right>
|
||||||
|
<UButton
|
||||||
|
icon="i-simple-icons-forgejo"
|
||||||
|
color="neutral"
|
||||||
|
variant="ghost"
|
||||||
|
to="https://git.zervo.dev/"
|
||||||
|
/>
|
||||||
|
<UButton
|
||||||
|
icon="i-simple-icons-bluesky"
|
||||||
|
color="neutral"
|
||||||
|
variant="ghost"
|
||||||
|
to="https://bsky.app/profile/bsky.zervo.dev/"
|
||||||
|
/>
|
||||||
|
</template>
|
||||||
|
</UFooter>
|
||||||
|
</template>
|
||||||
51
frontend/app/components/AppHeader.vue
Normal file
51
frontend/app/components/AppHeader.vue
Normal file
|
|
@ -0,0 +1,51 @@
|
||||||
|
<script setup lang="ts">
|
||||||
|
import type { NavigationMenuItem } from '@nuxt/ui';
|
||||||
|
|
||||||
|
const route = useRoute();
|
||||||
|
|
||||||
|
const items = computed<NavigationMenuItem[]>(() => [{
|
||||||
|
label: 'Home',
|
||||||
|
to: '/',
|
||||||
|
icon: 'i-line-md-home-twotone',
|
||||||
|
active: route.path == '/'
|
||||||
|
}, {
|
||||||
|
label: 'Projects',
|
||||||
|
to: '/projects',
|
||||||
|
icon: 'i-line-md-document-code-twotone',
|
||||||
|
active: route.path.startsWith('/projects')
|
||||||
|
}, {
|
||||||
|
label: 'Blog',
|
||||||
|
icon: 'i-line-md-text-box-multiple-twotone',
|
||||||
|
to: '/blog',
|
||||||
|
active: route.path.startsWith('/blog')
|
||||||
|
}, {
|
||||||
|
label: 'About Me',
|
||||||
|
icon: 'i-line-md-question-circle-twotone',
|
||||||
|
to: '/about',
|
||||||
|
active: route.path.startsWith('/about')
|
||||||
|
}])
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<UHeader
|
||||||
|
:toggle="{
|
||||||
|
color: 'primary',
|
||||||
|
variant: 'subtle',
|
||||||
|
class: 'rounded-full'
|
||||||
|
}"
|
||||||
|
>
|
||||||
|
<template #title>
|
||||||
|
ZervoDev
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<UNavigationMenu :items="items" />
|
||||||
|
|
||||||
|
<template #right>
|
||||||
|
<UColorModeButton />
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<template #body>
|
||||||
|
<UNavigationMenu :items="items" orientation="vertical" class="-mx-2.5" />
|
||||||
|
</template>
|
||||||
|
</UHeader>
|
||||||
|
</template>
|
||||||
23
frontend/app/error.vue
Normal file
23
frontend/app/error.vue
Normal file
|
|
@ -0,0 +1,23 @@
|
||||||
|
<script setup lang="ts">
|
||||||
|
import type { NuxtError } from '#app';
|
||||||
|
|
||||||
|
const props = defineProps<{
|
||||||
|
error: NuxtError
|
||||||
|
}>()
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<UApp>
|
||||||
|
<UMain>
|
||||||
|
<Title>ZervoDev - Error</Title>
|
||||||
|
<AppHeader />
|
||||||
|
|
||||||
|
<UContainer class="flex flex-col items-center justify-center min-h-screen">
|
||||||
|
<UIcon name="i-material-symbols-warning-rounded" class="size-20 mb-3" />
|
||||||
|
<p class="text-lg">{{ error.statusCode }}</p>
|
||||||
|
</UContainer>
|
||||||
|
|
||||||
|
<AppFooter />
|
||||||
|
</UMain>
|
||||||
|
</UApp>
|
||||||
|
</template>
|
||||||
3
frontend/app/layouts/default.vue
Normal file
3
frontend/app/layouts/default.vue
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
<template>
|
||||||
|
<slot />
|
||||||
|
</template>
|
||||||
5
frontend/app/pages/about.vue
Normal file
5
frontend/app/pages/about.vue
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
<template>
|
||||||
|
<UContainer class="flex items-center justify-center min-h-screen">
|
||||||
|
<div>About Page</div>
|
||||||
|
</UContainer>
|
||||||
|
</template>
|
||||||
5
frontend/app/pages/blog/index.vue
Normal file
5
frontend/app/pages/blog/index.vue
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
<template>
|
||||||
|
<UContainer class="flex items-center justify-center min-h-screen">
|
||||||
|
<div>Blog Page</div>
|
||||||
|
</UContainer>
|
||||||
|
</template>
|
||||||
11
frontend/app/pages/index.vue
Normal file
11
frontend/app/pages/index.vue
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
<template>
|
||||||
|
<UPage>
|
||||||
|
<UPageHero title="Hello world"/>
|
||||||
|
<UPageBody>
|
||||||
|
Hi!
|
||||||
|
</UPageBody>
|
||||||
|
</UPage>
|
||||||
|
<!-- <UContainer class="flex items-center justify-center min-h-screen">
|
||||||
|
<div>Hello world!</div>
|
||||||
|
</UContainer> -->
|
||||||
|
</template>
|
||||||
5
frontend/app/pages/projects/index.vue
Normal file
5
frontend/app/pages/projects/index.vue
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
<template>
|
||||||
|
<UContainer class="flex items-center justify-center min-h-screen">
|
||||||
|
<div>Project Page</div>
|
||||||
|
</UContainer>
|
||||||
|
</template>
|
||||||
BIN
frontend/bun.lockb
Executable file
BIN
frontend/bun.lockb
Executable file
Binary file not shown.
7
frontend/nuxt.config.ts
Normal file
7
frontend/nuxt.config.ts
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
// https://nuxt.com/docs/api/configuration/nuxt-config
|
||||||
|
export default defineNuxtConfig({
|
||||||
|
compatibilityDate: '2025-07-15',
|
||||||
|
devtools: { enabled: true },
|
||||||
|
modules: ['@nuxt/ui', '@nuxt/image'],
|
||||||
|
css: ['~/assets/css/main.css']
|
||||||
|
})
|
||||||
24
frontend/package.json
Normal file
24
frontend/package.json
Normal file
|
|
@ -0,0 +1,24 @@
|
||||||
|
{
|
||||||
|
"name": "zervo-frontend",
|
||||||
|
"type": "module",
|
||||||
|
"private": true,
|
||||||
|
"scripts": {
|
||||||
|
"build": "nuxt build",
|
||||||
|
"dev": "nuxt dev",
|
||||||
|
"generate": "nuxt generate",
|
||||||
|
"preview": "nuxt preview",
|
||||||
|
"postinstall": "nuxt prepare"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"@nuxt/eslint": "1.11.0",
|
||||||
|
"@nuxt/image": "2.0.0",
|
||||||
|
"@nuxt/ui": "4.2.1",
|
||||||
|
"nuxt": "^4.2.1",
|
||||||
|
"vue": "^3.5.25",
|
||||||
|
"vue-router": "^4.6.3"
|
||||||
|
},
|
||||||
|
"trustedDependencies": [
|
||||||
|
"@parcel/watcher",
|
||||||
|
"unrs-resolver"
|
||||||
|
]
|
||||||
|
}
|
||||||
BIN
frontend/public/favicon.ico
Normal file
BIN
frontend/public/favicon.ico
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 4.2 KiB |
2
frontend/public/robots.txt
Normal file
2
frontend/public/robots.txt
Normal file
|
|
@ -0,0 +1,2 @@
|
||||||
|
User-Agent: *
|
||||||
|
Disallow:
|
||||||
18
frontend/tsconfig.json
Normal file
18
frontend/tsconfig.json
Normal file
|
|
@ -0,0 +1,18 @@
|
||||||
|
{
|
||||||
|
// https://nuxt.com/docs/guide/concepts/typescript
|
||||||
|
"files": [],
|
||||||
|
"references": [
|
||||||
|
{
|
||||||
|
"path": "./.nuxt/tsconfig.app.json"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "./.nuxt/tsconfig.server.json"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "./.nuxt/tsconfig.shared.json"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "./.nuxt/tsconfig.node.json"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
Loading…
Add table
Reference in a new issue