--- import { Icon } from "astro-icon/components"; import Layout from "../layouts/Layout.astro"; import ResumeSkills from "../components/ResumeSkills.vue"; import ResumeDownloadButton from "../components/ResumeDownloadButton.vue"; import ResumeSettingsModal from "../components/ResumeSettingsModal.vue"; import { config } from "../config"; import "../styles/global.css"; import * as TOML from "@iarna/toml"; interface ResumeData { basics: { name: string; email: string; website?: string; profiles?: { network: string; username: string; url: string; }[]; }; summary?: { content: string; }; experience?: { company: string; position: string; location: string; date: string; description: string[]; url?: string; }[]; education?: { institution: string; degree: string; field: string; date: string; details?: string[]; }[]; skills?: { name: string; level: number; }[]; volunteer?: { organization: string; position: string; date: string; }[]; awards?: { title: string; organization: string; date: string; description?: string; }[]; } let resumeData: ResumeData | undefined = undefined; let fetchError: string | null = null; if (!config.resumeConfig.tomlFile || !config.resumeConfig.tomlFile.trim()) { return Astro.redirect("/"); } try { let tomlContent: string; if (config.resumeConfig.tomlFile.startsWith("/")) { const baseUrl = Astro.url.origin; const response = await fetch( `${baseUrl}${config.resumeConfig.tomlFile}`, ); if (!response.ok) { throw new Error( `Failed to fetch resume: ${response.status} ${response.statusText}`, ); } tomlContent = await response.text(); } else { tomlContent = config.resumeConfig.tomlFile; } resumeData = TOML.parse(tomlContent) as unknown as ResumeData; } catch (error) { console.error("Error loading resume data:", error); return Astro.redirect("/"); } const data = resumeData; const resumeConfig = config.resumeConfig; if (!data) { return Astro.redirect("/"); } ---

{data.basics.name}

{ data.basics.email && ( {data.basics.email} ) } { data.basics.profiles?.map((profile) => { const iconName = `simple-icons:${profile.network.toLowerCase()}`; return ( {profile.network} ); }) }
{ data.summary && resumeConfig.sections.enabled.includes("summary") && (

{resumeConfig.sections.summary?.title || "Summary"}

{data.summary.content}
) } { data.skills && data.skills.length > 0 && resumeConfig.sections.enabled.includes("skills") && (

{resumeConfig.sections.skills?.title || "Skills"}

({ id: `skill-${index}`, name: skill.name, level: skill.level, }))} client:load />
) } { data.experience && data.experience.length > 0 && resumeConfig.sections.enabled.includes("experience") && (

{resumeConfig.sections.experience?.title || "Experience"}

{data.experience.map((experience) => (

{experience.position}

{experience.company} {experience.date} {experience.location}
    {experience.description.map( (item) => (
  • {item}
  • ), )}
{experience.url && ( Website )}
))}
) } { data.education && data.education.length > 0 && resumeConfig.sections.enabled.includes("education") && (

{resumeConfig.sections.education?.title || "Education"}

{data.education.map((education) => (

{education.institution}

{education.degree} in{" "} {education.field} {education.date}
{education.details && (
    {education.details.map( (detail) => (
  • {detail}
  • ), )}
)}
))}
) } { data.volunteer && data.volunteer.length > 0 && resumeConfig.sections.enabled.includes("volunteer") && (

{resumeConfig.sections.volunteer?.title || "Volunteer Work"}

{data.volunteer.map((volunteer) => (

{volunteer.organization}

{volunteer.position} {volunteer.date}
))}
) } { data.awards && data.awards.length > 0 && resumeConfig.sections.enabled.includes("awards") && (

{resumeConfig.sections.awards?.title || "Awards & Recognition"}

{data.awards.map((award) => (

{award.title}

{award.organization} {award.date}
{award.description && (
{award.description}
)}
))}
) }