diff options
author | sotech117 <michael_foiani@brown.edu> | 2025-08-28 00:45:08 -0400 |
---|---|---|
committer | sotech117 <michael_foiani@brown.edu> | 2025-08-28 00:45:08 -0400 |
commit | e510f1848cf5ea37400c89cde66c9c54a990d3ef (patch) | |
tree | 358961470b20ee9039acc745cb5073a727b65fe5 | |
parent | a89ff47b98bda9d4636cf416f4c45d8060c126a8 (diff) |
update with milly info
-rw-r--r-- | package-lock.json | 14 | ||||
-rw-r--r-- | public/projects/ai-saas.png | bin | 505169 -> 0 bytes | |||
-rw-r--r-- | public/projects/brown-housing-notifications.jpg | bin | 0 -> 219343 bytes | |||
-rw-r--r-- | public/projects/find-your-flight.jpg | bin | 0 -> 292389 bytes | |||
-rw-r--r-- | public/projects/little-dictionary-of-fashion.jpg | bin | 0 -> 316426 bytes | |||
-rw-r--r-- | public/projects/robert-de-niro-project.jpg | bin | 0 -> 346997 bytes | |||
-rw-r--r-- | public/projects/social-media.png | bin | 455708 -> 0 bytes | |||
-rw-r--r-- | public/projects/stopwatch.png | bin | 203047 -> 0 bytes | |||
-rw-r--r-- | src/App.jsx | 2 | ||||
-rw-r--r-- | src/components/Contact.jsx | 8 | ||||
-rw-r--r-- | src/components/Hero.jsx | 44 | ||||
-rw-r--r-- | src/components/Projects.jsx | 71 |
12 files changed, 74 insertions, 65 deletions
diff --git a/package-lock.json b/package-lock.json index a521612..7013e65 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1583,9 +1583,9 @@ "license": "MIT" }, "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dev": true, "license": "MIT", "dependencies": { @@ -4139,16 +4139,16 @@ } }, "node_modules/react-syntax-highlighter": { - "version": "15.6.1", - "resolved": "https://registry.npmjs.org/react-syntax-highlighter/-/react-syntax-highlighter-15.6.1.tgz", - "integrity": "sha512-OqJ2/vL7lEeV5zTJyG7kmARppUjiB9h9udl4qHQjjgEos66z00Ia0OckwYfRxCSFrW8RJIBnsBwQsHZbVPspqg==", + "version": "15.6.6", + "resolved": "https://registry.npmjs.org/react-syntax-highlighter/-/react-syntax-highlighter-15.6.6.tgz", + "integrity": "sha512-DgXrc+AZF47+HvAPEmn7Ua/1p10jNoVZVI/LoPiYdtY+OM+/nG5yefLHKJwdKqY1adMuHFbeyBaG9j64ML7vTw==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.3.1", "highlight.js": "^10.4.1", "highlightjs-vue": "^1.0.0", "lowlight": "^1.17.0", - "prismjs": "^1.27.0", + "prismjs": "^1.30.0", "refractor": "^3.6.0" }, "peerDependencies": { diff --git a/public/projects/ai-saas.png b/public/projects/ai-saas.png Binary files differdeleted file mode 100644 index 9230601..0000000 --- a/public/projects/ai-saas.png +++ /dev/null diff --git a/public/projects/brown-housing-notifications.jpg b/public/projects/brown-housing-notifications.jpg Binary files differnew file mode 100644 index 0000000..52e7d95 --- /dev/null +++ b/public/projects/brown-housing-notifications.jpg diff --git a/public/projects/find-your-flight.jpg b/public/projects/find-your-flight.jpg Binary files differnew file mode 100644 index 0000000..c5ad343 --- /dev/null +++ b/public/projects/find-your-flight.jpg diff --git a/public/projects/little-dictionary-of-fashion.jpg b/public/projects/little-dictionary-of-fashion.jpg Binary files differnew file mode 100644 index 0000000..813b843 --- /dev/null +++ b/public/projects/little-dictionary-of-fashion.jpg diff --git a/public/projects/robert-de-niro-project.jpg b/public/projects/robert-de-niro-project.jpg Binary files differnew file mode 100644 index 0000000..3d32cbc --- /dev/null +++ b/public/projects/robert-de-niro-project.jpg diff --git a/public/projects/social-media.png b/public/projects/social-media.png Binary files differdeleted file mode 100644 index 777c17c..0000000 --- a/public/projects/social-media.png +++ /dev/null diff --git a/public/projects/stopwatch.png b/public/projects/stopwatch.png Binary files differdeleted file mode 100644 index d9af5f5..0000000 --- a/public/projects/stopwatch.png +++ /dev/null diff --git a/src/App.jsx b/src/App.jsx index 44f7866..c3e9f01 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -30,7 +30,7 @@ function App() { viewport={{ once: true }} transition={{ duration: 0.6 }} > - <p> © 2025 PedroTech. All rights reserved.</p> + <p> © 2025 Meiling Zhao</p> </motion.footer> </div> ); diff --git a/src/components/Contact.jsx b/src/components/Contact.jsx index af982e1..4012f18 100644 --- a/src/components/Contact.jsx +++ b/src/components/Contact.jsx @@ -8,14 +8,6 @@ const fadeInUp = { transition: { duration: 0.6 }, }; -const staggerContainer = { - animate: { - transition: { - staggerChildren: 0.1, - }, - }, -}; - export const Contact = () => { const [formData, setFormData] = useState({ name: "", diff --git a/src/components/Hero.jsx b/src/components/Hero.jsx index d3a3b71..586e5be 100644 --- a/src/components/Hero.jsx +++ b/src/components/Hero.jsx @@ -33,23 +33,22 @@ export const Hero = () => { animate="animate" > <motion.div className="hero-badge"> - <span> π Hello, I'm </span> + <span> π Hello, I'm </span> </motion.div> <motion.h1 className="glitch" variants={fadeInUp} whileHover={{ scale: 1.02 }} > - PedroTech + MillyZ </motion.h1> <motion.h2 className="hero-subtitle" variants={fadeInUp}> {" "} - Creative Developer & Designer + Data Analyst & App Developer </motion.h2> <motion.p className="hero-description" variants={fadeInUp}> - I craft beautiful digital experiences that combine stunning design - with powerful functionality. Specializing in modern web applications - and interactive user interfaces. + I analyze data to extract meaningful insights and drive business + decisions. Proficient in Python and data visualization tools like PowerBI. </motion.p> <motion.div className="cta-buttons" variants={staggerContainer}> @@ -72,14 +71,11 @@ export const Hero = () => { </motion.a> </motion.div> <motion.div className="social-links" variants={staggerContainer}> - <motion.a href="https://github.com" target="_blank"> - <i className="fab fa-github"> </i> - </motion.a> - <motion.a href="https://linkedin.com" target="_blank"> + <motion.a href="https://www.linkedin.com/in/meiling-zhao-29b554247/" target="_blank"> <i className="fab fa-linkedin"> </i> </motion.a> - <motion.a href="https://twitter.com" target="_blank"> - <i className="fab fa-twitter"> </i> + <motion.a href="https://github.com/millyz2023" target="_blank"> + <i className="fab fa-github"> </i> </motion.a> </motion.div> </motion.div> @@ -104,23 +100,23 @@ export const Hero = () => { }} style={vscDarkPlus} > - {`const aboutMe: DeveloperProfile = { - codename: "PedroTech", - origin: "π Somewhere between a coffee shop and a terminal", - role: "Fullstack Web Sorcerer", + {`const aboutMe: Profile = { + username: "MillicentZhao", + location: "Beijing, CN π¨π³ -> Providence, RI πΊπΈ", + role: "Data Explorer and Flutter Developer", stack: { - languages: ["JavaScript", "TypeScript", "SQL"], - frameworks: ["React", "Next.js", "TailwindCSS", "Supabase"], + languages: ["SQL", "Python", "Dart"], + frameworks: ["PowerBI", "Flutter"], }, traits: [ - "pixel-perfectionist", - "API whisperer", - "dark mode advocate", - "terminal aesthetic enthusiast", + "enthusiastically curious", + "critical thinker", + "energentically outgoing", + "creative sketcher", ], missionStatement: - "Turning ideas into interfaces and bugs into feature", - availability: "Available for hire", + "Learn from data. Always keep creating!" + };`} </SyntaxHighlighter> </div> diff --git a/src/components/Projects.jsx b/src/components/Projects.jsx index 2696c48..36cdf47 100644 --- a/src/components/Projects.jsx +++ b/src/components/Projects.jsx @@ -42,72 +42,93 @@ export const Projects = () => { <motion.div className="project-card" variants={fadeInUp} - whileHover={{ y: -10, transition: { duration: 0.2 } }} + whileHover={{ y: -10, transition: { duration: 0.2 }, cursor: "alias" }} + onClick={() => window.open("https://app.powerbi.com/view?r=eyJrIjoiZWVlNmI0MzUtMmVlOC00OTY4LWExODAtYzljYThjNjU5M2JkIiwidCI6ImE5ZjM5NjdkLTQwOWItNDNmNy05MjQ2LTY2YjljNTQzYTRkNSJ9", "_blank")} + > <motion.div className="project-image" - style={{ backgroundImage: "url('/projects/ai-saas.png')" }} - whileHover={{ scale: 1.05, transition: { duration: 0.2 } }} + style={{ backgroundImage: "url('/projects/robert-de-niro-project.jpg')" }} + whileHover={{ scale: 1.05, transition: { duration: 0.2 }}} /> - <h3> AI SaaS Platform</h3> + <h3>Robert De Niro: A Data-Driven Filmography</h3> <p> - A modern SaaS platform built with Next.js and OpenAI integration, - featuring real-time AI-powered content generation and analytics. + An interactive deep dive into Robert De Niro's film career through a crunching the data from Movie Database APIs. </p> <div className="project-tech"> - <span>Next.js</span> - <span>OpenAI</span> - <span>TailwindCSS</span> + <span>SQL</span> + <span>Python</span> + <span>PowerBI</span> </div> </motion.div> <motion.div className="project-card" variants={fadeInUp} - whileHover={{ y: -10, transition: { duration: 0.2 } }} + whileHover={{ y: -10, transition: { duration: 0.2 }, cursor: "alias" }} + onClick={() => window.open("https://github.com/millyz2023/Brown-Housing-Notification/", "_blank")} > <motion.div className="project-image" style={{ - backgroundImage: "url('/projects/social-media.png')", + backgroundImage: "url('/projects/brown-housing-notifications.jpg')", }} whileHover={{ scale: 1.05 }} transition={{ duration: 0.2 }} /> - <h3>Social Media Dashboard</h3> + <h3>Brown Housing Notifications</h3> + <p> + A python script that scrapes Brown University's off-campus housing website and sends notifications via email when new housing options become available. + </p> + <div className="project-tech"> + <span>Python</span> + <span>RESTful APIs</span> + <span>SMTP</span> + </div> + </motion.div> + + <motion.div + className="project-card" + variants={fadeInUp} + whileHover={{ y: -10, transition: { duration: 0.2 }, cursor: "alias" }} + onClick={() => window.open("https://github.com/millyz2023/Find-your-flight", "_blank")} + > + <motion.div + className="project-image" + style={{ backgroundImage: "url('/projects/find-your-flight.jpg')" }} + whileHover={{ scale: 1.05, transition: { duration: 0.2 }}} + /> + <h3>Find Your Flight</h3> <p> - A comprehensive social media management dashboard with analytics, - scheduling, and engagement tracking features. + Uses the Flight Search APIs to ease the process of making a perfect travel plan. </p> <div className="project-tech"> - <span>React</span> - <span>Node.js</span> - <span>MongoDB</span> + <span>Python</span> + <span>RESTful APIs</span> </div> </motion.div> <motion.div className="project-card" variants={fadeInUp} - whileHover={{ y: -10, transition: { duration: 0.2 } }} + whileHover={{ y: -10, transition: { duration: 0.2 }, cursor: "alias" }} + onClick={() => window.open("https://app.powerbi.com/view?r=eyJrIjoiMTdmMzVlNGMtYzhkMS00OTFkLWIwYzEtZmY2ODIyYjJkOGY1IiwidCI6ImE5ZjM5NjdkLTQwOWItNDNmNy05MjQ2LTY2YjljNTQzYTRkNSJ9&pageName=b178d00c0c03a7a3409e", "_blank")} > <motion.div className="project-image" style={{ - backgroundImage: "url('/projects/stopwatch.png')", + backgroundImage: "url('/projects/little-dictionary-of-fashion.jpg')", }} whileHover={{ scale: 1.05 }} transition={{ duration: 0.2 }} /> - <h3>Productivity Timer</h3> + <h3>Little Dictionary of Fashion by Christian Dior</h3> <p> - A sleek productivity timer application with customizable work - sessions, statistics tracking, and dark mode support. + An interactive Power BI applet allowing for exploration of Christian Dior's fashion from the 50s. </p> <div className="project-tech"> - <span>React</span> - <span>TypeScript</span> - <span>TailwindCSS</span> + <span>Python</span> + <span>PowerBI</span> </div> </motion.div> </motion.div> |