Skip to content

Commit

Permalink
🔥 build(profile): update peterpausianlian profile
Browse files Browse the repository at this point in the history
  • Loading branch information
peterlianpi committed Oct 27, 2023
1 parent e2d2786 commit 9d8b06c
Show file tree
Hide file tree
Showing 13 changed files with 2,423 additions and 0 deletions.
6 changes: 6 additions & 0 deletions content/profile/peterpausianlian.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,9 @@ tags:
- Python
- ReactJS
---

import Peter from "@/components/Contributors/Peter/Peter";

<div className="peter" id="root">
<Peter />
</div>
19 changes: 19 additions & 0 deletions src/components/Contributors/Peter/Peter.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
"use client";
import React from "react";
import { useEffect, useState } from "react";
import Loading from "./components/Loading";
import PageLayout from "./components/PageLayout";

function Peter() {
const [loading, setLoading] = useState(true);

useEffect(() => {
setTimeout(() => {
setLoading(false);
}, 1500);
}, []);

return loading ? <Loading /> : <PageLayout />;
}

export default Peter;
107 changes: 107 additions & 0 deletions src/components/Contributors/Peter/components/About.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
/* eslint-disable @next/next/no-img-element */
"use-client";
import React from "react";

function About() {
return (
<>
<section className="about" id="about">
<h2 className="about__heading section-heading">About</h2>
<div className="about__content">
<div className="profile profile__fade-in">
<div className="profile__picture ">
<img
className="trn-4 rounded-full hover:w-[80%] hover:mt-[-150px] hover:h-[80%] w-[100%] h-[100%] hover:rounded-full"
src="https://avatars.githubusercontent.com/u/36624809?v=4"
alt="peter"
/>
</div>
<p className="profile__blurb">
Fully committed to the philosophy of life-long learning, I’m a
full stack developer with a deep passion for JavaScript, React and
all things web development. The unique combination of creativity,
logic, technology and never running out of new things to discover,
drives my excitement and passion for web development. When I’m not
at my computer I like to spend my time reading, keeping fit and
playing piano.
</p>
</div>
<div className="skills">
<div className="skills__row">
<div className="skills__item skills__item--html skills__item-fade-in">
<img
src="https://benscott.dev/imgs/html.6aa56206be02cf6404844871df1d2da6.png"
alt=""
/>
<div className="skills__item-name">HTML</div>
</div>
<div className="skills__item skills__item--react skills__item-fade-in">
<img
src="https://benscott.dev/imgs/react.cb15bfce2a9004ce61c5f79f805b067b.png"
alt=""
/>
<div className="skills__item-name skills__item-fade-in">
REACT
</div>
</div>
{/* <div className="skills__item skills__item--npm skills__item-fade-in">
<img src="./img/expressjs.png" alt="" />
<div className="skills__item-name skills__item-fade-in">EXPRESS.JS</div>
</div> */}
</div>
<div className="skills__row">
<div className="skills__item skills__item--js skills__item-fade-in">
<img
src="https://benscott.dev/imgs/js.f8a28e905c78dadb79434b7ceebd52a0.png"
alt=""
/>
<div className="skills__item-name">JAVASCRIPT</div>
</div>
<div className="skills__item skills__item--css skills__item-fade-in">
<img
src="https://benscott.dev/imgs/css.0ce0f0a2b4c4aa34b64c40e5278af3d1.png"
alt=""
/>
<div className="skills__item-name">CSS</div>
</div>
{/* <div className="skills__item skills__item--python skills__item-fade-in">
<img src="./img/mongo.png" alt="" />
<div className="skills__item-name">MONGODB</div>
</div> */}
<div className="skills__item skills__item--git skills__item-fade-in">
<img
src="https://benscott.dev/imgs/git.3092b5991e8accb9e7c36817c048a8d5.png"
alt=""
/>
<div className="skills__item-name">GIT</div>
</div>
</div>
<div className="skills__row">
{/* <div className="skills__item skills__item--sass skills__item-fade-in">
<img src="./img/sass.png" alt="" />
<div className="skills__item-name">SASS</div>
</div> */}
<div className="skills__item skills__item--webpack skills__item-fade-in">
<img
src="https://benscott.dev/imgs/nextjs.ff373e2ef4f7fdf152425a8c5c30816c.png"
alt=""
/>
<div className="skills__item-name">NEXT.JS</div>
</div>

<div className="skills__item skills__item--r skills__item-fade-in">
<img
src="https://benscott.dev/imgs/node.94a06c4b9dd29e984501e6407e77a918.png"
alt=""
/>
<div className="skills__item-name">NODE.JS</div>
</div>
</div>
</div>
</div>
</section>
</>
);
}

