From 68c1288ac1c6c56f201247407649a07a0ca797f8 Mon Sep 17 00:00:00 2001 From: Arwa Sharif Date: Fri, 19 Dec 2025 17:56:56 -0500 Subject: [PATCH 1/6] refactor(client): Rename Chat component to ResumeBuilder --- client/components/ResumeBuilder.tsx | 123 ++++++++++++++++++++++++++++ 1 file changed, 123 insertions(+) create mode 100644 client/components/ResumeBuilder.tsx diff --git a/client/components/ResumeBuilder.tsx b/client/components/ResumeBuilder.tsx new file mode 100644 index 0000000..328ba5f --- /dev/null +++ b/client/components/ResumeBuilder.tsx @@ -0,0 +1,123 @@ +"use client"; +import { useState } from "react"; +import type { MouseEvent } from "react"; +import ResumeDisplay from "./ResumeDisplay" + +// The URL for the deployed backend. +const API_URL = process.env.NEXT_PUBLIC_API_URL; + +export default function ResumeBuilder() { + // State for the user's input + const [resume, setResume] = useState(""); + const [jobDescription, setJobDescription] = useState(""); + + // State for the API response + const [tailoredResume, setTailoredResume] = useState(""); + const [isLoading, setIsLoading] = useState(false); + const [error, setError] = useState(null); + + + + const handleSubmit = async (e : MouseEvent) => { + e.preventDefault(); + setIsLoading(true); + setError(null); + setTailoredResume(""); // Clear previous results + + // Use FormData because FastAPI endpoint expects Form() + const formData = new FormData(); + formData.append("base_resume", resume); + formData.append("job_description", jobDescription); + + try{ + // Make the API call to /resumes endpoint + const response = await fetch(`${API_URL}/resumes`, { + method: "POST", + body: formData, + }); + + if (!response.ok) { + // Handle HTTP errors (e.g., 500 from the server) + throw new Error(`API Error: ${response.status} ${response.statusText}`); + } + + const data = await response.json(); + + // Update state with the AI's response + setTailoredResume(data.tailored_resume); + } catch (err){ + console.error("Fetch error:", err); + if (err instanceof Error) { + setError(err.message); + } else { + setError("An unknown error occurred."); + } + } finally { + // Whether it worked or failed, we're done loading + setIsLoading(false); + }; + + }; + + return ( +
+ {/* Resume Text Area */} +
+ +