diff --git a/.claude/launch.json b/.claude/launch.json new file mode 100644 index 00000000..5b9bedf6 --- /dev/null +++ b/.claude/launch.json @@ -0,0 +1,11 @@ +{ + "version": "0.0.1", + "configurations": [ + { + "name": "next-dev", + "runtimeExecutable": "npm", + "runtimeArgs": ["run", "dev"], + "port": 3000 + } + ] +} diff --git a/.claude/worktrees/serene-wu b/.claude/worktrees/serene-wu new file mode 160000 index 00000000..0a703c0a --- /dev/null +++ b/.claude/worktrees/serene-wu @@ -0,0 +1 @@ +Subproject commit 0a703c0a05a7725fa82cd0ffd0d974a2a47c8176 diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 00000000..dde6508a --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "git.blame.editorDecoration.enabled": true +} \ No newline at end of file diff --git a/README.md b/README.md index 518412d3..426f3070 100644 --- a/README.md +++ b/README.md @@ -1,30 +1 @@ -[![Watch tutorial here](https://img.youtube.com/vi/sUKptmUVIBM/0.jpg)](https://youtu.be/sUKptmUVIBM) - -# [Watch video here](https://youtu.be/sUKptmUVIBM) - -## What you will learn - -- Latest Next.js 13 features -- Next.js App Router -- Next.js Server Actions -- Client & Server Components -- TypeScript (Beginner & Intermediate) -- Tailwind CSS -- Context API -- Advanced Animations with Framer Motion -- React.Email & Resend -- Custom React hooks -- Fresh, modern UI design -- Light & Dark mode -- Responsive website - -## Important - -If you want to be a professional developer, you have to know the fundamentals like JavaScript and CSS really well. I highly recommend you go through my [Professional JavaScript](https://bytegrad.com/courses/professional-javascript) and [Professional CSS](https://bytegrad.com/courses/professional-css) courses. - -I'm close to releasing a complete React & Next.js course. Get on the email list to receive early-bird pricing: [link](https://email.bytegrad.com/). - -## Setup - -1. Add RESEND_API_KEY environment variable in .env.local -2. In the send-email.ts action file, change the "to" email to your own email +Portfolio diff --git a/actions/sendEmail.ts b/actions/sendEmail.ts index 047508da..c9eed928 100644 --- a/actions/sendEmail.ts +++ b/actions/sendEmail.ts @@ -5,9 +5,11 @@ import { Resend } from "resend"; import { validateString, getErrorMessage } from "@/lib/utils"; import ContactFormEmail from "@/email/contact-form-email"; -const resend = new Resend(process.env.RESEND_API_KEY); + export const sendEmail = async (formData: FormData) => { + + const resend = new Resend(process.env.RESEND_API_KEY); const senderEmail = formData.get("senderEmail"); const message = formData.get("message"); @@ -27,7 +29,7 @@ export const sendEmail = async (formData: FormData) => { try { data = await resend.emails.send({ from: "Contact Form ", - to: "bytegrad@gmail.com", + to: "manalarajkumar.rm@gmail.com", subject: "Message from contact form", reply_to: senderEmail, react: React.createElement(ContactFormEmail, { diff --git a/app/favicon.ico b/app/favicon.ico index f155228d..382dbf2a 100644 Binary files a/app/favicon.ico and b/app/favicon.ico differ diff --git a/app/layout.tsx b/app/layout.tsx index 38cb5595..3f151257 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -6,12 +6,14 @@ import Footer from "@/components/footer"; import ThemeSwitch from "@/components/theme-switch"; import ThemeContextProvider from "@/context/theme-context"; import { Toaster } from "react-hot-toast"; +import Script from "next/script"; // ✅ Import Script from next/script const inter = Inter({ subsets: ["latin"] }); export const metadata = { - title: "Ricardo | Personal Portfolio", - description: "Ricardo is a full-stack developer with 8 years of experience.", + title: "Raj Kumar Manala | Personal Portfolio", + description: + "Raj Kumar Manala is a Data Engineer & Analyst with more than 5+ years of Expericence", }; export default function RootLayout({ @@ -24,6 +26,20 @@ export default function RootLayout({ + {/* ✅ Google Analytics Script */} + +
diff --git a/app/page.tsx b/app/page.tsx index 63955de3..e18e855f 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -5,7 +5,8 @@ import Intro from "@/components/intro"; import Projects from "@/components/projects"; import SectionDivider from "@/components/section-divider"; import Skills from "@/components/skills"; - +import CertificationsSection from "@/components/certifications"; // Import your updated certifications section +import Education from "@/components/education"; export default function Home() { return (
@@ -15,6 +16,8 @@ export default function Home() { + +
); diff --git a/components/about.tsx b/components/about.tsx index 5383cb71..2cc51844 100644 --- a/components/about.tsx +++ b/components/about.tsx @@ -17,33 +17,45 @@ export default function About() { transition={{ delay: 0.175 }} id="about" > - About me + About Me + +

+ I am a Cloud AI & Data Engineer with{" "} + 6+ years of experience. My goal is simple: + I build secure cloud systems that turn raw data into intelligent action within the{" "} + Microsoft Azure Ecosystem. +

+ +

+ My technical foundation is rooted in Data Engineering. + I believe that AI is only as good as the data feeding it. That’s why I specialize + in using tools like Azure Data Factory,{" "} + Databricks, and{" "} + SQL to build clean, high-performance pipelines + that enterprises can actually trust. +

+ +

+ I build upon this stability with advanced AI Engineering. + Moving beyond simple prototypes, I architect{" "} + Production-Grade GenAI solutions. Using{" "} + Azure AI Foundry and{" "} + RAG (Retrieval-Augmented Generation), I create + custom "Copilots" and intelligent search systems that understand your internal business data, + driving real operational efficiency. +

+

- After graduating with a degree in{" "} - Accounting, I decided to pursue my - passion for programming. I enrolled in a coding bootcamp and learned{" "} - full-stack web development.{" "} - My favorite part of programming is the - problem-solving aspect. I love the - feeling of finally figuring out a solution to a problem. My core stack - is{" "} - - React, Next.js, Node.js, and MongoDB - - . I am also familiar with TypeScript and Prisma. I am always looking to - learn new technologies. I am currently looking for a{" "} - full-time position as a software - developer. + Having recently graduated with my Master's in Computer Science (Dec 2025){" "} + from Concordia University Chicago, I am open to{" "} + relocation and eager to bring this blend of + data stability and AI innovation to a new team. Let's connect!

- When I'm not coding, I enjoy playing - video games, watching movies, and playing with my dog. I also enjoy{" "} - learning new things. I am currently - learning about{" "} - history and philosophy. I'm also - learning how to play the guitar. + Outside of work, I enjoy playing soccer, the gym,{" "} + watching movies, and spending time with my friends.

); -} +} \ No newline at end of file diff --git a/components/certifications.tsx b/components/certifications.tsx new file mode 100644 index 00000000..b8accf51 --- /dev/null +++ b/components/certifications.tsx @@ -0,0 +1,57 @@ +"use client"; + +import React from "react"; +import SectionHeading from "./section-heading"; +import { certificationsData } from "@/lib/data"; +import { useSectionInView } from "@/lib/hooks"; +import Image from "next/image"; + +export default function Certifications() { + const { ref } = useSectionInView("Certifications", 0.5); + + return ( +
+ My Certifications +
+ {certificationsData.map((cert, index) => ( +
+
+ {/* Badge Image */} + {cert.imageUrl && ( + {`${cert.title} + )} +
+
{cert.title}
+
+ {cert.issuer} - {cert.date} +
+
+
+ {/* Certification Link */} + {cert.link && ( +
+ + View Certification + +
+ )} +
+ ))} +
+
+ ); +} diff --git a/components/contact.tsx b/components/contact.tsx index a85b2be1..ccaaaf40 100644 --- a/components/contact.tsx +++ b/components/contact.tsx @@ -33,8 +33,8 @@ export default function Contact() {

Please contact me directly at{" "} - - example@gmail.com + + manalarajkumar.rm@gmail.com {" "} or through this form.

diff --git a/components/education.tsx b/components/education.tsx new file mode 100644 index 00000000..10c2edb2 --- /dev/null +++ b/components/education.tsx @@ -0,0 +1,55 @@ +"use client"; + +import React from "react"; +import SectionHeading from "./section-heading"; +import { educationData } from "@/lib/data"; +import { VerticalTimeline, VerticalTimelineElement } from "react-vertical-timeline-component"; +import "react-vertical-timeline-component/style.min.css"; +import { useSectionInView } from "@/lib/hooks"; +import { useTheme } from "@/context/theme-context"; + +export default function Education() { + const { ref } = useSectionInView("Education"); + const { theme } = useTheme(); + + return ( +
+ My Education + + {educationData.map((item, index) => ( + + +

{item.title}

+

{item.location}

+

+ {item.description} +

+
+
+ ))} +
+
+ ); +} diff --git a/components/experience.tsx b/components/experience.tsx index a75a5ebf..af00e33b 100644 --- a/components/experience.tsx +++ b/components/experience.tsx @@ -44,15 +44,21 @@ export default function Experience() { fontSize: "1.5rem", }} > -

{item.title}

-

{item.location}

-

- {item.description} -

+

{item.companyName}

+

{item.title}

+

{item.location}

+ ))} ); -} +} \ No newline at end of file diff --git a/components/footer.tsx b/components/footer.tsx index 59982484..55c2053a 100644 --- a/components/footer.tsx +++ b/components/footer.tsx @@ -4,13 +4,11 @@ export default function Footer() { return ( ); -} +} \ No newline at end of file diff --git a/components/header.tsx b/components/header.tsx index a1e53f21..120662a0 100644 --- a/components/header.tsx +++ b/components/header.tsx @@ -14,7 +14,7 @@ export default function Header() { return (
diff --git a/components/intro.tsx b/components/intro.tsx index 6d6757ca..2e2b0714 100644 --- a/components/intro.tsx +++ b/components/intro.tsx @@ -30,19 +30,20 @@ export default function Intro() { duration: 0.2, }} > - Ricardo portrait +Raj portrait + - - Hello, I'm Ricardo. I'm a{" "} - full-stack developer with{" "} - 8 years of experience. I enjoy - building sites & apps. My focus is{" "} - React (Next.js). + Hi, I am Raj Kumar. I am a{" "} + Cloud AI & Data Engineer with{" "} + 6+ years of experience. I architect{" "} + secure cloud foundations and build{" "} + intelligent data solutions, bridging + the gap between Robust Data Engineering & Generative AI. - + - Contact me here{" "} + Get in Touch{" "} - - Download CV{" "} - - + + Resume {" "} + + + @@ -108,7 +112,7 @@ export default function Intro() { diff --git a/components/project.tsx b/components/project.tsx index 319df90a..52985c11 100644 --- a/components/project.tsx +++ b/components/project.tsx @@ -12,6 +12,7 @@ export default function Project({ description, tags, imageUrl, + githubLink, // Add githubLink prop }: ProjectProps) { const ref = useRef(null); const { scrollYProgress } = useScroll({ @@ -31,8 +32,8 @@ export default function Project({ className="group mb-3 sm:mb-8 last:mb-0" >
-