Compare commits
No commits in common. "67e601b698fa1cf0a0afbe0297ec8f06c2748ba1" and "f51e1e57eb16d72460a44b5165ea166c69ecb0eb" have entirely different histories.
67e601b698
...
f51e1e57eb
@ -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%;
|
||||||
|
@ -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>
|
||||||
|
@ -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;
|
|
||||||
`
|
|
@ -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"
|
|
||||||
}
|
}
|
@ -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!"
|
|
||||||
}
|
}
|
@ -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>
|
||||||
);
|
);
|
||||||
|
@ -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>
|
||||||
);
|
);
|
||||||
|
@ -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">
|
||||||
|
@ -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;
|
|
||||||
}
|
|
||||||
`
|
`
|
@ -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">
|
||||||
|
@ -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`
|
||||||
|
@ -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>
|
||||||
|
@ -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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
`
|
`
|
Loading…
x
Reference in New Issue
Block a user