All checks were successful
Build and Deploy Nuxt / build (push) Successful in 30s
70 lines
1.6 KiB
Vue
70 lines
1.6 KiB
Vue
<script setup lang="ts">
|
|
import TableHeader from '~/components/parts/TableHeader.vue';
|
|
import FixedLayout from '~/components/layouts/FixedLayout.vue';
|
|
import { useSeo } from '~/composables/seo';
|
|
|
|
const { get, post } = api();
|
|
const { locale } = useI18n();
|
|
|
|
useSeo({
|
|
title: 'Contact',
|
|
description: 'Get in touch with Aran Roig. Reach out for collaborations, freelance projects, or just to say hello.',
|
|
canonicalUrl: '/contact'
|
|
});
|
|
|
|
// WebPage structured data for contact page
|
|
useHead({
|
|
script: [{
|
|
type: 'application/ld+json',
|
|
innerHTML: JSON.stringify({
|
|
'@context': 'https://schema.org',
|
|
'@type': 'WebPage',
|
|
name: 'Contact Aran Roig',
|
|
description: 'Get in touch with Aran Roig for collaborations, freelance projects, or inquiries.',
|
|
url: 'https://aranroig.com/contact',
|
|
inLanguage: ['en', 'es', 'ca']
|
|
})
|
|
}]
|
|
});
|
|
|
|
|
|
// Move useAsyncData to top level — NOT inside onMounted
|
|
const { data: markdown } = await useAsyncData(`fixed`, async () =>
|
|
await queryCollection(`fixed`).path(`/fixed/${locale.value}/contact`).first()
|
|
,{watch: [locale]})
|
|
</script>
|
|
|
|
<template>
|
|
<div class="no-sprite">
|
|
<TableHeader></TableHeader>
|
|
</div>
|
|
|
|
<FixedLayout>
|
|
<Container>
|
|
<h1>Contact Aran Roig</h1>
|
|
<ContentRenderer v-if="markdown" :value="markdown"></ContentRenderer>
|
|
</Container>
|
|
</FixedLayout>
|
|
<Footer></Footer>
|
|
</template>
|
|
|
|
<style lang="scss" scoped>
|
|
h2 {
|
|
margin-left: 20px;
|
|
}
|
|
|
|
p {
|
|
margin-left: 30px;
|
|
}
|
|
|
|
.two-columns {
|
|
display: flex;
|
|
width: 100%;
|
|
}
|
|
</style>
|
|
|
|
<style lang="scss">
|
|
.no-sprite .undertable-wrapper {
|
|
display: none;
|
|
}
|
|
</style> |