Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
61 commits
Select commit Hold shift + click to select a range
7706c97
cloned website
RajkumarManala1 Nov 17, 2024
7e87332
changes images
RajkumarManala1 Nov 17, 2024
917e5e7
changed heading
RajkumarManala1 Nov 17, 2024
bc0f7aa
buid intro little properly
RajkumarManala1 Nov 17, 2024
a0c5ef1
changed intro
RajkumarManala1 Nov 18, 2024
93e474b
changes made to build certifications tab
RajkumarManala1 Nov 18, 2024
dd4e2fb
changed projects
RajkumarManala1 Nov 18, 2024
72ca372
changed projects
RajkumarManala1 Nov 19, 2024
3469a05
did some changes
RajkumarManala1 Nov 19, 2024
f0b8a2d
changed certifications page made so many changes
RajkumarManala1 Nov 19, 2024
5bf7c33
make the changes
RajkumarManala1 Nov 19, 2024
4086653
made changes in experience
RajkumarManala1 Nov 19, 2024
4246415
added api key
RajkumarManala1 Nov 19, 2024
619dbd8
changed
RajkumarManala1 Nov 19, 2024
3b1ceb7
make changes all
RajkumarManala1 Nov 19, 2024
11f16f6
added all my certifications
RajkumarManala1 Nov 19, 2024
2d21f0c
made changes with my exoerience
RajkumarManala1 Nov 19, 2024
5293425
properly changed CV
RajkumarManala1 Nov 19, 2024
8c1b219
Create nextjs.yml
RajkumarManala1 Nov 19, 2024
c5fc65c
Update next.config.js
RajkumarManala1 Nov 19, 2024
31117e4
Update next.config.js
RajkumarManala1 Nov 19, 2024
df0cf50
Update next.config.js
RajkumarManala1 Nov 19, 2024
c85bae8
Add GitHub Actions workflow for deployment
RajkumarManala1 Nov 20, 2024
0fc756b
make changes for github portfolio
RajkumarManala1 Nov 20, 2024
51d27d1
kept nextjs
RajkumarManala1 Nov 20, 2024
675ebca
chnges made in next
RajkumarManala1 Nov 20, 2024
8532b0e
made changes
RajkumarManala1 Nov 20, 2024
d99fbf7
changes made in next config
RajkumarManala1 Nov 20, 2024
0b27bce
changed intro
RajkumarManala1 Nov 20, 2024
77d2954
changed CV
RajkumarManala1 Nov 20, 2024
bd864f7
updated azure databricks certification
RajkumarManala1 Jan 20, 2025
e0b42f6
changed certificate name
RajkumarManala1 Jan 20, 2025
f5d01c8
changed layout of my experience
RajkumarManala1 Jan 22, 2025
0c83600
add AWS certification
RajkumarManala1 Apr 4, 2025
83991b7
Update README.md
RajkumarManala1 May 19, 2025
36d7af7
Create settings.json
RajkumarManala1 May 19, 2025
e2ca410
changed description
RajkumarManala1 May 20, 2025
279d3d7
changed into page
RajkumarManala1 May 21, 2025
df36b1d
changed failed deployments
RajkumarManala1 May 21, 2025
8801820
changed next js
RajkumarManala1 May 21, 2025
f6db430
changed about
RajkumarManala1 May 21, 2025
74eedc7
changed experience
RajkumarManala1 Sep 25, 2025
faa1a91
added my developer certificate
RajkumarManala1 Sep 25, 2025
a2174fa
send email fixed
RajkumarManala1 Sep 25, 2025
6fb2a99
made soime changes witg the CV
RajkumarManala1 Sep 25, 2025
d93c203
corrected linkedin link
RajkumarManala1 Sep 26, 2025
28f0a5f
Merge branch 'master' of https://github.com/RajkumarManala1/Raj-Kumar…
RajkumarManala1 Sep 26, 2025
d7e2f1b
Changed CV
RajkumarManala1 Sep 26, 2025
e1f7994
changed footer
RajkumarManala1 Sep 26, 2025
c5a8639
changed code for cv
RajkumarManala1 Sep 26, 2025
1741e7c
renamed to resume
RajkumarManala1 Sep 26, 2025
47c5748
added google analystics for tracking
RajkumarManala1 Oct 2, 2025
fb47df0
Graduated so made some changes
RajkumarManala1 Dec 18, 2025
53d01d4
Changed CV
RajkumarManala1 Dec 18, 2025
007db0c
Made some changes in intro and about me
RajkumarManala1 Jan 9, 2026
578072e
rearanged the roles and responsibilities properly
RajkumarManala1 Jan 9, 2026
279ea75
made some work
RajkumarManala1 Jan 9, 2026
0a703c0
made some changes in CV
RajkumarManala1 Jan 9, 2026
56f1bf7
Worked on Resume
RajkumarManala1 Mar 12, 2026
6a41194
Update experience section: add Discover Financial & Bosch, refresh al…
RajkumarManala1 Mar 13, 2026
81c4c42
Remove GitHub Pages workflow — using Netlify for deployment
RajkumarManala1 Mar 13, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions .claude/launch.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"version": "0.0.1",
"configurations": [
{
"name": "next-dev",
"runtimeExecutable": "npm",
"runtimeArgs": ["run", "dev"],
"port": 3000
}
]
}
1 change: 1 addition & 0 deletions .claude/worktrees/serene-wu
Submodule serene-wu added at 0a703c
3 changes: 3 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"git.blame.editorDecoration.enabled": true
}
31 changes: 1 addition & 30 deletions README.md
Original file line number Diff line number Diff line change
@@ -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
6 changes: 4 additions & 2 deletions actions/sendEmail.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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");

