81 lines
2.5 KiB
Plaintext
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>
|