diff options
author | Pedro Machado <machadop1407@gmail.com> | 2025-06-23 16:50:43 -0700 |
---|---|---|
committer | Pedro Machado <machadop1407@gmail.com> | 2025-06-23 16:50:43 -0700 |
commit | eb0eed40d780ccd81d8e0fe956e288c1724f1883 (patch) | |
tree | 8df03b483e3701e99f9df527723c977766b8315a /src/App.jsx |
first commit
Diffstat (limited to 'src/App.jsx')
-rw-r--r-- | src/App.jsx | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/src/App.jsx b/src/App.jsx new file mode 100644 index 0000000..44f7866 --- /dev/null +++ b/src/App.jsx @@ -0,0 +1,39 @@ +import "./App.css"; +import { Navbar } from "./components/Navbar"; +import { Hero } from "./components/Hero"; +import { Projects } from "./components/Projects"; +import { Contact } from "./components/Contact"; +import { useEffect, useState } from "react"; +import emailjs from "@emailjs/browser"; +import { motion } from "framer-motion"; + +function App() { + const [isLoaded, setIsLoaded] = useState(false); + + useEffect(() => { + setIsLoaded(true); + emailjs.init(import.meta.env.VITE_EMAILJS_PUBLIC_KEY); + }, []); + + return ( + <div className={`app ${isLoaded ? "loaded" : ""}`}> + <Navbar /> + + <Hero /> + <Projects /> + <Contact /> + + <motion.footer + className="footer" + initial={{ opacity: 0 }} + whileInView={{ opacity: 1 }} + viewport={{ once: true }} + transition={{ duration: 0.6 }} + > + <p> © 2025 PedroTech. All rights reserved.</p> + </motion.footer> + </div> + ); +} + +export default App; |