Expand All @@ -27,7 +29,7 @@ export const sendEmail = async (formData: FormData) => {
try {
data = await resend.emails.send({
from: "Contact Form <onboarding@resend.dev>",
to: "bytegrad@gmail.com",
to: "manalarajkumar.rm@gmail.com",
subject: "Message from contact form",
reply_to: senderEmail,
react: React.createElement(ContactFormEmail, {
Expand Down
Binary file modified app/favicon.ico
Binary file not shown.
20 changes: 18 additions & 2 deletions app/layout.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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({
Expand All @@ -24,6 +26,20 @@ export default function RootLayout({
<body
className={`${inter.className} bg-gray-50 text-gray-950 relative pt-28 sm:pt-36 dark:bg-gray-900 dark:text-gray-50 dark:text-opacity-90`}
>
{/* ✅ Google Analytics Script */}
<Script
async
src="https://www.googletagmanager.com/gtag/js?id=G-CD24S95HF1"
/>
<Script id="google-analytics">
{`
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-CD24S95HF1');
`}
</Script>

<div className="bg-[#fbe2e3] absolute top-[-6rem] -z-10 right-[11rem] h-[31.25rem] w-[31.25rem] rounded-full blur-[10rem] sm:w-[68.75rem] dark:bg-[#946263]"></div>
<div className="bg-[#dbd7fb] absolute top-[-1rem] -z-10 left-[-35rem] h-[31.25rem] w-[50rem] rounded-full blur-[10rem] sm:w-[68.75rem] md:left-[-33rem] lg:left-[-28rem] xl:left-[-15rem] 2xl:left-[-5rem] dark:bg-[#676394]"></div>

Expand Down
5 changes: 4 additions & 1 deletion app/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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 (
<main className="flex flex-col items-center px-4">
Expand All @@ -15,6 +16,8 @@ export default function Home() {
<Projects />
<Skills />
<Experience />
<Education/>
<CertificationsSection />
<Contact />
</main>
);
Expand Down
58 changes: 35 additions & 23 deletions components/about.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -17,33 +17,45 @@ export default function About() {
transition={{ delay: 0.175 }}
id="about"
>
<SectionHeading>About me</SectionHeading>
<SectionHeading>About Me</SectionHeading>

<p className="mb-3">
I am a <span className="font-medium">Cloud AI & Data Engineer</span> with{" "}
<span className="font-medium">6+ years of experience</span>. My goal is simple:
I build secure cloud systems that turn raw data into intelligent action within the{" "}
<span className="font-medium">Microsoft Azure Ecosystem</span>.
</p>

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

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

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

<p>
<span className="italic">When I'm not coding</span>, I enjoy playing
video games, watching movies, and playing with my dog. I also enjoy{" "}
<span className="font-medium">learning new things</span>. I am currently
learning about{" "}
<span className="font-medium">history and philosophy</span>. I'm also
learning how to play the guitar.
Outside of work, I enjoy <span className="font-medium">playing soccer, the gym</span>,{" "}
<span className="font-medium">watching movies</span>, and spending time with my friends.
</p>
</motion.section>
);
}
}
57 changes: 57 additions & 0 deletions components/certifications.tsx
Original file line number Diff line number Diff line change
@@ -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 (
<section ref={ref} id="certifications" className="scroll-mt-28 mb-28">
<SectionHeading>My Certifications</SectionHeading>
<div className="grid gap-6 sm:grid-cols-2 lg:grid-cols-3">
{certificationsData.map((cert, index) => (
<div
key={index}
className="border border-gray-300 p-4 rounded-lg shadow-md hover:shadow-lg transition dark:bg-gray-800 dark:border-gray-600"
>
<div className="flex items-center gap-4">
{/* Badge Image */}
{cert.imageUrl && (
<Image
src={cert.imageUrl}
alt={`${cert.title} badge`}
width={100} // Adjusted size
height={100} // Adjusted size
className="rounded-full"
/>
)}
<div>
<div className="text-xl font-medium">{cert.title}</div>
<div className="text-sm text-gray-600 dark:text-gray-400">
{cert.issuer} - {cert.date}
</div>
</div>
</div>
{/* Certification Link */}
{cert.link && (
<div className="flex justify-center mt-4">
<a
href={cert.link}
target="_blank"
rel="noopener noreferrer"
className="bg-gray-700 text-white hover:bg-gray-800 py-2 px-6 rounded-full text-sm text-center transition-all duration-300 ease-in-out transform hover:scale-105"
>
View Certification
</a>
</div>
)}
</div>
))}
</div>
</section>
);
}
4 changes: 2 additions & 2 deletions components/contact.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,8 @@ export default function Contact() {

<p className="text-gray-700 -mt-6 dark:text-white/80">
Please contact me directly at{" "}
<a className="underline" href="mailto:example@gmail.com">
example@gmail.com
<a className="underline" href="mailto:manalarajkumar.rm@gmail.com">
manalarajkumar.rm@gmail.com
</a>{" "}
or through this form.
</p>
Expand Down
55 changes: 55 additions & 0 deletions components/education.tsx
Original file line number Diff line number Diff line change
@@ -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 (
<section id="education" ref={ref} className="scroll-mt-28 mb-28 sm:mb-40">
<SectionHeading>My Education</SectionHeading>
<VerticalTimeline lineColor="">
{educationData.map((item, index) => (
<React.Fragment key={index}>
<VerticalTimelineElement
contentStyle={{
background:
theme === "light" ? "#f3f4f6" : "rgba(255, 255, 255, 0.05)",
boxShadow: "none",
border: "1px solid rgba(0, 0, 0, 0.05)",
textAlign: "left",
padding: "1.3rem 2rem",
}}
contentArrowStyle={{
borderRight:
theme === "light"
? "0.4rem solid #9ca3af"
: "0.4rem solid rgba(255, 255, 255, 0.5)",
}}
date={item.date}
icon={item.icon}
iconStyle={{
background:
theme === "light" ? "white" : "rgba(255, 255, 255, 0.15)",
fontSize: "1.5rem",
}}
>
<h3 className="font-semibold capitalize">{item.title}</h3>
<p className="font-normal !mt-0">{item.location}</p>
<p className="!mt-1 !font-normal text-gray-700 dark:text-white/75">
{item.description}
</p>
</VerticalTimelineElement>
</React.Fragment>
))}
</VerticalTimeline>
</section>
);
}
18 changes: 12 additions & 6 deletions components/experience.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -44,15 +44,21 @@ export default function Experience() {
fontSize: "1.5rem",
}}
>
<h3 className="font-semibold capitalize">{item.title}</h3>
<p className="font-normal !mt-0">{item.location}</p>
<p className="!mt-1 !font-normal text-gray-700 dark:text-white/75">
{item.description}
</p>
<h2 className="font-bold capitalize dark:text-white/75">{item.companyName}</h2>
<p className="font-extralight !mt-0 text-slate-400">{item.title}</p>
<p className="font-extralight !mt-0 text-slate-400">{item.location}</p>
<ul className="list-disc pl-5 space-y-2">
{item.description.map((point, idx) => (
// <li key={idx} className="text-justify text-gray-700 dark:text-white/75">
<li key={idx} className="text-gray-700 dark:text-white/75">
{point}
</li>
))}
</ul>
</VerticalTimelineElement>
</React.Fragment>
))}
</VerticalTimeline>
</section>
);
}
}
8 changes: 3 additions & 5 deletions components/footer.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,11 @@ export default function Footer() {
return (
<footer className="mb-10 px-4 text-center text-gray-500">
<small className="mb-2 block text-xs">
&copy; 2030 Ricardo. All rights reserved.
&copy; 2025 <a className="underline" href="https://github.com/RajkumarManala1/">RajkumarManala</a>. All rights reserved.
</small>
<p className="text-xs">
<span className="font-semibold">About this website:</span> built with
React & Next.js (App Router & Server Actions), TypeScript, Tailwind CSS,
Framer Motion, React Email & Resend, Vercel hosting.
<span className="font-semibold">About this website:</span>Template taken from <a className="underline" href="https://github.com/ByteGrad/portfolio-website">ByteGrad</a>. Edited by <a className="underline" href="https://github.com/RajkumarManala1/">Raj Kumar Manala</a>
</p>
</footer>
);
}
}
2 changes: 1 addition & 1 deletion components/header.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ export default function Header() {
return (
<header className="z-[999] relative">
<motion.div
className="fixed top-0 left-1/2 h-[4.5rem] w-full rounded-none border border-white border-opacity-40 bg-white bg-opacity-80 shadow-lg shadow-black/[0.03] backdrop-blur-[0.5rem] sm:top-6 sm:h-[3.25rem] sm:w-[36rem] sm:rounded-full dark:bg-gray-950 dark:border-black/40 dark:bg-opacity-75"
className="fixed top-0 left-1/2 h-[4.5rem] w-full rounded-none border border-white border-opacity-40 bg-white bg-opacity-80 shadw-lg shadow-black/[0.03] backdrop-blur-[0.5rem] sm:top-6 sm:h-[3.25rem] sm:w-[52rem] sm:rounded-full dark:bg-gray-950 dark:border-black/40 dark:bg-opacity-75"
initial={{ y: -100, x: "-50%", opacity: 0 }}
animate={{ y: 0, x: "-50%", opacity: 1 }}
></motion.div>
Expand Down
Loading