├── README.md
├── linktree
├── .gitignore
├── eslint.config.js
├── index.css
├── index.html
├── package-lock.json
├── package.json
├── public
│ └── favicon.svg
├── src
│ ├── App.css
│ ├── App.tsx
│ ├── assets
│ │ ├── cv
│ │ │ └── cv-jessie-bentes-en-us.pdf
│ │ └── imgs
│ │ │ └── jessie.png
│ ├── components
│ │ ├── CoolBackground
│ │ │ └── index.tsx
│ │ ├── MainComp
│ │ │ ├── index.tsx
│ │ │ └── style.ts
│ │ ├── MainImg
│ │ │ ├── index.tsx
│ │ │ └── style.ts
│ │ ├── MainLinkButtons
│ │ │ ├── index.tsx
│ │ │ └── style.ts
│ │ ├── MainPresentation
│ │ │ ├── index.tsx
│ │ │ └── style.ts
│ │ └── PresentationButton
│ │ │ ├── index.tsx
│ │ │ └── style.ts
│ ├── main.tsx
│ ├── styles
│ │ ├── Global.ts
│ │ ├── _fonts
│ │ │ └── Fira_Code
│ │ │ │ ├── FiraCode-VariableFont_wght.ttf
│ │ │ │ ├── OFL.txt
│ │ │ │ └── static
│ │ │ │ ├── FiraCode-Bold.ttf
│ │ │ │ ├── FiraCode-Light.ttf
│ │ │ │ ├── FiraCode-Medium.ttf
│ │ │ │ ├── FiraCode-Regular.ttf
│ │ │ │ └── FiraCode-SemiBold.ttf
│ │ └── theme.ts
│ └── vite-env.d.ts
├── tsconfig.app.json
├── tsconfig.json
├── tsconfig.node.json
└── vite.config.ts
└── portfolio
├── .eslintrc.cjs
├── .gitignore
├── .hintrc
├── _comps.todo
├── _portfolio.todo
├── _steps.todo
├── index.css
├── index.html
├── package-lock.json
├── package.json
├── src
├── App.tsx
├── assets
│ ├── Calendar.svg
│ ├── Card.svg
│ ├── Discord.svg
│ ├── Dots.svg
│ ├── Dribble.svg
│ ├── Dropdown.svg
│ ├── Email.svg
│ ├── Figma.svg
│ ├── Figures.svg
│ ├── Github.svg
│ ├── Landmark.svg
│ ├── Line.svg
│ ├── Linkedin.svg
│ ├── Medium.png
│ ├── Medium.svg
│ ├── PinkLine.svg
│ ├── Play.svg
│ ├── Quotes.svg
│ ├── SquareLarge.svg
│ ├── SquareSmall.svg
│ ├── Telegram.svg
│ ├── Twitter.svg
│ ├── cv
│ │ ├── cv-jessie-bentes-en-us.pdf
│ │ └── cv-jessie-bentes-pt-br.pdf
│ ├── data-images
│ │ ├── bigger-projects
│ │ │ ├── arnia-task-manager.png
│ │ │ ├── frutamix-backend.png
│ │ │ ├── frutamix-front.png
│ │ │ ├── meta-vagas-back.png
│ │ │ ├── meta-vagas-front.png
│ │ │ ├── shopping-cart.png
│ │ │ ├── shopping-store.png
│ │ │ ├── wexer-back.png
│ │ │ └── wexer-front.png
│ │ ├── blog-posts
│ │ │ ├── dev-teacher.png
│ │ │ ├── fullstack-ux.png
│ │ │ ├── soft-skills.png
│ │ │ ├── solid.png
│ │ │ └── time-travel.png
│ │ ├── certificates
│ │ │ ├── arnia-fullstack.png
│ │ │ ├── design-ux.png
│ │ │ ├── empathy.png
│ │ │ ├── java-spring-boot-certificate.png
│ │ │ ├── typescript.png
│ │ │ └── wireframes.png
│ │ ├── design-ux
│ │ │ ├── competitive-audit-report.png
│ │ │ ├── competitive-audit.png
│ │ │ ├── lofi-prototype.png
│ │ │ ├── persona.png
│ │ │ ├── storyboard-closeup.png
│ │ │ └── storyboard.png
│ │ └── java-projects
│ │ │ ├── hotelium.png
│ │ │ ├── java-spring-boot.png
│ │ │ └── my-food.png
│ ├── favicon.svg
│ ├── jessie-name-label.png
│ ├── jessie1.png
│ ├── jessie2.png
│ └── logo.png
├── components
│ ├── en-us
│ │ ├── data
│ │ │ ├── _aboutData.ts
│ │ │ ├── _contactData.ts
│ │ │ ├── _homeData.ts
│ │ │ ├── _projectsData.ts
│ │ │ ├── biggerProjects.ts
│ │ │ ├── blogPosts.ts
│ │ │ ├── certificates.ts
│ │ │ ├── designUX.ts
│ │ │ ├── javaProjects.ts
│ │ │ ├── skills.ts
│ │ │ └── smallerProjects.ts
│ │ └── pages
│ │ │ ├── AboutMe
│ │ │ └── index.tsx
│ │ │ ├── Contacts
│ │ │ └── index.tsx
│ │ │ ├── Home
│ │ │ ├── AboutSection
│ │ │ │ └── index.tsx
│ │ │ ├── BlogPostsSection
│ │ │ │ └── index.tsx
│ │ │ ├── CertificatesSection
│ │ │ │ └── index.tsx
│ │ │ ├── ContactSection
│ │ │ │ └── index.tsx
│ │ │ ├── HeaderSection
│ │ │ │ └── index.tsx
│ │ │ ├── IntroSection
│ │ │ │ └── index.tsx
│ │ │ ├── MainSection
│ │ │ │ └── index.tsx
│ │ │ ├── ProjectsSection
│ │ │ │ └── index.tsx
│ │ │ ├── SkillsSection
│ │ │ │ └── index.tsx
│ │ │ └── index.tsx
│ │ │ └── Projects
│ │ │ └── index.tsx
│ ├── pt-br
│ │ ├── data
│ │ │ ├── _aboutData.ts
│ │ │ ├── _contactData.ts
│ │ │ ├── _homeData.ts
│ │ │ ├── _projectsData.ts
│ │ │ ├── biggerProjects.ts
│ │ │ ├── blogPosts.ts
│ │ │ ├── certificates.ts
│ │ │ ├── designUX.ts
│ │ │ ├── javaProjects.ts
│ │ │ ├── skills.ts
│ │ │ └── smallerProjects.ts
│ │ └── pages
│ │ │ ├── AboutMe
│ │ │ └── index.tsx
│ │ │ ├── Contacts
│ │ │ └── index.tsx
│ │ │ ├── Home
│ │ │ ├── AboutSection
│ │ │ │ └── index.tsx
│ │ │ ├── BlogPostsSection
│ │ │ │ └── index.tsx
│ │ │ ├── CertificatesSection
│ │ │ │ └── index.tsx
│ │ │ ├── ContactSection
│ │ │ │ └── index.tsx
│ │ │ ├── HeaderSection
│ │ │ │ └── index.tsx
│ │ │ ├── IntroSection
│ │ │ │ └── index.tsx
│ │ │ ├── MainSection
│ │ │ │ └── index.tsx
│ │ │ ├── ProjectsSection
│ │ │ │ └── index.tsx
│ │ │ ├── SkillsSection
│ │ │ │ └── index.tsx
│ │ │ └── index.tsx
│ │ │ └── Projects
│ │ │ └── index.tsx
│ └── reusable
│ │ ├── AllMediaComp.tsx
│ │ ├── BigProjectCard.tsx
│ │ ├── Decorations.tsx
│ │ ├── DotsDecor.tsx
│ │ ├── Footer.tsx
│ │ ├── GeneralCard.tsx
│ │ ├── HeaderHomePage.tsx
│ │ ├── HeaderTitle.tsx
│ │ ├── LanguagesDropdown.tsx
│ │ ├── Logo.tsx
│ │ ├── MainButton.tsx
│ │ ├── MainImg.tsx
│ │ ├── MessageMeCard.tsx
│ │ ├── NavBar.tsx
│ │ ├── PageContentAlign.tsx
│ │ ├── PageContentAlignSecondary.tsx
│ │ ├── Quote.tsx
│ │ ├── SecondaryPageSection.tsx
│ │ ├── SecondaryPageTitle.tsx
│ │ ├── SectionHeader.tsx
│ │ ├── SkillCard.tsx
│ │ ├── SmallProjectCard.tsx
│ │ ├── SquareDecor.tsx
│ │ ├── TinySideBar.tsx
│ │ └── scrollToTop.tsx
├── contexts
│ └── LanguageProvider.tsx
├── main.tsx
├── styles
│ ├── Global.ts
│ ├── ReusableStyles.ts
│ ├── _fonts
│ │ └── Fira_Code
│ │ │ ├── FiraCode-VariableFont_wght.ttf
│ │ │ ├── OFL.txt
│ │ │ └── static
│ │ │ ├── FiraCode-Bold.ttf
│ │ │ ├── FiraCode-Light.ttf
│ │ │ ├── FiraCode-Medium.ttf
│ │ │ ├── FiraCode-Regular.ttf
│ │ │ └── FiraCode-SemiBold.ttf
│ └── theme.ts
└── vite-env.d.ts
├── tsconfig.json
├── tsconfig.node.json
├── vercel.json
└── vite.config.ts
/README.md:
--------------------------------------------------------------------------------
1 | # My Portfolio & Linktree 🎨🚀🌟
2 |
3 | ## 🔎 **Description**
4 |
5 | This repository contains two projects: my personal portfolio and a Linktree clone. The portfolio showcases my work as a fullstack developer, highlighting my previous jobs (within company privacy limits) and reflecting on my career journey. The Linktree clone provides a consolidated link management solution.
6 |
7 | ## 🔨 **Technologies Used**
8 |
9 | ### Portfolio
10 |
11 | - **React.js/TypeScript**: Frontend library and language
12 | - **Vite**: Build tool for faster development
13 | - **React Router DOM**: For routing and navigation
14 | - **Styled Components**: For styling the application
15 | - **Vercel**: For deployment
16 |
17 | ### Linktree
18 |
19 | - **React.js/TypeScript**: Frontend library and language
20 | - **Vite**: Build tool for faster development
21 | - **Styled Components**: For styling the application
22 | - **Vercel**: For deployment
23 |
24 | ## 📖 **Live Demos**
25 |
26 | - **[Portfolio](https://jessie-bentes.vercel.app/)**: Explore my work and projects.
27 | - **[Linktree](https://jessie-bentes-linktree.vercel.app/)**: Access all my important links in one place.
28 |
29 | _Note: The portfolio and résumés are available in both English and Portuguese._
30 |
31 | ## 📋 **Task Planning**
32 |
33 | For task planning and tracking, I used the _ToDo+_ extension in VSCode. This tool helps keep track of pending tasks and project progress.
34 |
35 | [Link to the task file](./portfolio/_steps.todo)
36 |
37 | ## 📂 **Repository Structure**
38 |
39 | This repository contains the following directories:
40 |
41 | - `/portfolio`: Contains the code and assets for my personal portfolio.
42 | - `/linktree`: Contains the code and assets for the Linktree clone.
43 |
44 | ## 🙋♀️ **Author**
45 |
46 | [Jessie M. Bentes](https://github.com/LadyJessie19)
47 |
48 | ## 📝 **Contributions**
49 |
50 | If you would like to contribute to either project, please fork the repository and submit a pull request.
51 |
52 | ## 🗝️ **License**
53 |
54 | This project is licensed under the [MIT License](https://opensource.org/licenses/MIT).
55 |
--------------------------------------------------------------------------------
/linktree/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | pnpm-debug.log*
8 | lerna-debug.log*
9 |
10 | node_modules
11 | dist
12 | dist-ssr
13 | *.local
14 |
15 | # Editor directories and files
16 | .vscode/*
17 | !.vscode/extensions.json
18 | .idea
19 | .DS_Store
20 | *.suo
21 | *.ntvs*
22 | *.njsproj
23 | *.sln
24 | *.sw?
25 |
--------------------------------------------------------------------------------
/linktree/eslint.config.js:
--------------------------------------------------------------------------------
1 | import js from '@eslint/js'
2 | import globals from 'globals'
3 | import reactHooks from 'eslint-plugin-react-hooks'
4 | import reactRefresh from 'eslint-plugin-react-refresh'
5 | import tseslint from 'typescript-eslint'
6 |
7 | export default tseslint.config(
8 | { ignores: ['dist'] },
9 | {
10 | extends: [js.configs.recommended, ...tseslint.configs.recommended],
11 | files: ['**/*.{ts,tsx}'],
12 | languageOptions: {
13 | ecmaVersion: 2020,
14 | globals: globals.browser,
15 | },
16 | plugins: {
17 | 'react-hooks': reactHooks,
18 | 'react-refresh': reactRefresh,
19 | },
20 | rules: {
21 | ...reactHooks.configs.recommended.rules,
22 | 'react-refresh/only-export-components': [
23 | 'warn',
24 | { allowConstantExport: true },
25 | ],
26 | },
27 | },
28 | )
29 |
--------------------------------------------------------------------------------
/linktree/index.css:
--------------------------------------------------------------------------------
1 | @font-face {
2 | font-family: 'Fira Code';
3 | src: url('./src/styles/_fonts/Fira_Code/FiraCode-VariableFont_wght.ttf') format('truetype');
4 | }
--------------------------------------------------------------------------------
/linktree/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 | Linktree | Jessie Bentes
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/linktree/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "linktree",
3 | "private": true,
4 | "version": "0.0.0",
5 | "type": "module",
6 | "scripts": {
7 | "dev": "vite",
8 | "build": "tsc -b && vite build",
9 | "lint": "eslint .",
10 | "preview": "vite preview"
11 | },
12 | "dependencies": {
13 | "linktree": "file:",
14 | "react": "^18.3.1",
15 | "react-animations": "^1.0.0",
16 | "react-dom": "^18.3.1",
17 | "styled-components": "^6.1.13"
18 | },
19 | "devDependencies": {
20 | "@eslint/js": "^9.9.0",
21 | "@types/react": "^18.3.3",
22 | "@types/react-animations": "^1.0.3",
23 | "@types/react-dom": "^18.3.0",
24 | "@vitejs/plugin-react": "^4.3.1",
25 | "eslint": "^9.9.0",
26 | "eslint-plugin-react-hooks": "^5.1.0-rc.0",
27 | "eslint-plugin-react-refresh": "^0.4.9",
28 | "globals": "^15.9.0",
29 | "typescript": "^5.5.3",
30 | "typescript-eslint": "^8.0.1",
31 | "vite": "^5.4.1"
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/linktree/public/favicon.svg:
--------------------------------------------------------------------------------
1 |
2 |
4 |
7 |
8 |
10 |
12 |
14 |
16 |
20 |
26 |
32 |
33 |
35 |
37 |
39 |
40 |
41 |
--------------------------------------------------------------------------------
/linktree/src/App.css:
--------------------------------------------------------------------------------
1 | @font-face {
2 | font-family: 'Fira Code';
3 | src: url('./src/styles/_fonts/Fira_Code/FiraCode-VariableFont_wght.ttf') format('truetype');
4 | }
5 |
6 | :root {
7 | --Background-grey: #1E1E1E;
8 | --Cherry-pink: #FF88D1;
9 | --Candy-green: #98C379;
10 | --Hover-pink: #FF88D133;
11 | --Light-grey: #ABB2BF;
12 | --Original-pink: #C778DD;
13 | --Soft-blue: #62AEEF;
14 | --White-screen: #faf9f9;
15 | --Usual-black: #000;
16 |
17 | --Main-font: 'Fira Code';
18 | }
19 |
20 | body {
21 | background-color: #000;
22 | font-family: var(--Main-font);
23 | overflow-x: hidden;
24 | }
25 |
26 | .background-body {
27 | display: flex;
28 | justify-content: center;
29 | align-items: center;
30 | background: var(--Usual-black);
31 | width: 100vw;
32 | }
33 |
34 | section {
35 | position: absolute;
36 | width: 100vw;
37 | display: flex;
38 | justify-content: center;
39 | align-items: center;
40 | gap: 2px;
41 | flex-wrap: wrap;
42 | overflow: hidden;
43 | }
44 |
45 | section::before {
46 | content: '';
47 | position: absolute;
48 | width: 100%;
49 | height: 100%;
50 | background: linear-gradient(#000, #2b2a2a, #000);
51 | animation: animate 5s linear infinite;
52 | }
53 |
54 | @keyframes animate {
55 | 0% {
56 | transform: translateY(-100%);
57 | }
58 |
59 | 100% {
60 | transform: translateY(100%);
61 | }
62 | }
63 |
64 | section span {
65 | position: relative;
66 | display: block;
67 | width: calc(6.25vw - 2px);
68 | height: calc(6.25vw - 2px);
69 | background: var(--Background-grey);
70 | z-index: 2;
71 | }
72 |
73 | @media screen and (max-width: 600px) {
74 | section {
75 | max-height: 145vh;
76 | }
77 | }
78 |
79 | @media screen and (min-width: 601px) and (max-width: 768px) {
80 | section {
81 | height: 125vh;
82 | }
83 | }
84 |
85 | @media screen and (min-width: 769px) {
86 | section {
87 | max-height: 125vh;
88 | }
89 | }
90 |
91 | @media (max-width: 900px) {
92 | section span {
93 | width: calc(10vw - 2px);
94 | height: calc(10vw - 2px);
95 | }
96 | }
97 |
98 | @media (max-width: 600px) {
99 | section span {
100 | width: calc(20vw - 2px);
101 | height: calc(20vw - 2px);
102 | }
103 | }
--------------------------------------------------------------------------------
/linktree/src/App.tsx:
--------------------------------------------------------------------------------
1 | import { ThemeProvider } from "styled-components";
2 | import { theme } from "./styles/theme";
3 | import GlobalStyle from "./styles/Global";
4 | import MainComp from "./components/MainComp";
5 | import CoolBackground from "./components/CoolBackground";
6 | import "./App.css";
7 |
8 | function App() {
9 | return (
10 | <>
11 |
12 |
13 |
14 |
15 |
16 | >
17 | );
18 | }
19 |
20 | export default App;
21 |
--------------------------------------------------------------------------------
/linktree/src/assets/cv/cv-jessie-bentes-en-us.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LadyJessie19/Portifolio/411a7a36bfe20dca51f161ff5936d6e1de1e8c97/linktree/src/assets/cv/cv-jessie-bentes-en-us.pdf
--------------------------------------------------------------------------------
/linktree/src/assets/imgs/jessie.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LadyJessie19/Portifolio/411a7a36bfe20dca51f161ff5936d6e1de1e8c97/linktree/src/assets/imgs/jessie.png
--------------------------------------------------------------------------------
/linktree/src/components/CoolBackground/index.tsx:
--------------------------------------------------------------------------------
1 | import { useEffect, useState } from "react";
2 | const CoolBackground = () => {
3 | const [spanCount, setSpanCount] = useState(0);
4 |
5 | useEffect(() => {
6 | const updateSpanCount = () => {
7 | const spanSize =
8 | window.innerWidth <= 600 ? 16 : window.innerWidth <= 900 ? 10 : 6.25;
9 | const viewportWidth = window.innerWidth;
10 | const viewportHeight = window.innerHeight;
11 |
12 | const spanWidth = viewportWidth * (spanSize / 100);
13 | const spanHeight = viewportHeight * (spanSize / 100);
14 |
15 | const spansPerRow = Math.ceil(viewportWidth / spanWidth);
16 | const rows = Math.ceil(viewportHeight / spanHeight);
17 |
18 | setSpanCount(spansPerRow * rows + 30);
19 | };
20 |
21 | updateSpanCount();
22 | window.addEventListener("resize", updateSpanCount);
23 |
24 | return () => window.removeEventListener("resize", updateSpanCount);
25 | }, []);
26 | console.log("spaceCount", spanCount);
27 | return (
28 |
29 | {Array.from({ length: spanCount }, (_, i) => (
30 |
31 | ))}
32 |
33 | );
34 | };
35 |
36 | export default CoolBackground;
37 |
--------------------------------------------------------------------------------
/linktree/src/components/MainComp/index.tsx:
--------------------------------------------------------------------------------
1 | import MainImg from "../MainImg";
2 | import MainLinkButtons from "../MainLinkButtons";
3 | import MainPresentation from "../MainPresentation";
4 | import { StyledMain } from "./style";
5 |
6 | const MainComp = () => {
7 | return (
8 | <>
9 |
10 |
11 |
12 |
13 |
14 | >
15 | );
16 | };
17 |
18 | export default MainComp;
19 |
--------------------------------------------------------------------------------
/linktree/src/components/MainComp/style.ts:
--------------------------------------------------------------------------------
1 | import styled from "styled-components";
2 |
3 | const StyledMain = styled.main`
4 | z-index: 10;
5 | position: absolute;
6 | width: 100%;
7 | top: 0;
8 | display: flex;
9 | flex-direction: column;
10 | justify-content: center;
11 | align-items: center;
12 | padding: 2rem;
13 | gap: 3.5rem;
14 | text-align: center;
15 | `;
16 |
17 | export { StyledMain };
18 |
--------------------------------------------------------------------------------
/linktree/src/components/MainImg/index.tsx:
--------------------------------------------------------------------------------
1 | import Jessica from "../../assets/imgs/jessie.png";
2 | import { StyledLabel, StyledMainImg } from "./style";
3 |
4 | const MainImg = () => {
5 | return (
6 | <>
7 |
8 |
9 | Jessica M. Bentes
10 |
11 | >
12 | );
13 | };
14 |
15 | export default MainImg;
16 |
--------------------------------------------------------------------------------
/linktree/src/components/MainImg/style.ts:
--------------------------------------------------------------------------------
1 | import styled, { keyframes } from "styled-components";
2 | import { fadeIn, merge, slideInLeft } from "react-animations";
3 |
4 | const slideLeftElements = merge(slideInLeft, fadeIn);
5 | const slideLeftAnimation = keyframes`${slideLeftElements}`;
6 |
7 | export const StyledMainImg = styled.div`
8 | width: 100%;
9 | height: 100%;
10 | display: flex;
11 | justify-content: center;
12 | align-items: center;
13 | position: relative;
14 | animation: 1s ${slideLeftAnimation};
15 | `;
16 |
17 | export const StyledLabel = styled.div`
18 | position: absolute;
19 | background-color: #ff88d1;
20 | color: var(--#1E1E1E);
21 | padding: 10px;
22 | border-radius: 5px;
23 | font-size: 1.5rem;
24 | font-weight: bold;
25 | top: 170px;
26 | margin: 0 auto;
27 | z-index: 1;
28 | `;
29 |
--------------------------------------------------------------------------------
/linktree/src/components/MainLinkButtons/index.tsx:
--------------------------------------------------------------------------------
1 | import { useState } from "react";
2 | import {
3 | StyledMainLinkButtons,
4 | StyledLinkButton,
5 | StyledTooltip,
6 | } from "./style";
7 |
8 | const MainLinkButtons = () => {
9 | const [isTooltipVisible, setTooltipVisible] = useState(false);
10 |
11 | return (
12 | <>
13 |
14 |
18 |
19 | Connect with Me on LinkedIn
20 |
21 |
22 |
26 |
27 | Explore My Projects on GitHub
28 |
29 |
30 |
34 |
35 | Read My Posts on Medium
36 |
37 |
38 |
42 |
43 | Check Out My Instagram
44 |
45 |
46 |
50 | setTooltipVisible(true)}
53 | onMouseLeave={() => setTooltipVisible(false)}>
54 | Chat with Me on Discord
55 |
56 |
57 | My nickname is{" "}
58 |
59 | ladyjessie
60 |
61 | . 😉
62 |
63 |
64 |
65 | >
66 | );
67 | };
68 |
69 | export default MainLinkButtons;
70 |
--------------------------------------------------------------------------------
/linktree/src/components/MainLinkButtons/style.ts:
--------------------------------------------------------------------------------
1 | import { fadeIn } from "react-animations";
2 | import styled, { keyframes } from "styled-components";
3 |
4 | const fadeInAnimation = keyframes`${fadeIn}`;
5 |
6 | // @keyframes shake-animation {
7 | // 0% { transform:translate(0,0) }
8 | // 1.78571% { transform:translate(5px,0) }
9 | // 3.57143% { transform:translate(0,0) }
10 | // 5.35714% { transform:translate(5px,0) }
11 | // 7.14286% { transform:translate(0,0) }
12 | // 8.92857% { transform:translate(5px,0) }
13 | // 10.71429% { transform:translate(0,0) }
14 | // 100% { transform:translate(0,0) }
15 | // }
16 |
17 | interface TooltipProps {
18 | visible: boolean;
19 | }
20 |
21 | export const StyledMainLinkButtons = styled.div`
22 | display: flex;
23 | flex-direction: column;
24 | align-items: center;
25 | justify-content: center;
26 | width: 100%;
27 | height: 100%;
28 | gap: 20px;
29 | a {
30 | width: 70%;
31 | }
32 | `;
33 |
34 | export const StyledLinkButton = styled.button`
35 | background-color: ${({ theme }) => theme.colors.BackgroundGrey};
36 | color: ${({ theme }) => theme.colors.WhiteScreen};
37 | border: 2px solid ${({ theme }) => theme.colors.CherryPink};
38 | padding: 7px 20px;
39 | width: 100%;
40 | font-size: 16px;
41 | font-family: "Fira Code";
42 | cursor: pointer;
43 | animation: ${fadeInAnimation} 1s ease-in-out 1;
44 |
45 | &:hover {
46 | // font-weight: bold;
47 | }
48 |
49 | &.linkedin:hover {
50 | color: ${({ theme }) => theme.colors.WhiteScreen};
51 | background-color: ${({ theme }) => theme.colors.Linkedin};
52 | }
53 |
54 | &.github:hover {
55 | color: ${({ theme }) => theme.colors.WhiteScreen};
56 | background-color: ${({ theme }) => theme.colors.Github};
57 | }
58 |
59 | &.medium:hover {
60 | color: ${({ theme }) => theme.colors.WhiteScreen};
61 | background-color: ${({ theme }) => theme.colors.Medium};
62 | }
63 |
64 | &.instagram:hover {
65 | color: ${({ theme }) => theme.colors.WhiteScreen};
66 | background-color: ${({ theme }) => theme.colors.Instagram};
67 | }
68 |
69 | &.discord:hover {
70 | color: ${({ theme }) => theme.colors.WhiteScreen};
71 | background-color: ${({ theme }) => theme.colors.Discord};
72 | }
73 | `;
74 |
75 | export const StyledTooltip = styled.div`
76 | position: absolute;
77 | top: 95.5%;
78 | left: 50%;
79 | transform: translateX(-50%);
80 | background-color: ${({ theme }) => theme.colors.HoverPink};
81 | color: ${({ theme }) => theme.colors.CherryPink};
82 | padding: 8px;
83 | border-radius: 5px;
84 | margin-top: 8px;
85 | white-space: nowrap;
86 | box-shadow: 0px 4px 6px rgba(0, 0, 0, 0.1);
87 | opacity: ${({ visible }: any) => (visible ? 1 : 0)};
88 | visibility: ${({ visible }: any) => (visible ? "visible" : "hidden")};
89 | transition: opacity 0.3s ease, visibility 0.3s ease;
90 | `;
91 |
--------------------------------------------------------------------------------
/linktree/src/components/MainPresentation/index.tsx:
--------------------------------------------------------------------------------
1 | import { ButtonsPresentation, StyledMainPresentation } from "./style";
2 | import cv from "../../assets/cv/cv-jessie-bentes-en-us.pdf";
3 | import { StyledMainButton } from "../PresentationButton/style";
4 |
5 | const url = "https://jessie-bentes.vercel.app/";
6 |
7 | const MainPresentation = () => {
8 | return (
9 | <>
10 |
11 |
12 | Hi! I'm a Fullstack Developer & UX Designer
13 |
14 |
15 |
16 | Email Me
17 |
18 |
19 |
20 | View My CV
21 |
22 |
23 |
24 | View My Portfolio
25 |
26 |
27 |
28 | >
29 | );
30 | };
31 |
32 | export default MainPresentation;
33 |
--------------------------------------------------------------------------------
/linktree/src/components/MainPresentation/style.ts:
--------------------------------------------------------------------------------
1 | import styled from "styled-components";
2 |
3 | export const StyledMainPresentation = styled.div`
4 | width: 100%;
5 | height: 100%;
6 | display: flex;
7 | flex-direction: column;
8 | gap: 1rem;
9 | margin-top: 1rem;
10 | color: ${({ theme }) => theme.colors.WhiteScreen};
11 | h1 {
12 | font-size: 23px;
13 | text-align: center;
14 | }
15 | span {
16 | color: ${({ theme }) => theme.colors.CherryPink};
17 | }
18 | p {
19 | max-width: 90%;
20 | }
21 | `;
22 |
23 | export const ButtonsPresentation = styled.div`
24 | display: flex;
25 | justify-content: center;
26 | align-items: center;
27 | gap: 1rem;
28 | flex-wrap: wrap;
29 | `;
30 |
--------------------------------------------------------------------------------
/linktree/src/components/PresentationButton/index.tsx:
--------------------------------------------------------------------------------
1 | import { StyledMainButton } from "./style";
2 |
3 | interface IProps {
4 | text: string;
5 | link?: string;
6 | hasDownload?: boolean;
7 | }
8 |
9 | const PresentationButton = ({ text, link, hasDownload }: IProps) => {
10 | return (
11 | <>
12 | {hasDownload ? (
13 |
14 |
15 | {text}
16 |
17 |
18 | ) : (
19 |
20 |
21 | {text}
22 |
23 |
24 | )}
25 | >
26 | );
27 | };
28 |
29 | export default PresentationButton;
30 |
--------------------------------------------------------------------------------
/linktree/src/components/PresentationButton/style.ts:
--------------------------------------------------------------------------------
1 | import styled from "styled-components";
2 |
3 | export const StyledMainButton = styled.button`
4 | background-color: ${({ theme }) => theme.colors.BackgroundGrey};
5 | color: ${({ theme }) => theme.colors.WhiteScreen};
6 | border: 2px solid ${({ theme }) => theme.colors.CherryPink};
7 | padding: 7px 20px;
8 | font-size: 16px;
9 | font-family: "Fira Code";
10 | cursor: pointer;
11 |
12 | &:hover {
13 | background-color: ${({ theme }) => theme.colors.HoverPink};
14 | }
15 | `;
16 |
--------------------------------------------------------------------------------
/linktree/src/main.tsx:
--------------------------------------------------------------------------------
1 | import { StrictMode } from "react";
2 | import { createRoot } from "react-dom/client";
3 | import App from "./App.tsx";
4 |
5 | createRoot(document.getElementById("root")!).render(
6 |
7 |
8 |
9 | );
10 |
--------------------------------------------------------------------------------
/linktree/src/styles/Global.ts:
--------------------------------------------------------------------------------
1 | import { createGlobalStyle } from "styled-components";
2 |
3 | const GlobalStyle = createGlobalStyle`
4 | :root {
5 | --Background-grey: #1E1E1E;
6 | --Cherry-pink: #FF88D1;
7 | --Candy-green: #98C379;
8 | --Hover-pink: #FF88D133;
9 | --Light-grey: #ABB2BF;
10 | --Original-pink: #C778DD;
11 | --Soft-blue: #62AEEF;
12 | --White-screen: #faf9f9;
13 |
14 | --Main-font: 'Fira Code';
15 | }
16 |
17 | * {
18 | margin: 0;
19 | padding: 0;
20 | box-sizing: border-box;
21 | }
22 |
23 | .d-flex{
24 | display: flex;
25 | }
26 |
27 | .g-1{
28 | gap: 1rem;
29 | }
30 |
31 | ::-webkit-scrollbar {
32 | width: 18px;
33 | }
34 |
35 | ::-webkit-scrollbar-track {
36 | background: var(--Background-grey);
37 | }
38 |
39 | ::-webkit-scrollbar-thumb {
40 | background: ${({ theme }) => theme.colors.CherryPink};
41 | border-radius: 6px;
42 | }
43 |
44 | ::-webkit-scrollbar-thumb:hover {
45 | background: #555;
46 | }
47 | `;
48 |
49 | export default GlobalStyle;
50 |
--------------------------------------------------------------------------------
/linktree/src/styles/_fonts/Fira_Code/FiraCode-VariableFont_wght.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LadyJessie19/Portifolio/411a7a36bfe20dca51f161ff5936d6e1de1e8c97/linktree/src/styles/_fonts/Fira_Code/FiraCode-VariableFont_wght.ttf
--------------------------------------------------------------------------------
/linktree/src/styles/_fonts/Fira_Code/OFL.txt:
--------------------------------------------------------------------------------
1 | Copyright 2014-2020 The Fira Code Project Authors (https://github.com/tonsky/FiraCode)
2 |
3 | This Font Software is licensed under the SIL Open Font License, Version 1.1.
4 | This license is copied below, and is also available with a FAQ at:
5 | https://openfontlicense.org
6 |
7 |
8 | -----------------------------------------------------------
9 | SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
10 | -----------------------------------------------------------
11 |
12 | PREAMBLE
13 | The goals of the Open Font License (OFL) are to stimulate worldwide
14 | development of collaborative font projects, to support the font creation
15 | efforts of academic and linguistic communities, and to provide a free and
16 | open framework in which fonts may be shared and improved in partnership
17 | with others.
18 |
19 | The OFL allows the licensed fonts to be used, studied, modified and
20 | redistributed freely as long as they are not sold by themselves. The
21 | fonts, including any derivative works, can be bundled, embedded,
22 | redistributed and/or sold with any software provided that any reserved
23 | names are not used by derivative works. The fonts and derivatives,
24 | however, cannot be released under any other type of license. The
25 | requirement for fonts to remain under this license does not apply
26 | to any document created using the fonts or their derivatives.
27 |
28 | DEFINITIONS
29 | "Font Software" refers to the set of files released by the Copyright
30 | Holder(s) under this license and clearly marked as such. This may
31 | include source files, build scripts and documentation.
32 |
33 | "Reserved Font Name" refers to any names specified as such after the
34 | copyright statement(s).
35 |
36 | "Original Version" refers to the collection of Font Software components as
37 | distributed by the Copyright Holder(s).
38 |
39 | "Modified Version" refers to any derivative made by adding to, deleting,
40 | or substituting -- in part or in whole -- any of the components of the
41 | Original Version, by changing formats or by porting the Font Software to a
42 | new environment.
43 |
44 | "Author" refers to any designer, engineer, programmer, technical
45 | writer or other person who contributed to the Font Software.
46 |
47 | PERMISSION & CONDITIONS
48 | Permission is hereby granted, free of charge, to any person obtaining
49 | a copy of the Font Software, to use, study, copy, merge, embed, modify,
50 | redistribute, and sell modified and unmodified copies of the Font
51 | Software, subject to the following conditions:
52 |
53 | 1) Neither the Font Software nor any of its individual components,
54 | in Original or Modified Versions, may be sold by itself.
55 |
56 | 2) Original or Modified Versions of the Font Software may be bundled,
57 | redistributed and/or sold with any software, provided that each copy
58 | contains the above copyright notice and this license. These can be
59 | included either as stand-alone text files, human-readable headers or
60 | in the appropriate machine-readable metadata fields within text or
61 | binary files as long as those fields can be easily viewed by the user.
62 |
63 | 3) No Modified Version of the Font Software may use the Reserved Font
64 | Name(s) unless explicit written permission is granted by the corresponding
65 | Copyright Holder. This restriction only applies to the primary font name as
66 | presented to the users.
67 |
68 | 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
69 | Software shall not be used to promote, endorse or advertise any
70 | Modified Version, except to acknowledge the contribution(s) of the
71 | Copyright Holder(s) and the Author(s) or with their explicit written
72 | permission.
73 |
74 | 5) The Font Software, modified or unmodified, in part or in whole,
75 | must be distributed entirely under this license, and must not be
76 | distributed under any other license. The requirement for fonts to
77 | remain under this license does not apply to any document created
78 | using the Font Software.
79 |
80 | TERMINATION
81 | This license becomes null and void if any of the above conditions are
82 | not met.
83 |
84 | DISCLAIMER
85 | THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
86 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
87 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
88 | OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
89 | COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
90 | INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
91 | DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
92 | FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
93 | OTHER DEALINGS IN THE FONT SOFTWARE.
94 |
--------------------------------------------------------------------------------
/linktree/src/styles/_fonts/Fira_Code/static/FiraCode-Bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LadyJessie19/Portifolio/411a7a36bfe20dca51f161ff5936d6e1de1e8c97/linktree/src/styles/_fonts/Fira_Code/static/FiraCode-Bold.ttf
--------------------------------------------------------------------------------
/linktree/src/styles/_fonts/Fira_Code/static/FiraCode-Light.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LadyJessie19/Portifolio/411a7a36bfe20dca51f161ff5936d6e1de1e8c97/linktree/src/styles/_fonts/Fira_Code/static/FiraCode-Light.ttf
--------------------------------------------------------------------------------
/linktree/src/styles/_fonts/Fira_Code/static/FiraCode-Medium.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LadyJessie19/Portifolio/411a7a36bfe20dca51f161ff5936d6e1de1e8c97/linktree/src/styles/_fonts/Fira_Code/static/FiraCode-Medium.ttf
--------------------------------------------------------------------------------
/linktree/src/styles/_fonts/Fira_Code/static/FiraCode-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LadyJessie19/Portifolio/411a7a36bfe20dca51f161ff5936d6e1de1e8c97/linktree/src/styles/_fonts/Fira_Code/static/FiraCode-Regular.ttf
--------------------------------------------------------------------------------
/linktree/src/styles/_fonts/Fira_Code/static/FiraCode-SemiBold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LadyJessie19/Portifolio/411a7a36bfe20dca51f161ff5936d6e1de1e8c97/linktree/src/styles/_fonts/Fira_Code/static/FiraCode-SemiBold.ttf
--------------------------------------------------------------------------------
/linktree/src/styles/theme.ts:
--------------------------------------------------------------------------------
1 | export const theme = {
2 | colors: {
3 | BackgroundGrey: "#1E1E1E",
4 | CherryPink: "#FF88D1",
5 | CandyGreen: "#98C379",
6 | HoverPink: "#FF88D133",
7 | LightGrey: "#ABB2BF",
8 | OriginalPink: "#C778DD",
9 | SoftBlue: "#62AEEF",
10 | WhiteScreen: "#faf9f9",
11 | Linkedin: "#007EBB",
12 | Github: "#0f0d0e",
13 | Instagram: "#DA2F7F",
14 | Medium: "#000000",
15 | Discord: "#5865F2",
16 | },
17 | fonts: {
18 | MainFont: "Fira Code",
19 | },
20 | };
21 |
--------------------------------------------------------------------------------
/linktree/src/vite-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/linktree/tsconfig.app.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "ES2020",
4 | "useDefineForClassFields": true,
5 | "lib": ["ES2020", "DOM", "DOM.Iterable"],
6 | "module": "ESNext",
7 | "skipLibCheck": true,
8 |
9 | /* Bundler mode */
10 | "moduleResolution": "bundler",
11 | "allowImportingTsExtensions": true,
12 | "isolatedModules": true,
13 | "moduleDetection": "force",
14 | "noEmit": true,
15 | "jsx": "react-jsx",
16 |
17 | /* Linting */
18 | "strict": true,
19 | "noUnusedLocals": true,
20 | "noUnusedParameters": true,
21 | "noFallthroughCasesInSwitch": true
22 | },
23 | "include": ["src"]
24 | }
25 |
--------------------------------------------------------------------------------
/linktree/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "files": [],
3 | "references": [
4 | { "path": "./tsconfig.app.json" },
5 | { "path": "./tsconfig.node.json" }
6 | ]
7 | }
8 |
--------------------------------------------------------------------------------
/linktree/tsconfig.node.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "ES2022",
4 | "lib": ["ES2023"],
5 | "module": "ESNext",
6 | "skipLibCheck": true,
7 |
8 | /* Bundler mode */
9 | "moduleResolution": "bundler",
10 | "allowImportingTsExtensions": true,
11 | "isolatedModules": true,
12 | "moduleDetection": "force",
13 | "noEmit": true,
14 |
15 | /* Linting */
16 | "strict": true,
17 | "noUnusedLocals": true,
18 | "noUnusedParameters": true,
19 | "noFallthroughCasesInSwitch": true
20 | },
21 | "include": ["vite.config.ts"]
22 | }
23 |
--------------------------------------------------------------------------------
/linktree/vite.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | // https://vitejs.dev/config/
5 | export default defineConfig({
6 | plugins: [react()],
7 | })
8 |
--------------------------------------------------------------------------------
/portfolio/.eslintrc.cjs:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | env: { browser: true, es2020: true },
3 | extends: [
4 | 'eslint:recommended',
5 | 'plugin:@typescript-eslint/recommended',
6 | 'plugin:react-hooks/recommended',
7 | ],
8 | parser: '@typescript-eslint/parser',
9 | parserOptions: { ecmaVersion: 'latest', sourceType: 'module' },
10 | plugins: ['react-refresh'],
11 | rules: {
12 | 'react-refresh/only-export-components': 'warn',
13 | },
14 | }
15 |
--------------------------------------------------------------------------------
/portfolio/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | pnpm-debug.log*
8 | lerna-debug.log*
9 |
10 | node_modules
11 | dist
12 | dist-ssr
13 | *.local
14 |
15 | # Editor directories and files
16 | .vscode/*
17 | !.vscode/extensions.json
18 | .idea
19 | .DS_Store
20 | *.suo
21 | *.ntvs*
22 | *.njsproj
23 | *.sln
24 | *.sw?
25 |
--------------------------------------------------------------------------------
/portfolio/.hintrc:
--------------------------------------------------------------------------------
1 | {
2 | "extends": [
3 | "development"
4 | ],
5 | "hints": {
6 | "disown-opener": "off"
7 | }
8 | }
--------------------------------------------------------------------------------
/portfolio/_comps.todo:
--------------------------------------------------------------------------------
1 | Home:
2 | Intro:
3 | ✔ Navbar; @done(24-01-24 18:47)
4 | ✔ Tiny side bar social media; @done(24-01-24 18:47)
5 | ✔ Introdution; @done(24-01-24 20:12)
6 | ✔ Cck Photo + status; @done(24-01-24 20:12)
7 | ✔ Powerful quote; @done(24-01-24 20:12)
8 | Projects:
9 | ✔ Attention! Show 3 projects. @done(24-01-24 20:12)
10 | ✔ project-card; @done(24-01-24 20:12)
11 | ✔ project info obj; @done(24-01-24 20:12)
12 | ✔ projects.map; @done(24-01-24 20:12)
13 | ✔ Projects Programming; @done(24-01-26 20:00)
14 | ✔ Projects UX; @done(24-01-26 20:00)
15 | Skills:
16 | ✔ Draws; @done(24-01-24 20:13)
17 | ✔ Skills cards; @done(24-01-24 20:13)
18 | ✔ Attention! The display is shorty; @done(24-01-24 20:13)
19 | Certificates:
20 | ✔ Atention! I'm adding two sections: Certificates and BlogPosts. @done(24-01-24 20:13)
21 | ✔ Is the very same of projects, both Home section and single page. @done(24-01-26 20:00)
22 | ✔ Attention! The display is shorty; @done(24-01-26 20:00)
23 | BlogPosts:
24 | ✔ Atention! I'm adding two sections: Certificates and BlogPosts. @done(24-01-24 20:13)
25 | ✔ Is the very same of projects, both Home section and single page. @done(24-01-26 20:00)
26 | ✔ Attention! The display is shorty; @done(24-01-26 20:00)
27 | About-me:
28 | ✔ About me text; @done(24-01-26 20:00)
29 | ✔ My Potho; @done(24-01-26 20:00)
30 | Contacts:
31 | ✔ Tiny text to contact; @done(24-01-26 20:00)
32 | ✔ Message me comp; @done(24-01-26 20:00)
33 | Footer:
34 | ✔ Logo; @done(24-01-24 20:14)
35 | ✔ Email; @done(24-01-24 20:14)
36 | ✔ Occupation; @done(24-01-24 20:14)
37 | ✔ Social Media Logos; @done(24-01-24 20:14)
38 | ✔ Copyrigths; @done(24-01-24 20:14)
39 | Works:
40 | ✔ Reuse home navbar comp; @done(24-01-26 20:00)
41 | ✔ Reuse home tinySideBar comp; @done(24-01-26 20:00)
42 | ✔ Create header-title comp; @done(24-01-26 20:00)
43 | ✔ Attention! Show all projects. @done(24-01-26 20:00)
44 | ✔ Reuse projects home comp; @done(24-01-26 20:00)
45 | ✔ smaller projects comp: @done(24-01-26 20:00)
46 | ✔ smaller project card; @done(24-01-26 20:00)
47 | ✔ Reuse Home comp Footer; @done(24-01-26 20:00)
48 | About-me:
49 | ✔ Reuse home navbar comp; @done(24-01-26 20:00)
50 | ✔ Reuse home tinySideBar comp; @done(24-01-26 20:00)
51 | ✔ Reuse header-title works comp; @done(24-01-26 20:00)
52 | ✔ Resuse About me home comp; @done(24-01-26 20:00)
53 | ✔ Resuse Skills home comp; @done(24-01-26 20:00)
54 | ✔ Attention! The display is lengthy; @done(24-01-26 20:01)
55 | ✔ My fun facts comp; @done(24-01-26 20:01)
56 | ✔ Resuse Home comp Footer; @done(24-01-26 20:01)
57 | Contacts:
58 | ✔ Reuse home navbar comp; @done(24-01-26 20:01)
59 | ✔ Reuse home tinySideBar comp; @done(24-01-26 20:01)
60 | ✔ Reuse header-title works comp; @done(24-01-26 20:01)
61 | ✔ Reuse contact-me home comp; @done(24-01-26 20:01)
62 | ✔ All media comp - Social Medias: @done(24-01-26 20:01)
63 | ✔ Email; @done(24-01-26 20:01)
64 | ✔ Discord; @done(24-01-26 20:01)
65 | ✔ Slack; @done(24-01-26 20:01)
66 | ✔ LinkedIn; @done(24-01-26 20:01)
67 | ✔ Medium; @done(24-01-26 20:01)
68 | ✔ Instagram; @done(24-01-26 20:01)
69 | ✔ Behance; @done(24-01-26 20:01)
70 | ✔ Github; @done(24-01-26 20:01)
71 | ✔ Twitter; @done(24-01-26 20:01)
72 | ✔ Reuse footer home comp; @done(24-01-26 20:01)
73 |
74 | Responsivity:
75 | Translation:
76 |
--------------------------------------------------------------------------------
/portfolio/_portfolio.todo:
--------------------------------------------------------------------------------
1 | Projects:
2 | ✔ Arnia_Task_Manager @done(24-02-01 02:37)
3 | ✔ Fullstack_KanbanLite @done(24-02-01 02:37)
4 | ✔ Backend_KanbanLite @done(24-02-01 02:37)
5 | ✔ Frontend_KanbanLite @done(24-02-01 02:37)
6 | ✔ Hortifruti_Ecommerce @done(24-02-01 02:37)
7 | ✔ Shopping_E-commerce @done(24-02-01 02:37)
8 | ✔ PictureGram_Social_Media @done(24-02-01 02:37)
9 | ✔ ReHT_Table_Generator @done(24-02-01 02:37)
10 | ✔ String-Format-JS-CSharp @done(24-02-01 02:37)
11 | ✔ wexerBackend @done(24-02-01 02:37)
12 | ✔ wexerFrontend @done(24-02-01 02:37)
13 |
14 | Main Projects:
15 | Follow the numbers order
16 | 1.Arnia_Task_Manager:
17 | ✔ Markup Description: @done(24-02-01 02:37)
18 | ✔ This project is done? @done(24-02-01 02:37)
19 | Notes:
20 | ✔ My best full project @done(24-02-01 02:37)
21 |
22 | 2.ReHT_Table_Generator:
23 | ✔ Markup Description: @done(24-02-01 02:37)
24 | ✔ This project is done? @done(24-02-01 02:37)
25 | Notes:
26 | ✔ Organizar os arquivos @done(24-02-01 02:37)
27 | ✔ Atualizar o manual @done(24-02-01 02:37)
28 |
29 | 3.PictureGram_Social_Media:
30 | ✔ Markup Description: @done(24-02-01 02:37)
31 | ✔ This project is done? @done(24-02-01 02:37)
32 | ✔ This project hasn't started yet? @done(23-06-29 05:45)
33 | Notes:
34 | ✔ Preciso fazer projeto com Matheus Battisti @done(24-02-01 02:38)
35 |
36 | 4.wexerBackend:
37 | ✔ Markup Description: @done(24-02-01 02:38)
38 | ✔ This project is done? @done(24-02-01 02:38)
39 | Notes:
40 | ✔ Vou trabalhar nisso durante o mês de julho @done(24-02-01 02:38)
41 | The projects bellow can be done after
42 | wexerFrontend:
43 | ✔ Markup Description: @done(24-02-01 02:38)
44 | ✔ This project is done? @done(24-02-01 02:38)
45 | Notes:
46 | ✔ ...Não têm choro! @done(24-02-01 02:38)
47 |
48 | String-Format-JS-CSharp:
49 | ✔ Markup Description: @done(24-02-01 02:38)
50 | ✔ This project is done? @done(24-02-01 02:38)
51 | Notes:
52 | ✔ Precisa de bastantes ajustes @done(24-02-01 02:38)
53 |
54 | Fullstack_KanbanLite:
55 | ✔ Markup Description: @done(24-02-01 02:38)
56 | ✔ This project is done? @done(24-02-01 02:38)
57 | ✔ This project hasn't started yet? @done(23-06-29 05:45)
58 | Notes:
59 | ✔ Esse pode ser bem o último projeto a ser feito @done(24-02-01 02:38)
60 | ✔ @done(24-02-01 02:38)
61 |
62 | Academic Projects:
63 | Backend_KanbanLite:
64 | ✔ Markup Description: @done(24-02-01 02:38)
65 | ✔ This project is done? @done(24-02-01 02:38)
66 | Notes:
67 | ✔ Continuar o exercício do Victor @done(24-02-01 02:38)
68 |
69 | Frontend_KanbanLite:
70 | ✔ Markup Description: @done(24-02-01 02:38)
71 | ✔ This project is done? @done(24-02-01 02:38)
72 | Notes:
73 | ✔ Falta as funções de editar e deletar nos cards @done(24-02-01 02:38)
74 | ✔ Melhorar o layout @done(24-02-01 02:38)
75 |
76 | Hortifruti_Ecommerce:
77 | ✔ Markup Description: @done(24-02-01 02:38)
78 | ✔ This project is done? @done(24-02-01 02:38)
79 | Notes:
80 | ✔ Colocar uma ação no botão "fechar carrinho" @done(24-02-01 02:38)
81 |
82 | Shopping_E-commerce:
83 | ✔ Markup Description: @done(24-02-01 02:38)
84 | ✔ This project is done? @done(24-02-01 02:38)
85 | Notes:
86 | ✔ Arrumação, mas bem básica mesmo @done(24-02-01 02:38)
87 | ✔ remover o alert do finalizar compra @done(24-02-01 02:38)
88 | ✔ @done(24-02-01 02:38)
--------------------------------------------------------------------------------
/portfolio/index.css:
--------------------------------------------------------------------------------
1 | @font-face {
2 | font-family: 'Fira Code';
3 | src: url('./src/styles/_fonts/Fira_Code/FiraCode-VariableFont_wght.ttf') format('truetype');
4 | }
--------------------------------------------------------------------------------
/portfolio/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Portfolio - Jessie M. Bentes
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/portfolio/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "portfolio",
3 | "private": true,
4 | "version": "0.0.0",
5 | "type": "module",
6 | "scripts": {
7 | "dev": "vite",
8 | "build": "tsc && vite build",
9 | "lint": "eslint src --ext ts,tsx --report-unused-disable-directives --max-warnings 0",
10 | "preview": "vite preview"
11 | },
12 | "dependencies": {
13 | "portfolio": "file:",
14 | "react": "^18.2.0",
15 | "react-animations": "^1.0.0",
16 | "react-dom": "^18.2.0"
17 | },
18 | "devDependencies": {
19 | "@types/react": "^18.2.20",
20 | "@types/react-animations": "^1.0.3",
21 | "@types/react-dom": "^18.0.11",
22 | "@typescript-eslint/eslint-plugin": "^5.59.0",
23 | "@typescript-eslint/parser": "^5.59.0",
24 | "@vitejs/plugin-react": "^4.0.0",
25 | "eslint": "^8.38.0",
26 | "eslint-plugin-react-hooks": "^4.6.0",
27 | "eslint-plugin-react-refresh": "^0.3.4",
28 | "react-router-dom": "^6.15.0",
29 | "styled-components": "^6.0.7",
30 | "typescript": "^5.1.6",
31 | "vite": "^4.3.9"
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/portfolio/src/App.tsx:
--------------------------------------------------------------------------------
1 | import GlobalStyle from "./styles/Global";
2 | import { Route, Routes, useNavigate, useLocation } from "react-router-dom";
3 | import { ThemeProvider } from "styled-components";
4 | import { theme } from "./styles/theme";
5 |
6 | import { LanguageProvider } from "./contexts/LanguageProvider";
7 |
8 | import HomeEn from "./components/en-us/pages/Home";
9 | import ContactsEn from "./components/en-us/pages/Contacts";
10 | import AboutMeEn from "./components/en-us/pages/AboutMe";
11 | import ProjectsEn from "./components/en-us/pages/Projects";
12 | import HomePt from "./components/pt-br/pages/Home";
13 | import AboutMePt from "./components/pt-br/pages/AboutMe";
14 | import ContactsPt from "./components/pt-br/pages/Contacts";
15 | import ProjectsPt from "./components/pt-br/pages/Projects";
16 | import { useEffect } from "react";
17 | import ScrollToTop from "./components/reusable/scrollToTop";
18 |
19 | function App() {
20 | const navigate = useNavigate();
21 | const { pathname } = useLocation();
22 |
23 | useEffect(() => {
24 | window.scrollTo(0, 0);
25 | }, [pathname]);
26 |
27 | const chosenLanguage = localStorage.getItem("language") || "EN-US";
28 | return (
29 | <>
30 |
31 |
32 |
33 |
34 |
35 | : }
38 | />
39 | } />
40 | } />
41 | } />
42 | } />
43 | } />
44 | } />
45 | } />
46 | } />
47 |
48 |
49 |
50 | >
51 | );
52 | }
53 |
54 | export default App;
55 |
--------------------------------------------------------------------------------
/portfolio/src/assets/Calendar.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/portfolio/src/assets/Card.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/portfolio/src/assets/Discord.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/portfolio/src/assets/Dots.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/portfolio/src/assets/Dribble.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/portfolio/src/assets/Dropdown.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/portfolio/src/assets/Email.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/portfolio/src/assets/Figma.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/portfolio/src/assets/Figures.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
--------------------------------------------------------------------------------
/portfolio/src/assets/Github.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/portfolio/src/assets/Landmark.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/portfolio/src/assets/Line.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/portfolio/src/assets/Linkedin.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/portfolio/src/assets/Medium.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LadyJessie19/Portifolio/411a7a36bfe20dca51f161ff5936d6e1de1e8c97/portfolio/src/assets/Medium.png
--------------------------------------------------------------------------------
/portfolio/src/assets/Medium.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/portfolio/src/assets/PinkLine.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/portfolio/src/assets/Play.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/portfolio/src/assets/Quotes.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/portfolio/src/assets/SquareLarge.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/portfolio/src/assets/SquareSmall.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/portfolio/src/assets/Telegram.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/portfolio/src/assets/Twitter.svg:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
--------------------------------------------------------------------------------
/portfolio/src/assets/cv/cv-jessie-bentes-en-us.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LadyJessie19/Portifolio/411a7a36bfe20dca51f161ff5936d6e1de1e8c97/portfolio/src/assets/cv/cv-jessie-bentes-en-us.pdf
--------------------------------------------------------------------------------
/portfolio/src/assets/cv/cv-jessie-bentes-pt-br.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LadyJessie19/Portifolio/411a7a36bfe20dca51f161ff5936d6e1de1e8c97/portfolio/src/assets/cv/cv-jessie-bentes-pt-br.pdf
--------------------------------------------------------------------------------
/portfolio/src/assets/data-images/bigger-projects/arnia-task-manager.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LadyJessie19/Portifolio/411a7a36bfe20dca51f161ff5936d6e1de1e8c97/portfolio/src/assets/data-images/bigger-projects/arnia-task-manager.png
--------------------------------------------------------------------------------
/portfolio/src/assets/data-images/bigger-projects/frutamix-backend.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LadyJessie19/Portifolio/411a7a36bfe20dca51f161ff5936d6e1de1e8c97/portfolio/src/assets/data-images/bigger-projects/frutamix-backend.png
--------------------------------------------------------------------------------
/portfolio/src/assets/data-images/bigger-projects/frutamix-front.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LadyJessie19/Portifolio/411a7a36bfe20dca51f161ff5936d6e1de1e8c97/portfolio/src/assets/data-images/bigger-projects/frutamix-front.png
--------------------------------------------------------------------------------
/portfolio/src/assets/data-images/bigger-projects/meta-vagas-back.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LadyJessie19/Portifolio/411a7a36bfe20dca51f161ff5936d6e1de1e8c97/portfolio/src/assets/data-images/bigger-projects/meta-vagas-back.png
--------------------------------------------------------------------------------
/portfolio/src/assets/data-images/bigger-projects/meta-vagas-front.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LadyJessie19/Portifolio/411a7a36bfe20dca51f161ff5936d6e1de1e8c97/portfolio/src/assets/data-images/bigger-projects/meta-vagas-front.png
--------------------------------------------------------------------------------
/portfolio/src/assets/data-images/bigger-projects/shopping-cart.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LadyJessie19/Portifolio/411a7a36bfe20dca51f161ff5936d6e1de1e8c97/portfolio/src/assets/data-images/bigger-projects/shopping-cart.png
--------------------------------------------------------------------------------
/portfolio/src/assets/data-images/bigger-projects/shopping-store.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LadyJessie19/Portifolio/411a7a36bfe20dca51f161ff5936d6e1de1e8c97/portfolio/src/assets/data-images/bigger-projects/shopping-store.png
--------------------------------------------------------------------------------
/portfolio/src/assets/data-images/bigger-projects/wexer-back.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LadyJessie19/Portifolio/411a7a36bfe20dca51f161ff5936d6e1de1e8c97/portfolio/src/assets/data-images/bigger-projects/wexer-back.png
--------------------------------------------------------------------------------
/portfolio/src/assets/data-images/bigger-projects/wexer-front.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LadyJessie19/Portifolio/411a7a36bfe20dca51f161ff5936d6e1de1e8c97/portfolio/src/assets/data-images/bigger-projects/wexer-front.png
--------------------------------------------------------------------------------
/portfolio/src/assets/data-images/blog-posts/dev-teacher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LadyJessie19/Portifolio/411a7a36bfe20dca51f161ff5936d6e1de1e8c97/portfolio/src/assets/data-images/blog-posts/dev-teacher.png
--------------------------------------------------------------------------------
/portfolio/src/assets/data-images/blog-posts/fullstack-ux.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LadyJessie19/Portifolio/411a7a36bfe20dca51f161ff5936d6e1de1e8c97/portfolio/src/assets/data-images/blog-posts/fullstack-ux.png
--------------------------------------------------------------------------------
/portfolio/src/assets/data-images/blog-posts/soft-skills.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LadyJessie19/Portifolio/411a7a36bfe20dca51f161ff5936d6e1de1e8c97/portfolio/src/assets/data-images/blog-posts/soft-skills.png
--------------------------------------------------------------------------------
/portfolio/src/assets/data-images/blog-posts/solid.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LadyJessie19/Portifolio/411a7a36bfe20dca51f161ff5936d6e1de1e8c97/portfolio/src/assets/data-images/blog-posts/solid.png
--------------------------------------------------------------------------------
/portfolio/src/assets/data-images/blog-posts/time-travel.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LadyJessie19/Portifolio/411a7a36bfe20dca51f161ff5936d6e1de1e8c97/portfolio/src/assets/data-images/blog-posts/time-travel.png
--------------------------------------------------------------------------------
/portfolio/src/assets/data-images/certificates/arnia-fullstack.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LadyJessie19/Portifolio/411a7a36bfe20dca51f161ff5936d6e1de1e8c97/portfolio/src/assets/data-images/certificates/arnia-fullstack.png
--------------------------------------------------------------------------------
/portfolio/src/assets/data-images/certificates/design-ux.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LadyJessie19/Portifolio/411a7a36bfe20dca51f161ff5936d6e1de1e8c97/portfolio/src/assets/data-images/certificates/design-ux.png
--------------------------------------------------------------------------------
/portfolio/src/assets/data-images/certificates/empathy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LadyJessie19/Portifolio/411a7a36bfe20dca51f161ff5936d6e1de1e8c97/portfolio/src/assets/data-images/certificates/empathy.png
--------------------------------------------------------------------------------
/portfolio/src/assets/data-images/certificates/java-spring-boot-certificate.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LadyJessie19/Portifolio/411a7a36bfe20dca51f161ff5936d6e1de1e8c97/portfolio/src/assets/data-images/certificates/java-spring-boot-certificate.png
--------------------------------------------------------------------------------
/portfolio/src/assets/data-images/certificates/typescript.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LadyJessie19/Portifolio/411a7a36bfe20dca51f161ff5936d6e1de1e8c97/portfolio/src/assets/data-images/certificates/typescript.png
--------------------------------------------------------------------------------
/portfolio/src/assets/data-images/certificates/wireframes.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LadyJessie19/Portifolio/411a7a36bfe20dca51f161ff5936d6e1de1e8c97/portfolio/src/assets/data-images/certificates/wireframes.png
--------------------------------------------------------------------------------
/portfolio/src/assets/data-images/design-ux/competitive-audit-report.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LadyJessie19/Portifolio/411a7a36bfe20dca51f161ff5936d6e1de1e8c97/portfolio/src/assets/data-images/design-ux/competitive-audit-report.png
--------------------------------------------------------------------------------
/portfolio/src/assets/data-images/design-ux/competitive-audit.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LadyJessie19/Portifolio/411a7a36bfe20dca51f161ff5936d6e1de1e8c97/portfolio/src/assets/data-images/design-ux/competitive-audit.png
--------------------------------------------------------------------------------
/portfolio/src/assets/data-images/design-ux/lofi-prototype.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LadyJessie19/Portifolio/411a7a36bfe20dca51f161ff5936d6e1de1e8c97/portfolio/src/assets/data-images/design-ux/lofi-prototype.png
--------------------------------------------------------------------------------
/portfolio/src/assets/data-images/design-ux/persona.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LadyJessie19/Portifolio/411a7a36bfe20dca51f161ff5936d6e1de1e8c97/portfolio/src/assets/data-images/design-ux/persona.png
--------------------------------------------------------------------------------
/portfolio/src/assets/data-images/design-ux/storyboard-closeup.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LadyJessie19/Portifolio/411a7a36bfe20dca51f161ff5936d6e1de1e8c97/portfolio/src/assets/data-images/design-ux/storyboard-closeup.png
--------------------------------------------------------------------------------
/portfolio/src/assets/data-images/design-ux/storyboard.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LadyJessie19/Portifolio/411a7a36bfe20dca51f161ff5936d6e1de1e8c97/portfolio/src/assets/data-images/design-ux/storyboard.png
--------------------------------------------------------------------------------
/portfolio/src/assets/data-images/java-projects/hotelium.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LadyJessie19/Portifolio/411a7a36bfe20dca51f161ff5936d6e1de1e8c97/portfolio/src/assets/data-images/java-projects/hotelium.png
--------------------------------------------------------------------------------
/portfolio/src/assets/data-images/java-projects/java-spring-boot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LadyJessie19/Portifolio/411a7a36bfe20dca51f161ff5936d6e1de1e8c97/portfolio/src/assets/data-images/java-projects/java-spring-boot.png
--------------------------------------------------------------------------------
/portfolio/src/assets/data-images/java-projects/my-food.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LadyJessie19/Portifolio/411a7a36bfe20dca51f161ff5936d6e1de1e8c97/portfolio/src/assets/data-images/java-projects/my-food.png
--------------------------------------------------------------------------------
/portfolio/src/assets/favicon.svg:
--------------------------------------------------------------------------------
1 |
2 |
4 |
7 |
8 |
10 |
12 |
14 |
16 |
20 |
26 |
32 |
33 |
35 |
37 |
39 |
40 |
41 |
--------------------------------------------------------------------------------
/portfolio/src/assets/jessie-name-label.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LadyJessie19/Portifolio/411a7a36bfe20dca51f161ff5936d6e1de1e8c97/portfolio/src/assets/jessie-name-label.png
--------------------------------------------------------------------------------
/portfolio/src/assets/jessie1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LadyJessie19/Portifolio/411a7a36bfe20dca51f161ff5936d6e1de1e8c97/portfolio/src/assets/jessie1.png
--------------------------------------------------------------------------------
/portfolio/src/assets/jessie2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LadyJessie19/Portifolio/411a7a36bfe20dca51f161ff5936d6e1de1e8c97/portfolio/src/assets/jessie2.png
--------------------------------------------------------------------------------
/portfolio/src/assets/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LadyJessie19/Portifolio/411a7a36bfe20dca51f161ff5936d6e1de1e8c97/portfolio/src/assets/logo.png
--------------------------------------------------------------------------------
/portfolio/src/components/en-us/data/_aboutData.ts:
--------------------------------------------------------------------------------
1 | interface IAbout {
2 | pageTitle: string;
3 | pageDescription: string;
4 | pageSectionTitleOne: string;
5 | pageSectionTitleTwo: string;
6 | pageSectionTitleThree: string;
7 | pageSectionTitleFour: string;
8 | jessieBentesOne: string;
9 | jessieBentesTwo: string;
10 | jessieBentesThree: string;
11 | jessieBentesFour: string;
12 | funFacts: string[];
13 | }
14 |
15 | const AboutMeData: IAbout = {
16 | pageTitle: "about-me",
17 | pageDescription: "Who am I?",
18 | pageSectionTitleOne: "jessie-bentes",
19 | pageSectionTitleTwo: "skills",
20 | pageSectionTitleThree: "certificates",
21 | pageSectionTitleFour: "my-fun-facts",
22 | jessieBentesOne:
23 | "Hey! I'm Jéssica Bentes, a dedicated fullstack developer residing in Campo Grande. My journey into tech began with diverse experiences, including graphic producer and writer, before I found my true passion in coding.",
24 | jessieBentesTwo:
25 | "In summary, I have worked on a patient management system using React.js, Node.js, MongoDB, and Mongoose. I participated in a job application platform for programming positions using Nest.js, TypeORM, and PostgreSQL, which was my first team experience. I developed a contact platform for doctors and hospitals using Spring Boot and AWS. I created a food ranking system using Spring Boot, MongoDB, Swagger, and Railway for deployment. I worked on a service management system for an event company using Spring Boot, MySQL, and AWS, utilizing development and staging environments, as well as Cognito for authentication.",
26 | jessieBentesThree:
27 | "Driven by a desire to contribute meaningfully to the field, I've dedicated myself to mastering various programming languages and frameworks. I'm deeply inspired by the potential of technology to create positive change and enhance lives.",
28 | jessieBentesFour:
29 | "Eager to met fellow developers, share insights, and continue my journey of growth and innovation in the dynamic world of software development!",
30 | funFacts: [
31 | "My favorite food is pizza (with lots of pepper).",
32 | "I consider myself a developer/writer.",
33 | "I dream of visiting South Korea.",
34 | "One of my favorite hobbies is playing video games.",
35 | "I can say 'I love you' in 7 different languages.",
36 | "I'm passionate about music.",
37 | ],
38 | };
39 |
40 | export default AboutMeData;
41 |
--------------------------------------------------------------------------------
/portfolio/src/components/en-us/data/_contactData.ts:
--------------------------------------------------------------------------------
1 | type MediaType = {
2 | name: string;
3 | link: string;
4 | icon: string;
5 | };
6 |
7 | interface IContact {
8 | pageTitle: string;
9 | pageDescription: string;
10 | pageSectionTitleOne: string;
11 | contactMeHeadline: string;
12 | contactMeOne: string;
13 | allMedias: Array;
14 | }
15 |
16 | const ContactMeData: IContact = {
17 | pageTitle: "contacts",
18 | pageDescription: "Do you wanna reach me?",
19 | pageSectionTitleOne: "all-media",
20 | contactMeHeadline: "I'm open to freelance gigs!",
21 | contactMeOne:
22 | "But hey, if you've got any other requests or just wanna chat, hit me up anytime.",
23 | allMedias: [
24 | {
25 | name: "LinkedIn",
26 | link: "https://www.linkedin.com/in/jessiemoura/?locale=en_US",
27 | icon: "fa-brands fa-linkedin",
28 | },
29 | {
30 | name: "GitHub",
31 | link: "https://github.com/LadyJessie19",
32 | icon: "fa-brands fa-github",
33 | },
34 | {
35 | name: "Medium",
36 | link: "https://medium.com/@jessie_moura",
37 | icon: "fa-brands fa-medium",
38 | },
39 | {
40 | name: "Figma",
41 | link: "https://www.figma.com/files/user/1164006161769032343?fuid=1164006161769032343",
42 | icon: "fa-brands fa-figma",
43 | },
44 | {
45 | name: "Instagram",
46 | link: "https://www.instagram.com/lady_jessie19/",
47 | icon: "fa-brands fa-instagram",
48 | },
49 | {
50 | name: "Email",
51 | link: "mailto:jessie.moura19@gmail.com",
52 | icon: "fa-regular fa-envelope",
53 | },
54 | ],
55 | };
56 |
57 | export default ContactMeData;
58 |
--------------------------------------------------------------------------------
/portfolio/src/components/en-us/data/_homeData.ts:
--------------------------------------------------------------------------------
1 | interface IHome {
2 | introduction: string;
3 | pathContact: string;
4 | buttonMainHome: string;
5 | downloadCV: string;
6 | SectionTitleOne: string;
7 | pathProjects: string;
8 | pathSectionProjects: string;
9 | SectionTitleTwo: string;
10 | SectionTitleThree: string;
11 | SectionTitleFour: string;
12 | SectionTitleFive: string;
13 | aboutMeOne: string;
14 | aboutMeTwo: string;
15 | aboutMeThree: string;
16 | aboutMeFour: string;
17 | pathAbout: string;
18 | pathSectionAbout: string;
19 | buttonAboutText: string;
20 | SectionTitleSix: string;
21 | contactMeOne: string;
22 | contactMeTwo: string;
23 | }
24 |
25 | const HomeData: IHome = {
26 | introduction:
27 | "Proficient in both front-end and back-end development, she ensures smooth user experiences throughout the entire process, from conceptualization to deployment.",
28 | pathContact: "/us/contacts",
29 | buttonMainHome: "Contact Me",
30 | downloadCV: "Download CV",
31 | SectionTitleOne: "projects",
32 | pathProjects: "/us/projects",
33 | pathSectionProjects: "/us/projects/#blog-posts",
34 | SectionTitleTwo: "skills",
35 | SectionTitleThree: "certificates",
36 | SectionTitleFour: "blog-posts",
37 | SectionTitleFive: "about-me",
38 | pathAbout: "/us/about-me",
39 | pathSectionAbout: "/us/about-me/#certificates",
40 | buttonAboutText: "Read More",
41 | aboutMeOne: "Hi!👋 You may call me Jessie!",
42 | aboutMeTwo:
43 | "I'm a Fullstack developer originally from Rio de Janeiro, now based in Campo Grande, MS. I started in 2022 and mainly work with JavaScript, Java, and SQL. My focus is on web applications and user experience.",
44 | aboutMeThree:
45 | "Fluent in English, I practice clean code and have experience with GIT. Additionally, I work as a instructor at a programming school. I'm excited to continue growing and contributing in the field!",
46 | aboutMeFour:
47 | "I'm eager to keep learning and collaborating with the programming community. I hope to contribute my knowledge and skills as I continue my journey in this exciting field of technology.",
48 | SectionTitleSix: "contact",
49 | contactMeOne: "I'm open to freelance gigs!",
50 | contactMeTwo:
51 | "but hey, if you've got any other requests or just wanna chat, hit me up anytime.",
52 | };
53 |
54 | export default HomeData;
55 |
--------------------------------------------------------------------------------
/portfolio/src/components/en-us/data/_projectsData.ts:
--------------------------------------------------------------------------------
1 | interface IProjects {
2 | pageTitle: string;
3 | pageDescription: string;
4 | pageSectionTitleOne: string;
5 | pageSectionTitleTwo: string;
6 | pageSectionTitleThree: string;
7 | pageSectionTitleFour: string;
8 | pageSectionTitleFive: string;
9 | }
10 |
11 | const ProjectsData: IProjects = {
12 | pageTitle: "projects",
13 | pageDescription: "List of my projects",
14 | pageSectionTitleOne: "complete-apps",
15 | pageSectionTitleTwo: "smaller-apps",
16 | pageSectionTitleThree: "java-projects",
17 | pageSectionTitleFour: "design-ux-projects",
18 | pageSectionTitleFive: "blog-posts",
19 | };
20 |
21 | export default ProjectsData;
22 |
--------------------------------------------------------------------------------
/portfolio/src/components/en-us/data/biggerProjects.ts:
--------------------------------------------------------------------------------
1 | import WexerFrontend from "../../../assets/data-images/bigger-projects/wexer-front.png";
2 | import WexerBackend from "../../../assets/data-images/bigger-projects/wexer-back.png";
3 | import MetaVagasFront from "../../../assets/data-images/bigger-projects/meta-vagas-front.png";
4 | import MetaVagasBack from "../../../assets/data-images/bigger-projects/meta-vagas-back.png";
5 | import ArniaTaskManager from "../../../assets/data-images/bigger-projects/arnia-task-manager.png";
6 | import ShoppingCart from "../../../assets/data-images/bigger-projects/shopping-cart.png";
7 | import ShoppingStore from "../../../assets/data-images/bigger-projects/shopping-store.png";
8 | import FrutamixFront from "../../../assets/data-images/bigger-projects/frutamix-front.png";
9 | import FrutamixBack from "../../../assets/data-images/bigger-projects/frutamix-backend.png";
10 |
11 | interface IProjects {
12 | img: any;
13 | tools: string;
14 | name: string;
15 | description: string;
16 | link: string;
17 | button: string;
18 | }
19 |
20 | const biggerProjects: Array = [
21 | {
22 | img: FrutamixFront,
23 | tools: "React.js, Typescript, React Router Dom, Styled Components",
24 | name: "Frutamix - Frontend",
25 | description:
26 | "Frontend project developed using React.js and Typescript for an ice cream shop called Frutamix.",
27 | link: "https://github.com/LadyJessie19/frutamix-frontend",
28 | button: "GitHub Repository",
29 | },
30 | {
31 | img: FrutamixBack,
32 | tools: "Nest.js, Typescript, Railway",
33 | name: "Frutamix - Backend",
34 | description:
35 | "Backend project developed using Nest.js and Typescript for the Frutamix app.",
36 | link: "https://github.com/LadyJessie19/frutamix-backend",
37 | button: "GitHub Repository",
38 | },
39 |
40 | {
41 | img: WexerFrontend,
42 | tools: "React.js, Typescript",
43 | name: "Wexer Psi - Frontend",
44 | description:
45 | "Frontend project developed using React.js and Typescript for Wexer Psi.",
46 | link: "https://github.com/LadyJessie19/WexerFrontend",
47 | button: "GitHub Repository",
48 | },
49 |
50 | {
51 | img: WexerBackend,
52 | tools: "Node.js, Clean Architecture, N-Tier, SOLID",
53 | name: "Wexer Psi - Backend",
54 | description:
55 | "Backend project built with Node.js, following Clean Architecture, N-Tier, and SOLID principles for Wexer Psi.",
56 | link: "https://github.com/LadyJessie19/WexerBackend",
57 | button: "GitHub Repository",
58 | },
59 |
60 | {
61 | img: ArniaTaskManager,
62 | tools: "JavaScript, HTML, CSS, json-server, Vercel, Railway",
63 | name: "Arnia Task Manager",
64 | description:
65 | "My inaugural project at Arnia, initially designed for academic purposes, marking my introduction to web development.",
66 | button: "GitHub Repository",
67 | link: "https://github.com/LadyJessie19/ArniaTaskManager",
68 | },
69 | {
70 | img: ShoppingCart,
71 | tools: "React.js, Typescript",
72 | name: "Hortifruti - E-Commerce",
73 | description:
74 | "A small-scale e-commerce project developed for a local grocery store in my neighborhood.",
75 | button: "GitHub Repository",
76 | link: "https://github.com/LadyJessie19/HortifruitEcommerce",
77 | },
78 | {
79 | img: ShoppingStore,
80 | tools: "React.js, Typescript",
81 | name: "Shopping Cart - E-Commerce",
82 | description:
83 | "A small project aimed at delving into React Hooks and understanding their functionality.",
84 | button: "GitHub Repository",
85 | link: "https://github.com/LadyJessie19/ShoppingEcommerce",
86 | },
87 | {
88 | img: MetaVagasBack,
89 | tools: "Nest.js, Typescript, Railway, PostgreSQL, Development Team",
90 | name: "MetaVagas - Backend",
91 | description: "Backend for the MetaVagas application.",
92 | link: "https://github.com/LadyJessie19/meta_vagas_backend",
93 | button: "GitHub Repository",
94 | },
95 |
96 | {
97 | img: MetaVagasFront,
98 | tools: "React.js, Typescript, Vercel, Development Team",
99 | name: "MetaVagas - Frontend",
100 | description:
101 | "Frontend for MetaVagas, a website designed to search developer job vacancies.",
102 | link: "https://github.com/LadyJessie19/meta_vagas_frontend",
103 | button: "GitHub Repository",
104 | },
105 | ];
106 |
107 | export default biggerProjects;
108 |
--------------------------------------------------------------------------------
/portfolio/src/components/en-us/data/blogPosts.ts:
--------------------------------------------------------------------------------
1 | import TimeTravel from "../../../assets/data-images/blog-posts/time-travel.png";
2 | import SOLID from "../../../assets/data-images/blog-posts/solid.png";
3 | import SoftSkills from "../../../assets/data-images/blog-posts/soft-skills.png";
4 | import FullStackUX from "../../../assets/data-images/blog-posts/fullstack-ux.png";
5 | import DevTeacher from "../../../assets/data-images/blog-posts/dev-teacher.png";
6 |
7 | interface IBlogPost {
8 | img: any;
9 | title: string;
10 | description: string;
11 | link: string;
12 | button: string;
13 | }
14 |
15 | const blogPosts: Array = [
16 | {
17 | img: DevTeacher,
18 | title: "Fullstack Developer and Instructor",
19 | description:
20 | "Article about my journey balancing coding as a fullstack developer and teaching as an instructor.",
21 | link: "https://medium.com/@jessie_moura/sobre-minha-experi%C3%AAncia-como-professora-sendo-uma-desenvolvedora-web-ca1c569e14ba",
22 | button: "Read here",
23 | },
24 |
25 | {
26 | img: SOLID,
27 | title: "SOLID Principles",
28 | description:
29 | "Find out how to explain SOLID principles in a fun and accessible way using a LEGO block metaphor in this engaging article.",
30 | link: "https://medium.com/@jessie_moura/explorando-os-princ%C3%ADpios-solid-construindo-com-blocos-de-lego-2707b12ae48e",
31 | button: "Read here",
32 | },
33 |
34 | {
35 | img: SoftSkills,
36 | title: "Soft Skills",
37 | description:
38 | "Explore how soft skills can make a difference in a programmer's career and why they are so important, even for beginners. Read on to find out more!",
39 | link: "https://medium.com/@jessie_moura/os-estagi%C3%A1rios-como-o-filme-mostra-a-import%C3%A2ncia-das-soft-skills-para-os-programadores-iniciantes-d939cbc483dd",
40 | button: "Read here",
41 | },
42 |
43 | {
44 | img: FullStackUX,
45 | title: "UX Design and Web Development",
46 | description:
47 | "Discover how UX Design knowledge can be a significant advantage for fullstack developers and how it can drive their skills and projects forward.",
48 | link: "https://medium.com/@jessie_moura/a-vantagem-do-conhecimento-em-ux-para-desenvolvedores-fullstack-38196b871c75",
49 | button: "Read here",
50 | },
51 |
52 | {
53 | img: TimeTravel,
54 | title: "Arnia English Homework | Time Travel",
55 | description:
56 | "Imagine conversing with your younger self and receiving surprising responses. Read on to discover how this journey through time can unveil unexpected insights.",
57 | link: "https://medium.com/@jessie_moura/arnia-english-homework-time-travel-1e6b62b9b64e",
58 | button: "Read here",
59 | },
60 | ];
61 |
62 | export default blogPosts;
63 |
--------------------------------------------------------------------------------
/portfolio/src/components/en-us/data/certificates.ts:
--------------------------------------------------------------------------------
1 | import ArniaCertificate from "../../../assets/data-images/certificates/arnia-fullstack.png";
2 | import JavaSpringBoot from "../../../assets/data-images/certificates/java-spring-boot-certificate.png";
3 | import Typescript from "../../../assets/data-images/certificates/typescript.png";
4 | import DesignUXOne from "../../../assets/data-images/certificates/design-ux.png";
5 | import DesignUXTwo from "../../../assets/data-images/certificates/empathy.png";
6 | import DesignUXThree from "../../../assets/data-images/certificates/wireframes.png";
7 |
8 | interface ICertificates {
9 | img: any;
10 | title: string;
11 | description: string;
12 | link: string;
13 | button: string;
14 | }
15 |
16 | const certificates: Array = [
17 | {
18 | img: ArniaCertificate,
19 | title: "Fullstack Developer Certification",
20 | description: "Earned the Fullstack Developer certificate from Arnia.",
21 | link: "https://www.linkedin.com/in/jessiemoura/details/certifications/1635555790018/single-media-viewer/?type=IMAGE&profileId=ACoAAD6E-xEBIvRRy_KaUTviLPge8Ak7-qFsObU",
22 | button: "View here",
23 | },
24 | {
25 | img: DesignUXOne,
26 | title: "Design UX - Fundamentals Certification",
27 | description:
28 | "Achieved Google UX Certificate (1/7) covering UX design fundamentals.",
29 | link: "https://www.coursera.org/account/accomplishments/verify/6TCCGLQ65RLX",
30 | button: "View here",
31 | },
32 | {
33 | img: JavaSpringBoot,
34 | title: "Java | Spring Boot Certification",
35 | description: "Completed Java studies with a focus on Spring Boot at Udemy.",
36 | link: "https://www.udemy.com/certificate/UC-ee3de95e-2a36-412b-860c-d94566b64a6d/",
37 | button: "View here",
38 | },
39 |
40 | {
41 | img: DesignUXTwo,
42 | title: "Design UX - Empathy Certification",
43 | description:
44 | "Earned Google UX Certificate (2/7) focusing on empathy in UX design.",
45 | link: "https://www.coursera.org/account/accomplishments/verify/B3NGU29HH9KP",
46 | button: "View here",
47 | },
48 | {
49 | img: DesignUXThree,
50 | title: "Design UX - Wireframes | Lo-Fi Prototypes Certification",
51 | description:
52 | "Completed Google UX Certificate (3/7) covering wireframes and lo-fi prototypes.",
53 | link: "https://www.coursera.org/account/accomplishments/verify/DPMZ5HJJE443",
54 | button: "View here",
55 | },
56 | {
57 | img: Typescript,
58 | title: "Typescript Certification",
59 | description:
60 | "Completed Typescript and Object-Oriented Programming (OOP) studies at Udemy.",
61 | link: "https://www.udemy.com/certificate/UC-580be9ad-a4ee-4dfc-b047-f378d21dd3eb/",
62 | button: "View here",
63 | },
64 | ];
65 |
66 | export default certificates;
67 |
--------------------------------------------------------------------------------
/portfolio/src/components/en-us/data/designUX.ts:
--------------------------------------------------------------------------------
1 | import LeNu from "../../../assets/data-images/design-ux/lofi-prototype.png";
2 | import Personas from "../../../assets/data-images/design-ux/persona.png";
3 | import CompetitiveAnalysis from "../../../assets/data-images/design-ux/competitive-audit.png";
4 | import CompetitiveReport from "../../../assets/data-images/design-ux/competitive-audit-report.png";
5 | import Storyboard from "../../../assets/data-images/design-ux/storyboard.png";
6 | import StoryboardCloseUp from "../../../assets/data-images/design-ux/storyboard-closeup.png";
7 |
8 | interface IDesignUX {
9 | img: string;
10 | tools: string;
11 | name: string;
12 | description: string;
13 | link: string;
14 | button: string;
15 | }
16 |
17 | const designUX: Array = [
18 | {
19 | img: LeNu,
20 | tools: "Figma, UX Design",
21 | name: "LeNu App - Lo-Fi Prototype",
22 | description:
23 | "First Lo-Fi prototype created using Figma to showcase the LeNu app, a scheduled restaurant service order system.",
24 | link: "https://www.figma.com/proto/0PZ2SCNQ2IlAgJDNvAIhcg/LeNu-Wireframes?type=design&node-id=4-8&t=wfESQtGHRsrhD8RU-0&scaling=scale-down&page-id=0%3A1&starting-point-node-id=4%3A8",
25 | button: "View more",
26 | },
27 |
28 | {
29 | img: Personas,
30 | tools: "Google Presentation, Customer Reviews",
31 | name: "Personas",
32 | description:
33 | "Creation of user personas to reflect the target audience and their needs for the app.",
34 | link: "https://docs.google.com/presentation/d/1-rBktYJ4MduAXL_ygiJ1ELd8IGhDXepawtZjgFr9CfQ/edit?usp=sharing",
35 | button: "View more",
36 | },
37 |
38 | {
39 | img: CompetitiveAnalysis,
40 | tools: "Google Sheets, Competitive Research",
41 | name: "Competitive Audit",
42 | description:
43 | "Research conducted to gather data on similar businesses, their goals, and methods to inform the development of the LeNu app.",
44 | link: "https://docs.google.com/spreadsheets/d/1W685l2nbxf6sNDKDS53l5UfKNHvB-X-eVtp56fYxoYA/edit?usp=sharing",
45 | button: "View more",
46 | },
47 |
48 | {
49 | img: CompetitiveReport,
50 | tools: "Google Docs, Competitive Audit",
51 | name: "Competitive Audit Report",
52 | description:
53 | "Report summarizing the data collected during the competitive audit process.",
54 | link: "https://docs.google.com/document/d/1GFBEzkTFD1z6sqJicBRJx8SZCdAB0b87K3t006ufJ8c/edit?usp=sharing",
55 | button: "View more",
56 | },
57 |
58 | {
59 | img: Storyboard,
60 | tools: "Google Presentation, Notebook Drawing",
61 | name: "Storyboard",
62 | description:
63 | "Presentation outlining the user's path through the app to visualize the user experience.",
64 | link: "https://docs.google.com/presentation/d/1q36yqejV4-ZYarPLhpnZAJ55rmB65fzfZE6EWQDJ68w/edit?usp=sharing&resourcekey=0-uITU2Uj63UrEhIK6u1xzPw",
65 | button: "View more",
66 | },
67 |
68 | {
69 | img: StoryboardCloseUp,
70 | tools: "Google Presentation, Notebook Drawing",
71 | name: "Storyboard - Close Up",
72 | description:
73 | "Detailed presentation focusing on specific user paths within the app for a closer examination of the user experience.",
74 | link: "https://docs.google.com/presentation/d/1avCgZYN9fdXuQQ5YUvkGUAqntb0bj3EWfWkuy182lxs/edit?usp=sharing&resourcekey=0-aQAnYTPMgmVEJx-WyJRJIA",
75 | button: "View more",
76 | },
77 | ];
78 |
79 | export default designUX;
80 |
--------------------------------------------------------------------------------
/portfolio/src/components/en-us/data/javaProjects.ts:
--------------------------------------------------------------------------------
1 | import JavaStudies from "../../../assets/data-images/java-projects/java-spring-boot.png";
2 | import Hotelium from "../../../assets/data-images/java-projects/hotelium.png";
3 | import MyFood from "../../../assets/data-images/java-projects/my-food.png";
4 |
5 | interface IJavaProjects {
6 | img: string;
7 | tools: string;
8 | name: string;
9 | description: string;
10 | link: string;
11 | button: string;
12 | }
13 |
14 | const javaProjects: Array = [
15 | {
16 | img: JavaStudies,
17 | tools: "Java, Spring Boot",
18 | name: "Java Studies Repository",
19 | description:
20 | "Repository containing my Markdown files for studying Java and Spring Boot.",
21 | link: "https://github.com/LadyJessie19/Java_Studies",
22 | button: "Repository",
23 | },
24 | {
25 | img: Hotelium,
26 | tools: "Java, Spring Boot",
27 | name: "Hotelium - Booking Reservation",
28 | description:
29 | "Final project completed during my Java Mentorship program, focusing on hotel booking reservations.",
30 | link: "https://github.com/LadyJessie19/Hotelium",
31 | button: "Repository",
32 | },
33 | {
34 | img: MyFood,
35 | tools: "Java, Spring Boot",
36 | name: "Ranking Search - MyFood",
37 | description:
38 | "Application that aggregates the most searched foods, showcasing a ranking system.",
39 | link: "https://github.com/LadyJessie19/MyFood",
40 | button: "Repository",
41 | },
42 | ];
43 |
44 | export default javaProjects;
45 |
--------------------------------------------------------------------------------
/portfolio/src/components/en-us/data/skills.ts:
--------------------------------------------------------------------------------
1 | interface ISkills {
2 | category: string;
3 | tools: string;
4 | }
5 |
6 | const skills: Array = [
7 | { category: "Languages", tools: "JavaScript Typescript Java SQL C Python" },
8 | { category: "Libraries", tools: "React.js Bootstrap jQuery" },
9 | { category: "Frameworks", tools: "Spring Boot Nest.js Express.js Node.js" },
10 | {
11 | category: "Tools",
12 | tools: "Git Jira Trello VSCode Postman Insomnia Figma",
13 | },
14 | { category: "Database", tools: "MongoDB PostgreSQL MySQL" },
15 | { category: "Testing", tools: "Jest" },
16 | ];
17 |
18 | export default skills;
19 |
--------------------------------------------------------------------------------
/portfolio/src/components/en-us/data/smallerProjects.ts:
--------------------------------------------------------------------------------
1 | interface ISmallerProjects {
2 | tools: string;
3 | title: string;
4 | description: string;
5 | button: string;
6 | link: string;
7 | }
8 |
9 | const smallerProjects: Array = [
10 | {
11 | tools: "JavaScript, HTML",
12 | title: "I-Common Manual",
13 | description:
14 | "Documentation created for a small software project during my first internship. Although I didn't participate in its development, I authored the manual.",
15 | button: "GitHub Repository",
16 | link: "https://github.com/LadyJessie19/I-Common_Documentation",
17 | },
18 | {
19 | tools: "JavaScript, HTML, DOM",
20 | title: "ReHT - Responsive Table Generator",
21 | description:
22 | "A small program capable of generating responsive tables on-screen based on user-selected rows and columns.",
23 | button: "GitHub Repository",
24 | link: "https://github.com/LadyJessie19/ReHT_Table_Generator",
25 | },
26 | {
27 | tools: "JavaScript, HTML, C#",
28 | title: "String Format JS/C#",
29 | description: "A string formatter in JavaScript that implements C# logic.",
30 | button: "GitHub Repository",
31 | link: "https://github.com/LadyJessie19/String-Format-JS-CSharp",
32 | },
33 | {
34 | tools:
35 | "React.js, Typescript, React Hooks, React Router Dom, Styled Components",
36 | title: "Arnia Monitorship - React.js",
37 | description:
38 | "React.js tutoring for students at Arnia, a programming school.",
39 | button: "GitHub Repository",
40 | link: "https://github.com/LadyJessie19/MonitorshipReactJS",
41 | },
42 | {
43 | tools: "Node.js, Typescript, MongoDB, SOLID, TDD, Jest, Vitest",
44 | title: "Arnia Monitorship - Node.js",
45 | description:
46 | "Node.js tutoring for students at Arnia, a programming school.",
47 | button: "GitHub Repository",
48 | link: "https://github.com/LadyJessie19/MonitorshipNodeJS",
49 | },
50 | {
51 | tools: "Java, OOP",
52 | title: "Classes - Java",
53 | description:
54 | "Classes to introduce Java to JavaScript students, focusing on compiled languages and object-oriented programming.",
55 | button: "GitHub Repository",
56 | link: "https://github.com/LadyJessie19/JavaArnia",
57 | },
58 | {
59 | tools:
60 | "React.js, Typescript, Components, Props, State, React Hooks, React Router Dom, Styled Components",
61 | title: "Classes - React.js",
62 | description:
63 | "Classes on the React.js library for beginners in advanced frontend development.",
64 | button: "GitHub Repository",
65 | link: "https://github.com/LadyJessie19/ReactArnia",
66 | },
67 | ];
68 |
69 | export default smallerProjects;
70 |
--------------------------------------------------------------------------------
/portfolio/src/components/en-us/pages/AboutMe/index.tsx:
--------------------------------------------------------------------------------
1 | import GlobalStyle from "../../../../styles/Global";
2 | import TinySideBar from "../../../reusable/TinySideBar";
3 | import HeaderSection from "../Home/HeaderSection";
4 | import {
5 | StyledContainerSecondaryPage,
6 | StyledHeaderHomePage,
7 | StyledItemsContainer,
8 | StyledListItem,
9 | } from "../../../../styles/ReusableStyles";
10 |
11 | import SecondaryPageTitle from "../../../reusable/SecondaryPageTitle";
12 | import SecondaryPageSection from "../../../reusable/SecondaryPageSection";
13 | import Footer from "../../../reusable/Footer";
14 | import SkillCard from "../../../reusable/SkillCard";
15 | import GeneralCard from "../../../reusable/GeneralCard";
16 |
17 | import skills from "../../data/skills";
18 | import certificates from "../../data/certificates";
19 |
20 | import aboutInfo from "../../data/_aboutData";
21 | import Decorations from "../../../reusable/Decorations";
22 | import PageContentAlignSecondary from "../../../reusable/PageContentAlignSecondary";
23 |
24 | const AboutMeEn = () => {
25 | return (
26 | <>
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
40 |
41 |
42 |
43 |
{aboutInfo.jessieBentesOne}
44 |
{aboutInfo.jessieBentesTwo}
45 |
{aboutInfo.jessieBentesThree}
46 |
{aboutInfo.jessieBentesFour}
47 |
48 |
49 |
50 |
51 |
52 | {skills.map((item, index) => (
53 |
58 | ))}
59 |
60 |
61 |
62 |
65 |
66 | {certificates.map((item, index) => (
67 |
75 | ))}
76 |
77 |
78 |
79 |
80 |
81 | {aboutInfo.funFacts.map((item, index) => (
82 | {item}
83 | ))}
84 |
85 |
86 |
87 |
88 |
89 | >
90 | );
91 | };
92 |
93 | export default AboutMeEn;
94 |
--------------------------------------------------------------------------------
/portfolio/src/components/en-us/pages/Contacts/index.tsx:
--------------------------------------------------------------------------------
1 | import GlobalStyle from "../../../../styles/Global";
2 | import TinySideBar from "../../../reusable/TinySideBar";
3 | import {
4 | StyledContactMain,
5 | StyledContentContactsPage,
6 | StyledHeaderHomePage,
7 | } from "../../../../styles/ReusableStyles";
8 | import HeaderSection from "../Home/HeaderSection";
9 | import SecondaryPageTitle from "../../../reusable/SecondaryPageTitle";
10 | import Footer from "../../../reusable/Footer";
11 | import SecondaryPageSection from "../../../reusable/SecondaryPageSection";
12 | import MessageMeCard from "../../../reusable/MessageMeCard";
13 |
14 | import contactInfo from "../../data/_contactData";
15 | import AllMediaComp from "../../../reusable/AllMediaComp";
16 | import PageContentAlignSecondary from "../../../reusable/PageContentAlignSecondary";
17 |
18 | const ContactsEn = () => {
19 | return (
20 | <>
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
33 |
34 |
35 |
36 |
37 |
{contactInfo.contactMeHeadline}
38 |
{contactInfo.contactMeOne}
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 | {contactInfo.allMedias.map((item, index) => (
48 |
54 | ))}
55 |
56 |
57 |
58 |
59 |
60 |
61 | >
62 | );
63 | };
64 |
65 | export default ContactsEn;
66 |
--------------------------------------------------------------------------------
/portfolio/src/components/en-us/pages/Home/AboutSection/index.tsx:
--------------------------------------------------------------------------------
1 | import {
2 | StyledContainer,
3 | StyledContentSection,
4 | StyledInnerContentContainer,
5 | } from "../../../../../styles/ReusableStyles";
6 | import MainButton from "../../../../reusable/MainButton";
7 | import SectionHeader from "../../../../reusable/SectionHeader";
8 |
9 | import JessieAboutMe from "../../../../../assets/jessie2.png";
10 | import HomeData from "../../../data/_homeData";
11 |
12 | const AboutSection = () => {
13 | return (
14 | <>
15 |
16 |
17 |
18 |
19 | {HomeData.aboutMeOne}
20 | {HomeData.aboutMeTwo}
21 | {HomeData.aboutMeThree}
22 | {HomeData.aboutMeFour}
23 |
27 |
28 |
29 |
35 |
36 |
37 |
38 | >
39 | );
40 | };
41 |
42 | export default AboutSection;
43 |
--------------------------------------------------------------------------------
/portfolio/src/components/en-us/pages/Home/BlogPostsSection/index.tsx:
--------------------------------------------------------------------------------
1 | import { StyledContentSection } from "../../../../../styles/ReusableStyles";
2 | import SectionHeader from "../../../../reusable/SectionHeader";
3 | import GeneralCard from "../../../../reusable/GeneralCard";
4 |
5 | import blogPosts from "../../../data/blogPosts";
6 |
7 | import HomeData from "../../../data/_homeData";
8 |
9 | const currentDisplay = blogPosts.slice(0, 3);
10 |
11 | const BlogPostsSection = () => {
12 | return (
13 |
14 |
18 |
19 | {currentDisplay.map((item, index) => (
20 |
28 | ))}
29 |
30 |
31 | );
32 | };
33 |
34 | export default BlogPostsSection;
35 |
--------------------------------------------------------------------------------
/portfolio/src/components/en-us/pages/Home/CertificatesSection/index.tsx:
--------------------------------------------------------------------------------
1 | import { StyledContentSection } from "../../../../../styles/ReusableStyles";
2 | import SectionHeader from "../../../../reusable/SectionHeader";
3 | import GeneralCard from "../../../../reusable/GeneralCard";
4 | import certificates from "../../../data/certificates";
5 |
6 | import HomeData from "../../../data/_homeData";
7 |
8 | const currentDisplay = certificates.slice(0, 3);
9 |
10 | const CertificatesSection = () => {
11 | return (
12 |
13 |
17 |
18 | {currentDisplay.map((item, index) => {
19 | return (
20 |
28 | );
29 | })}
30 |
31 |
32 | );
33 | };
34 |
35 | export default CertificatesSection;
36 |
--------------------------------------------------------------------------------
/portfolio/src/components/en-us/pages/Home/ContactSection/index.tsx:
--------------------------------------------------------------------------------
1 | import {
2 | StyledContainer,
3 | StyledContentSection,
4 | StyledInnerContentContainer,
5 | } from "../../../../../styles/ReusableStyles";
6 | import MessageMeCard from "../../../../reusable/MessageMeCard";
7 | import SectionHeader from "../../../../reusable/SectionHeader";
8 | import HomeData from "../../../data/_homeData";
9 |
10 | const ContactSection = () => {
11 | return (
12 | <>
13 |
14 |
15 |
16 |
17 | {HomeData.contactMeOne}
18 | {HomeData.contactMeTwo}
19 |
20 |
21 |
22 |
23 |
24 |
25 | >
26 | );
27 | };
28 |
29 | export default ContactSection;
30 |
--------------------------------------------------------------------------------
/portfolio/src/components/en-us/pages/Home/HeaderSection/index.tsx:
--------------------------------------------------------------------------------
1 | import Logo from "../../../../reusable/Logo";
2 | import NavBar from "../../../../reusable/NavBar";
3 | import jessieLogo from "../../../../../assets/logo.png";
4 |
5 | const HeaderSection = () => {
6 | return (
7 | <>
8 |
9 |
10 | >
11 | );
12 | };
13 |
14 | export default HeaderSection;
15 |
--------------------------------------------------------------------------------
/portfolio/src/components/en-us/pages/Home/IntroSection/index.tsx:
--------------------------------------------------------------------------------
1 | import Logo from "../../../../reusable/Logo";
2 | import LogoImg from "../../../../assets/Logo.svg";
3 |
4 | const IntroSection = () => {
5 | return (
6 | <>
7 |
8 | >
9 | );
10 | };
11 |
12 | export default IntroSection;
13 |
--------------------------------------------------------------------------------
/portfolio/src/components/en-us/pages/Home/MainSection/index.tsx:
--------------------------------------------------------------------------------
1 | import {
2 | StyledMainSection,
3 | StyledMainTextHomePage,
4 | } from "../../../../../styles/ReusableStyles";
5 | import MainImg from "../../../../reusable/MainImg";
6 | import MainButton from "../../../../reusable/MainButton";
7 | import cv from "../../../../../assets/cv/cv-jessie-bentes-en-us.pdf";
8 |
9 | import HomeInfo from "../../../data/_homeData";
10 | import HeaderHomePage from "../../../../reusable/HeaderHomePage";
11 |
12 | const MainSection = () => {
13 | return (
14 | <>
15 |
16 |
17 |
18 | {HomeInfo.introduction}
19 |
20 |
24 |
29 |
30 |
31 |
32 |
33 | >
34 | );
35 | };
36 |
37 | export default MainSection;
38 |
--------------------------------------------------------------------------------
/portfolio/src/components/en-us/pages/Home/ProjectsSection/index.tsx:
--------------------------------------------------------------------------------
1 | import { StyledContentSection } from "../../../../../styles/ReusableStyles";
2 | import SectionHeader from "../../../../reusable/SectionHeader";
3 | import BigProjectCard from "../../../../reusable/BigProjectCard";
4 | import biggerProjects from "../../../data/biggerProjects";
5 |
6 | import HomeData from "../../../data/_homeData";
7 |
8 | const currentDisplay = biggerProjects.slice(0, 3);
9 |
10 | const ProjectsSection = () => {
11 | return (
12 |
13 |
17 |
18 | {currentDisplay.map((item, index) => {
19 | return (
20 |
29 | );
30 | })}
31 |
32 |
33 | );
34 | };
35 |
36 | export default ProjectsSection;
37 |
--------------------------------------------------------------------------------
/portfolio/src/components/en-us/pages/Home/SkillsSection/index.tsx:
--------------------------------------------------------------------------------
1 | import {
2 | StyledContentSection,
3 | StyledSkillsSection,
4 | } from "../../../../../styles/ReusableStyles";
5 | import SectionHeader from "../../../../reusable/SectionHeader";
6 | import SkillCard from "../../../../reusable/SkillCard";
7 | import Figures from "../../../../../assets/Figures.svg";
8 | import skills from "../../../data/skills";
9 | import HomeData from "../../../data/_homeData";
10 |
11 | const SkillsSection = () => {
12 | return (
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 | {skills.map((item, index) => {
22 | return (
23 |
28 | );
29 | })}
30 |
31 |
32 |
33 |
34 | );
35 | };
36 |
37 | export default SkillsSection;
38 |
--------------------------------------------------------------------------------
/portfolio/src/components/en-us/pages/Home/index.tsx:
--------------------------------------------------------------------------------
1 | import GlobalStyle from "../../../../styles/Global";
2 | import TinySideBar from "../../../reusable/TinySideBar";
3 | import {
4 | StyledContainerHomePage,
5 | StyledHeaderHomePage,
6 | StyledMainHomePage,
7 | } from "../../../../styles/ReusableStyles";
8 | import Quote from "../../../reusable/Quote";
9 | import ProjectsSection from "./ProjectsSection";
10 | import SkillsSection from "./SkillsSection";
11 | import CertificatesSection from "./CertificatesSection";
12 | import BlogPostsSection from "./BlogPostsSection";
13 | import MainSection from "./MainSection";
14 | import HeaderSection from "./HeaderSection";
15 | import Footer from "../../../reusable/Footer";
16 | import AboutSection from "./AboutSection";
17 | import ContactSection from "./ContactSection";
18 | import Decorations from "../../../reusable/Decorations";
19 | import PageContentAlign from "../../../reusable/PageContentAlign";
20 |
21 | const HomeEn = () => {
22 | return (
23 | <>
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 | >
66 | );
67 | };
68 |
69 | export default HomeEn;
70 |
--------------------------------------------------------------------------------
/portfolio/src/components/en-us/pages/Projects/index.tsx:
--------------------------------------------------------------------------------
1 | import TinySideBar from "../../../reusable/TinySideBar";
2 | import {
3 | StyledContainerSecondaryPage,
4 | StyledHeaderHomePage,
5 | } from "../../../../styles/ReusableStyles";
6 | import GlobalStyle from "../../../../styles/Global";
7 | import HeaderSection from "../Home/HeaderSection";
8 |
9 | import Footer from "../../../reusable/Footer";
10 | import SecondaryPageTitle from "../../../reusable/SecondaryPageTitle";
11 | import SecondaryPageSection from "../../../reusable/SecondaryPageSection";
12 | import BigProjectCard from "../../../reusable/BigProjectCard";
13 | import GeneralCard from "../../../reusable/GeneralCard";
14 | import SmallProjectCard from "../../../reusable/SmallProjectCard";
15 |
16 | import biggerProjects from "../../data/biggerProjects";
17 | import designUX from "../../data/designUX";
18 | import blogPosts from "../../data/blogPosts";
19 | import javaProjects from "../../data/javaProjects";
20 | import smallerProjects from "../../data/smallerProjects";
21 |
22 | import projectInfo from "../../data/_projectsData";
23 | import Decorations from "../../../reusable/Decorations";
24 | import PageContentAlignSecondary from "../../../reusable/PageContentAlignSecondary";
25 |
26 | const ProjectsEn = () => {
27 | return (
28 | <>
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
42 |
43 |
44 |
45 | {biggerProjects.map((item, index) => {
46 | return (
47 |
56 | );
57 | })}
58 |
59 |
60 |
61 |
62 |
63 | {smallerProjects.map((item, index) => {
64 | return (
65 |
73 | );
74 | })}
75 |
76 |
77 |
78 |
79 |
80 | {javaProjects.map((item, index) => {
81 | return (
82 |
91 | );
92 | })}
93 |
94 |
95 |
96 |
97 |
98 | {designUX.map((item, index) => {
99 | return (
100 |
108 | );
109 | })}
110 |
111 |
112 |
113 |
116 |
117 | {blogPosts.map((item, index) => {
118 | return (
119 |
127 | );
128 | })}
129 |
130 |
131 |
132 |
133 |
134 | >
135 | );
136 | };
137 |
138 | export default ProjectsEn;
139 |
--------------------------------------------------------------------------------
/portfolio/src/components/pt-br/data/_aboutData.ts:
--------------------------------------------------------------------------------
1 | interface IAbout {
2 | pageTitle: string;
3 | pageDescription: string;
4 | pageSectionTitleOne: string;
5 | pageSectionTitleTwo: string;
6 | pageSectionTitleThree: string;
7 | pageSectionTitleFour: string;
8 | jessieBentesOne: string;
9 | jessieBentesTwo: string;
10 | jessieBentesThree: string;
11 | jessieBentesFour: string;
12 | funFacts: string[];
13 | }
14 |
15 | const AboutMeData: IAbout = {
16 | pageTitle: "sobre-mim",
17 | pageDescription: "Quem sou eu?",
18 | pageSectionTitleOne: "jessie-bentes",
19 | pageSectionTitleTwo: "habilidades",
20 | pageSectionTitleThree: "certificados",
21 | pageSectionTitleFour: "meus-fatos-divertidos",
22 | jessieBentesOne:
23 | "Olá! Eu sou Jéssica Bentes, uma criativa desenvolvedora fullstack, residente em Campo Grande. Minha jornada na tecnologia começou com experiências diversas, incluindo produção gráfica e escrita, antes de eu encontrar minha verdadeira paixão na programação.",
24 | jessieBentesTwo:
25 | "Em resumo, já trabalhei em um gerenciador de pacientes usando React.js, Node.js, MongoDB e Mongoose. Participei de uma aplicação de vagas de programação com Nest.js, TypeORM e PostgreSQL, minha primeira experiência em equipe. Desenvolvi uma plataforma de contato para médicos e hospitais com Spring Boot e AWS. Criei um sistema de ranking de comidas usando Spring Boot, MongoDB, Swagger e Railway para deploy. Trabalhei em um gerenciador de atendimentos para uma empresa de eventos com Spring Boot, MySQL e AWS, utilizando instâncias de desenvolvimento e homologação, além do Cognito para autenticação.",
26 | jessieBentesThree:
27 | "Impulsionada pelo desejo de contribuir de forma significativa para o campo, me dediquei a dominar várias linguagens e frameworks de programação. Sou profundamente inspirada pelo potencial da tecnologia em criar mudanças positivas e melhorar vidas.",
28 | jessieBentesFour:
29 | "Ansiosa para conversar com outros desenvolvedores, compartilhar insights e continuar minha jornada de crescimento e inovação no dinâmico mundo do desenvolvimento de software!",
30 | funFacts: [
31 | "Meu prato preferido é pizza (com muita pimenta).",
32 | "Me considero uma desensevolvedora/escritora.",
33 | "Sonho em visitar a Coreia do Sul.",
34 | "Um dos meus hobbies favoritos é jogar videogames.",
35 | "Consigo dizer 'eu te amo' em 7 linguagens diferentes.",
36 | "Sou apaixonada por música.",
37 | ],
38 | };
39 |
40 | export default AboutMeData;
41 |
--------------------------------------------------------------------------------
/portfolio/src/components/pt-br/data/_contactData.ts:
--------------------------------------------------------------------------------
1 | type MediaType = {
2 | name: string;
3 | link: string;
4 | icon: string;
5 | };
6 |
7 | interface IContact {
8 | pageTitle: string;
9 | pageDescription: string;
10 | pageSectionTitleOne: string;
11 | contactMeHeadline: string;
12 | contactMeOne: string;
13 | allMedias: Array;
14 | }
15 |
16 | const ContactMeData: IContact = {
17 | pageTitle: "contatos",
18 | pageDescription: "Você quer entrar em contato comigo?",
19 | pageSectionTitleOne: "todas-as-mídias",
20 | contactMeHeadline: "Estou aberta a trabalhos freelance!",
21 | contactMeOne:
22 | "Mas, se você tiver qualquer outro pedido ou apenas quiser conversar, me chame a qualquer momento.",
23 | allMedias: [
24 | {
25 | name: "LinkedIn",
26 | link: "https://www.linkedin.com/in/jessiemoura/",
27 | icon: "fa-brands fa-linkedin",
28 | },
29 | {
30 | name: "GitHub",
31 | link: "https://github.com/LadyJessie19",
32 | icon: "fa-brands fa-github",
33 | },
34 | {
35 | name: "Medium",
36 | link: "https://medium.com/@jessie_moura",
37 | icon: "fa-brands fa-medium",
38 | },
39 | {
40 | name: "Figma",
41 | link: "https://www.figma.com/files/user/1164006161769032343?fuid=1164006161769032343",
42 | icon: "fa-brands fa-figma",
43 | },
44 | {
45 | name: "Instagram",
46 | link: "https://www.instagram.com/lady_jessie19/",
47 | icon: "fa-brands fa-instagram",
48 | },
49 | {
50 | name: "Email",
51 | link: "mailto:jessie.moura19@gmail.com",
52 | icon: "fa-regular fa-envelope",
53 | },
54 | ],
55 | };
56 |
57 | export default ContactMeData;
58 |
--------------------------------------------------------------------------------
/portfolio/src/components/pt-br/data/_homeData.ts:
--------------------------------------------------------------------------------
1 | interface IHome {
2 | introduction: string;
3 | pathContact: string;
4 | buttonMainHome: string;
5 | downloadCV: string;
6 | SectionTitleOne: string;
7 | pathProjects: string;
8 | pathSectionProjects: string;
9 | SectionTitleTwo: string;
10 | SectionTitleThree: string;
11 | SectionTitleFour: string;
12 | SectionTitleFive: string;
13 | aboutMeOne: string;
14 | aboutMeTwo: string;
15 | aboutMeThree: string;
16 | aboutMeFour: string;
17 | pathAbout: string;
18 | pathSectionAbout: string;
19 | buttonAboutText: string;
20 | SectionTitleSix: string;
21 | contactMeOne: string;
22 | contactMeTwo: string;
23 | }
24 |
25 | const HomeData: IHome = {
26 | introduction:
27 | "Proficiente tanto no desenvolvimento de front-end quanto no de back-end, ela garante boas experiências de usuário durante todo o processo, desde a conceituação até a implantação.",
28 | pathContact: "/br/contatos",
29 | buttonMainHome: "Entre em Contato",
30 | downloadCV: "Baixar CV",
31 | SectionTitleOne: "projetos",
32 | pathProjects: "/br/projetos",
33 | pathSectionProjects: "/br/projetos/#artigos-de-blog",
34 | SectionTitleTwo: "habilidades",
35 | SectionTitleThree: "certificados",
36 | SectionTitleFour: "artigos",
37 | SectionTitleFive: "sobre-mim",
38 | aboutMeOne: "Oi!👋 Você pode me chamar de Jessie!",
39 | aboutMeTwo:
40 | "Sou desenvolvedora Fullstack, originalmente do Rio de Janeiro, agora morando em Campo Grande, MS. Comecei na programação em 2022 e trabalho principalmente com JavaScript, Java e SQL. Meu foco é em aplicativos da web e experiência do usuário.",
41 | aboutMeThree:
42 | "Fluente em inglês, pratico código limpo e tenho experiência com GIT. Além disso, trabalho como profesora em uma escola de programação. Estou animada para continuar crescendo e contribuindo no campo!",
43 | aboutMeFour:
44 | "Estou ansiosa para continuar aprendendo e colaborando com a comunidade de programação. Espero contribuir com meu conhecimento e habilidades enquanto continuo minha jornada neste campo emocionante da tecnologia.",
45 | pathAbout: "/br/sobre-mim",
46 | pathSectionAbout: "/br/sobre-mim/#certificados",
47 | buttonAboutText: "Leia Mais",
48 | SectionTitleSix: "contato",
49 | contactMeOne: "Estou aberta a trabalhos freelance!",
50 | contactMeTwo:
51 | "Mas, se você tiver qualquer outro pedido ou apenas quiser conversar, me chame a qualquer momento.",
52 | };
53 |
54 | export default HomeData;
55 |
--------------------------------------------------------------------------------
/portfolio/src/components/pt-br/data/_projectsData.ts:
--------------------------------------------------------------------------------
1 | interface IProjects {
2 | pageTitle: string;
3 | pageDescription: string;
4 | pageSectionTitleOne: string;
5 | pageSectionTitleTwo: string;
6 | pageSectionTitleThree: string;
7 | pageSectionTitleFour: string;
8 | pageSectionTitleFive: string;
9 | }
10 |
11 | const ProjectsData: IProjects = {
12 | pageTitle: "projetos",
13 | pageDescription: "Lista dos meus projetos",
14 | pageSectionTitleOne: "aplicativos-completos",
15 | pageSectionTitleTwo: "aplicativos-simples",
16 | pageSectionTitleThree: "projetos-java",
17 | pageSectionTitleFour: "projetos-design-ux",
18 | pageSectionTitleFive: "artigos-de-blog",
19 | };
20 |
21 | export default ProjectsData;
22 |
--------------------------------------------------------------------------------
/portfolio/src/components/pt-br/data/biggerProjects.ts:
--------------------------------------------------------------------------------
1 | import WexerFrontend from "../../../assets/data-images/bigger-projects/wexer-front.png";
2 | import WexerBackend from "../../../assets/data-images/bigger-projects/wexer-back.png";
3 | import MetaVagasFront from "../../../assets/data-images/bigger-projects/meta-vagas-front.png";
4 | import MetaVagasBack from "../../../assets/data-images/bigger-projects/meta-vagas-back.png";
5 | import ArniaTaskManager from "../../../assets/data-images/bigger-projects/arnia-task-manager.png";
6 | import ShoppingCart from "../../../assets/data-images/bigger-projects/shopping-cart.png";
7 | import ShoppingStore from "../../../assets/data-images/bigger-projects/shopping-store.png";
8 | import FrutamixFront from "../../../assets/data-images/bigger-projects/frutamix-front.png";
9 | import FrutamixBack from "../../../assets/data-images/bigger-projects/frutamix-backend.png";
10 |
11 | interface IProjects {
12 | img: any;
13 | tools: string;
14 | name: string;
15 | description: string;
16 | link: string;
17 | button: string;
18 | }
19 |
20 | const biggerProjects: Array = [
21 | {
22 | img: FrutamixFront,
23 | tools: "React.js, Typescript, React Router Dom, Styled Components",
24 | name: "Frutamix - Frontend",
25 | description:
26 | "Projeto frontend desenvolvido usando React.js e Typescript para uma loja de compra de sorvetes chamada Frutamix.",
27 | link: "https://github.com/LadyJessie19/frutamix-frontend",
28 | button: "Repositório GitHub",
29 | },
30 | {
31 | img: FrutamixBack,
32 | tools: "Nest.js, Typescript, Railway,",
33 | name: "Frutamix - Backend",
34 | description:
35 | "Projeto backend desenvolvido usando Nest.js e Typescript para o app do Frutamix.",
36 | link: "https://github.com/LadyJessie19/frutamix-backend",
37 | button: "Repositório GitHub",
38 | },
39 | {
40 | img: WexerFrontend,
41 | tools: "React.js, Typescript",
42 | name: "Wexer Psi - Frontend",
43 | description:
44 | "Projeto frontend desenvolvido usando React.js e Typescript para o Wexer Psi.",
45 | link: "https://github.com/LadyJessie19/WexerFrontend",
46 | button: "Repositório GitHub",
47 | },
48 | {
49 | img: WexerBackend,
50 | tools: "Node.js, Clean Architecture, N-Tier, SOLID",
51 | name: "Wexer Psi - Backend",
52 | description:
53 | "Projeto backend construído com Node.js, seguindo os princípios de Clean Architecture, N-Tier e SOLID para o Wexer Psi.",
54 | link: "https://github.com/LadyJessie19/WexerBackend",
55 | button: "Repositório GitHub",
56 | },
57 | {
58 | img: ArniaTaskManager,
59 | tools: "JavaScript, HTML, CSS, json-server, Vercel, Railway",
60 | name: "Gerenciador de Tarefas Arnia",
61 | description:
62 | "Meu primeiro projeto na Arnia, inicialmente projetado para fins acadêmicos, marcando minha introdução ao desenvolvimento web.",
63 | link: "https://github.com/LadyJessie19/ArniaTaskManager",
64 | button: "Repositório GitHub",
65 | },
66 | {
67 | img: ShoppingCart,
68 | tools: "React.js, Typescript",
69 | name: "Hortifruti - E-Commerce",
70 | description:
71 | "Um projeto acadêmico de e-commerce em pequena escala desenvolvido para um mercado local em meu bairro.",
72 | button: "Repositório no GitHub",
73 | link: "https://github.com/LadyJessie19/HortifruitEcommerce",
74 | },
75 | {
76 | img: ShoppingStore,
77 | tools: "React.js, Typescript",
78 | name: "Carrinho de Compras - E-Commerce",
79 | description:
80 | "Um pequeno projeto destinado a explorar os React Hooks e entender sua funcionalidade.",
81 | button: "Repositório no GitHub",
82 | link: "https://github.com/LadyJessie19/ShoppingEcommerce",
83 | },
84 | {
85 | img: MetaVagasBack,
86 | tools: "Nest.js, Typescript, Railway, Equipe de Desenvolvimento",
87 | name: "MetaVagas - Backend",
88 | description: "Backend para o aplicativo MetaVagas.",
89 | link: "https://github.com/LadyJessie19/meta_vagas_backend",
90 | button: "Repositório GitHub",
91 | },
92 | {
93 | img: MetaVagasFront,
94 | tools: "React.js, Typescript, Vercel, Equipe de Desenvolvimento",
95 | name: "MetaVagas - Frontend",
96 | description:
97 | "Frontend para o MetaVagas, um site projetado para buscar vagas de emprego para desenvolvedores.",
98 | link: "https://github.com/LadyJessie19/meta_vagas_frontend",
99 | button: "Repositório GitHub",
100 | },
101 | ];
102 |
103 | export default biggerProjects;
104 |
--------------------------------------------------------------------------------
/portfolio/src/components/pt-br/data/blogPosts.ts:
--------------------------------------------------------------------------------
1 | import TimeTravel from "../../../assets/data-images/blog-posts/time-travel.png";
2 | import SOLID from "../../../assets/data-images/blog-posts/solid.png";
3 | import SoftSkills from "../../../assets/data-images/blog-posts/soft-skills.png";
4 | import FullStackUX from "../../../assets/data-images/blog-posts/fullstack-ux.png";
5 | import DevTeacher from "../../../assets/data-images/blog-posts/dev-teacher.png";
6 |
7 | interface IBlogPost {
8 | img: any;
9 | title: string;
10 | description: string;
11 | link: string;
12 | button: string;
13 | }
14 |
15 | const blogPosts: Array = [
16 | {
17 | img: DevTeacher,
18 | title: "Desenvolvedora e Professora Fullstack",
19 | description:
20 | "Artigo sobre minha jornada equilibrando a codificação como desenvolvedora fullstack e o ensino como instrutora.",
21 | link: "https://medium.com/@jessie_moura/sobre-minha-experi%C3%AAncia-como-professora-sendo-uma-desenvolvedora-web-ca1c569e14ba",
22 | button: "Leia mais",
23 | },
24 | {
25 | img: SOLID,
26 | title: "Princípios SOLID",
27 | description:
28 | "Descubra como explicar os princípios SOLID de uma forma divertida e acessível usando uma metáfora de blocos de LEGO neste artigo envolvente.",
29 | link: "https://medium.com/@jessie_moura/explorando-os-princ%C3%ADpios-solid-construindo-com-blocos-de-lego-2707b12ae48e",
30 | button: "Leia mais",
31 | },
32 |
33 | {
34 | img: SoftSkills,
35 | title: "Soft Skills",
36 | description:
37 | "Explore como as habilidades interpessoais podem fazer a diferença na carreira de um programador e por que são tão importantes, mesmo para iniciantes. Continue lendo para descobrir mais!",
38 | link: "https://medium.com/@jessie_moura/os-estagi%C3%A1rios-como-o-filme-mostra-a-import%C3%A2ncia-das-soft-skills-para-os-programadores-iniciantes-d939cbc483dd",
39 | button: "Leia mais",
40 | },
41 |
42 | {
43 | img: FullStackUX,
44 | title: "Design de UX e Desenvolvimento Web",
45 | description:
46 | "Descubra como o conhecimento em Design de UX pode ser uma vantagem significativa para desenvolvedores fullstack e como pode impulsionar suas habilidades e projetos.",
47 | link: "https://medium.com/@jessie_moura/a-vantagem-do-conhecimento-em-ux-para-desenvolvedores-fullstack-38196b871c75",
48 | button: "Leia mais",
49 | },
50 | {
51 | img: TimeTravel,
52 | title: "Tarefa de Inglês da Arnia | Viagem no Tempo",
53 | description:
54 | "Imagine conversar com seu eu mais jovem e receber respostas surpreendentes. Leia para descobrir como essa jornada no tempo pode revelar insights inesperados.",
55 | link: "https://medium.com/@jessie_moura/arnia-english-homework-time-travel-1e6b62b9b64e",
56 | button: "Leia mais",
57 | },
58 | ];
59 |
60 | export default blogPosts;
61 |
--------------------------------------------------------------------------------
/portfolio/src/components/pt-br/data/certificates.ts:
--------------------------------------------------------------------------------
1 | import ArniaCertificate from "../../../assets/data-images/certificates/arnia-fullstack.png";
2 | import JavaSpringBoot from "../../../assets/data-images/certificates/java-spring-boot-certificate.png";
3 | import Typescript from "../../../assets/data-images/certificates/typescript.png";
4 | import DesignUXOne from "../../../assets/data-images/certificates/design-ux.png";
5 | import DesignUXTwo from "../../../assets/data-images/certificates/empathy.png";
6 | import DesignUXThree from "../../../assets/data-images/certificates/wireframes.png";
7 |
8 | interface ICertificates {
9 | img: any;
10 | title: string;
11 | description: string;
12 | link: string;
13 | button: string;
14 | }
15 |
16 | const certificates: Array = [
17 | {
18 | img: ArniaCertificate,
19 | title: "Certificado de Desenvolvedor Fullstack",
20 | description: "Obtive o certificado de Desenvolvedor Fullstack da Arnia.",
21 | link: "https://www.linkedin.com/in/jessiemoura/details/certifications/1635555790018/single-media-viewer/?type=IMAGE&profileId=ACoAAD6E-xEBIvRRy_KaUTviLPge8Ak7-qFsObU",
22 | button: "Veja mais",
23 | },
24 | {
25 | img: DesignUXOne,
26 | title: "Certificação em Design UX - Fundamentos",
27 | description:
28 | "Consegui o Certificado de UX do Google (1/7) cobrindo fundamentos de design UX.",
29 | link: "https://www.coursera.org/account/accomplishments/verify/6TCCGLQ65RLX",
30 | button: "Veja mais",
31 | },
32 | {
33 | img: JavaSpringBoot,
34 | title: "Certificação Java | Spring Boot",
35 | description: "Concluí estudos de Java com foco em Spring Boot na Udemy.",
36 | link: "https://www.udemy.com/certificate/UC-ee3de95e-2a36-412b-860c-d94566b64a6d/",
37 | button: "Veja mais",
38 | },
39 | {
40 | img: DesignUXTwo,
41 | title: "Certificação em Design UX - Empatia",
42 | description:
43 | "Obtive o Certificado de UX do Google (2/7) com foco em empatia no design UX.",
44 | link: "https://www.coursera.org/account/accomplishments/verify/B3NGU29HH9KP",
45 | button: "Veja mais",
46 | },
47 | {
48 | img: DesignUXThree,
49 | title: "Certificação em Design UX - Wireframes | Protótipos Lo-Fi",
50 | description:
51 | "Concluí o Certificado de UX do Google (3/7) cobrindo wireframes e protótipos lo-fi.",
52 | link: "https://www.coursera.org/account/accomplishments/verify/DPMZ5HJJE443",
53 | button: "Veja mais",
54 | },
55 | {
56 | img: Typescript,
57 | title: "Certificação Typescript",
58 | description:
59 | "Concluí estudos de Typescript e Programação Orientada a Objetos (POO) na Udemy.",
60 | link: "https://www.udemy.com/certificate/UC-580be9ad-a4ee-4dfc-b047-f378d21dd3eb/",
61 | button: "Veja mais",
62 | },
63 | ];
64 |
65 | export default certificates;
66 |
--------------------------------------------------------------------------------
/portfolio/src/components/pt-br/data/designUX.ts:
--------------------------------------------------------------------------------
1 | import LeNu from "../../../assets/data-images/design-ux/lofi-prototype.png";
2 | import Personas from "../../../assets/data-images/design-ux/persona.png";
3 | import CompetitiveAnalysis from "../../../assets/data-images/design-ux/competitive-audit.png";
4 | import CompetitiveReport from "../../../assets/data-images/design-ux/competitive-audit-report.png";
5 | import Storyboard from "../../../assets/data-images/design-ux/storyboard.png";
6 | import StoryboardCloseUp from "../../../assets/data-images/design-ux/storyboard-closeup.png";
7 |
8 | interface IDesignUX {
9 | img: string;
10 | tools: string;
11 | name: string;
12 | description: string;
13 | link: string;
14 | button: string;
15 | }
16 |
17 | const designUX: Array = [
18 | {
19 | img: LeNu,
20 | tools: "Figma, Design de UX",
21 | name: "LeNu App - Protótipo Lo-Fi",
22 | description:
23 | "Primeiro protótipo Lo-Fi criado usando Figma para demonstrar o aplicativo LeNu, um sistema de pedidos de restaurante agendado.",
24 | link: "https://www.figma.com/proto/0PZ2SCNQ2IlAgJDNvAIhcg/LeNu-Wireframes?type=design&node-id=4-8&t=wfESQtGHRsrhD8RU-0&scaling=scale-down&page-id=0%3A1&starting-point-node-id=4%3A8",
25 | button: "Mais detalhes",
26 | },
27 |
28 | {
29 | img: Personas,
30 | tools: "Apresentação do Google, Avaliações de Clientes",
31 | name: "Personas",
32 | description:
33 | "Criação de personas de usuário para refletir o público-alvo e suas necessidades para o aplicativo.",
34 | link: "https://docs.google.com/presentation/d/1-rBktYJ4MduAXL_ygiJ1ELd8IGhDXepawtZjgFr9CfQ/edit?usp=sharing",
35 | button: "Mais detalhes",
36 | },
37 |
38 | {
39 | img: CompetitiveAnalysis,
40 | tools: "Planilhas do Google, Pesquisa Competitiva",
41 | name: "Auditoria Competitiva",
42 | description:
43 | "Pesquisa realizada para coletar dados sobre empresas similares, seus objetivos e métodos para informar o desenvolvimento do aplicativo LeNu.",
44 | link: "https://docs.google.com/spreadsheets/d/1W685l2nbxf6sNDKDS53l5UfKNHvB-X-eVtp56fYxoYA/edit?usp=sharing",
45 | button: "Mais detalhes",
46 | },
47 |
48 | {
49 | img: CompetitiveReport,
50 | tools: "Documentos do Google, Auditoria Competitiva",
51 | name: "Relatório de Auditoria Competitiva",
52 | description:
53 | "Relatório resumindo os dados coletados durante o processo de auditoria competitiva.",
54 | link: "https://docs.google.com/document/d/1GFBEzkTFD1z6sqJicBRJx8SZCdAB0b87K3t006ufJ8c/edit?usp=sharing",
55 | button: "Mais detalhes",
56 | },
57 |
58 | {
59 | img: Storyboard,
60 | tools: "Apresentação do Google, Desenho em Caderno",
61 | name: "Storyboard",
62 | description:
63 | "Apresentação que delineia o caminho do usuário através do aplicativo para visualizar a experiência do usuário.",
64 | link: "https://docs.google.com/presentation/d/1q36yqejV4-ZYarPLhpnZAJ55rmB65fzfZE6EWQDJ68w/edit?usp=sharing&resourcekey=0-uITU2Uj63UrEhIK6u1xzPw",
65 | button: "Mais detalhes",
66 | },
67 |
68 | {
69 | img: StoryboardCloseUp,
70 | tools: "Apresentação do Google, Desenho em Caderno",
71 | name: "Storyboard - Detalhes",
72 | description:
73 | "Apresentação detalhada focando em caminhos específicos do usuário dentro do aplicativo para um exame mais detalhado da experiência do usuário.",
74 | link: "https://docs.google.com/presentation/d/1avCgZYN9fdXuQQ5YUvkGUAqntb0bj3EWfWkuy182lxs/edit?usp=sharing&resourcekey=0-aQAnYTPMgmVEJx-WyJRJIA",
75 | button: "Mais detalhes",
76 | },
77 | ];
78 |
79 | export default designUX;
80 |
--------------------------------------------------------------------------------
/portfolio/src/components/pt-br/data/javaProjects.ts:
--------------------------------------------------------------------------------
1 | import JavaStudies from "../../../assets/data-images/java-projects/java-spring-boot.png";
2 | import Hotelium from "../../../assets/data-images/java-projects/hotelium.png";
3 | import MyFood from "../../../assets/data-images/java-projects/my-food.png";
4 |
5 | interface IJavaProjects {
6 | img: string;
7 | tools: string;
8 | name: string;
9 | description: string;
10 | link: string;
11 | button: string;
12 | }
13 |
14 | const javaProjects: Array = [
15 | {
16 | img: JavaStudies,
17 | tools: "Java, Spring Boot",
18 | name: "Repositório de Estudos Java",
19 | description:
20 | "Repositório contendo meus arquivos Markdown para estudar Java e Spring Boot.",
21 | link: "https://github.com/LadyJessie19/Java_Studies",
22 | button: "Repositório",
23 | },
24 | {
25 | img: Hotelium,
26 | tools: "Java, Spring Boot",
27 | name: "Hotelium - Reserva de Quartos",
28 | description:
29 | "Projeto final concluído durante meu programa de mentoria em Java, focado em reservas de quartos de hotel.",
30 | link: "https://github.com/LadyJessie19/Hotelium",
31 | button: "Repositório",
32 | },
33 | {
34 | img: MyFood,
35 | tools: "Java, Spring Boot",
36 | name: "Ranking de Busca - MyFood",
37 | description:
38 | "Aplicativo que agrega os alimentos mais pesquisados, mostrando um sistema de classificação.",
39 | link: "https://github.com/LadyJessie19/MyFood",
40 | button: "Repositório",
41 | },
42 | ];
43 |
44 | export default javaProjects;
45 |
--------------------------------------------------------------------------------
/portfolio/src/components/pt-br/data/skills.ts:
--------------------------------------------------------------------------------
1 | interface ISkills {
2 | category: string;
3 | tools: string;
4 | }
5 |
6 | const skills: Array = [
7 | { category: "Linguagens", tools: "JavaScript Typescript Java SQL C Python" },
8 | { category: "Bibliotecas", tools: "React.js Bootstrap jQuery" },
9 | { category: "Frameworks", tools: "Spring Boot Nest.js Express.js Node.js" },
10 | {
11 | category: "Ferramentas",
12 | tools: "Git Jira Trello VSCode Postman Insomnia Figma Beekeeper DBeaver",
13 | },
14 | { category: "Banco de Dados", tools: "MongoDB PostgreSQL MySQL" },
15 | { category: "Testes", tools: "Jest" },
16 | ];
17 |
18 | export default skills;
19 |
--------------------------------------------------------------------------------
/portfolio/src/components/pt-br/data/smallerProjects.ts:
--------------------------------------------------------------------------------
1 | interface ISmallerProjects {
2 | tools: string;
3 | title: string;
4 | description: string;
5 | button: string;
6 | link: string;
7 | }
8 |
9 | const smallerProjects: Array = [
10 | {
11 | tools: "JavaScript, HTML",
12 | title: "Manual I-Common",
13 | description:
14 | "Documentação criada para um pequeno projeto de software durante meu primeiro estágio. Embora eu não tenha participado do seu desenvolvimento, fui responsável pela autoria do manual.",
15 | button: "Repositório no GitHub",
16 | link: "https://github.com/LadyJessie19/I-Common_Documentation",
17 | },
18 | {
19 | tools: "JavaScript, HTML, DOM",
20 | title: "ReHT - Gerador de Tabelas Responsivas",
21 | description:
22 | "Um pequeno programa capaz de gerar tabelas responsivas na tela com base nas linhas e colunas selecionadas pelo usuário.",
23 | button: "Repositório no GitHub",
24 | link: "https://github.com/LadyJessie19/ReHT_Table_Generator",
25 | },
26 | {
27 | tools: "JavaScript, HTML, C#",
28 | title: "String Format JS/C#",
29 | description:
30 | "Um formatador de strings em JavaScript que implementa a lógica do C#.",
31 | button: "Repositório no GitHub",
32 | link: "https://github.com/LadyJessie19/String-Format-JS-CSharp",
33 | },
34 | {
35 | tools:
36 | "React.js, Typescript, React Hooks, React Router Dom, Styled Components",
37 | title: "Monitoria Arnia - React.js",
38 | description:
39 | "Monitoria de React.js para alunos da Arnia, uma escola de programação.",
40 | button: "Repositório no GitHub",
41 | link: "https://github.com/LadyJessie19/MonitorshipReactJS",
42 | },
43 | {
44 | tools: "Node.js, Typescript, MongoDB, SOLID, TDD, Jest, Vitest",
45 | title: "Monitoria Arnia - Node.js",
46 | description:
47 | "Monitoria de Node.js para alunos da Arnia, uma escola de programação.",
48 | button: "Repositório no GitHub",
49 | link: "https://github.com/LadyJessie19/MonitorshipNodeJS",
50 | },
51 | {
52 | tools: "Java, POO",
53 | title: "Aulas - Java",
54 | description:
55 | "Aulas para introduzir Java a estudantes de JavaScript, focando em linguagens compiladas e programação orientada a objetos.",
56 | button: "Repositório no GitHub",
57 | link: "https://github.com/LadyJessie19/JavaArnia",
58 | },
59 | {
60 | tools:
61 | "React.js, Typescript, Components, Props, State, React Hooks, React Router Dom, Styled Components",
62 | title: "Aulas - React.js",
63 | description:
64 | "Aulas da biblioteca React.js para iniciantes no desenvolvimento frontend avançado.",
65 | button: "Repositório no GitHub",
66 | link: "https://github.com/LadyJessie19/ReactArnia",
67 | },
68 | ];
69 |
70 | export default smallerProjects;
71 |
--------------------------------------------------------------------------------
/portfolio/src/components/pt-br/pages/AboutMe/index.tsx:
--------------------------------------------------------------------------------
1 | import GlobalStyle from "../../../../styles/Global";
2 | import TinySideBar from "../../../reusable/TinySideBar";
3 | import HeaderSection from "../Home/HeaderSection";
4 | import {
5 | StyledContainerSecondaryPage,
6 | StyledHeaderHomePage,
7 | StyledItemsContainer,
8 | StyledListItem,
9 | } from "../../../../styles/ReusableStyles";
10 |
11 | import SecondaryPageTitle from "../../../reusable/SecondaryPageTitle";
12 | import SecondaryPageSection from "../../../reusable/SecondaryPageSection";
13 | import Footer from "../../../reusable/Footer";
14 | import SkillCard from "../../../reusable/SkillCard";
15 | import GeneralCard from "../../../reusable/GeneralCard";
16 |
17 | import skills from "../../data/skills";
18 | import certificates from "../../data/certificates";
19 |
20 | import aboutInfo from "../../data/_aboutData";
21 | import Decorations from "../../../reusable/Decorations";
22 | import PageContentAlignSecondary from "../../../reusable/PageContentAlignSecondary";
23 |
24 | const AboutMePt = () => {
25 | return (
26 | <>
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
40 |
41 |
42 |
43 |
{aboutInfo.jessieBentesOne}
44 |
{aboutInfo.jessieBentesTwo}
45 |
{aboutInfo.jessieBentesThree}
46 |
{aboutInfo.jessieBentesFour}
47 |
48 |
49 |
50 |
51 |
52 | {skills.map((item, index) => (
53 |
58 | ))}
59 |
60 |
61 |
62 |
65 |
66 | {certificates.map((item, index) => (
67 |
75 | ))}
76 |
77 |
78 |
79 |
80 |
81 | {aboutInfo.funFacts.map((item, index) => (
82 | {item}
83 | ))}
84 |
85 |
86 |
87 |
88 |
89 | >
90 | );
91 | };
92 |
93 | export default AboutMePt;
94 |
--------------------------------------------------------------------------------
/portfolio/src/components/pt-br/pages/Contacts/index.tsx:
--------------------------------------------------------------------------------
1 | import GlobalStyle from "../../../../styles/Global";
2 | import TinySideBar from "../../../reusable/TinySideBar";
3 | import {
4 | StyledContactMain,
5 | StyledContentContactsPage,
6 | StyledHeaderHomePage,
7 | } from "../../../../styles/ReusableStyles";
8 | import HeaderSection from "../Home/HeaderSection";
9 | import SecondaryPageTitle from "../../../reusable/SecondaryPageTitle";
10 | import Footer from "../../../reusable/Footer";
11 | import SecondaryPageSection from "../../../reusable/SecondaryPageSection";
12 | import MessageMeCard from "../../../reusable/MessageMeCard";
13 |
14 | import contactInfo from "../../data/_contactData";
15 | import AllMediaComp from "../../../reusable/AllMediaComp";
16 | import PageContentAlignSecondary from "../../../reusable/PageContentAlignSecondary";
17 |
18 | const ContactsPt = () => {
19 | return (
20 | <>
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
33 |
34 |
35 |
36 |
{contactInfo.contactMeHeadline}
37 |
{contactInfo.contactMeOne}
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 | {contactInfo.allMedias.map((item, index) => (
47 |
53 | ))}
54 |
55 |
56 |
57 |
58 |
59 |
60 | >
61 | );
62 | };
63 |
64 | export default ContactsPt;
65 |
--------------------------------------------------------------------------------
/portfolio/src/components/pt-br/pages/Home/AboutSection/index.tsx:
--------------------------------------------------------------------------------
1 | import {
2 | StyledContainer,
3 | StyledContentSection,
4 | StyledInnerContentContainer,
5 | } from "../../../../../styles/ReusableStyles";
6 | import MainButton from "../../../../reusable/MainButton";
7 | import SectionHeader from "../../../../reusable/SectionHeader";
8 |
9 | import JessieAboutMe from "../../../../../assets/jessie2.png";
10 | import HomeData from "../../../data/_homeData";
11 |
12 | const AboutSection = () => {
13 | return (
14 | <>
15 |
16 |
17 |
18 |
19 | {HomeData.aboutMeOne}
20 | {HomeData.aboutMeTwo}
21 | {HomeData.aboutMeThree}
22 | {HomeData.aboutMeFour}
23 |
27 |
28 |
29 |
35 |
36 |
37 |
38 | >
39 | );
40 | };
41 |
42 | export default AboutSection;
43 |
--------------------------------------------------------------------------------
/portfolio/src/components/pt-br/pages/Home/BlogPostsSection/index.tsx:
--------------------------------------------------------------------------------
1 | import { StyledContentSection } from "../../../../../styles/ReusableStyles";
2 | import SectionHeader from "../../../../reusable/SectionHeader";
3 | import GeneralCard from "../../../../reusable/GeneralCard";
4 |
5 | import blogPosts from "../../../data/blogPosts";
6 |
7 | import HomeData from "../../../data/_homeData";
8 |
9 | const currentDisplay = blogPosts.slice(0, 3);
10 |
11 | const BlogPostsSection = () => {
12 | return (
13 |
14 |
18 |
19 | {currentDisplay.map((item, index) => (
20 |
28 | ))}
29 |
30 |
31 | );
32 | };
33 |
34 | export default BlogPostsSection;
35 |
--------------------------------------------------------------------------------
/portfolio/src/components/pt-br/pages/Home/CertificatesSection/index.tsx:
--------------------------------------------------------------------------------
1 | import { StyledContentSection } from "../../../../../styles/ReusableStyles";
2 | import SectionHeader from "../../../../reusable/SectionHeader";
3 | import GeneralCard from "../../../../reusable/GeneralCard";
4 | import certificates from "../../../data/certificates";
5 |
6 | import HomeData from "../../../data/_homeData";
7 |
8 | const currentDisplay = certificates.slice(0, 3);
9 |
10 | const CertificatesSection = () => {
11 | return (
12 |
13 |
17 |
18 | {currentDisplay.map((item, index) => {
19 | return (
20 |
28 | );
29 | })}
30 |
31 |
32 | );
33 | };
34 |
35 | export default CertificatesSection;
36 |
--------------------------------------------------------------------------------
/portfolio/src/components/pt-br/pages/Home/ContactSection/index.tsx:
--------------------------------------------------------------------------------
1 | import {
2 | StyledContainer,
3 | StyledContentSection,
4 | StyledInnerContentContainer,
5 | } from "../../../../../styles/ReusableStyles";
6 | import MessageMeCard from "../../../../reusable/MessageMeCard";
7 | import SectionHeader from "../../../../reusable/SectionHeader";
8 | import HomeData from "../../../data/_homeData";
9 |
10 | const ContactSection = () => {
11 | return (
12 | <>
13 |
14 |
15 |
16 |
17 | {HomeData.contactMeOne}
18 | {HomeData.contactMeTwo}
19 |
20 |
21 |
22 |
23 |
24 |
25 | >
26 | );
27 | };
28 |
29 | export default ContactSection;
30 |
--------------------------------------------------------------------------------
/portfolio/src/components/pt-br/pages/Home/HeaderSection/index.tsx:
--------------------------------------------------------------------------------
1 | import Logo from "../../../../reusable/Logo";
2 | import NavBar from "../../../../reusable/NavBar";
3 | import jessieLogo from "../../../../../assets/logo.png";
4 |
5 | const HeaderSection = () => {
6 | return (
7 | <>
8 |
9 |
10 | >
11 | );
12 | };
13 |
14 | export default HeaderSection;
15 |
--------------------------------------------------------------------------------
/portfolio/src/components/pt-br/pages/Home/IntroSection/index.tsx:
--------------------------------------------------------------------------------
1 | import Logo from "../../../../reusable/Logo";
2 | import LogoImg from "../../../../assets/Logo.svg";
3 |
4 | const IntroSection = () => {
5 | return (
6 | <>
7 |
8 | >
9 | );
10 | };
11 |
12 | export default IntroSection;
13 |
--------------------------------------------------------------------------------
/portfolio/src/components/pt-br/pages/Home/MainSection/index.tsx:
--------------------------------------------------------------------------------
1 | import {
2 | StyledMainSection,
3 | StyledMainTextHomePage,
4 | } from "../../../../../styles/ReusableStyles";
5 | import MainImg from "../../../../reusable/MainImg";
6 | import MainButton from "../../../../reusable/MainButton";
7 | import cv from "../../../../../assets/cv/cv-jessie-bentes-pt-br.pdf";
8 |
9 | import HomeInfo from "../../../data/_homeData";
10 | import HeaderHomePage from "../../../../reusable/HeaderHomePage";
11 |
12 | const MainSection = () => {
13 | return (
14 | <>
15 |
16 |
17 |
18 | {HomeInfo.introduction}
19 |
20 |
24 |
29 |
30 |
31 |
32 |
33 | >
34 | );
35 | };
36 |
37 | export default MainSection;
38 |
--------------------------------------------------------------------------------
/portfolio/src/components/pt-br/pages/Home/ProjectsSection/index.tsx:
--------------------------------------------------------------------------------
1 | import { StyledContentSection } from "../../../../../styles/ReusableStyles";
2 | import SectionHeader from "../../../../reusable/SectionHeader";
3 | import BigProjectCard from "../../../../reusable/BigProjectCard";
4 | import biggerProjects from "../../../data/biggerProjects";
5 |
6 | import HomeData from "../../../data/_homeData";
7 |
8 | const currentDisplay = biggerProjects.slice(0, 3);
9 |
10 | const ProjectsSection = () => {
11 | return (
12 |
13 |
17 |
18 | {currentDisplay.map((item, index) => {
19 | return (
20 |
29 | );
30 | })}
31 |
32 |
33 | );
34 | };
35 |
36 | export default ProjectsSection;
37 |
--------------------------------------------------------------------------------
/portfolio/src/components/pt-br/pages/Home/SkillsSection/index.tsx:
--------------------------------------------------------------------------------
1 | import {
2 | StyledContentSection,
3 | StyledSkillsSection,
4 | } from "../../../../../styles/ReusableStyles";
5 | import SectionHeader from "../../../../reusable/SectionHeader";
6 | import SkillCard from "../../../../reusable/SkillCard";
7 | import Figures from "../../../../../assets/Figures.svg";
8 | import skills from "../../../data/skills";
9 | import HomeData from "../../../data/_homeData";
10 |
11 | const SkillsSection = () => {
12 | return (
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 | {skills.map((item, index) => {
22 | return (
23 |
28 | );
29 | })}
30 |
31 |
32 |
33 |
34 | );
35 | };
36 |
37 | export default SkillsSection;
38 |
--------------------------------------------------------------------------------
/portfolio/src/components/pt-br/pages/Home/index.tsx:
--------------------------------------------------------------------------------
1 | import GlobalStyle from "../../../../styles/Global";
2 | import TinySideBar from "../../../reusable/TinySideBar";
3 | import {
4 | StyledContainerHomePage,
5 | StyledHeaderHomePage,
6 | StyledMainHomePage,
7 | } from "../../../../styles/ReusableStyles";
8 | import Quote from "../../../reusable/Quote";
9 | import ProjectsSection from "./ProjectsSection";
10 | import SkillsSection from "./SkillsSection";
11 | import CertificatesSection from "./CertificatesSection";
12 | import BlogPostsSection from "./BlogPostsSection";
13 | import MainSection from "./MainSection";
14 | import HeaderSection from "./HeaderSection";
15 | import Footer from "../../../reusable/Footer";
16 | import AboutSection from "./AboutSection";
17 | import ContactSection from "./ContactSection";
18 | import Decorations from "../../../reusable/Decorations";
19 | import PageContentAlign from "../../../reusable/PageContentAlign";
20 |
21 | const HomePt = () => {
22 | return (
23 | <>
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 | >
66 | );
67 | };
68 |
69 | export default HomePt;
70 |
--------------------------------------------------------------------------------
/portfolio/src/components/reusable/AllMediaComp.tsx:
--------------------------------------------------------------------------------
1 | import { StyledAllMediaComp } from "../../styles/ReusableStyles";
2 |
3 | interface IProps {
4 | name: string;
5 | link: string;
6 | icon: string;
7 | }
8 |
9 | const AllMediaComp = ({ name, link, icon }: IProps) => {
10 | return (
11 |
12 |
13 |
14 |
15 | {name}
16 |
17 |
18 | );
19 | };
20 |
21 | export default AllMediaComp;
22 |
--------------------------------------------------------------------------------
/portfolio/src/components/reusable/BigProjectCard.tsx:
--------------------------------------------------------------------------------
1 | import { StyledBigCardProject } from "../../styles/ReusableStyles";
2 | import MainButton from "./MainButton";
3 |
4 | interface IProps {
5 | img: any;
6 | tools: string;
7 | name: string;
8 | description: string;
9 | link: string;
10 | button: string;
11 | }
12 |
13 | const BigProjectCard = ({
14 | img,
15 | tools,
16 | name,
17 | description,
18 | link,
19 | button,
20 | }: IProps) => {
21 | return (
22 | <>
23 |
24 |
25 |
26 |
27 | {tools}
28 |
29 |
30 |
{name}
31 |
32 |
35 |
36 |
37 |
38 |
39 |
40 | >
41 | );
42 | };
43 |
44 | export default BigProjectCard;
45 |
--------------------------------------------------------------------------------
/portfolio/src/components/reusable/Decorations.tsx:
--------------------------------------------------------------------------------
1 | import {
2 | StyledImgLeftSide,
3 | StyledImgRightSide,
4 | } from "../../styles/ReusableStyles";
5 |
6 | import SquareDecor from "./SquareDecor";
7 | import DotsDecor from "./DotsDecor";
8 |
9 | type SizeRenderDecor = "small" | "medium" | "large" | "big";
10 | const Decorations = ({ size }: { size: SizeRenderDecor }) => {
11 | return (
12 | <>
13 |
14 | {size === "small" && }
15 | {size === "medium" && (
16 | <>
17 |
18 |
19 |
20 | >
21 | )}
22 | {size === "large" && (
23 | <>
24 |
25 |
26 |
27 |
28 |
29 | >
30 | )}
31 | {size === "big" && (
32 | <>
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 | >
41 | )}
42 |
43 |
44 |
45 | {size === "small" && }
46 | {size === "medium" && (
47 | <>
48 |
49 |
50 |
51 | >
52 | )}
53 | {size === "large" && (
54 | <>
55 |
56 |
57 |
58 |
59 |
60 | >
61 | )}
62 | {size === "big" && (
63 | <>
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 | >
72 | )}
73 |
74 | >
75 | );
76 | };
77 |
78 | export default Decorations;
79 |
--------------------------------------------------------------------------------
/portfolio/src/components/reusable/DotsDecor.tsx:
--------------------------------------------------------------------------------
1 | import DotsImg from "../../assets/Dots.svg";
2 |
3 | const DotsDecor = () => {
4 | return (
5 | <>
6 |
7 | >
8 | );
9 | };
10 |
11 | export default DotsDecor;
12 |
--------------------------------------------------------------------------------
/portfolio/src/components/reusable/Footer.tsx:
--------------------------------------------------------------------------------
1 | import { StyledFooter } from "../../styles/ReusableStyles";
2 | import Github from "../../assets/Github.svg";
3 | import Figma from "../../assets/Figma.svg";
4 | import Discord from "../../assets/Discord.svg";
5 | import Logo from "./Logo";
6 | import LogoImg from "../../assets/logo.png";
7 |
8 | const Footer = () => {
9 | return (
10 | <>
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 | jessie.moura19@gmail.com
19 |
20 |
Fullstack Developer and UX Designer
21 |
I would love to thanks the Figma onwer.
22 |
23 |
24 | Thanks, Elias! You rock!{" "}
25 |
34 | figma-link
35 |
36 |
37 |
38 |
59 |
60 |
61 | © Copyright 2024. Made by Jessie Bentes
62 |
63 |
64 | >
65 | );
66 | };
67 |
68 | export default Footer;
69 |
--------------------------------------------------------------------------------
/portfolio/src/components/reusable/GeneralCard.tsx:
--------------------------------------------------------------------------------
1 | import { StyledGeneralCard } from "../../styles/ReusableStyles";
2 | import MainButton from "./MainButton";
3 |
4 | interface IProps {
5 | img: any;
6 | title: string;
7 | description: string;
8 | link: string;
9 | button: string;
10 | }
11 |
12 | const GeneralCard = ({ img, title, description, link, button }: IProps) => {
13 | return (
14 | <>
15 |
16 |
17 |
18 |
19 |
20 |
21 |
{title}
22 |
23 |
{description}
24 |
25 |
26 |
27 |
28 |
29 | >
30 | );
31 | };
32 |
33 | export default GeneralCard;
34 |
--------------------------------------------------------------------------------
/portfolio/src/components/reusable/HeaderHomePage.tsx:
--------------------------------------------------------------------------------
1 | import { StyledHeaderElement } from "../../styles/ReusableStyles";
2 | import { useLanguage } from "../../contexts/LanguageProvider";
3 |
4 | const HeaderHomePage = () => {
5 | const { language } = useLanguage() || { language: "EN-US" };
6 | return language === "EN-US" ? (
7 |
8 | Jessica is a Fullstack Developer and a{" "}
9 | UX Designer
10 |
11 | ) : (
12 |
13 | Jessica é uma Desenvolvedora Fullstack e{" "}
14 | UX Designer
15 |
16 | );
17 | };
18 |
19 | export default HeaderHomePage;
20 |
--------------------------------------------------------------------------------
/portfolio/src/components/reusable/HeaderTitle.tsx:
--------------------------------------------------------------------------------
1 |
2 | const HeaderTitle = () => {
3 | return (
4 | <>
5 |
6 |
Jessie is a Fullstack Developer and UX Designer
7 |
8 |
9 |
Proficient in both front-end and back-end development, she ensures smooth user experiences throughout the entire process, from conceptualization to deployment.
10 |
11 |
12 |
Contact me!
13 |
14 | >
15 | )
16 | }
17 |
18 | export default HeaderTitle
--------------------------------------------------------------------------------
/portfolio/src/components/reusable/LanguagesDropdown.tsx:
--------------------------------------------------------------------------------
1 | import Dropdown from "../../assets/Dropdown.svg";
2 | import { StyledDropdown } from "../../styles/ReusableStyles";
3 | import { useLanguage } from "../../contexts/LanguageProvider";
4 | import { useState } from "react";
5 |
6 | const LanguagesDropdown = () => {
7 | const [isOpen, setIsOpen] = useState(false);
8 |
9 | const optionsPaths = [
10 | { option: "EN-US", path: "/us" },
11 | {
12 | option: "PT-BR",
13 | path: "/br",
14 | },
15 | ];
16 | const { language, changeLanguage } = useLanguage() || {
17 | language: localStorage.getItem("language") || "EN-US",
18 | changeLanguage: () => {},
19 | };
20 |
21 | const toggleDropdown = () => {
22 | setIsOpen(!isOpen);
23 | };
24 |
25 | const handleOptionClick = (option: string, path: string) => {
26 | changeLanguage(option, path);
27 | setIsOpen(false);
28 | };
29 |
30 | return (
31 |
32 |
33 | {language}
34 |
35 |
36 | {isOpen && (
37 |
38 | {optionsPaths.map((item, index) => (
39 | handleOptionClick(item.option, item.path)}>
42 | {item.option}
43 |
44 | ))}
45 |
46 | )}
47 |
48 | );
49 | };
50 |
51 | export default LanguagesDropdown;
52 |
--------------------------------------------------------------------------------
/portfolio/src/components/reusable/Logo.tsx:
--------------------------------------------------------------------------------
1 | interface IProps {
2 | img: any;
3 | }
4 |
5 | import { Link } from "react-router-dom";
6 | import { StyledLogoComponent } from "../../styles/ReusableStyles";
7 | import { useLanguage } from "../../contexts/LanguageProvider";
8 | import { useEffect, useState } from "react";
9 |
10 | const Logo = ({ img }: IProps) => {
11 | const { language } = useLanguage() || { language: "EN-US" };
12 |
13 | const [isVisible, setIsVisible] = useState(true);
14 |
15 | // Função para controlar a visibilidade do header
16 | const handleScroll = () => {
17 | const currentScrollY = window.scrollY;
18 | const windowWidth = window.innerWidth;
19 |
20 | if (currentScrollY > 50 && windowWidth < 500) {
21 | setIsVisible(false); // Esconder se rolou mais de 50px
22 | } else {
23 | setIsVisible(true); // Mostrar se está no topo da página
24 | }
25 | };
26 |
27 | useEffect(() => {
28 | // Adiciona o evento de scroll
29 | window.addEventListener("scroll", handleScroll);
30 |
31 | // Limpa o evento ao desmontar o componente
32 | return () => {
33 | window.removeEventListener("scroll", handleScroll);
34 | };
35 | }, []);
36 |
37 | return (
38 | <>
39 |
40 |
41 | {" "}
42 | {" "}
50 |
51 |
52 | >
53 | );
54 | };
55 | // consertar o to="/us" e pegar pelo contexto
56 | // esconder o logo nas telas menores
57 | export default Logo;
58 |
--------------------------------------------------------------------------------
/portfolio/src/components/reusable/MainButton.tsx:
--------------------------------------------------------------------------------
1 | import { StyledMainButton } from "../../styles/ReusableStyles";
2 | import { Link } from "react-router-dom";
3 |
4 | interface IProps {
5 | text: string;
6 | path?: string;
7 | action?: () => any;
8 | link?: string;
9 | hasDownload?: boolean;
10 | }
11 |
12 | const MainButton = ({ text, path, action, link, hasDownload }: IProps) => {
13 | return (
14 | <>
15 | {hasDownload ? (
16 |
17 |
18 | {text}
19 |
20 |
21 | ) : link ? (
22 |
23 |
24 | {text}
25 |
26 |
27 | ) : (
28 |
29 | {text}
30 |
31 | )}
32 | >
33 | );
34 | };
35 |
36 | export default MainButton;
37 |
--------------------------------------------------------------------------------
/portfolio/src/components/reusable/MainImg.tsx:
--------------------------------------------------------------------------------
1 | import Jessica from "../../assets/jessie1.png";
2 | import {
3 | StyledLabelImage,
4 | StyledMainImgDisplay,
5 | } from "../../styles/ReusableStyles";
6 | import { useLanguage } from "../../contexts/LanguageProvider";
7 |
8 | const MainImg = () => {
9 | const { language } = useLanguage() || { language: "EN-US" };
10 | return (
11 | <>
12 |
13 |
14 |
15 | {language === "EN-US"
16 | ? "Currently working on "
17 | : "Atualmente trabalhando na "}
18 |
19 | 🚀
20 |
21 | Izap Softworks
22 |
23 | {language === "EN-US" ? " and at " : " e na "}
24 | 💜
25 |
26 | Arnia
27 |
28 |
29 |
30 | >
31 | );
32 | };
33 |
34 | export default MainImg;
35 |
--------------------------------------------------------------------------------
/portfolio/src/components/reusable/MessageMeCard.tsx:
--------------------------------------------------------------------------------
1 | import { StyledMessageMeCard } from "../../styles/ReusableStyles";
2 | import Discord from "../../assets/Discord.svg";
3 | import Email from "../../assets/Email.svg";
4 | import Linkedin from "../../assets/Linkedin.svg";
5 | import { useLanguage } from "../../contexts/LanguageProvider";
6 |
7 | const MessageMeCard = () => {
8 | const { language } = useLanguage() || { language: "EN-US" };
9 | return (
10 | <>
11 |
12 |
13 | {language === "EN-US" ? (
14 |
Message me here!
15 | ) : (
16 | Entre em contato!
17 | )}
18 |
19 |
41 |
42 | >
43 | );
44 | };
45 |
46 | export default MessageMeCard;
47 |
--------------------------------------------------------------------------------
/portfolio/src/components/reusable/NavBar.tsx:
--------------------------------------------------------------------------------
1 | import { Link } from "react-router-dom";
2 | import { StyledNavBar } from "../../styles/ReusableStyles";
3 | import LanguagesDropdown from "./LanguagesDropdown";
4 | import { useLanguage } from "../../contexts/LanguageProvider";
5 |
6 | const NavBar = () => {
7 | const { language } = useLanguage() || { language: "EN-US" };
8 | return (
9 | <>
10 |
11 | {language === "EN-US" ? (
12 | <>
13 |
14 |
15 | # home
16 |
17 |
18 |
19 |
20 | # works
21 |
22 |
23 |
24 |
25 | # about-me
26 |
27 |
28 |
29 |
30 | # contacts
31 |
32 |
33 | >
34 | ) : (
35 | <>
36 |
37 |
38 | # início
39 |
40 |
41 |
42 |
43 | # trabalhos
44 |
45 |
46 |
47 |
48 | # sobre-mim
49 |
50 |
51 |
52 |
53 | # contatos
54 |
55 |
56 | >
57 | )}
58 |
59 |
60 | >
61 | );
62 | };
63 |
64 | export default NavBar;
65 |
--------------------------------------------------------------------------------
/portfolio/src/components/reusable/PageContentAlign.tsx:
--------------------------------------------------------------------------------
1 | import { StyledPageContentAlign } from "../../styles/ReusableStyles";
2 |
3 | const PageContentAlign = ({ children }: any) => {
4 | return {children} ;
5 | };
6 |
7 | export default PageContentAlign;
8 |
--------------------------------------------------------------------------------
/portfolio/src/components/reusable/PageContentAlignSecondary.tsx:
--------------------------------------------------------------------------------
1 | import { StyledPageContentAlignSecondary } from "../../styles/ReusableStyles";
2 |
3 | const PageContentAlignSecondary = ({ children }: any) => {
4 | return (
5 |
6 | {children}
7 |
8 | );
9 | };
10 |
11 | export default PageContentAlignSecondary;
12 |
--------------------------------------------------------------------------------
/portfolio/src/components/reusable/Quote.tsx:
--------------------------------------------------------------------------------
1 | import Quotes from "../../assets/Quotes.svg";
2 | import { useLanguage } from "../../contexts/LanguageProvider";
3 | import { StyledQuote } from "../../styles/ReusableStyles";
4 |
5 | const Quote = () => {
6 | const { language } = useLanguage() || { language: "EN-US" };
7 | return (
8 | <>
9 |
10 |
11 |
12 |
13 | {language === "EN-US" ? (
14 |
The best way to predict the future is to create it.
15 | ) : (
16 |
A melhor maneira de prever o futuro é criando-o.
17 | )}
18 |
19 |
20 |
21 |
- Abraham Lincoln
22 |
23 |
24 |
25 | >
26 | );
27 | };
28 |
29 | export default Quote;
30 |
--------------------------------------------------------------------------------
/portfolio/src/components/reusable/SecondaryPageSection.tsx:
--------------------------------------------------------------------------------
1 | import { ReactNode } from "react";
2 | import {
3 | StyledContentDivision,
4 | StyledSecondaryPageSection,
5 | } from "../../styles/ReusableStyles";
6 |
7 | interface CompProps {
8 | children: ReactNode;
9 | title: string;
10 | id?: string;
11 | }
12 | const SecondaryPageSection = ({ children, title, id }: CompProps) => {
13 | return (
14 |
15 |
16 |
17 | #
18 | {title}
19 |
20 |
21 |
22 | {children}
23 |
24 | );
25 | };
26 |
27 | export default SecondaryPageSection;
28 |
--------------------------------------------------------------------------------
/portfolio/src/components/reusable/SecondaryPageTitle.tsx:
--------------------------------------------------------------------------------
1 | import { StyledSecondaryPageTitle } from "../../styles/ReusableStyles";
2 |
3 | interface CompProps {
4 | title: string;
5 | description: string;
6 | }
7 |
8 | const SecondaryPageTitle = ({ title, description }: CompProps) => {
9 | return (
10 |
11 |
12 |
13 | /
14 | {title}
15 |
16 |
17 |
18 |
{description}
19 |
20 |
21 | );
22 | };
23 |
24 | export default SecondaryPageTitle;
25 |
--------------------------------------------------------------------------------
/portfolio/src/components/reusable/SectionHeader.tsx:
--------------------------------------------------------------------------------
1 | import { StyledSectionHeader } from "../../styles/ReusableStyles";
2 | import { Link } from "react-router-dom";
3 | import { useLanguage } from "../../contexts/LanguageProvider";
4 |
5 | interface IProps {
6 | title: string;
7 | path?: string;
8 | }
9 |
10 | const SectionHeader = ({ title, path }: IProps) => {
11 | const { language } = useLanguage() || { language: "EN-US" };
12 | return (
13 | <>
14 |
15 |
16 |
17 |
18 | #
19 | {title}
20 |
21 |
22 |
23 | {path && (
24 |
25 |
26 | {" "}
27 | {language === "EN-US" ? "View All" : "Ver tudo"} ▶
28 |
29 |
30 | )}
31 |
32 |
33 | >
34 | );
35 | };
36 |
37 | export default SectionHeader;
38 |
--------------------------------------------------------------------------------
/portfolio/src/components/reusable/SkillCard.tsx:
--------------------------------------------------------------------------------
1 | import { StyledSkillCard } from "../../styles/ReusableStyles"
2 |
3 | interface IProps {
4 | category:string,
5 | tools:string
6 | }
7 |
8 | const SkillCard = ({category, tools}:IProps) => {
9 | return (
10 | <>
11 |
12 | {category}
13 | {tools}
14 |
15 | >
16 | )
17 | }
18 |
19 | export default SkillCard
--------------------------------------------------------------------------------
/portfolio/src/components/reusable/SmallProjectCard.tsx:
--------------------------------------------------------------------------------
1 | import { StyledSmallCardProject } from "../../styles/ReusableStyles";
2 | import MainButton from "./MainButton";
3 |
4 | interface IProps {
5 | tools: string;
6 | title: string;
7 | description: string;
8 | button: string;
9 | link: string;
10 | }
11 |
12 | const SmallProjectCard = ({
13 | tools,
14 | title,
15 | description,
16 | button,
17 | link,
18 | }: IProps) => {
19 | return (
20 | <>
21 |
22 | {tools}
23 |
24 |
{title}
25 |
{description}
26 |
27 |
28 |
29 |
30 |
31 | >
32 | );
33 | };
34 |
35 | export default SmallProjectCard;
36 |
--------------------------------------------------------------------------------
/portfolio/src/components/reusable/SquareDecor.tsx:
--------------------------------------------------------------------------------
1 | import ImgSmall from "../../assets/SquareSmall.svg";
2 | import ImgLarge from "../../assets/SquareLarge.svg";
3 | type ImgType = "Large" | "Small";
4 |
5 | interface IProps {
6 | type: ImgType;
7 | translate?: boolean;
8 | }
9 |
10 | const SquareDecor = ({ type, translate }: IProps) => {
11 | return (
12 | <>
13 |
18 | >
19 | );
20 | };
21 |
22 | export default SquareDecor;
23 |
--------------------------------------------------------------------------------
/portfolio/src/components/reusable/TinySideBar.tsx:
--------------------------------------------------------------------------------
1 | import LineImg from "../../assets/Line.svg";
2 | import GithubIcon from "../../assets/Github.svg";
3 | import LinkedinIcon from "../../assets/Linkedin.svg";
4 | import MediumIcon from "../../assets/Medium.svg";
5 |
6 | import { StyledTinySideBar } from "../../styles/ReusableStyles";
7 |
8 | const github = "https://github.com/LadyJessie19";
9 | const linkedin = "https://www.linkedin.com/in/jessiemoura/";
10 | const medium = "https://medium.com/@jessie_moura";
11 |
12 | const TinySideBar = () => {
13 | return (
14 | <>
15 |
16 |
17 |
28 |
29 | >
30 | );
31 | };
32 |
33 | export default TinySideBar;
34 |
--------------------------------------------------------------------------------
/portfolio/src/components/reusable/scrollToTop.tsx:
--------------------------------------------------------------------------------
1 | import { useEffect } from "react";
2 | import { useLocation } from "react-router-dom";
3 |
4 | function ScrollToTop() {
5 | const { pathname, hash } = useLocation();
6 |
7 | useEffect(() => {
8 | if (hash === "") {
9 | window.scrollTo(0, 0);
10 | } else {
11 | setTimeout(() => {
12 | const id = hash.replace("#", "");
13 | const element = document.getElementById(id);
14 | if (element) {
15 | element.scrollIntoView();
16 | }
17 | }, 0);
18 | }
19 | }, [pathname, hash]); // Só rola para cima quando a rota muda
20 |
21 | return null;
22 | }
23 |
24 | export default ScrollToTop;
25 |
--------------------------------------------------------------------------------
/portfolio/src/contexts/LanguageProvider.tsx:
--------------------------------------------------------------------------------
1 | import React, { createContext, useContext, useState } from "react";
2 |
3 | interface ILanguageContext {
4 | children: React.ReactNode;
5 | navigate: (path: string) => void;
6 | }
7 |
8 | interface LanguageContextType {
9 | language: string;
10 | changeLanguage: (newLanguage: string, newPath: string) => void;
11 | }
12 |
13 | const LanguageContext = createContext(
14 | undefined
15 | );
16 |
17 | export const LanguageProvider = ({ children, navigate }: ILanguageContext) => {
18 | const languageSelected = localStorage.getItem("language") || "EN-US";
19 | const [language, setLanguage] = useState(languageSelected);
20 |
21 | const changeLanguage = (newLanguage: string, newPath: string) => {
22 | localStorage.setItem("language", newLanguage);
23 | navigate(newPath);
24 | setLanguage(newLanguage);
25 | };
26 |
27 | return (
28 |
29 | {children}
30 |
31 | );
32 | };
33 |
34 | export const useLanguage = () => useContext(LanguageContext);
35 |
--------------------------------------------------------------------------------
/portfolio/src/main.tsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import ReactDOM from "react-dom/client";
3 | import App from "./App.tsx";
4 | import { BrowserRouter } from "react-router-dom";
5 |
6 | ReactDOM.createRoot(document.getElementById("root") as HTMLElement).render(
7 |
8 |
9 |
10 |
11 |
12 | );
13 |
--------------------------------------------------------------------------------
/portfolio/src/styles/Global.ts:
--------------------------------------------------------------------------------
1 | import { createGlobalStyle } from "styled-components";
2 |
3 | const GlobalStyle = createGlobalStyle`
4 |
5 | :root {
6 | --Background-grey: #1E1E1E;
7 | --Cherry-pink: #FF88D1;
8 | --Candy-green: #98C379;
9 | --Hover-pink: #FF88D133;
10 | --Light-grey: #ABB2BF;
11 | --Original-pink: #C778DD;
12 | --Soft-blue: #62AEEF;
13 | --White-screen: #faf9f9;
14 |
15 | --Main-font: 'Fira Code';
16 | }
17 |
18 | body {
19 | font-family: var(--Main-font), georgia, sans-serif;
20 | background-color: var(--Background-grey);
21 | overflow-x: hidden;
22 | overflow-y: scroll;
23 | }
24 |
25 | ::-webkit-scrollbar {
26 | width: 18px;
27 | }
28 |
29 | ::-webkit-scrollbar-track {
30 | background: var(--Background-grey);
31 | }
32 |
33 | ::-webkit-scrollbar-thumb {
34 | background: ${({ theme }) => theme.colors.CherryPink};
35 | border-radius: 6px;
36 | }
37 |
38 | ::-webkit-scrollbar-thumb:hover {
39 | background: #555;
40 | }
41 |
42 | a {
43 | text-decoration: none;
44 | color: inherit;
45 | }
46 |
47 | .b-red{
48 | border: 1px solid red;
49 | }
50 |
51 | .c-darkGrey{
52 | color: var(--Background-grey)
53 | }
54 |
55 | .c-pink{
56 | color: var(--Cherry-pink);
57 | }
58 |
59 | .c-lightGrey{
60 | color: var(--Light-grey)
61 | }
62 |
63 | .c-white{
64 | color: var(--White-screen)
65 | }
66 |
67 | .f-main{
68 | font-family: var(--Main-font);
69 | }
70 |
71 | .d-flex{
72 | display: flex;
73 | }
74 |
75 | .flex-row{
76 | display: flex;
77 | flex-direction: row;
78 | }
79 |
80 | .flex-column{
81 | display: flex;
82 | flex-direction: column;
83 | }
84 |
85 | .flex-wrap{
86 | display: flex;
87 | flex-wrap: wrap;
88 | }
89 |
90 | .j-start {
91 | justify-content: flex-start;
92 | }
93 |
94 | .j-end {
95 | justify-content: flex-end;
96 | }
97 |
98 | .j-center {
99 | justify-content: center;
100 | }
101 |
102 | .j-between {
103 | justify-content: space-between;
104 | }
105 |
106 | .a-start {
107 | align-items: flex-start;
108 | }
109 |
110 | .a-end {
111 | align-items: flex-end;
112 | }
113 |
114 | .a-center {
115 | align-items: center;
116 | }
117 |
118 | .g-1 {
119 | gap: 1rem;
120 | }
121 |
122 | .g-2 {
123 | gap: 2rem;
124 | }
125 |
126 | `;
127 |
128 | export default GlobalStyle;
129 |
--------------------------------------------------------------------------------
/portfolio/src/styles/_fonts/Fira_Code/FiraCode-VariableFont_wght.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LadyJessie19/Portifolio/411a7a36bfe20dca51f161ff5936d6e1de1e8c97/portfolio/src/styles/_fonts/Fira_Code/FiraCode-VariableFont_wght.ttf
--------------------------------------------------------------------------------
/portfolio/src/styles/_fonts/Fira_Code/OFL.txt:
--------------------------------------------------------------------------------
1 | Copyright 2014-2020 The Fira Code Project Authors (https://github.com/tonsky/FiraCode)
2 |
3 | This Font Software is licensed under the SIL Open Font License, Version 1.1.
4 | This license is copied below, and is also available with a FAQ at:
5 | https://openfontlicense.org
6 |
7 |
8 | -----------------------------------------------------------
9 | SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
10 | -----------------------------------------------------------
11 |
12 | PREAMBLE
13 | The goals of the Open Font License (OFL) are to stimulate worldwide
14 | development of collaborative font projects, to support the font creation
15 | efforts of academic and linguistic communities, and to provide a free and
16 | open framework in which fonts may be shared and improved in partnership
17 | with others.
18 |
19 | The OFL allows the licensed fonts to be used, studied, modified and
20 | redistributed freely as long as they are not sold by themselves. The
21 | fonts, including any derivative works, can be bundled, embedded,
22 | redistributed and/or sold with any software provided that any reserved
23 | names are not used by derivative works. The fonts and derivatives,
24 | however, cannot be released under any other type of license. The
25 | requirement for fonts to remain under this license does not apply
26 | to any document created using the fonts or their derivatives.
27 |
28 | DEFINITIONS
29 | "Font Software" refers to the set of files released by the Copyright
30 | Holder(s) under this license and clearly marked as such. This may
31 | include source files, build scripts and documentation.
32 |
33 | "Reserved Font Name" refers to any names specified as such after the
34 | copyright statement(s).
35 |
36 | "Original Version" refers to the collection of Font Software components as
37 | distributed by the Copyright Holder(s).
38 |
39 | "Modified Version" refers to any derivative made by adding to, deleting,
40 | or substituting -- in part or in whole -- any of the components of the
41 | Original Version, by changing formats or by porting the Font Software to a
42 | new environment.
43 |
44 | "Author" refers to any designer, engineer, programmer, technical
45 | writer or other person who contributed to the Font Software.
46 |
47 | PERMISSION & CONDITIONS
48 | Permission is hereby granted, free of charge, to any person obtaining
49 | a copy of the Font Software, to use, study, copy, merge, embed, modify,
50 | redistribute, and sell modified and unmodified copies of the Font
51 | Software, subject to the following conditions:
52 |
53 | 1) Neither the Font Software nor any of its individual components,
54 | in Original or Modified Versions, may be sold by itself.
55 |
56 | 2) Original or Modified Versions of the Font Software may be bundled,
57 | redistributed and/or sold with any software, provided that each copy
58 | contains the above copyright notice and this license. These can be
59 | included either as stand-alone text files, human-readable headers or
60 | in the appropriate machine-readable metadata fields within text or
61 | binary files as long as those fields can be easily viewed by the user.
62 |
63 | 3) No Modified Version of the Font Software may use the Reserved Font
64 | Name(s) unless explicit written permission is granted by the corresponding
65 | Copyright Holder. This restriction only applies to the primary font name as
66 | presented to the users.
67 |
68 | 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
69 | Software shall not be used to promote, endorse or advertise any
70 | Modified Version, except to acknowledge the contribution(s) of the
71 | Copyright Holder(s) and the Author(s) or with their explicit written
72 | permission.
73 |
74 | 5) The Font Software, modified or unmodified, in part or in whole,
75 | must be distributed entirely under this license, and must not be
76 | distributed under any other license. The requirement for fonts to
77 | remain under this license does not apply to any document created
78 | using the Font Software.
79 |
80 | TERMINATION
81 | This license becomes null and void if any of the above conditions are
82 | not met.
83 |
84 | DISCLAIMER
85 | THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
86 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
87 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
88 | OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
89 | COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
90 | INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
91 | DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
92 | FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
93 | OTHER DEALINGS IN THE FONT SOFTWARE.
94 |
--------------------------------------------------------------------------------
/portfolio/src/styles/_fonts/Fira_Code/static/FiraCode-Bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LadyJessie19/Portifolio/411a7a36bfe20dca51f161ff5936d6e1de1e8c97/portfolio/src/styles/_fonts/Fira_Code/static/FiraCode-Bold.ttf
--------------------------------------------------------------------------------
/portfolio/src/styles/_fonts/Fira_Code/static/FiraCode-Light.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LadyJessie19/Portifolio/411a7a36bfe20dca51f161ff5936d6e1de1e8c97/portfolio/src/styles/_fonts/Fira_Code/static/FiraCode-Light.ttf
--------------------------------------------------------------------------------
/portfolio/src/styles/_fonts/Fira_Code/static/FiraCode-Medium.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LadyJessie19/Portifolio/411a7a36bfe20dca51f161ff5936d6e1de1e8c97/portfolio/src/styles/_fonts/Fira_Code/static/FiraCode-Medium.ttf
--------------------------------------------------------------------------------
/portfolio/src/styles/_fonts/Fira_Code/static/FiraCode-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LadyJessie19/Portifolio/411a7a36bfe20dca51f161ff5936d6e1de1e8c97/portfolio/src/styles/_fonts/Fira_Code/static/FiraCode-Regular.ttf
--------------------------------------------------------------------------------
/portfolio/src/styles/_fonts/Fira_Code/static/FiraCode-SemiBold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LadyJessie19/Portifolio/411a7a36bfe20dca51f161ff5936d6e1de1e8c97/portfolio/src/styles/_fonts/Fira_Code/static/FiraCode-SemiBold.ttf
--------------------------------------------------------------------------------
/portfolio/src/styles/theme.ts:
--------------------------------------------------------------------------------
1 | export const theme = {
2 | colors: {
3 | BackgroundGrey: "#1E1E1E",
4 | CherryPink: "#FF88D1",
5 | CandyGreen: "#98C379",
6 | HoverPink: "#FF88D133",
7 | LightGrey: "#ABB2BF",
8 | OriginalPink: "#C778DD",
9 | SoftBlue: "#62AEEF",
10 | WhiteScreen: "#faf9f9",
11 | },
12 | fonts: {
13 | MainFont: "Fira Code",
14 | },
15 | };
16 |
--------------------------------------------------------------------------------
/portfolio/src/vite-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/portfolio/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "ES2020",
4 | "useDefineForClassFields": true,
5 | "lib": ["ES2020", "DOM", "DOM.Iterable"],
6 | "module": "ESNext",
7 | "skipLibCheck": true,
8 |
9 | /* Bundler mode */
10 | "moduleResolution": "bundler",
11 | "allowImportingTsExtensions": true,
12 | "resolveJsonModule": true,
13 | "isolatedModules": true,
14 | "noEmit": true,
15 | "jsx": "react-jsx",
16 |
17 | /* Linting */
18 | "strict": true,
19 | "noUnusedLocals": true,
20 | "noUnusedParameters": true,
21 | "noFallthroughCasesInSwitch": true
22 | },
23 | "include": ["src"],
24 | "references": [{ "path": "./tsconfig.node.json" }]
25 | }
26 |
--------------------------------------------------------------------------------
/portfolio/tsconfig.node.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "composite": true,
4 | "skipLibCheck": true,
5 | "module": "ESNext",
6 | "moduleResolution": "bundler",
7 | "allowSyntheticDefaultImports": true
8 | },
9 | "include": ["vite.config.ts"]
10 | }
11 |
--------------------------------------------------------------------------------
/portfolio/vercel.json:
--------------------------------------------------------------------------------
1 | {
2 | "rewrites": [{ "source": "/(.*)", "destination": "/" }]
3 | }
4 |
--------------------------------------------------------------------------------
/portfolio/vite.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | // https://vitejs.dev/config/
5 | export default defineConfig({
6 | plugins: [react()],
7 | })
8 |
--------------------------------------------------------------------------------