export default About;
107 changes: 107 additions & 0 deletions src/components/Contributors/Peter/components/Canvas.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
"use-client";
import { useEffect } from "react";
// import { unstable_enableLog } from "react-dom";
// unstable_enableLog("react.dom");

function Canvas() {
useEffect(() => {
// This code will run on the client side
const canvas = document.getElementById("canvas-1");
if (!canvas) {
console.error("Canvas element not found");
return;
}
const ctx = canvas.getContext("2d");
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
const particlesArray = [];
let hue = 0;

window.addEventListener("resize", function () {
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
});

const mouse = {
x: undefined,
y: undefined,
};

canvas.addEventListener("click", function (event) {
mouse.x = event.x;
mouse.y = event.y;
for (let i = 0; i < 10; i++) {
particlesArray.push(new Particle());
}
});

canvas.addEventListener("mousemove", function (event) {
mouse.x = event.x;
mouse.y = event.y;
for (let i = 0; i < 10; i++) {
particlesArray.push(new Particle());
}
});

class Particle {
constructor() {
this.x = mouse.x;
this.y = mouse.y;
this.size = Math.random() * 5 + 1;
this.speedX = Math.random() * 3 - 1.5;
this.speedY = Math.random() * 3 - 1.5;
this.color = "hsl(" + hue + ", 100%, 50%)";
}
update() {
this.x += this.speedX;
this.y += this.speedY;
if (this.size > 0.2) this.size -= 0.1;
}
draw() {
ctx.fillStyle = this.color;
ctx.beginPath();
ctx.arc(this.x, this.y, this.size, 0, Math.PI * 2);
ctx.fill();
}
}

function handleParticles() {
for (let i = 0; i < particlesArray.length; i++) {
particlesArray[i].update();
particlesArray[i].draw();
for (let j = i; j < particlesArray.length; j++) {
const dx = particlesArray[i].x - particlesArray[j].x;
const dy = particlesArray[i].y - particlesArray[j].y;
const distance = Math.sqrt(dx * dx + dy * dy);
if (distance < 100) {
ctx.beginPath();
ctx.strokeStyle = particlesArray[i].color;
ctx.lineWidth = 0.2;
ctx.moveTo(particlesArray[i].x, particlesArray[i].y);
ctx.lineTo(particlesArray[j].x, particlesArray[j].y);
ctx.stroke();
ctx.closePath();
}
}
if (particlesArray[i].size <= 0.3) {
particlesArray.splice(i, 1);
i--;
}
}
}

function animate() {
ctx.clearRect(0, 0, canvas.width, canvas.height);
//ctx.fillStyle = 'rgba(0,0,0,0.02)';
//ctx.fillRect(0, 0, canvas.width, canvas.height);
handleParticles();
hue += 2;
requestAnimationFrame(animate);
}
animate();
}, []);

return <canvas id="canvas-1"></canvas>;
}

export default Canvas;
100 changes: 100 additions & 0 deletions src/components/Contributors/Peter/components/Footer.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
import React from "react";
import {
FaYoutube,
FaFacebook,
FaGithub,
FaLinkedin,
FaEnvelope,
} from "react-icons/fa6";

import { IconContext } from "react-icons";

