diff --git a/www/app/api/resume/route.ts b/www/app/api/resume/route.ts index 89bc2412..7a304ddc 100644 --- a/www/app/api/resume/route.ts +++ b/www/app/api/resume/route.ts @@ -10,10 +10,8 @@ export async function GET(request: NextRequest) { return Response.json({ error: "Username is required" }, { status: 400 }); } - const pdfInstance = await generateResumePDF(username); - const pdfBuffer = await pdfInstance.toBuffer(); + const pdfBuffer = await generateResumePDF(username); - //@ts-expect-error -- todo: fix this later return new Response(pdfBuffer, { headers: { "Content-Type": "application/pdf", diff --git a/www/components/ClientResumeButton.tsx b/www/components/ClientResumeButton.tsx index 6007ff0b..14d0078f 100644 --- a/www/components/ClientResumeButton.tsx +++ b/www/components/ClientResumeButton.tsx @@ -22,9 +22,16 @@ export default function ClientResumeButton({ username }: { username: string }) { const blob = await response.blob(); const url = URL.createObjectURL(blob); - window.open(url, "_blank"); + const a = document.createElement("a"); + a.href = url; + a.download = `${username}-resume.pdf`; + document.body.appendChild(a); + a.click(); + document.body.removeChild(a); + URL.revokeObjectURL(url); } catch (error) { console.error("Error downloading resume:", error); + alert("Failed to generate resume. Please try again."); } finally { setIsLoading(false); } diff --git a/www/lib/resume.tsx b/www/lib/resume.tsx index 349bf7f3..5d97a328 100644 --- a/www/lib/resume.tsx +++ b/www/lib/resume.tsx @@ -3,7 +3,7 @@ import { Image, Link, Page, - pdf, + renderToBuffer, StyleSheet, Text, View, @@ -379,7 +379,7 @@ async function getResumeData(username: string): Promise { }; } -export async function generateResumePDF(username: string) { +export async function generateResumePDF(username: string): Promise { const resumeData = await getResumeData(username); - return pdf(); + return renderToBuffer(); }