├── public
├── robots.txt
├── favicon.ico
├── logo192.png
├── logo512.png
├── manifest.json
└── index.html
├── src
├── assets
│ ├── bbb.png
│ ├── bird.png
│ ├── git.png
│ ├── wpp.png
│ ├── darkGit.png
│ ├── darkWpp.png
│ ├── flappy-2023-01-22_17.24.18.mp4
│ ├── darkHouse.svg
│ ├── house.svg
│ ├── mail.svg
│ ├── darkMail.svg
│ ├── check.svg
│ ├── darkCheck.svg
│ ├── sun.svg
│ ├── moon.svg
│ ├── phone.svg
│ └── darkPhone.svg
├── components
│ ├── MainContainer
│ │ └── MainContainer.js
│ ├── CardsContactContainer
│ │ └── CardsContactContainer.js
│ ├── AboutExperienceContainer
│ │ └── AboutExperienceContainer.js
│ ├── Card
│ │ └── Card.js
│ ├── Cards
│ │ └── Cards.js
│ ├── About
│ │ └── About.js
│ ├── Header
│ │ └── Header.js
│ ├── WhoIM
│ │ └── WhoIM.js
│ ├── Contact
│ │ └── Contact.js
│ └── MyExperience
│ │ └── MyExperience.js
├── index.js
├── index.css
└── App.js
├── tailwind.config.js
├── .gitignore
├── LICENSE
├── package.json
└── README.md
/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/andradeigor/punpuns-portfolio/HEAD/public/favicon.ico
--------------------------------------------------------------------------------
/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/andradeigor/punpuns-portfolio/HEAD/public/logo192.png
--------------------------------------------------------------------------------
/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/andradeigor/punpuns-portfolio/HEAD/public/logo512.png
--------------------------------------------------------------------------------
/src/assets/bbb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/andradeigor/punpuns-portfolio/HEAD/src/assets/bbb.png
--------------------------------------------------------------------------------
/src/assets/bird.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/andradeigor/punpuns-portfolio/HEAD/src/assets/bird.png
--------------------------------------------------------------------------------
/src/assets/git.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/andradeigor/punpuns-portfolio/HEAD/src/assets/git.png
--------------------------------------------------------------------------------
/src/assets/wpp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/andradeigor/punpuns-portfolio/HEAD/src/assets/wpp.png
--------------------------------------------------------------------------------
/src/assets/darkGit.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/andradeigor/punpuns-portfolio/HEAD/src/assets/darkGit.png
--------------------------------------------------------------------------------
/src/assets/darkWpp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/andradeigor/punpuns-portfolio/HEAD/src/assets/darkWpp.png
--------------------------------------------------------------------------------
/src/assets/flappy-2023-01-22_17.24.18.mp4:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/andradeigor/punpuns-portfolio/HEAD/src/assets/flappy-2023-01-22_17.24.18.mp4
--------------------------------------------------------------------------------
/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "React App",
3 | "name": "Create React App Sample",
4 | "start_url": ".",
5 | "display": "standalone",
6 | "theme_color": "#000000",
7 | "background_color": "#ffffff"
8 | }
9 |
--------------------------------------------------------------------------------
/src/components/MainContainer/MainContainer.js:
--------------------------------------------------------------------------------
1 | const MainContainer = ({ children }) => {
2 | return (
3 |
4 | {children}
5 |
6 | );
7 | };
8 |
9 | export default MainContainer;
10 |
--------------------------------------------------------------------------------
/src/index.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import ReactDOM from "react-dom/client";
3 | import "./index.css";
4 | import App from "./App";
5 |
6 | const root = ReactDOM.createRoot(document.getElementById("root"));
7 | root.render(
8 |
9 |
10 |
11 | );
12 |
--------------------------------------------------------------------------------
/tailwind.config.js:
--------------------------------------------------------------------------------
1 | /** @type {import('tailwindcss').Config} */
2 | module.exports = {
3 | content: ["./src/**/*.{js,jsx,ts,tsx}"],
4 | darkMode: "class",
5 | theme: {
6 | extend: {},
7 | fontFamily: {
8 | Inter: ["Inter"],
9 | },
10 | },
11 | plugins: [require("tailwind-scrollbar")({ nocompatible: true })],
12 | };
13 |
--------------------------------------------------------------------------------
/src/index.css:
--------------------------------------------------------------------------------
1 | @tailwind base;
2 | @tailwind components;
3 | @tailwind utilities;
4 |
5 | * {
6 | margin: 0;
7 | padding: 0;
8 | outline: 0;
9 | box-sizing: border-box;
10 | -webkit-font-smoothing: antialiased;
11 | -moz-osx-font-smoothing: grayscale;
12 | }
13 |
14 | body {
15 | overflow-x: hidden;
16 | }
17 | html {
18 | scroll-behavior: smooth;
19 | }
20 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # production
12 | /build
13 |
14 | # misc
15 | .DS_Store
16 | .env.local
17 | .env.development.local
18 | .env.test.local
19 | .env.production.local
20 |
21 | npm-debug.log*
22 | yarn-debug.log*
23 | yarn-error.log*
24 |
--------------------------------------------------------------------------------
/src/components/CardsContactContainer/CardsContactContainer.js:
--------------------------------------------------------------------------------
1 | import Cards from "../Cards/Cards";
2 | import Contact from "../Contact/Contact";
3 |
4 | const AboutExperienceContainer = ({ theme }) => {
5 | return (
6 |
10 | );
11 | };
12 |
13 | export default AboutExperienceContainer;
14 |
--------------------------------------------------------------------------------
/src/assets/darkHouse.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/src/assets/house.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/src/components/AboutExperienceContainer/AboutExperienceContainer.js:
--------------------------------------------------------------------------------
1 | import Myexperience from "../MyExperience/MyExperience";
2 | import About from "../About/About";
3 | const AboutExperienceContainer = ({ theme }) => {
4 | return (
5 |
9 | );
10 | };
11 |
12 | export default AboutExperienceContainer;
13 |
--------------------------------------------------------------------------------
/src/assets/mail.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/src/assets/darkMail.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/src/assets/check.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/src/assets/darkCheck.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2023 Igor Andrade
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "punpuns-portfolio",
3 | "version": "0.1.0",
4 | "private": true,
5 | "homepage": ".",
6 | "dependencies": {
7 | "@testing-library/jest-dom": "^5.16.5",
8 | "@testing-library/react": "^13.4.0",
9 | "@testing-library/user-event": "^13.5.0",
10 | "framer-motion": "^8.5.0",
11 | "react": "^18.2.0",
12 | "react-dom": "^18.2.0",
13 | "react-scripts": "^5.0.1",
14 | "web-vitals": "^2.1.4"
15 | },
16 | "scripts": {
17 | "start": "react-scripts start",
18 | "build": "react-scripts build",
19 | "test": "react-scripts test",
20 | "eject": "react-scripts eject"
21 | },
22 | "eslintConfig": {
23 | "extends": [
24 | "react-app",
25 | "react-app/jest"
26 | ]
27 | },
28 | "browserslist": {
29 | "production": [
30 | ">0.2%",
31 | "not dead",
32 | "not op_mini all"
33 | ],
34 | "development": [
35 | "last 1 chrome version",
36 | "last 1 firefox version",
37 | "last 1 safari version"
38 | ]
39 | },
40 | "devDependencies": {
41 | "prettier": "^2.8.3",
42 | "prettier-plugin-tailwindcss": "^0.2.1",
43 | "tailwind-scrollbar": "^2.1.0",
44 | "tailwindcss": "^3.2.4"
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/src/App.js:
--------------------------------------------------------------------------------
1 | import Header from "./components/Header/Header";
2 | import WhoIM from "./components/WhoIM/WhoIM";
3 | import AboutExperienceContainer from "./components/AboutExperienceContainer/AboutExperienceContainer";
4 | import CardsContactContainer from "./components/CardsContactContainer/CardsContactContainer";
5 | import { useEffect, useState } from "react";
6 | function App() {
7 | const [theme, setTheme] = useState(false);
8 | useEffect(() => {
9 | theme
10 | ? document.documentElement.classList.add("dark")
11 | : document.documentElement.classList.remove("dark");
12 | }, [theme]);
13 | return (
14 |
19 |
20 | setTheme(!theme)} theme={theme} />
21 |
22 |
27 |
28 | );
29 | }
30 |
31 | export default App;
32 |
--------------------------------------------------------------------------------
/src/assets/sun.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/src/components/Card/Card.js:
--------------------------------------------------------------------------------
1 | import BBBPath from "../../assets/bbb.png";
2 | import GitPath from "../../assets/git.png";
3 | import BirdPath from "../../assets/bird.png";
4 | import darkGitPath from "../../assets/darkGit.png";
5 |
6 | const Card = ({ data, theme }) => {
7 | const imagePath = [BBBPath, BirdPath, GitPath];
8 | return (
9 |
10 |
11 |
23 |
24 |
25 |
26 | {data.Name}
27 |
28 |
29 | {data.Text}
30 |
31 |
32 |
33 | );
34 | };
35 |
36 | export default Card;
37 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # PunPun's Portfolio
2 |
3 | Este projeto consiste num modelo de Portfolio implementado com base no personagem PunPun . O site foi feito apenas para estudos e é baseado em modelos disponíveis na internet.
4 |
5 | - [Como usar](#como-usar)
6 | - [Tecnologias](#tecnologias)
7 | - [Demonstração](#demonstracao)
8 | - [Contribuidores](#contribuidores)
9 | - [Licença](#licença)
10 |
11 | ## 🤖 Como Usar:
12 |
13 | Rodando o Site.
14 |
15 | ```bash
16 | Clone esse repositório
17 | $ git clone https://github.com/andradeigor/punpuns-portfolio
18 |
19 | # Acesse a pasta dos scripts
20 | $ cd punpuns-portfolio
21 |
22 | # Instale dependências
23 | $ yarn
24 |
25 | #inicie o servidor local com o react
26 | $ yarn start
27 |
28 |
29 | ```
30 |
31 | ## 📜 Demonstração:
32 |
33 |
34 | https://user-images.githubusercontent.com/21049910/213947046-7d407859-a3b5-430b-8d11-efee31e8d4c7.mp4
35 |
36 |
37 |
38 |
39 | ## 💻 Tecnologias:
40 |
41 | - React
42 | - Tailwind
43 | - Framer Motion
44 |
45 | ## 👥 Contribuidores:
46 |
47 | Esses são os contribuidores do projeto (emoji key ).
48 |
49 |
54 |
55 | ## 📖 Licença
56 |
57 | Este projeto está licenciado sob a licença MIT .
58 |
--------------------------------------------------------------------------------
/src/components/Cards/Cards.js:
--------------------------------------------------------------------------------
1 | import Card from "../Card/Card";
2 |
3 | const Cards = ({ theme }) => {
4 | const CardsData = [
5 | {
6 | Name: "BBB TRACKER",
7 | Text: "A Crawler that gets the numbers of follows from Instagram accounts",
8 | },
9 | {
10 | Name: "COSINE MATCHER",
11 | Text: "A program that uses cosine similarity to detects pipes and beat Flappy Bird",
12 | },
13 | {
14 | Name: "GITHUB viewer",
15 | Text: "A page where you can search for a github profile and visualize it in a nicer way",
16 | },
17 | ];
18 | return (
19 |
23 |
24 |
25 |
26 | MY PORTFOLIO
27 |
28 |
32 |
33 |
34 | {CardsData.map((item, index) => (
35 |
36 | ))}
37 |
38 |
39 |
40 | );
41 | };
42 |
43 | export default Cards;
44 |
--------------------------------------------------------------------------------
/src/assets/moon.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
12 |
13 |
14 |
15 |
19 |
23 |
32 | PunPun's
33 |
34 |
35 | You need to enable JavaScript to run this app.
36 |
37 |
47 |
48 |
49 |
--------------------------------------------------------------------------------
/src/assets/phone.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/src/assets/darkPhone.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/src/components/About/About.js:
--------------------------------------------------------------------------------
1 | const About = ({ theme }) => {
2 | return (
3 |
7 |
8 |
9 |
10 | ABOUT ME
11 |
12 |
16 |
17 |
18 |
19 |
20 | Hi, again
21 |
22 |
23 | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus
24 | in auctor elit. Aenean sed arcu commodo, venenatis justo a,
25 | rhoncus nibh. Donec sed ex luctus, hendrerit massa id, interdum
26 | quam. Nunc vehicula mi quis massa volutpat fermentum.
27 |
28 |
29 | DOWNLOAD MY CV
30 |
31 |
32 |
33 |
34 |
35 | Sadness
36 |
37 |
41 |
42 |
43 |
44 | Hopeless
45 |
46 |
50 |
51 |
52 |
53 | Depression
54 |
55 |
59 |
60 | {theme && (
61 |
62 |
63 | Guiltiness
64 |
65 |
69 |
70 | )}
71 |
72 |
73 |
74 |
75 | );
76 | };
77 |
78 | export default About;
79 |
--------------------------------------------------------------------------------
/src/components/Header/Header.js:
--------------------------------------------------------------------------------
1 | import { useState, useEffect } from "react";
2 | import MoonPath from "../../assets/moon.svg";
3 | import SunPath from "../../assets/sun.svg";
4 | import { useScroll, motion } from "framer-motion";
5 | const Header = ({ setTheme, theme }) => {
6 | const { scrollYProgress } = useScroll();
7 | const [show, setShow] = useState(true);
8 | const [lastScrollY, setLastScrollY] = useState(0);
9 |
10 | /*essa parte do controlnavbar e do useeffect eu sinceramente peguei do google*/
11 | const controlNavbar = () => {
12 | if (typeof window !== "undefined") {
13 | if (window.scrollY > lastScrollY) {
14 | setShow(false);
15 | } else {
16 | setShow(true);
17 | }
18 |
19 | setLastScrollY(window.scrollY);
20 | }
21 | };
22 |
23 | useEffect(() => {
24 | if (typeof window !== "undefined") {
25 | window.addEventListener("scroll", controlNavbar);
26 | return () => {
27 | window.removeEventListener("scroll", controlNavbar);
28 | };
29 | }
30 | }, [lastScrollY]);
31 | return (
32 |
37 |
38 |
43 |
44 |
45 | {show && (
46 |
60 | )}
61 |
62 |
63 |
64 | setTheme()}
69 | />
70 |
71 |
76 |
83 |
84 |
85 |
86 |
87 |
88 |
92 |
93 | );
94 | };
95 |
96 | export default Header;
97 |
--------------------------------------------------------------------------------
/src/components/WhoIM/WhoIM.js:
--------------------------------------------------------------------------------
1 | import wppPath from "../../assets/wpp.png";
2 | import wppDarkPath from "../../assets/darkWpp.png";
3 | import { motion, AnimatePresence } from "framer-motion";
4 |
5 | const WhoIM = ({ theme }) => {
6 | const helloQuote = "HELLO, MY NAME IS:";
7 | const nameQuote = "Punpun Onodera";
8 | const aboutQuote = `Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus
9 | in auctor elit. Aenean sed arcu commodo, venenatis justo a,
10 | rhoncus nibh. Donec sed ex luctus, hendrerit massa id, interdum
11 | quam. Nunc vehicula mi quis massa volutpat fermentum. Nam purus
12 | neque, vulputate at varius in, tempor sed dui. Aenean at turpis
13 | nisl. `;
14 | const setence = {
15 | hidden: { opacity: 1 },
16 | visible: {
17 | opacity: 1,
18 | transition: {
19 | delay: 0.5,
20 | staggerChildren: 0.08,
21 | },
22 | },
23 | };
24 | const letter = {
25 | hidden: { opacity: 0, x: -50 },
26 | visible: {
27 | opacity: 1,
28 | x: 0,
29 | },
30 | };
31 |
32 | return (
33 |
34 |
35 |
45 |
46 |
47 |
48 |
55 | {helloQuote.split("").map((caracter, index) => {
56 | return (
57 |
58 | {caracter}
59 |
60 | );
61 | })}
62 |
63 |
70 | {nameQuote.split("").map((caracter, index) => {
71 | return (
72 |
73 | {caracter}
74 |
75 | );
76 | })}
77 |
78 |
85 | {aboutQuote.split("\n").map((word, index) => {
86 | return (
87 |
88 | {word}
89 |
90 | );
91 | })}
92 | {theme && (
93 |
98 | It's my fault
99 |
100 | )}
101 |
102 |
103 |
104 |
105 | MY WORK
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 | );
114 | };
115 |
116 | export default WhoIM;
117 |
--------------------------------------------------------------------------------
/src/components/Contact/Contact.js:
--------------------------------------------------------------------------------
1 | import PhonePath from "../../assets/phone.svg";
2 | import MailPath from "../../assets/mail.svg";
3 | import HousePath from "../../assets/house.svg";
4 | import darkPhonePath from "../../assets/darkPhone.svg";
5 | import darkMailPath from "../../assets/darkMail.svg";
6 | import darkHousePath from "../../assets/darkHouse.svg";
7 |
8 | const Contact = ({ theme }) => {
9 | return (
10 |
130 | );
131 | };
132 |
133 | export default Contact;
134 |
--------------------------------------------------------------------------------
/src/components/MyExperience/MyExperience.js:
--------------------------------------------------------------------------------
1 | import CheckMarkPath from "../../assets/check.svg";
2 | import DarkCheckMarkPath from "../../assets/darkCheck.svg";
3 | import { motion } from "framer-motion";
4 |
5 | const Myexperience = ({ theme }) => {
6 | return (
7 |
11 |
12 |
13 |
14 | MY EXPERIENCE
15 |
16 |
20 |
21 |
22 |
23 |
24 |
25 |
26 | Nerima
27 |
28 |
29 | 2007-2010
30 |
31 |
32 |
33 |
34 |
35 |
40 |
41 |
42 |
43 |
44 | Elementary School
45 |
46 |
47 | My dream back them was to become a Space Scientist.{" "}
48 | {theme && (
49 |
55 | And I failed
56 |
57 | )}
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 | Nerima
66 |
67 |
68 | 2010-2013
69 |
70 |
71 |
72 |
73 |
74 |
79 |
80 |
81 |
82 |
83 | High School
84 |
85 |
86 | Aiko{" "}
87 |
93 | hates
94 | {" "}
95 | me
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 | Fukushima
106 |
107 |
108 | 2013-2014
109 |
110 |
111 |
112 |
113 |
114 |
119 |
120 |
121 |
122 |
123 | Early 20s
124 |
125 |
126 | Maybe Aiko don't hates me
127 | {theme && (
128 |
134 | {" "}
135 | (yes, she does)
136 |
137 | )}{" "}
138 | anymore and everything is gonna be perfect
139 | {theme && (
140 |
146 | {" "}
147 | (I screwed up everything)
148 |
149 | )}{" "}
150 |
151 |
152 |
153 |
154 |
155 |
156 |
157 | Kagoshima
158 |
159 |
160 | 2014-2015
161 |
162 |
163 |
164 |
165 |
166 |
171 |
172 |
173 |
174 |
175 | Early 20s
176 |
177 |
178 | Oh god.
179 |
180 |
181 |
182 |
183 |
184 |
185 |
186 |
187 | );
188 | };
189 |
190 | export default Myexperience;
191 |
--------------------------------------------------------------------------------