Files
Portfolioo/src/pages/index.astro
T

81 lines
2.5 KiB
Plaintext

---
import Layout from '../layouts/Layout.astro';
import Navbar from '../components/Navbar';
import Hero from '../components/Hero';
import Projects from '../components/Projects';
import Skills from '../components/Skills';
import Certifications from '../components/Certifications';
import About from '../components/About';
import Testimonials from '../components/Testimonials';
import ContactForm from '../components/ContactForm';
import Footer from '../components/Footer';
import {
getSiteSettings,
getProjects,
getSkills,
getCertifications,
getExperience,
getEducation,
getTestimonials,
getSocialLinks
} from '../lib/data';
// Server-side fetch from Sanity (with resilient fallbacks)
const settings = await getSiteSettings();
const allProjects = await getProjects();
const featuredProjects = allProjects.length > 0
? (allProjects.some(p => p.featured) ? allProjects.filter(p => p.featured) : allProjects).slice(0, 5)
: [];
const skills = await getSkills();
const certifications = await getCertifications();
const experience = await getExperience();
const education = await getEducation();
const testimonials = await getTestimonials();
const socialLinks = await getSocialLinks();
---
<Layout
title={settings.seoTitle || `${settings.fullName} | ${settings.title}`}
description={settings.seoDescription || settings.valueProposition}
image={settings.heroImage || settings.logoImage || '/logo.png'}
>
<!-- Navigation bar -->
<Navbar fullName={settings.fullName} logoImage={settings.logoImage} client:load />
<!-- Main sections -->
<main class="flex-1">
<Hero
fullName={settings.fullName}
title={settings.title}
valueProposition={settings.valueProposition}
heroImage={settings.heroImage}
heroImageNight={settings.heroImageNight}
isAvailable={settings.isAvailable}
availabilityStatus={settings.availabilityStatus}
socialLinks={socialLinks}
client:load
/>
<About settings={settings} experience={experience} education={education} client:visible />
<Projects initialProjects={featuredProjects} limit={5} client:visible />
<Skills skills={skills} client:visible />
<Certifications certifications={certifications} client:load />
<Testimonials testimonials={testimonials} client:visible />
<ContactForm
socialLinks={socialLinks}
contactHeading={settings.contactHeading}
contactSubtitle={settings.contactSubtitle}
email={settings.email}
client:visible
/>
</main>
<Footer fullName={settings.fullName} socialLinks={socialLinks} client:load />
</Layout>