Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
32 changes: 32 additions & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
"react-dom": "~18.3.1",
"react-icons": "^5.5.0",
"react-loading": "^2.0.3",
"react-scroll": "^1.9.3",
"react-scroll-parallax": "^3.4.5",
"react-type-animation": "^3.2.0"
},
Expand All @@ -31,6 +32,7 @@
"@types/node": "~22.1.0",
"@types/react": "~18.3.3",
"@types/react-dom": "~18.3.0",
"@types/react-scroll": "^1.8.10",
"@typescript-eslint/eslint-plugin": "~8.0.0",
"@typescript-eslint/parser": "~8.0.0",
"autoprefixer": "~10.4.19",
Expand Down
Binary file removed public/Cloud1.png
Binary file not shown.
Binary file removed public/Cloud2.png
Binary file not shown.
Binary file removed public/Cloud3.png
Binary file not shown.
Binary file added public/KevinLoritsch_Resume.pdf
Binary file not shown.
14 changes: 0 additions & 14 deletions public/backgroundLanding.svg

This file was deleted.

Binary file removed public/experiences/acmLogo.png
Binary file not shown.
Binary file added public/experiences/acmLogo.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file removed public/experiences/ucrLogo.png
Binary file not shown.
8 changes: 0 additions & 8 deletions public/experiences/ucrLogo.svg

This file was deleted.

Binary file modified public/experiences/ucrLogo.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 0 additions & 4 deletions public/landingMountains.svg

This file was deleted.

Binary file removed public/projects/aviatr.png
Binary file not shown.
Binary file added public/projects/aviatr.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file removed public/projects/chess.png
Binary file not shown.
Binary file added public/projects/chess.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file removed public/projects/finalTake.png
Binary file not shown.
Binary file added public/projects/finalTake.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file removed public/projects/leap.png
Binary file not shown.
Binary file added public/projects/leap.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file removed public/projects/ptso.png
Binary file not shown.
Binary file added public/projects/ptso.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file removed public/projects/squareRoot.png
Binary file not shown.
Binary file added public/projects/squareRoot.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file removed public/projects/tree.png
Binary file not shown.
Binary file added public/projects/tree.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file removed public/projects/ula.png
Binary file not shown.
Binary file added public/projects/ula.webp
5 changes: 3 additions & 2 deletions src/app/components/Experiences.tsx
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
import Header from "@/app/components/Header";
import Experience from "@/app/components/Experience";
import experienceItems from "@/data/ExperienceData";
import { Element } from "react-scroll";

