aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsotech117 <michael_foiani@brown.edu>2025-08-28 00:45:08 -0400
committersotech117 <michael_foiani@brown.edu>2025-08-28 00:45:08 -0400
commite510f1848cf5ea37400c89cde66c9c54a990d3ef (patch)
tree358961470b20ee9039acc745cb5073a727b65fe5
parenta89ff47b98bda9d4636cf416f4c45d8060c126a8 (diff)
update with milly info
-rw-r--r--package-lock.json14
-rw-r--r--public/projects/ai-saas.pngbin505169 -> 0 bytes
-rw-r--r--public/projects/brown-housing-notifications.jpgbin0 -> 219343 bytes
-rw-r--r--public/projects/find-your-flight.jpgbin0 -> 292389 bytes
-rw-r--r--public/projects/little-dictionary-of-fashion.jpgbin0 -> 316426 bytes
-rw-r--r--public/projects/robert-de-niro-project.jpgbin0 -> 346997 bytes
-rw-r--r--public/projects/social-media.pngbin455708 -> 0 bytes
-rw-r--r--public/projects/stopwatch.pngbin203047 -> 0 bytes
-rw-r--r--src/App.jsx2
-rw-r--r--src/components/Contact.jsx8
-rw-r--r--src/components/Hero.jsx44
-rw-r--r--src/components/Projects.jsx71
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
deleted file mode 100644
index 9230601..0000000
--- a/public/projects/ai-saas.png
+++ /dev/null
Binary files differ
diff --git a/public/projects/brown-housing-notifications.jpg b/public/projects/brown-housing-notifications.jpg
new file mode 100644
index 0000000..52e7d95
--- /dev/null
+++ b/public/projects/brown-housing-notifications.jpg
Binary files differ
diff --git a/public/projects/find-your-flight.jpg b/public/projects/find-your-flight.jpg
new file mode 100644
index 0000000..c5ad343
--- /dev/null
+++ b/public/projects/find-your-flight.jpg
Binary files differ
diff --git a/public/projects/little-dictionary-of-fashion.jpg b/public/projects/little-dictionary-of-fashion.jpg
new file mode 100644
index 0000000..813b843
--- /dev/null
+++ b/public/projects/little-dictionary-of-fashion.jpg
Binary files differ
diff --git a/public/projects/robert-de-niro-project.jpg b/public/projects/robert-de-niro-project.jpg
new file mode 100644
index 0000000..3d32cbc
--- /dev/null
+++ b/public/projects/robert-de-niro-project.jpg
Binary files differ
diff --git a/public/projects/social-media.png b/public/projects/social-media.png
deleted file mode 100644
index 777c17c..0000000
--- a/public/projects/social-media.png
+++ /dev/null
Binary files differ
diff --git a/public/projects/stopwatch.png b/public/projects/stopwatch.png
deleted file mode 100644
index d9af5f5..0000000
--- a/public/projects/stopwatch.png
+++ /dev/null
Binary files differ
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> &copy; 2025 PedroTech. All rights reserved.</p>
+ <p> &copy; 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&apos;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&apos;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&apos;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&apos;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>