From 04cc13815d6335d73196c05ba93d146a0e5dd59b Mon Sep 17 00:00:00 2001 From: Hazem Krimi Date: Sun, 13 Feb 2022 19:11:46 +0100 Subject: [PATCH] Update website structure and styles --- _blog/sample.mdx | 17 -------- _portfolio/react-weather-app.mdx | 3 +- components/Card/index.tsx | 10 ++--- components/Card/styles.tsx | 17 +++++++- components/Footer/index.tsx | 7 --- components/Hero/index.tsx | 38 ++++++---------- components/Hero/styles.tsx | 19 +++----- components/MobileNav/index.tsx | 10 ++--- components/Nav/index.tsx | 2 +- pages/{about.tsx => contact.tsx} | 22 +--------- pages/index.tsx | 69 ++++++++++++++++-------------- pages/portfolio/[slug].tsx | 1 - public/icons/dark-dribbble.svg | 1 - public/icons/light-dribbble.svg | 1 - public/no-image.png | Bin 34069 -> 0 bytes public/{picture.jpg => photo.jpg} | Bin styles/about.tsx | 12 ------ styles/blog/index.tsx | 4 +- styles/home.tsx | 5 ++- styles/portfolio/index.tsx | 4 +- 20 files changed, 93 insertions(+), 149 deletions(-) delete mode 100644 _blog/sample.mdx rename pages/{about.tsx => contact.tsx} (78%) delete mode 100644 public/icons/dark-dribbble.svg delete mode 100644 public/icons/light-dribbble.svg delete mode 100644 public/no-image.png rename public/{picture.jpg => photo.jpg} (100%) diff --git a/_blog/sample.mdx b/_blog/sample.mdx deleted file mode 100644 index f846151..0000000 --- a/_blog/sample.mdx +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: 'Sample Blog Post' -description: 'Sample description' -author: 'Hazem Krimi' -date: '2020-01-14' -tags: ['sample'] ---- - -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean mattis dignissim orci, a aliquet leo vehicula in. Proin accumsan, justo luctus tristique ornare, tortor eros sodales arcu, quis maximus nunc tellus eu erat. Proin nisl lorem, congue at dignissim tempor, condimentum nec augue. Duis vulputate, metus eu luctus facilisis, elit mauris cursus felis, ullamcorper tempor diam est vel felis. Sed scelerisque, risus quis semper consectetur, eros lectus ornare turpis, et accumsan turpis nisi et erat. Donec sit amet elementum nunc. Nam eget dolor quis dolor rhoncus molestie id ut nisi. Vivamus suscipit ligula in sem tempor, sit amet lacinia augue luctus. Ut quis urna varius, volutpat sem eget, tincidunt augue. Duis porta dui nec sem tincidunt, ac porttitor magna molestie. Pellentesque massa ligula, malesuada ut urna nec, blandit volutpat libero. Cras sed laoreet massa. - -Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Maecenas efficitur eros gravida turpis blandit suscipit. Nullam ante mauris, condimentum quis augue ut, convallis volutpat urna. Nulla ac quam orci. Proin at ligula volutpat, porttitor erat id, vestibulum quam. In scelerisque scelerisque arcu id ultricies. Suspendisse at lorem est. - -In eget dolor faucibus, condimentum lectus ac, maximus justo. Curabitur interdum commodo dapibus. Quisque ante lectus, aliquam vel nisl ac, accumsan posuere elit. Fusce magna sem, sagittis vitae cursus at, tincidunt sit amet eros. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vestibulum blandit id nisi et accumsan. Vestibulum fringilla sollicitudin purus, et vehicula eros accumsan ut. Quisque eget tortor ac libero scelerisque interdum. - -Curabitur tempor et lacus in tincidunt. Aliquam dolor ante, facilisis venenatis ante nec, congue bibendum elit. Nulla luctus condimentum sapien quis iaculis. Cras lorem leo, tristique ac neque in, tincidunt tincidunt lorem. Quisque consectetur, tellus sit amet dapibus convallis, ante dolor egestas sem, eget varius sapien nisi non elit. Maecenas elementum lacinia tellus eget placerat. Donec ac nulla neque. In felis nibh, aliquam a neque at, iaculis auctor risus. Donec rhoncus eu mi sit amet pretium. In hac habitasse platea dictumst. Donec laoreet porttitor blandit. - -Duis dapibus volutpat nisl, id tempus dolor mattis efficitur. Pellentesque bibendum nulla mattis sem aliquam euismod. Sed ut justo porttitor, dictum felis a, consectetur arcu. Mauris et ultricies nisl. Morbi id lorem vel nibh ornare rhoncus. Fusce egestas, elit at venenatis tincidunt, lacus elit auctor dui, vel lobortis enim lacus blandit ligula. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin fringilla neque nisl, ut pulvinar tortor efficitur sed. Aliquam non turpis consectetur, fermentum orci sit amet, malesuada est. Etiam est dui, porttitor non erat eu, porttitor ultrices orci. Nam a dolor fermentum, vulputate tellus quis, cursus nunc. Sed placerat augue erat, ac lacinia risus accumsan et. In interdum placerat nisi. diff --git a/_portfolio/react-weather-app.mdx b/_portfolio/react-weather-app.mdx index 5151780..3ee0cb7 100644 --- a/_portfolio/react-weather-app.mdx +++ b/_portfolio/react-weather-app.mdx @@ -2,10 +2,9 @@ title: 'React Weather App' description: 'Weather app made with React, TypeScript and OpenWeatherMap API' date: '2021-09-19' -image: 'https://res.cloudinary.com/dun9hhyz1/image/upload/v1632077200/personal-website/portfolio/react-weather-app/tuxpi.com.1632076521_a0wxsq_hw299g.jpg' -hideImage: true demo: 'https://hazemkrimi.github.io/react-weather-app' code: 'https://github.com/hazemKrimi/react-weather-app' +tags: ['react', 'typescript', 'openweathermap'] --- # About the project diff --git a/components/Card/index.tsx b/components/Card/index.tsx index a790be5..51061a4 100644 --- a/components/Card/index.tsx +++ b/components/Card/index.tsx @@ -17,7 +17,7 @@ const Card: FC = ({ title, description, image, tags, href, target, onClic return ( -
+

