Footer
There are two footer components, matching the header split:
app/components/footer/AppFooter.vue— used in authenticated app contexts (defaultlayout). Includes auth-gated "Report a bug" and "Request a feature" buttons inline with the link row.app/components/footer/PublicFooter.vue— used on public marketing pages (public,wide,authlayouts). No auth state, no dialogs.
default.vue → AppFooter; public.vue, wide.vue, auth.vue → PublicFooter. The ai.vue layout has no footer.What's included
Both footers share the same three-row layout:
- Brand row —
AppLogoand the tagline (seo.taglinei18n key) on the left; social icons (LinkedIn, X, TikTok, Instagram, YouTube, Facebook) on the right. Social URLs are hardcoded constants near the top of each file — edit them to point at your own brand's accounts. - Link row — Blog · Docs · Changelog · Support · Terms · Privacy. In
AppFooter, "Report a bug" and "Request a feature" are inserted between Support and Terms when the user is authenticated. - Credit row —
{siteName} is made by Squared Sums.(where "Squared Sums" links tohttps://squaredsums.com). Driven by thefooter.madeByi18n key withsiteNameandcompanyslots.
i18n keys used:
seo.tagline— short tagline shown under the logo.footer.madeBy— credit line with{siteName}and{company}placeholders.footer.socials.{linkedin,x,tiktok,instagram,youtube,facebook}—aria-labelstrings for social icons.header.navigation.blog,header.navigation.docs,header.navigation.changelog,header.navigation.support,common.terms,common.privacy— reused for the link row.reportBug.button,requestFeature.button— auth-only buttons inAppFooter.
Quick tweaks
Changing the social links
Edit the socials array at the top of AppFooter.vue and PublicFooter.vue. Add or remove entries — each item needs a name, icon (an Iconify name, e.g. simple-icons:github), and href.
Changing the tagline
Edit the seo.tagline value in i18n/locales/en.json (and other locales as needed).
Changing the "made by" credit
Edit the footer.madeBy value in i18n/locales/en.json if you want a different sentence shape. The {siteName} and {company} placeholders are populated from runtime config and a hardcoded link respectively — change the link target in the <a href="https://squaredsums.com"> block inside each footer.
Removing the feedback buttons from AppFooter
If you don't need the feedback system, edit AppFooter.vue:
- Remove the imports for
ReportBugFormandRequestFeatureForm. - Remove the
showRequestFeatureForm/showReportBugFormrefs. - Remove the
<template v-if="isAuthenticated">block inside the link<nav>. - Remove the two dialog components at the bottom of the
<footer>.
At that point AppFooter.vue and PublicFooter.vue are functionally identical and you can collapse them if you'd like.
Pages without a footer
Create a custom layout without a footer (e.g., app/layouts/minimal.vue):
<script setup lang="ts">
import AppHeader from '@/components/header/AppHeader.vue'
</script>
<template>
<div>
<AppHeader />
<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>
Related
- Feedback system - How feedback buttons work
- Internationalization - Add translations for footer text
- Iconify icon sets - Browse available icons (the project ships
simple-iconsandlucideicon sets) - Tailwind CSS - Styling utilities and customization
Header navigation
Customize the header: edit navigation items, reorder or remove links, and configure the mobile drawer, language switcher, theme toggle and user menu.
Cursor rules
Tailor the included Cursor rules so AI coding assistants follow your architecture, API patterns, security guidelines and domain-specific conventions.