function Footer() {
return (
<footer className="footer">
<a href="#hero">
<div className="return-home">
<svg
version="1.1"
xmlns="http://www.w3.org/2000/svg"
width="100%"
viewBox="0 0 24 24"
>
<title></title>
<path
fill="white"
d="M17.707 10.293l-5-5c-0.391-0.391-1.024-0.391-1.414 0l-5 5c-0.391 0.391-0.391 1.024 0 1.414s1.024 0.391 1.414 0l4.293-4.293 4.293 4.293c0.391 0.391 1.024 0.391 1.414 0s0.391-1.024 0-1.414zM17.707 17.293l-5-5c-0.391-0.391-1.024-0.391-1.414 0l-5 5c-0.391 0.391-0.391 1.024 0 1.414s1.024 0.391 1.414 0l4.293-4.293 4.293 4.293c0.391 0.391 1.024 0.391 1.414 0s0.391-1.024 0-1.414z"
></path>
</svg>
</div>
</a>
<div className="socials">
<a
href="https://github.com/peterlianpi"
target="_blank"
rel="noreferrer"
>
<IconContext.Provider
value={{ color: "white", className: "socials__icons" }}
>
<div>
<FaGithub />
</div>
</IconContext.Provider>{" "}
</a>
<a
href="mailto:[email protected]"
target="_blank"
rel="noreferrer"
>
<IconContext.Provider
value={{ color: "white", className: "socials__icons" }}
>
<div>
<FaEnvelope />
</div>
</IconContext.Provider>
</a>

<a
className="text-blue-600 hover:underline my-1"
href="https://www.facebook.com/p.lianpi"
>
<IconContext.Provider
value={{ color: "white", className: "socials__icons" }}
>
<div>
<FaFacebook />
</div>
</IconContext.Provider>
</a>
<a
className="text-blue-600 hover:underline my-1"
href="https://www.linkedin.com/in/peter-pau-sian-lian-214092282/"
>
<IconContext.Provider
value={{ color: "white", className: "socials__icons" }}
>
<div>
<FaLinkedin />
</div>
</IconContext.Provider>{" "}
</a>
<a
className="text-blue-600 hover:underline my-1"
href="https://www.youtube.com/@peterpausianlian"
>
<IconContext.Provider
value={{ color: "white", className: "socials__icons" }}
>
<div>
<FaYoutube />
</div>
</IconContext.Provider>
</a>
</div>
<p className="copyright">Peter ©2023</p>
</footer>
);
}
export default Footer;
36 changes: 36 additions & 0 deletions src/components/Contributors/Peter/components/Home.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
"use-client";
import React from "react";
import Canvas from "./Canvas";

function Home() {
return (
<div className="hero" id="hero">
<Canvas />
<div className="heading">
<div className="heading__line-1">
Hello, I&apos;m <span>Peter</span>
</div>
<div className="heading__line-2">
I&apos;m evolving into a full stack web developer.
</div>
<a href="#about" className="heading__link">
<div className="heading-cta">
View my work
<svg
className="heading__arrow"
version="1.1"
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
>
<title>arrow-right</title>
<path d="M11.293 5.707l5.293 5.293h-11.586c-0.552 0-1 0.448-1 1s0.448 1 1 1h11.586l-5.293 5.293c-0.391 0.391-0.391 1.024 0 1.414s1.024 0.391 1.414 0l7-7c0.092-0.092 0.166-0.202 0.217-0.324 0.101-0.245 0.101-0.521 0-0.766-0.049-0.118-0.121-0.228-0.217-0.324l-7-7c-0.391-0.391-1.024-0.391-1.414 0s-0.391 1.024 0 1.414z"></path>
</svg>
</div>
</a>
</div>
</div>
);
}
export default Home;
12 changes: 12 additions & 0 deletions src/components/Contributors/Peter/components/Loading.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
const Loading = () => {
return (
<div className="absolute top-0 left-0 flex flex-col justify-center gap-0 items-center w-full h-screen loader-bg lg-rounded">
<div className="flex flex-col relative justify-center items-center w-full ">
<p className="loaderText absolute ">P</p>
<span className="loader"></span>
</div>
</div>
);
};

export default Loading;
Loading

0 comments on commit 9d8b06c

Please sign in to comment.