feat: Add Skills page, BioSection, ProjectCard, and new image assets, while refactoring the deployment workflow to build Docker images directly on my remote server.
This commit is contained in:
@@ -1,26 +1,11 @@
|
||||
import { motion } from "framer-motion";
|
||||
import TypingText from "../components/animatedTyping";
|
||||
import FullPageImage from "../components/fullPageImage";
|
||||
import { delay, motion } from "framer-motion";
|
||||
|
||||
// Animation and typing timing configuration
|
||||
const ANIMATION_TIMINGS = {
|
||||
// Animation delays (in seconds)
|
||||
elementIn: 2.0, // When elements fade in
|
||||
const welcomeText = `Hello! My name is Sasha Bayda and welcome to my digital resume site!
|
||||
|
||||
// Typing speeds (in milliseconds per character)
|
||||
welcomeTextSpeed: 45,
|
||||
nameSpeed: 120,
|
||||
Here you will find some of my projects, skills, contact information and any information I couldn't fit into my resume.
|
||||
|
||||
// Typing delays (in milliseconds) - time before text starts typing
|
||||
welcomeTextDelay: 2000,
|
||||
nameDelay: 2000,
|
||||
|
||||
// Test items animation (slides in from bottom)
|
||||
testItemsStartDelay: 3.5, // When to start the first test item animation (in seconds)
|
||||
testItemStaggerDelay: 0.2, // Delay between each test item (in seconds)
|
||||
testItemAnimationDuration: 0.5, // Duration of each item's slide-in animation
|
||||
};
|
||||
const welcomeText = "Hello! My name is Sasha Bayda and welcome to my digital resume site! Here you will find some of my projects, skills, contact information and any information I couldn't fit into my resume. Feel free to explore and learn more about me and if something isn't answered, don't hesitate to reach out via the contact page!";
|
||||
Feel free to explore and learn more about me and if something isn't answered, don't hesitate to reach out via the contact page!`;
|
||||
|
||||
const CONTACT_LINKS = [
|
||||
{ label: "Email", url: "mailto:sasha.bayda@outlook.com" },
|
||||
@@ -33,48 +18,55 @@ const CONTACT_LINKS = [
|
||||
export default function Home() {
|
||||
return (
|
||||
<div className="mainContentBlock">
|
||||
<div style={{ height: "30px" }}></div>
|
||||
<div className="hero-card">
|
||||
<div className="horizontalContentItem" style={{ maxHeight: "100vh", justifyContent: "center" }}>
|
||||
<motion.div
|
||||
className="flexContainer"
|
||||
initial={{ opacity: 0 }}
|
||||
animate={{ opacity: 1 }}
|
||||
transition={{ duration: ANIMATION_TIMINGS.elementIn, ease: "easeOut" }}
|
||||
>
|
||||
<img
|
||||
src="/1647091917916.png"
|
||||
alt="portfolio"
|
||||
className="portrait-img"
|
||||
/>
|
||||
</motion.div>
|
||||
<div
|
||||
className="welcome-text flexContainer"
|
||||
>
|
||||
<TypingText text={welcomeText} msPerChar={ANIMATION_TIMINGS.welcomeTextSpeed} delayMs={ANIMATION_TIMINGS.welcomeTextDelay} />
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
className="verticalContentItem"
|
||||
<div className="home-container">
|
||||
<motion.div
|
||||
className="hero-profile-container"
|
||||
initial={{ opacity: 0, scale: 0.8 }}
|
||||
animate={{ opacity: 1, scale: 1 }}
|
||||
transition={{ duration: 0.8, ease: "easeOut" }}
|
||||
>
|
||||
<div className="name-text flexContainer">
|
||||
<TypingText text="Sasha Bayda" msPerChar={ANIMATION_TIMINGS.nameSpeed} delayMs={ANIMATION_TIMINGS.nameDelay} textAlign="center" />
|
||||
<img
|
||||
src="/1647091917916.png"
|
||||
alt="Sasha Bayda"
|
||||
className="hero-profile-img"
|
||||
/>
|
||||
</motion.div>
|
||||
|
||||
<div className="hero-content">
|
||||
<div className="hero-name">
|
||||
<TypingText
|
||||
text="Sasha Bayda"
|
||||
msPerChar={120}
|
||||
delayMs={100}
|
||||
textAlign="center"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div className="horizontalContentItem skills-list">
|
||||
<motion.p
|
||||
className="hero-bio"
|
||||
initial={{ opacity: 0 }}
|
||||
animate={{ opacity: 1 }}
|
||||
transition={{ duration: 1, delay: 2.0 }}
|
||||
>
|
||||
{welcomeText}
|
||||
</motion.p>
|
||||
|
||||
<div className="hero-socials">
|
||||
{CONTACT_LINKS.map((link, index) => (
|
||||
<motion.a
|
||||
key={index}
|
||||
href={link.url}
|
||||
className="contact-link"
|
||||
initial={{ y: 50, opacity: 0 }}
|
||||
animate={{ y: 0, opacity: 1 }}
|
||||
className="hero-social-link"
|
||||
initial={{ opacity: 0, y: 20 }}
|
||||
animate={{ opacity: 1, y: 0 }}
|
||||
transition={{
|
||||
duration: ANIMATION_TIMINGS.testItemAnimationDuration,
|
||||
ease: "easeOut",
|
||||
delay: ANIMATION_TIMINGS.testItemsStartDelay + (index * ANIMATION_TIMINGS.testItemStaggerDelay)
|
||||
duration: 0.5,
|
||||
delay: 2.5 + (index * 0.1),
|
||||
ease: "easeOut"
|
||||
}}
|
||||
>{link.label}</motion.a>
|
||||
>
|
||||
{link.label}
|
||||
</motion.a>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user