Compare commits

..

No commits in common. "67e601b698fa1cf0a0afbe0297ec8f06c2748ba1" and "f51e1e57eb16d72460a44b5165ea166c69ecb0eb" have entirely different histories.

13 changed files with 16 additions and 79 deletions

View File

@ -4,10 +4,6 @@ export const Avatar = styled.img`
border-radius: 50%; border-radius: 50%;
width: 5rem; width: 5rem;
height: 5rem; height: 5rem;
@media(max-width: 480px){
width: 10rem;
height: 10rem;
}
` `
export const AvatarHeader = styled.img` export const AvatarHeader = styled.img`
border-radius: 50%; border-radius: 50%;

View File

@ -1,14 +1,8 @@
import { HashRouter } from "react-router-dom"; import { HashRouter } from "react-router-dom";
import { HeaderContainer, NavLink, HomeLink, LanguageSelector } from "./styles"; import { HeaderContainer, NavLink, HomeLink } from "./styles";
import { AvatarHeader } from "../Avatar/avatar"; import { AvatarHeader } from "../Avatar/avatar";
import i18n from "../../utils/i18n";
import { t } from "i18next";
export default function Header() { export default function Header() {
const changeLanguage = (event: React.ChangeEvent<HTMLSelectElement>) => {
i18n.changeLanguage(event.target.value);
localStorage.setItem("language", event.target.value); // Salva escolha do usuário
};
return ( return (
<HashRouter> <HashRouter>
<HeaderContainer> <HeaderContainer>
@ -17,17 +11,9 @@ export default function Header() {
Giv's Website Giv's Website
</HomeLink> </HomeLink>
<nav> <nav>
<NavLink href="#about">{t("about")}</NavLink> <NavLink href="#about">About Me</NavLink>
<NavLink href="#contact">{t("contact")}</NavLink> <NavLink href="#contact">Contact</NavLink>
<NavLink href="#projects">{t("projects")}</NavLink> <NavLink href="#projects">Projects</NavLink>
<LanguageSelector onChange={changeLanguage}>
<option value="pt-br">
Português
</option>
<option value="en-us">
English
</option>
</LanguageSelector>
</nav> </nav>
</HeaderContainer> </HeaderContainer>
</HashRouter> </HashRouter>

View File

@ -43,14 +43,4 @@ export const HeaderContainer = styled.div`
display: flex; display: flex;
gap: 1rem; gap: 1rem;
} }
`; `;
export const LanguageSelector = styled.select`
background-color: ${props => props.theme["gray-800"]};
color: ${props => props.theme.white};
border-radius: 8px;
padding: 5px;
border: 0;
align-items: center;
justify-content: center;
`

View File

@ -1,11 +1,3 @@
{ {
"about": "About me", "about": "I'm Giovani, a software engineering student, interning and studying in Minas Gerais, Brazil!"
"aboutText": "I'm Giovani, a software engineering student, interning and studying in Minas Gerais, Brazil!",
"contact": "Contact",
"contactInfo": "If you want to contact me, you can use the links above, or say put in the field below to send me an email!",
"checkSocialLinks": "Hey, check out my social links!",
"welcome": "Hi, I'm Giovani! Welcome to my website!",
"skills": "Skills",
"projects": "Projects",
"send": "Send"
} }

View File

@ -1,4 +1,3 @@
{ {
"about": "Sobre mim", "about": "Meu nome é Giovani, estudante de engenharia de software, estagiando e estudando em Minas Gerais, Brasil!"
"aboutText": "Meu nome é Giovani, estudante de engenharia de software, estagiando e estudando em Minas Gerais, Brasil!"
} }

View File

