feat(03-01): create 9 shared components for landing sections and project display

- HeroSection: title + subtitle + 3 CTA UButtons
- FeaturedProjectsSection: 3 featured projects via useProjects()
- ServicesSection: 4 service cards with UCard + UIcon
- TestimonialsSection: UCard per testimonial with ratings and stats
- FAQSection: UAccordion with i18n-resolved items
- CTASection: final CTA with 2 UButtons
- ProjectCard: NuxtLink + NuxtImg + UBadge + schema.org microdata
- TechBadge: Technology lookup with NuxtImg + UBadge level
- ProjectGallery: UModal fullscreen + UCarousel + thumbnails + keyboard nav
This commit is contained in:
2026-04-08 18:34:03 +02:00
parent 222fa069fd
commit 5502364e77
9 changed files with 475 additions and 0 deletions
+32
View File
@@ -0,0 +1,32 @@
<script setup lang="ts">
import type { FAQ } from '~~/shared/types'
interface Props {
faqs: FAQ[]
title: string
subtitle: string
}
const props = defineProps<Props>()
const { t } = useI18n()
const items = computed(() =>
props.faqs.map((faq) => ({
label: t(faq.questionKey),
content: t(faq.answerKey),
value: faq.questionKey,
})),
)
</script>
<template>
<section class="py-16 px-4">
<div class="max-w-3xl mx-auto">
<div class="text-center mb-12">
<h2 class="text-3xl font-bold mb-4">{{ title }}</h2>
<p class="text-lg text-muted">{{ subtitle }}</p>
</div>
<UAccordion :items="items" type="single" collapsible />
</div>
</section>
</template>