Compare commits
2 Commits
4d19835f5d
...
33bbb7a3b9
| Author | SHA1 | Date | |
|---|---|---|---|
| 33bbb7a3b9 | |||
| 5ae226bbf2 |
@@ -2,6 +2,7 @@
|
|||||||
import { hytaleDemos } from '~/data/hytaleDemos'
|
import { hytaleDemos } from '~/data/hytaleDemos'
|
||||||
|
|
||||||
const { t } = useI18n()
|
const { t } = useI18n()
|
||||||
|
const localePath = useLocalePath()
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
@@ -76,6 +77,15 @@ const { t } = useI18n()
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="flex flex-wrap gap-2 mt-2">
|
<div class="flex flex-wrap gap-2 mt-2">
|
||||||
|
<UButton
|
||||||
|
:to="localePath(`/project/${demo.id}`)"
|
||||||
|
color="primary"
|
||||||
|
variant="soft"
|
||||||
|
size="sm"
|
||||||
|
trailing-icon="i-lucide-arrow-right"
|
||||||
|
>
|
||||||
|
{{ t('projects.buttons.viewProject') }}
|
||||||
|
</UButton>
|
||||||
<UButton
|
<UButton
|
||||||
v-if="demo.website"
|
v-if="demo.website"
|
||||||
:to="demo.website"
|
:to="demo.website"
|
||||||
@@ -120,6 +130,16 @@ const { t } = useI18n()
|
|||||||
size="sm"
|
size="sm"
|
||||||
icon="i-simple-icons-github"
|
icon="i-simple-icons-github"
|
||||||
/>
|
/>
|
||||||
|
<UButton
|
||||||
|
v-if="demo.gitea"
|
||||||
|
:to="demo.gitea"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
color="neutral"
|
||||||
|
variant="outline"
|
||||||
|
size="sm"
|
||||||
|
icon="i-simple-icons-gitea"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</UCard>
|
</UCard>
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ interface Props {
|
|||||||
|
|
||||||
const props = defineProps<Props>()
|
const props = defineProps<Props>()
|
||||||
const { t } = useI18n()
|
const { t } = useI18n()
|
||||||
|
const localePath = useLocalePath()
|
||||||
|
|
||||||
const translatedCategory = computed(() => {
|
const translatedCategory = computed(() => {
|
||||||
if (!props.project.category) return ''
|
if (!props.project.category) return ''
|
||||||
@@ -22,7 +23,7 @@ const translatedCategory = computed(() => {
|
|||||||
itemtype="https://schema.org/CreativeWork"
|
itemtype="https://schema.org/CreativeWork"
|
||||||
>
|
>
|
||||||
<!-- Image -->
|
<!-- Image -->
|
||||||
<NuxtLink :to="`/project/${project.id}`" class="block relative overflow-hidden">
|
<NuxtLink :to="localePath(`/project/${project.id}`)" class="block relative overflow-hidden">
|
||||||
<NuxtImg
|
<NuxtImg
|
||||||
:src="project.image"
|
:src="project.image"
|
||||||
:alt="`${project.title} - ${project.description.slice(0, 60)}...`"
|
:alt="`${project.title} - ${project.description.slice(0, 60)}...`"
|
||||||
@@ -81,7 +82,7 @@ const translatedCategory = computed(() => {
|
|||||||
|
|
||||||
<!-- Hidden SEO link -->
|
<!-- Hidden SEO link -->
|
||||||
<NuxtLink
|
<NuxtLink
|
||||||
:to="`/project/${project.id}`"
|
:to="localePath(`/project/${project.id}`)"
|
||||||
class="absolute inset-0 z-10"
|
class="absolute inset-0 z-10"
|
||||||
:aria-label="`${t('projects.buttons.viewProject')} - ${project.title}`"
|
:aria-label="`${t('projects.buttons.viewProject')} - ${project.title}`"
|
||||||
itemprop="url"
|
itemprop="url"
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
const { t } = useI18n()
|
const { t } = useI18n()
|
||||||
const { featuredProjects } = useProjects()
|
const { featuredProjects } = useProjects()
|
||||||
|
const localePath = useLocalePath()
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
@@ -13,7 +14,7 @@ const { featuredProjects } = useProjects()
|
|||||||
<h2 class="text-3xl sm:text-4xl lg:text-5xl font-bold mt-3 bg-gradient-to-r from-gray-900 via-gray-800 to-gray-600 dark:from-white dark:via-gray-200 dark:to-gray-500 bg-clip-text text-transparent">{{ t('home.featuredProjects.title') }}</h2>
|
<h2 class="text-3xl sm:text-4xl lg:text-5xl font-bold mt-3 bg-gradient-to-r from-gray-900 via-gray-800 to-gray-600 dark:from-white dark:via-gray-200 dark:to-gray-500 bg-clip-text text-transparent">{{ t('home.featuredProjects.title') }}</h2>
|
||||||
<p class="text-lg text-gray-500 dark:text-gray-400 mt-4 max-w-2xl leading-relaxed">{{ t('home.featuredProjects.subtitle') }}</p>
|
<p class="text-lg text-gray-500 dark:text-gray-400 mt-4 max-w-2xl leading-relaxed">{{ t('home.featuredProjects.subtitle') }}</p>
|
||||||
</div>
|
</div>
|
||||||
<UButton to="/projects" variant="ghost" trailing-icon="i-lucide-arrow-right" class="shrink-0 self-start md:self-auto group">
|
<UButton :to="localePath('/projects')" variant="ghost" trailing-icon="i-lucide-arrow-right" class="shrink-0 self-start md:self-auto group">
|
||||||
{{ t('home.cta.viewProjects') }}
|
{{ t('home.cta.viewProjects') }}
|
||||||
</UButton>
|
</UButton>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ export interface HytaleDemo {
|
|||||||
id: string
|
id: string
|
||||||
image: string
|
image: string
|
||||||
github?: string
|
github?: string
|
||||||
|
gitea?: string
|
||||||
curseforge?: string
|
curseforge?: string
|
||||||
modtale?: string
|
modtale?: string
|
||||||
website?: string
|
website?: string
|
||||||
@@ -28,6 +29,8 @@ export const hytaleDemos: HytaleDemo[] = [
|
|||||||
image: '/images/projects/gravityflip.png',
|
image: '/images/projects/gravityflip.png',
|
||||||
modtale: 'https://modtale.net/mod/gravity-flip',
|
modtale: 'https://modtale.net/mod/gravity-flip',
|
||||||
curseforge: 'https://curseforge.com/hytale/mods/gravity-flip',
|
curseforge: 'https://curseforge.com/hytale/mods/gravity-flip',
|
||||||
|
github: 'https://github.com/Mr-KayJayDee/hytale-gravity-flip',
|
||||||
|
gitea: 'https://gitea.kamisama.ovh/kayjaydee/hytale-gravity-flip',
|
||||||
tech: ['Java 25', 'Gradle Shadow', 'Hytale API'],
|
tech: ['Java 25', 'Gradle Shadow', 'Hytale API'],
|
||||||
status: 'live',
|
status: 'live',
|
||||||
},
|
},
|
||||||
@@ -37,6 +40,7 @@ export const hytaleDemos: HytaleDemo[] = [
|
|||||||
modtale: 'https://modtale.net/mod/async',
|
modtale: 'https://modtale.net/mod/async',
|
||||||
curseforge: 'https://www.curseforge.com/hytale/mods/async',
|
curseforge: 'https://www.curseforge.com/hytale/mods/async',
|
||||||
github: 'https://github.com/Mr-KayJayDee/async',
|
github: 'https://github.com/Mr-KayJayDee/async',
|
||||||
|
gitea: 'https://gitea.kamisama.ovh/kayjaydee/async',
|
||||||
tech: ['Kotlin 2.2', 'Coroutines', 'JDK 25', 'Hytale API'],
|
tech: ['Kotlin 2.2', 'Coroutines', 'JDK 25', 'Hytale API'],
|
||||||
status: 'live',
|
status: 'live',
|
||||||
featured: true,
|
featured: true,
|
||||||
@@ -46,6 +50,8 @@ export const hytaleDemos: HytaleDemo[] = [
|
|||||||
image: '/images/projects/chain-lightning.png',
|
image: '/images/projects/chain-lightning.png',
|
||||||
modtale: 'https://modtale.net/mod/chain-lightning-sceptre',
|
modtale: 'https://modtale.net/mod/chain-lightning-sceptre',
|
||||||
curseforge: 'https://www.curseforge.com/hytale/mods/chain-lightning-sceptre',
|
curseforge: 'https://www.curseforge.com/hytale/mods/chain-lightning-sceptre',
|
||||||
|
github: 'https://github.com/Mr-KayJayDee/hytale-chain-lightning',
|
||||||
|
gitea: 'https://gitea.kamisama.ovh/kayjaydee/hytale-chain-lightning',
|
||||||
tech: ['Java 25', 'JUnit 5', 'Hytale API'],
|
tech: ['Java 25', 'JUnit 5', 'Hytale API'],
|
||||||
status: 'live',
|
status: 'live',
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -45,6 +45,14 @@ export const projects: Omit<Project, 'title' | 'description' | 'longDescription'
|
|||||||
title: 'CurseForge',
|
title: 'CurseForge',
|
||||||
link: 'https://curseforge.com/hytale/mods/gravity-flip',
|
link: 'https://curseforge.com/hytale/mods/gravity-flip',
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
title: 'GitHub',
|
||||||
|
link: 'https://github.com/Mr-KayJayDee/hytale-gravity-flip',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Gitea',
|
||||||
|
link: 'https://gitea.kamisama.ovh/kayjaydee/hytale-gravity-flip',
|
||||||
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -89,6 +97,14 @@ export const projects: Omit<Project, 'title' | 'description' | 'longDescription'
|
|||||||
title: 'CurseForge',
|
title: 'CurseForge',
|
||||||
link: 'https://www.curseforge.com/hytale/mods/chain-lightning-sceptre',
|
link: 'https://www.curseforge.com/hytale/mods/chain-lightning-sceptre',
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
title: 'GitHub',
|
||||||
|
link: 'https://github.com/Mr-KayJayDee/hytale-chain-lightning',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Gitea',
|
||||||
|
link: 'https://gitea.kamisama.ovh/kayjaydee/hytale-chain-lightning',
|
||||||
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
+3
-2
@@ -2,6 +2,7 @@
|
|||||||
import { techStack } from '~/data/techstack'
|
import { techStack } from '~/data/techstack'
|
||||||
|
|
||||||
const { t } = useI18n()
|
const { t } = useI18n()
|
||||||
|
const localePath = useLocalePath()
|
||||||
|
|
||||||
useSeoMeta({
|
useSeoMeta({
|
||||||
title: () => t('seo.about.title'),
|
title: () => t('seo.about.title'),
|
||||||
@@ -180,9 +181,9 @@ const approachCards = computed(() => [
|
|||||||
:title="t('about.cta.title')"
|
:title="t('about.cta.title')"
|
||||||
:subtitle="t('about.cta.description')"
|
:subtitle="t('about.cta.description')"
|
||||||
:primary-text="t('about.cta.button')"
|
:primary-text="t('about.cta.button')"
|
||||||
primary-to="/contact"
|
:primary-to="localePath('/contact')"
|
||||||
:secondary-text="t('home.cta.viewProjects')"
|
:secondary-text="t('home.cta.viewProjects')"
|
||||||
secondary-to="/projects"
|
:secondary-to="localePath('/projects')"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
const { t } = useI18n()
|
const { t } = useI18n()
|
||||||
|
const localePath = useLocalePath()
|
||||||
const { findById, projects } = useProjects()
|
const { findById, projects } = useProjects()
|
||||||
|
|
||||||
const project = findById(route.params.id as string)
|
const project = findById(route.params.id as string)
|
||||||
@@ -52,7 +53,7 @@ useSeoMeta({
|
|||||||
variant="solid"
|
variant="solid"
|
||||||
color="neutral"
|
color="neutral"
|
||||||
icon="i-lucide-arrow-left"
|
icon="i-lucide-arrow-left"
|
||||||
to="/projects"
|
:to="localePath('/projects')"
|
||||||
size="sm"
|
size="sm"
|
||||||
class="shadow-lg backdrop-blur-sm"
|
class="shadow-lg backdrop-blur-sm"
|
||||||
>
|
>
|
||||||
@@ -215,7 +216,7 @@ useSeoMeta({
|
|||||||
<NuxtLink
|
<NuxtLink
|
||||||
v-for="related in relatedProjects"
|
v-for="related in relatedProjects"
|
||||||
:key="related.id"
|
:key="related.id"
|
||||||
:to="`/project/${related.id}`"
|
:to="localePath(`/project/${related.id}`)"
|
||||||
class="flex gap-3 p-3 rounded-xl border border-transparent hover:border-brand-500/20 hover:bg-brand-500/5 transition-all duration-200 group"
|
class="flex gap-3 p-3 rounded-xl border border-transparent hover:border-brand-500/20 hover:bg-brand-500/5 transition-all duration-200 group"
|
||||||
>
|
>
|
||||||
<NuxtImg
|
<NuxtImg
|
||||||
|
|||||||
Reference in New Issue
Block a user