const Experiences = () => {
return (
<div>
<Element name="experiences">
<Header title={"Experiences"} />
<div className="flex w-full flex-row flex-wrap justify-center">
{experienceItems.map(({ image, name, entries }, i) => (
Expand All @@ -13,7 +14,7 @@ const Experiences = () => {
</div>
))}
</div>
</div>
</Element>
);
};
export default Experiences;
4 changes: 2 additions & 2 deletions src/app/components/Footer.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,8 @@ const Footer = () => {

return (
<div className="border-gray mx-auto h-[10vh] w-2/3 border-t-2 py-8 text-center">
<div className="pt-2 text-center">© Kevin Loritsch</div>
<div>Last updated at: {lastCommit}</div>
<p className="pt-2 text-center">© Kevin Loritsch</p>
<p className="pb-8">Last updated at: {lastCommit}</p>
</div>
);
};
Expand Down
52 changes: 36 additions & 16 deletions src/app/components/Landing.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
"use client";
import Image from "next/image";
import Link from "next/link";
import { Element } from "react-scroll";

import profilePicture from "@/public/profilePicture.webp";

Expand All @@ -9,28 +10,47 @@ import { socialLinks } from "@/data/SocialData";
const Landing = () => {
return (
<div
className="relative h-[90vh] w-full"
className="relative mt-[8vh] h-[90vh] w-full"
style={{
background:
"linear-gradient(to bottom, #C7BED3 0%, #C4BED5 16%, #E4BBB7 32%, #FEBF94 48%, #FEC68F 64%, #FEE2C7 85%, white 100%)",
"linear-gradient(to bottom, #C7BED3 0%, #C4BED5 16%, #E4BBB7 32%, #FEBF94 48%, #FEC68F 64%, #FEE2C7 90%, white 100%)",
}}
>
<div className="absolute flex h-full w-full flex-row items-center justify-center gap-12">
<div className="flex w-2/3 flex-row justify-evenly">
<div className="fex flex-col">
<p className="flex h-1/3 place-items-center justify-center border-b-4 text-center text-4xl font-bold md:text-5xl lg:text-6xl">
Kevin Loritsch
</p>
<p>UCR Student and Software Engineer</p>
{socialLinks.map(({ link, icon: Icon }, i) => (
<Link key={i} href={link}>
<Icon />
</Link>
))}
<Element name="home">
<div className="absolute flex h-full w-full flex-row items-center justify-center gap-12">
<div className="flex w-2/3 flex-row justify-evenly">
<div className="flex w-2/3 flex-col">
<p className="flex place-items-center justify-center pb-2 text-center text-4xl font-bold md:text-5xl lg:text-6xl">
Kevin Loritsch
</p>

<div className="mx-auto flex w-fit flex-row gap-4 border-t-2 border-black px-4 pt-2">
{socialLinks.map(({ link, icon: Icon }, i) => (
<Link key={i} href={link} target="_blank">
<Icon className="text-4xl" />
</Link>
))}
</div>
<p className="py-4">
Hi! My name is Kevin, and I am a Computer Science student at UC
Riverside (Chancellor's Scholar, 4.0 GPA) with experience in
software engineering, research, and teaching.
</p>
<p>
I'm interested in exploring work in algorithm design, AI,
research, and teaching.
</p>
</div>
<div className="w-1/3">
<Image
src={profilePicture}
alt="Kevin Loritsch"
className="w-3/4"
/>
</div>
</div>
<Image src={profilePicture} alt="Kevin Loritsch" className="w-1/2" />
</div>
</div>
</Element>
</div>
);
};
Expand Down
50 changes: 42 additions & 8 deletions src/app/components/Navbar.tsx
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
"use client";
import { motion } from "motion/react";

import Image from "next/image";
import { Link as ScrollLink } from "react-scroll";
import Link from "next/link";
import navbarItems from "@/data/NavbarData";
import { useState, useEffect } from "react";
import Image from "next/image";

import navbarItems from "@/data/NavbarData";
import profilePicture from "@/public/profilePicture.webp";

const fadeIn = (delay = 0) => ({
Expand All @@ -20,23 +21,56 @@ const hoverAnimation = {
},
};

const use10vhAsPixels = () => {
const [pixels, setPixels] = useState(0);

useEffect(() => {
const calculatePixels = () => {
const viewportHeight = window.innerHeight;
setPixels((viewportHeight / 100) * 10);
};

calculatePixels();
window.addEventListener("resize", calculatePixels);

return () => {
window.removeEventListener("resize", calculatePixels);
};
}, []);

return pixels;
};

const Navbar = () => {
const pixels = use10vhAsPixels();

return (
<div className="fixed left-0 top-0 z-50 flex h-[10vh] justify-evenly bg-white px-8 shadow-xl">
<div className="flex w-1/2 flex-row items-center gap-4 text-left">
<div className="fixed left-0 top-0 z-50 flex h-[10vh] cursor-pointer justify-evenly bg-white px-8 shadow-xl">
<Link
href="/"
className="flex w-1/2 flex-row items-center gap-4 text-left"
>
<Image src={profilePicture} alt="Kevin Loritsch" className="w-1/12" />
<p className="font-bold">Kevin Loritsch</p>
</div>
<div className="font flex w-1/2 flex-row items-center justify-end text-right">
</Link>
<div className="flex w-1/2 flex-row items-center justify-end text-right">
{navbarItems.map(({ name, link }, i) => (
<motion.div {...fadeIn(i / 5)} key={i}>
<motion.div className="pr-4" {...hoverAnimation}>
<Link href={link}> {name}</Link>
<ScrollLink
to={link}
smooth={true}
offset={-pixels}
duration={500}
>
{name}
</ScrollLink>
</motion.div>
</motion.div>
))}
</div>
</div>
);
};

export default Navbar;
34 changes: 30 additions & 4 deletions src/app/components/Project.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,29 @@

import Image, { StaticImageData } from "next/image";
import { motion } from "motion/react";
import { IconType } from "react-icons";

interface techEntry {
icon: IconType;
}

interface projectProps {
image: StaticImageData;
title: string;
description: string;
date: string;
role: string;
techStack?: techEntry[];
}

const Project = ({ image, title, description }: projectProps) => {
const Project = ({
image,
title,
description,
date,
role,
techStack,
}: projectProps) => {
return (
<div className="mx-8">
<p className="text-center text-xl font-bold">{title}</p>
Expand Down Expand Up @@ -39,12 +54,23 @@ const Project = ({ image, title, description }: projectProps) => {
initial={{ opacity: 0 }}
whileHover={{ opacity: 1 }}
>
<p className="text-sm text-white">{description}</p>
<div className="flex flex-col gap-y-4 text-sm text-white">
<p>{date}</p>
<p>{description}</p>
</div>
</motion.div>
</motion.div>
<div className="flex flex-row justify-evenly pt-3">
<div className="mr-auto">Tech Stack</div>
<div className="ml-auto">Role on Project</div>
<div className="mr-auto flex flex-row gap-2 pl-4">
{techStack &&
techStack.map(({ icon: Icon }, i) => (
<div key={i} className="w-full">
<Icon className="text-xl" />
</div>
))}
</div>

<div className="ml-auto pr-4">{role}</div>
</div>
</div>
);
Expand Down
24 changes: 17 additions & 7 deletions src/app/components/Projects.tsx
Original file line number Diff line number Diff line change
@@ -1,22 +1,32 @@
import Header from "@/app/components/Header";
import Project from "@/app/components/Project";
import projectItems from "@/data/ProjectsData";
import { Element } from "react-scroll";

const Projects = () => {
return (
<div>
<Element name="projects">
<Header
title={"My Projects"}
subtitle={"Hover to learn about each project!"}
/>
<div className="flex w-full flex-row flex-wrap justify-center">
{projectItems.map(({ image, title, description }, i) => (
<div key={i} className="w-2/5 py-8">
<Project image={image} title={title} description={description} />
</div>
))}
{projectItems.map(
({ image, title, date, description, role, techStack }, i) => (
<div key={i} className="w-2/5 py-8">
<Project
image={image}
title={title}
date={date}
description={description}
role={role}
techStack={techStack}
/>
</div>
),
)}
</div>
</div>
</Element>
);
};
export default Projects;
Loading
Loading