The main footer (app/components/footer/MainFooter.vue) includes copyright text, legal links, and interactive feedback buttons for authenticated users.
default.vue, auth.vue, public.vue, and wide.vue. The ai.vue layout doesn't include a footer.The footer (app/components/footer/MainFooter.vue) contains:
$config.public.siteName)/legal/privacy) and Terms & Conditions (/legal/terms)./support page.ReportBugForm and RequestFeatureForm components that submit to the database.Layout:
base-container class for consistent max-width and horizontal paddingbase-container class ensures consistent spacing across your site. It's defined in your Tailwind configuration and used in headers, sections, and footers.i18n ready: All text uses translation keys ($t('common.privacyPolicy'), $t('reportBug.button'), etc.)
These customizations modify the existing footer structure.
If you don't need the feedback system, edit MainFooter.vue:
// Remove these lines
import ReportBugForm from '@/components/feedback/ReportBugForm.vue'
import RequestFeatureForm from '@/components/feedback/RequestFeatureForm.vue'
// Remove these lines
const showRequestFeatureForm = ref(false)
const showReportBugForm = ref(false)
const handleClickRequestFeature = () => { ... }
const handleClickReportBug = () => { ... }
<!-- Remove this entire block -->
<div v-if="isAuthenticated" class="hidden lg:flex gap-2">
<!-- ... feedback buttons ... -->
</div>
<!-- Remove these lines -->
<RequestFeatureForm v-if="showRequestFeatureForm" v-model="showRequestFeatureForm" />
<ReportBugForm v-if="showReportBugForm" v-model="showReportBugForm" />
<!-- Change this -->
:class="{ 'justify-between': isAuthenticated }"
<!-- To this -->
class="... justify-center ..."
Edit MainFooter.vue to add more links alongside the existing privacy/terms links:
<NuxtLink to="/legal/cookies">
<span>{{ $t('common.cookies') }}</span>
</NuxtLink>
<span class="opacity-50"> | </span>
<NuxtLink to="/sitemap">
<span>{{ $t('common.sitemap') }}</span>
</NuxtLink>
i18n/locales/en.json and other locale files:{
"common": {
"cookies": "Cookie policy",
"sitemap": "Sitemap"
}
}
Edit MainFooter.vue to change the copyright text format:
<!-- With founding year -->
<span>© 2024-{{ new Date().getFullYear() }} {{ $config.public.siteName }}</span>
<!-- i18n version with parameters -->
<span>{{ $t('footer.copyright', { year: new Date().getFullYear(), company: $config.public.siteName }) }}</span>
The footer inherits theme colors from Tailwind. Customize styling in MainFooter.vue:
<!-- Dark background footer -->
<footer class="bg-muted/50 border-t">
<div class="base-container py-8">
<!-- Footer content -->
</div>
</footer>
<!-- Accent border top -->
<footer class="border-t-2 border-primary">
<div class="base-container py-8">
<!-- Footer content -->
</div>
</footer>
Create a custom layout without a footer (e.g., app/layouts/minimal.vue):
<script setup lang="ts">
import MainHeader from '@/components/header/MainHeader.vue'
</script>
<template>
<div>
<MainHeader />
<div class="base-container min-h-[calc(100vh-10rem)]">
<slot />
</div>
</div>
</template>
Then use it on your page:
<script setup lang="ts">
definePageMeta({
layout: 'minimal'
})
</script>