@ -7,9 +7,9 @@ export default function About() {
const { t } = useTranslation(); const { t } = useTranslation();
return ( return (
<MainContainer> <MainContainer>
<h1>{t("about")}</h1> <h1>About Me</h1>
<Paragraph> <Paragraph>
<span>{t("aboutText")}</span> <span>{t("about")}</span>
</Paragraph> </Paragraph>
</MainContainer> </MainContainer>
); );

View File

@ -3,7 +3,6 @@ import { Button, TextArea } from './styles';
import { MainContainer } from '../../components/MainContent/styles'; import { MainContainer } from '../../components/MainContent/styles';
import { Send } from 'lucide-react'; import { Send } from 'lucide-react';
import { Paragraph } from '../../components/Paragraph/styles'; import { Paragraph } from '../../components/Paragraph/styles';
import { t } from 'i18next';
export default function Contact() { export default function Contact() {
const emailAddress = import.meta.env.VITE_GIV_EMAIL; const emailAddress = import.meta.env.VITE_GIV_EMAIL;
@ -16,16 +15,16 @@ export default function Contact() {
return ( return (
<MainContainer> <MainContainer>
<h1>{t("contact")}</h1> <h1>Contact</h1>
<Paragraph> <Paragraph>
<span>{t("contactInfo")}</span> <span>If you want to contact me, you can use the links above, or say put in the field below to send me an email!</span>
</Paragraph> </Paragraph>
<form onSubmit={handleSubmit}> <form onSubmit={handleSubmit}>
<TextArea <TextArea
onChange={(e) => setTypedText(e.target.value)} onChange={(e) => setTypedText(e.target.value)}
className="bgb" className="bgb"
/> />
<Button type='submit'><Send className="ico" />{t("send")}</Button> <Button type='submit'><Send className="ico" />Send</Button>
</form> </form>
</MainContainer> </MainContainer>
); );

View File

@ -5,14 +5,13 @@ import { faTelegram, faGithub } from '@fortawesome/free-brands-svg-icons';
import { IconContainer, IconLink, HomeLabel, TopSection } from './styles'; import { IconContainer, IconLink, HomeLabel, TopSection } from './styles';
import { MainContainer } from '../../components/MainContent/styles'; import { MainContainer } from '../../components/MainContent/styles';
import { Avatar } from '../../components/Avatar/avatar'; import { Avatar } from '../../components/Avatar/avatar';
import { t } from 'i18next';
export default function Home() { export default function Home() {
const typedElement = useRef(null); const typedElement = useRef(null);
useEffect(() => { useEffect(() => {
const typed = new Typed(typedElement.current, { const typed = new Typed(typedElement.current, {
strings: [t("welcome")], strings: ["Hi, I'm Giovani! Welcome to my website!"],
typeSpeed: 70, typeSpeed: 70,
backSpeed: 50, backSpeed: 50,
loop: false, loop: false,
@ -32,7 +31,7 @@ export default function Home() {
</strong> </strong>
</TopSection> </TopSection>
<HomeLabel> <HomeLabel>
{t("checkSocialLinks")} Hey, check out my social links!
</HomeLabel> </HomeLabel>
<IconContainer> <IconContainer>
<IconLink href="https://t.me/@givfnz2" target="_blank" rel="noopener noreferrer"> <IconLink href="https://t.me/@givfnz2" target="_blank" rel="noopener noreferrer">

View File

@ -26,8 +26,4 @@ gap: 1rem;
span{ span{
font-size: 2.3rem; font-size: 2.3rem;
} }
@media (max-width: 448px) {
display: block;
font-size: 1rem;
}
` `

View File

@ -10,7 +10,6 @@ import {
ProjectStars, ProjectStars,
} from './styles'; } from './styles';
import { MainContainer } from '../../components/MainContent/styles'; import { MainContainer } from '../../components/MainContent/styles';
import { t } from 'i18next';
interface Repo { interface Repo {
name: string; name: string;
@ -35,7 +34,7 @@ export default function Projects() {
return ( return (
<MainContainer> <MainContainer>
<Title>{t("projects")}</Title> <Title>Projects</Title>
<ProjectGrid> <ProjectGrid>
{projects.map((project) => ( {projects.map((project) => (
<ProjectCard key={project.name} href={project.url} target="_blank" rel="noopener noreferrer"> <ProjectCard key={project.name} href={project.url} target="_blank" rel="noopener noreferrer">

View File

@ -10,9 +10,6 @@ export const ProjectGrid = styled.div`
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 2rem; gap: 2rem;
width: 100%; width: 100%;
@media(max-width: 512px){
display: block;
}
`; `;
export const ProjectCard = styled.a` export const ProjectCard = styled.a`
@ -28,18 +25,11 @@ export const ProjectCard = styled.a`
&:hover { &:hover {
transform: translateY(-5px); transform: translateY(-5px);
} }
@media(max-width: 512px){
display: block;
margin-bottom: 1rem;
}
`; `;
export const ProjectName = styled.h2` export const ProjectName = styled.h2`
font-size: 1.5rem; font-size: 1.5rem;
margin-bottom: 0.5rem; margin-bottom: 0.5rem;
@media(max-width: 512px){
font-size: 1.3rem;
}
`; `;
export const ProjectDescription = styled.p` export const ProjectDescription = styled.p`

View File

@ -2,12 +2,11 @@ import { MainContainer } from "../../components/MainContent/styles";
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
import { faAndroid, faAngular, faGit, faLinux, faNode, faReact, faWindows } from '@fortawesome/free-brands-svg-icons' import { faAndroid, faAngular, faGit, faLinux, faNode, faReact, faWindows } from '@fortawesome/free-brands-svg-icons'
import { SkillsContainer } from "./styles"; import { SkillsContainer } from "./styles";
import { t } from "i18next";
export default function Skills() { export default function Skills() {
return ( return (
<MainContainer> <MainContainer>
<h1>{t("skills")}</h1> <h1>Skills</h1>
<SkillsContainer> <SkillsContainer>
<FontAwesomeIcon size="2x" style={{ color: '#fff' }} icon={faAndroid} /> <FontAwesomeIcon size="2x" style={{ color: '#fff' }} icon={faAndroid} />
<p>Android</p> <p>Android</p>

View File

@ -2,17 +2,9 @@ import styled from "styled-components";
export const SkillsContainer = styled.div` export const SkillsContainer = styled.div`
display: flex; display: flex;
flex-direction: row;
margin-top: 1rem; margin-top: 1rem;
align-items: center;
p { p {
margin-left: 0.3rem; margin-left: 0.3rem;
margin-right: 2.5rem; margin-right: 2.5rem;
} }
@media(max-width: 1090px){
flex-direction: column;
p{
margin: 0 0 1rem 0;
}
}
` `