{title}

{description}

{tags && ( @@ -28,10 +28,10 @@ const Card: FC = ({ title, description, image, tags, href, target, onClic
)}
- {image ? ( - - ) : ( - + {image && ( +
+ +
)}
diff --git a/components/Card/styles.tsx b/components/Card/styles.tsx index a19a466..165d376 100644 --- a/components/Card/styles.tsx +++ b/components/Card/styles.tsx @@ -4,12 +4,20 @@ export const StyledCard = styled.div<{ image: boolean }>` cursor: pointer; width: 100%; display: grid; - grid-template-columns: auto 150px; + grid-template-columns: ${({ image }) => (image ? 'auto 9.375rem' : 'auto')}; align-items: stretch; transition: color 0ms ease-in-out; text-decoration: none; color: var(--text); + @media (max-width: 320px) { + grid-template-columns: ${({ image }) => (image ? 'auto 7.813rem' : 'auto')}; + } + + @media (min-width: 1440px) { + grid-template-columns: ${({ image }) => (image ? 'auto 15.625rem' : 'auto')}; + } + &:hover { & > div { background: ${({ theme }) => theme.colors.blue}; @@ -24,7 +32,7 @@ export const StyledCard = styled.div<{ image: boolean }>` } } - & > div { + .card-content { padding: 1rem 0rem; background: var(--secondary-background); display: grid; @@ -35,6 +43,11 @@ export const StyledCard = styled.div<{ image: boolean }>` } } + .card-image { + position: relative; + width: 100%; + } + h3, p, .tags-wrapper { diff --git a/components/Footer/index.tsx b/components/Footer/index.tsx index 10a5dc5..2ac41f8 100644 --- a/components/Footer/index.tsx +++ b/components/Footer/index.tsx @@ -37,13 +37,6 @@ const Footer: FC = () => { href='https://codepen.io/hazemkrimi' target='_blank' /> -

Hazem Krimi © {new Date().getFullYear()}

diff --git a/components/Hero/index.tsx b/components/Hero/index.tsx index c4ead8f..a8cbe8d 100644 --- a/components/Hero/index.tsx +++ b/components/Hero/index.tsx @@ -1,29 +1,19 @@ -import { FC, useContext } from 'react'; -import { ThemeContext } from '../../styles/theme'; +import { FC } from 'react'; import { Wrapper } from './styles'; import Image from 'next/image'; -const Hero: FC = () => { - const { mode } = useContext(ThemeContext); - - return ( - -
-

Hi, I am Hazem

-

I Like Building Things

-

Software Developer

-

Life Long Learner

-
-
- -
-
- ); -}; +const Hero: FC = () => ( + +
+

Hi, I am Hazem

+

I Like Building Things

+

Software Developer

+

Life Long Learner

+
+
+ +
+
+); export default Hero; diff --git a/components/Hero/styles.tsx b/components/Hero/styles.tsx index e1ca111..6065721 100644 --- a/components/Hero/styles.tsx +++ b/components/Hero/styles.tsx @@ -3,16 +3,16 @@ import styled from 'styled-components'; export const Wrapper = styled.div` min-height: 45vh; display: grid; - grid-template-columns: repeat(2, 1fr); + grid-template-columns: 1fr 32.188rem; align-items: center; height: auto; text-align: left; - @media (max-width: 425px) { - min-height: 65vh; - grid-template-columns: auto; + @media (max-width: 1024px) { + min-height: 35vh; + grid-template-columns: 1fr; - .illustration { + .photo { display: none; } } @@ -29,15 +29,6 @@ export const Wrapper = styled.div` } } - .small { - font-size: 1rem; - font-weight: normal; - - @media (min-width: 1440px) { - font-size: 1.5rem; - } - } - .blue { color: ${({ theme }) => theme.colors.blue}; } diff --git a/components/MobileNav/index.tsx b/components/MobileNav/index.tsx index 169d8e7..b34e920 100644 --- a/components/MobileNav/index.tsx +++ b/components/MobileNav/index.tsx @@ -47,11 +47,6 @@ const MobileNav: FC = ({ open, close }) => { {mode === 'dark' ? 'Light Mode' : 'Dark Mode'} -
- -
+
+ +
); }; diff --git a/components/Nav/index.tsx b/components/Nav/index.tsx index 0831506..2304f25 100644 --- a/components/Nav/index.tsx +++ b/components/Nav/index.tsx @@ -30,9 +30,9 @@ const Nav: FC = () => { icon={mode === 'dark' ? '/icons/sun.svg' : '/icons/moon.svg'} onClick={toggle} /> - + diff --git a/pages/about.tsx b/pages/contact.tsx similarity index 78% rename from pages/about.tsx rename to pages/contact.tsx index f4321c5..31aa7ae 100644 --- a/pages/about.tsx +++ b/pages/contact.tsx @@ -1,14 +1,11 @@ -import React, { FC, useContext, useState } from 'react'; -import { ThemeContext } from '../styles/theme'; +import React, { FC, useState } from 'react'; import { useForm, ValidationError } from '@formspree/react'; import Head from 'next/head'; import { Wrapper } from '../styles/about'; -import Image from 'next/image'; import Input from '../components/Input'; import MDXButton from '../components/MDXButton'; const About: FC = () => { - const { mode } = useContext(ThemeContext); const [form, setForm] = useState<{ name: string; email: string; message: string }>({ name: '', email: '', @@ -51,22 +48,10 @@ const About: FC = () => { name='keywords' content='Hazem, Krimi, Developer, Software, Engineer, Web, Mobile, Frontend, Backend, Fullstack, JavaScript, React.js, React Native, Node.js, Portfolio, Blog, Tutorials, Tech News' /> - About | Hazem Krimi + Contact | Hazem Krimi
-
-

About Me

-
-

- I am a software developer and a student. I have experience as a full stack developer - but I lean more to the front end and I have built a lot of web apps and some mobile - apps. Also, I am always learning and experimenting with new technologies (currently - learning about the ethereum blockchain) and other topics other than software - engineering. -

-
-

Contact Me {submitted && Message sent ✔️}

@@ -116,9 +101,6 @@ const About: FC = () => {
-
- -
); diff --git a/pages/index.tsx b/pages/index.tsx index 5458daf..baedbe0 100644 --- a/pages/index.tsx +++ b/pages/index.tsx @@ -52,38 +52,45 @@ const Index: FC = ({ blogPosts, portfolioProjects }) => {
-

Portfolio

- -
-
- {portfolioProjects.length !== 0 ? ( - portfolioProjects - .slice(0, 3) - .map(({ slug, ...rest }) => ( +

About me

+
+

+ I am a software developer. I have experience as a full stack developer but I lean more + to the front end and I have built a lot of web apps and some mobile apps. Also, I am + always learning and experimenting with new technologies (currently learning about the + ethereum blockchain) and other topics other than software engineering. +

+
+ {portfolioProjects.length !== 0 && ( + <> +

Portfolio

+ +
+
+ {portfolioProjects.slice(0, 3).map(({ slug, ...rest }) => ( - )) - ) : ( -

Nothing for now

- )} -
-
-

Blog

- -
-
- {blogPosts.length !== 0 ? ( - blogPosts - .slice(0, 3) - .map(({ slug, ...rest }) => ) - ) : ( -

Nothing for now

- )} -
-
+ ))} +
+
+ + )} + {blogPosts.length !== 0 && ( + <> +

Blog

+ +
+
+ {blogPosts.slice(0, 3).map(({ slug, ...rest }) => ( + + ))} +
+
+ + )}
diff --git a/pages/portfolio/[slug].tsx b/pages/portfolio/[slug].tsx index 3085dd5..2d35801 100644 --- a/pages/portfolio/[slug].tsx +++ b/pages/portfolio/[slug].tsx @@ -88,7 +88,6 @@ const PortfolioProject: FC = ({ source, frontMatter }) => { Demo - Source Code diff --git a/public/icons/dark-dribbble.svg b/public/icons/dark-dribbble.svg deleted file mode 100644 index f6fb6be..0000000 --- a/public/icons/dark-dribbble.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/public/icons/light-dribbble.svg b/public/icons/light-dribbble.svg deleted file mode 100644 index 265e5a0..0000000 --- a/public/icons/light-dribbble.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/public/no-image.png b/public/no-image.png deleted file mode 100644 index 8b4b36dcbc57b2407a5fc09fc604fcf49501ac99..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34069 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 diff --git a/public/picture.jpg b/public/photo.jpg similarity index 100% rename from public/picture.jpg rename to public/photo.jpg diff --git a/styles/about.tsx b/styles/about.tsx index b2eff32..ee98da2 100644 --- a/styles/about.tsx +++ b/styles/about.tsx @@ -2,9 +2,6 @@ import styled from 'styled-components'; export const Wrapper = styled.div` padding: 1rem 0rem; - display: grid; - grid-template-columns: repeat(2, 1fr); - column-gap: 2rem; @media (max-width: 768px) { padding: 0rem; @@ -13,14 +10,6 @@ export const Wrapper = styled.div` row-gap: 1rem; } - .photo { - order: initial; - - @media (max-width: 768px) { - order: -1; - } - } - h1 { font-size: 1.7rem; } @@ -30,7 +19,6 @@ export const Wrapper = styled.div` flex-direction: column; } - .about, .contact { margin: 1rem 0rem; diff --git a/styles/blog/index.tsx b/styles/blog/index.tsx index 8da20ff..5c7242c 100644 --- a/styles/blog/index.tsx +++ b/styles/blog/index.tsx @@ -29,8 +29,8 @@ export const Wrapper = styled.div` .articles-wrapper { display: grid; - grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); - grid-auto-rows: minmax(100px, auto); + grid-template-columns: repeat(auto-fit, minmax(18.75rem, 1fr)); + grid-auto-rows: minmax(6.25rem, auto); align-items: stretch; justify-items: center; gap: 1rem; diff --git a/styles/home.tsx b/styles/home.tsx index b9537a8..a0c5b9f 100644 --- a/styles/home.tsx +++ b/styles/home.tsx @@ -27,6 +27,7 @@ export const Wrapper = styled.div` } } + .about, .portfolio, .blog { margin: 1rem 0rem; @@ -39,8 +40,8 @@ export const Wrapper = styled.div` .projects-wrapper, .articles-wrapper { display: grid; - grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); - grid-auto-rows: minmax(100px, auto); + grid-template-columns: repeat(auto-fit, minmax(18.75rem, 1fr)); + grid-auto-rows: minmax(6.25rem, auto); align-items: stretch; justify-items: center; gap: 1rem; diff --git a/styles/portfolio/index.tsx b/styles/portfolio/index.tsx index 69da456..fef17d8 100644 --- a/styles/portfolio/index.tsx +++ b/styles/portfolio/index.tsx @@ -29,8 +29,8 @@ export const Wrapper = styled.div` .projects-wrapper { display: grid; - grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); - grid-auto-rows: minmax(100px, auto); + grid-template-columns: repeat(auto-fit, minmax(18.75rem, 1fr)); + grid-auto-rows: minmax(6.25rem, auto); align-items: stretch; justify-items: center; gap: 1rem;