mirror of
https://github.com/Spythere/spythere-portfolio.git
synced 2026-05-03 05:28:16 +00:00
theme & layout changes
This commit is contained in:
+1
-1
@@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
||||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
||||||
<link href="https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@500&family=Manrope:wght@300;500;700&display=swap" rel="stylesheet" />
|
<link href="https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@500;700&family=Manrope:wght@300;500;700&display=swap" rel="stylesheet" />
|
||||||
|
|
||||||
<title>Spythere:// portfolio</title>
|
<title>Spythere:// portfolio</title>
|
||||||
</head>
|
</head>
|
||||||
|
|||||||
+27
-43
@@ -6,12 +6,33 @@ interface NavLink {
|
|||||||
href: string;
|
href: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
function scrollToSection(e: React.MouseEvent, href: string) {
|
const navlinks = [
|
||||||
e.preventDefault();
|
{
|
||||||
|
title: 'about',
|
||||||
|
href: '#about',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'projects',
|
||||||
|
href: '#projects',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'contact',
|
||||||
|
href: '#contact',
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
document.querySelector(href)!.scrollIntoView({
|
export default function Navbar() {
|
||||||
behavior: 'smooth',
|
const { t } = useTranslation();
|
||||||
});
|
|
||||||
|
return (
|
||||||
|
<StyledNavbar>
|
||||||
|
<div className="navbar-content">
|
||||||
|
<StyledNavBrand href="#">{t('navbar.title')}</StyledNavBrand>
|
||||||
|
|
||||||
|
<Navlinks navlinks={navlinks} />
|
||||||
|
</div>
|
||||||
|
</StyledNavbar>
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
function Navlinks(props: { navlinks: NavLink[] }) {
|
function Navlinks(props: { navlinks: NavLink[] }) {
|
||||||
@@ -22,9 +43,7 @@ function Navlinks(props: { navlinks: NavLink[] }) {
|
|||||||
<ul>
|
<ul>
|
||||||
{props.navlinks.map((navlink) => (
|
{props.navlinks.map((navlink) => (
|
||||||
<li key={navlink.title}>
|
<li key={navlink.title}>
|
||||||
<a href={navlink.href} onClick={(e) => scrollToSection(e, navlink.href)}>
|
<a href={navlink.href}>{t(`navbar.${navlink.title}`)}</a>
|
||||||
{t(`navbar.${navlink.title}`)}
|
|
||||||
</a>
|
|
||||||
</li>
|
</li>
|
||||||
))}
|
))}
|
||||||
</ul>
|
</ul>
|
||||||
@@ -47,38 +66,3 @@ function LanguageChoice() {
|
|||||||
</StyledLangButton>
|
</StyledLangButton>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
const navlinks = [
|
|
||||||
// {
|
|
||||||
// title: 'home',
|
|
||||||
// href: '#',
|
|
||||||
// },
|
|
||||||
{
|
|
||||||
title: 'about',
|
|
||||||
href: '#about',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: 'projects',
|
|
||||||
href: '#projects',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: 'contact',
|
|
||||||
href: '#contact',
|
|
||||||
},
|
|
||||||
];
|
|
||||||
|
|
||||||
export default function Navbar() {
|
|
||||||
const { t } = useTranslation();
|
|
||||||
|
|
||||||
return (
|
|
||||||
<StyledNavbar>
|
|
||||||
<div className="navbar-content">
|
|
||||||
<StyledNavBrand href="#" onClick={(e) => scrollToSection(e, '#landing')}>
|
|
||||||
{t('navbar.title')}
|
|
||||||
</StyledNavBrand>
|
|
||||||
|
|
||||||
<Navlinks navlinks={navlinks} />
|
|
||||||
</div>
|
|
||||||
</StyledNavbar>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -7,7 +7,8 @@ export const StyledCursor = styled.span`
|
|||||||
|
|
||||||
width: 10px;
|
width: 10px;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
background-color: ${({ theme }) => theme.colors.accent};
|
|
||||||
|
background-color: ${({ theme }) => theme.colors['accent']};
|
||||||
|
|
||||||
animation: blinking 1s infinite;
|
animation: blinking 1s infinite;
|
||||||
`;
|
`;
|
||||||
|
|||||||
@@ -12,6 +12,8 @@ export const GlobalStyles = createGlobalStyle`
|
|||||||
|
|
||||||
font-synthesis: none;
|
font-synthesis: none;
|
||||||
text-rendering: optimizeLegibility;
|
text-rendering: optimizeLegibility;
|
||||||
|
|
||||||
|
scroll-behavior: smooth;
|
||||||
}
|
}
|
||||||
|
|
||||||
* {
|
* {
|
||||||
@@ -45,6 +47,13 @@ export const GlobalStyles = createGlobalStyle`
|
|||||||
&--accent {
|
&--accent {
|
||||||
color: ${({ theme }) => theme.colors.accent};
|
color: ${({ theme }) => theme.colors.accent};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
&--gradient {
|
||||||
|
background-image: linear-gradient(90deg, rgba(252, 70, 107, 1) 0%, rgba(30, 109, 204, 1) 50%, rgba(252, 70, 107, 1) 100%);
|
||||||
|
-webkit-background-clip: text;
|
||||||
|
background-clip: text;
|
||||||
|
color: transparent;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
section {
|
section {
|
||||||
|
|||||||
@@ -74,8 +74,9 @@ export const StyledBrandName = styled.div`
|
|||||||
height: 100%;
|
height: 100%;
|
||||||
top: 0;
|
top: 0;
|
||||||
left: 0;
|
left: 0;
|
||||||
|
|
||||||
background-color: ${({ theme }) => theme.colors['bg']};
|
background-color: ${({ theme }) => theme.colors['bg']};
|
||||||
border-left: 10px solid ${({ theme }) => theme.colors.accent};
|
border-left: 15px solid ${({ theme }) => theme.colors.accent};
|
||||||
|
|
||||||
animation: typing 0.75s steps(11) forwards, blinking 1.5s infinite;
|
animation: typing 0.75s steps(11) forwards, blinking 1.5s infinite;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ export const StyledNavbar = styled.nav`
|
|||||||
left: 0;
|
left: 0;
|
||||||
z-index: 1000;
|
z-index: 1000;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
background-color: ${({ theme }) => theme.colors['500']};
|
background-color: black;
|
||||||
|
|
||||||
.navbar-content {
|
.navbar-content {
|
||||||
display: flex;
|
display: flex;
|
||||||
@@ -24,7 +24,6 @@ export const StyledNavbar = styled.nav`
|
|||||||
export const StyledNavBrand = styled.a`
|
export const StyledNavBrand = styled.a`
|
||||||
opacity: 0.85;
|
opacity: 0.85;
|
||||||
font-weight: 700;
|
font-weight: 700;
|
||||||
color: ${({ theme }) => theme.colors.accent};
|
|
||||||
font-size: 1.3em;
|
font-size: 1.3em;
|
||||||
`;
|
`;
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,8 @@ export const StyledProjects = styled.section`
|
|||||||
}
|
}
|
||||||
|
|
||||||
.showcase-container {
|
.showcase-container {
|
||||||
display: flex;
|
display: grid;
|
||||||
|
grid-template-columns: 1fr 1fr;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
gap: 2em;
|
gap: 2em;
|
||||||
}
|
}
|
||||||
@@ -17,19 +18,21 @@ export const StyledProjects = styled.section`
|
|||||||
display: grid;
|
display: grid;
|
||||||
grid-template-columns: 1fr 1fr;
|
grid-template-columns: 1fr 1fr;
|
||||||
gap: 2em;
|
gap: 2em;
|
||||||
|
|
||||||
|
.project-card:first-child {
|
||||||
|
grid-column: 1 / 2 span;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.project-card {
|
.project-card {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 1em;
|
||||||
|
|
||||||
background-color: ${({ theme }) => theme.colors['600']};
|
background-color: ${({ theme }) => theme.colors['600']};
|
||||||
padding: 0.75em;
|
padding: 0.75em;
|
||||||
border-radius: 1em;
|
border-radius: 1em;
|
||||||
|
|
||||||
&.showcase {
|
|
||||||
display: grid;
|
|
||||||
grid-template-columns: 1fr 1fr;
|
|
||||||
gap: 3.5em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.project-thumbnail img,
|
.project-thumbnail img,
|
||||||
.project-badges img {
|
.project-badges img {
|
||||||
border-radius: 1em;
|
border-radius: 1em;
|
||||||
@@ -44,11 +47,12 @@ export const StyledProjects = styled.section`
|
|||||||
.project-content {
|
.project-content {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
|
height: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
hr {
|
hr {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
border: 1px solid white;
|
border: 1px solid #aaa;
|
||||||
margin: 0.5em 0;
|
margin: 0.5em 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -87,12 +91,13 @@ export const StyledProjects = styled.section`
|
|||||||
text-align: justify;
|
text-align: justify;
|
||||||
|
|
||||||
height: 100%;
|
height: 100%;
|
||||||
margin-bottom: 1em;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.project-actions {
|
.project-actions {
|
||||||
display: flex;
|
display: flex;
|
||||||
gap: 1em;
|
gap: 1em;
|
||||||
|
align-self: flex-end;
|
||||||
|
margin-top: 2em;
|
||||||
|
|
||||||
a {
|
a {
|
||||||
padding: 0.25em;
|
padding: 0.25em;
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"navbar": {
|
"navbar": {
|
||||||
"title": "Spythere Portfolio",
|
"title": "SPYTHERE://",
|
||||||
"home": "HOME",
|
"home": "HOME",
|
||||||
"about": "ABOUT",
|
"about": "ABOUT",
|
||||||
"projects": "PROJECTS",
|
"projects": "PROJECTS",
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"navbar": {
|
"navbar": {
|
||||||
"title": "Spythere Portfolio",
|
"title": "SPYTHERE://",
|
||||||
"home": "",
|
"home": "",
|
||||||
"about": "O MNIE",
|
"about": "O MNIE",
|
||||||
"projects": "PROJEKTY",
|
"projects": "PROJEKTY",
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ export default function LandingSection() {
|
|||||||
<b className="greeting">Hello, I'm</b>
|
<b className="greeting">Hello, I'm</b>
|
||||||
|
|
||||||
<StyledBrandName>
|
<StyledBrandName>
|
||||||
<span className="text--accent">SPYTHERE</span>://
|
<b className="text--gradient">SPYTHERE://</b>
|
||||||
</StyledBrandName>
|
</StyledBrandName>
|
||||||
|
|
||||||
<div className="description">an amatour and self-taught front-end and back-end developer from Poland!</div>
|
<div className="description">an amatour and self-taught front-end and back-end developer from Poland!</div>
|
||||||
|
|||||||
+1
-1
@@ -6,7 +6,7 @@ export const theme = {
|
|||||||
500: '#1b263b',
|
500: '#1b263b',
|
||||||
600: '#111',
|
600: '#111',
|
||||||
bg: '#22252b',
|
bg: '#22252b',
|
||||||
accent: '#ffbd00',
|
accent: '#526fff',
|
||||||
},
|
},
|
||||||
fonts: {
|
fonts: {
|
||||||
primary: 'Manrope, system-ui, Arial, sans-serif',
|
primary: 'Manrope, system-ui, Arial, sans-serif',
|
||||||
|
|||||||
Reference in New Issue
Block a user