-
Notifications
You must be signed in to change notification settings - Fork 9
/
Copy pathApp.jsx
120 lines (112 loc) Β· 3.24 KB
/
App.jsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
import "./App.css";
import Hero from "./components/Hero";
import information from "./content/information";
import Navbar from "./components/Navbar";
import Footer from "./components/Footer";
import ProjectCard from "./components/ProjectCard";
import Heading from "./components/Heading";
import projects from "./content/projects";
import Skill from "./components/Skill";
import skills from "./content/skills";
import { motion, useAnimation } from "framer-motion";
import { useInView } from "react-intersection-observer";
import { useEffect } from "react";
import blogPosts from "./content/blogPosts";
import ContactForm from "./components/ContactForm";
import BlogPost from "./components/BlogPost";
function App() {
const controls = useAnimation();
const [ref, inView] = useInView({ triggerOnce: true });
useEffect(() => {
if (inView) {
controls.start("visible");
}
}, [controls, inView]);
const containerVariants = {
hidden: {},
visible: {
transition: {
staggerChildren: 0.3,
},
},
};
const skillVariants = {
hidden: { opacity: 0, x: -20 },
visible: { opacity: 1, x: 0 },
};
return (
<>
<Navbar
firstName={information.userData.firstName}
lastName={information.userData.lastName}
/>
<Hero
img={information.userData.img}
description={information.userData.description}
title={information.userData.title}
/>
<div className="hr"></div>
<section id="projects">
<Heading firstWord="My" secondWord="Projects" />
<motion.div
className="project-map"
ref={ref}
initial="hidden"
animate={controls}
variants={containerVariants}
>
{projects.map((project, index) => (
<div key={index}>
<ProjectCard
name={project.name}
img={project.img}
description={project.description}
source={project.sourceCode}
preview={project.preview}
/>
</div>
))}
</motion.div>
</section>
<section id="skills">
<Heading firstWord="Skills" secondWord="&Tools" />
<motion.div
className="skill-map"
ref={ref}
initial="hidden"
animate={controls}
variants={containerVariants}
>
{skills.map((skill, index) => (
<motion.div key={index} variants={skillVariants}>
<Skill skill={skill} />
</motion.div>
))}
</motion.div>
</section>
<section id="blog">
<Heading firstWord="My" secondWord="Blog" />
<div className="posts">
{blogPosts.map((post, index) => (
<BlogPost
key={index}
title={post.title}
image={post.image}
read={post.link}
date={post.pubDate}
/>
))}
</div>
<a className="cyber-scourge" href="https://blog.randiltharusha.me">
View More Posts
</a>
</section>
<section id="contact">
<Heading firstWord="Contact" secondWord="Me" />
<ContactForm />
</section>
<Footer />
</>
);
}
export default App;