├── public
├── favicon.ico
├── robots.txt
├── apple-touch-icon.png
├── android-chrome-192x192.png
├── android-chrome-512x512.png
├── manifest.json
└── index.html
├── src
├── assets
│ ├── frank.webp
│ ├── pfp-1.webp
│ ├── pfp-2.webp
│ ├── yarman.webp
│ ├── logo.svg
│ ├── dots-bg.svg
│ ├── price-2.svg
│ ├── price-3.svg
│ ├── service-2.svg
│ ├── price-1.svg
│ ├── service-3.svg
│ ├── work-2.svg
│ ├── work-5.svg
│ ├── work-6.svg
│ ├── service-1.svg
│ ├── work-1.svg
│ └── avatar-3.svg
├── App.css
├── setupTests.js
├── App.test.js
├── index.js
├── components
│ ├── resume
│ │ ├── Card.jsx
│ │ ├── Resume.jsx
│ │ ├── Data.jsx
│ │ └── resume.css
│ ├── home
│ │ ├── ScrollDown.jsx
│ │ ├── Home.jsx
│ │ ├── HeaderSocials.jsx
│ │ ├── home.css
│ │ └── Shapes.jsx
│ ├── portfolio
│ │ ├── Menu.jsx
│ │ ├── Portfolio.jsx
│ │ └── portfolio.css
│ ├── about
│ │ ├── AboutBox.jsx
│ │ ├── About.jsx
│ │ └── about.css
│ ├── sidebar
│ │ ├── sidebar.css
│ │ └── Sidebar.jsx
│ ├── contact
│ │ ├── Contact.jsx
│ │ └── contact.css
│ ├── testimonials
│ │ ├── testimonials.css
│ │ └── Testimonials.jsx
│ ├── services
│ │ ├── services.css
│ │ └── Services.jsx
│ ├── blog
│ │ ├── blog.css
│ │ └── Blog.jsx
│ └── pricing
│ │ ├── Pricing.jsx
│ │ └── pricing.css
├── reportWebVitals.js
├── App.js
└── index.css
├── .gitignore
├── package.json
└── README.md
/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/theomorphic/geeky/HEAD/public/favicon.ico
--------------------------------------------------------------------------------
/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/src/assets/frank.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/theomorphic/geeky/HEAD/src/assets/frank.webp
--------------------------------------------------------------------------------
/src/assets/pfp-1.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/theomorphic/geeky/HEAD/src/assets/pfp-1.webp
--------------------------------------------------------------------------------
/src/assets/pfp-2.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/theomorphic/geeky/HEAD/src/assets/pfp-2.webp
--------------------------------------------------------------------------------
/src/assets/yarman.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/theomorphic/geeky/HEAD/src/assets/yarman.webp
--------------------------------------------------------------------------------
/public/apple-touch-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/theomorphic/geeky/HEAD/public/apple-touch-icon.png
--------------------------------------------------------------------------------
/public/android-chrome-192x192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/theomorphic/geeky/HEAD/public/android-chrome-192x192.png
--------------------------------------------------------------------------------
/public/android-chrome-512x512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/theomorphic/geeky/HEAD/public/android-chrome-512x512.png
--------------------------------------------------------------------------------
/src/App.css:
--------------------------------------------------------------------------------
1 |
2 |
3 | .main{
4 | margin-left: 110px;
5 | user-select: none;
6 | }
7 |
8 | @media screen and (max-width: 1024px){
9 | .main{
10 | margin-left: 0;
11 | }
12 | }
--------------------------------------------------------------------------------
/src/setupTests.js:
--------------------------------------------------------------------------------
1 | // jest-dom adds custom jest matchers for asserting on DOM nodes.
2 | // allows you to do things like:
3 | // expect(element).toHaveTextContent(/react/i)
4 | // learn more: https://github.com/testing-library/jest-dom
5 | import '@testing-library/jest-dom';
6 |
--------------------------------------------------------------------------------
/src/App.test.js:
--------------------------------------------------------------------------------
1 | import { render, screen } from '@testing-library/react';
2 | import App from './App';
3 |
4 | test('renders learn react link', () => {
5 | render();
6 | const linkElement = screen.getByText(/learn react/i);
7 | expect(linkElement).toBeInTheDocument();
8 | });
9 |
--------------------------------------------------------------------------------
/src/index.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDOM from 'react-dom/client';
3 | import './index.css';
4 | import App from './App';
5 | import reportWebVitals from './reportWebVitals';
6 |
7 | const root = ReactDOM.createRoot(document.getElementById('root'));
8 | root.render(
9 |
10 |
11 |
12 | );
13 |
14 |
15 | reportWebVitals();
16 |
--------------------------------------------------------------------------------
/src/components/resume/Card.jsx:
--------------------------------------------------------------------------------
1 |
2 | import React from 'react'
3 |
4 | const Card = (props) => {
5 | return (
6 |
7 |
8 |
{props.year}
9 |
{props.title}
10 |
{props.desc}
11 |
12 | )
13 | }
14 |
15 | export default Card
16 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # production
12 | /build
13 |
14 | # misc
15 | .DS_Store
16 | .env.local
17 | .env.development.local
18 | .env.test.local
19 | .env.production.local
20 |
21 | npm-debug.log*
22 | yarn-debug.log*
23 | yarn-error.log*
24 |
--------------------------------------------------------------------------------
/src/components/home/ScrollDown.jsx:
--------------------------------------------------------------------------------
1 |
2 |
3 | import React from 'react'
4 |
5 | const ScrollDown = () => {
6 | return (
7 |
15 | )
16 | }
17 |
18 | export default ScrollDown
19 |
--------------------------------------------------------------------------------
/src/reportWebVitals.js:
--------------------------------------------------------------------------------
1 | const reportWebVitals = onPerfEntry => {
2 | if (onPerfEntry && onPerfEntry instanceof Function) {
3 | import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {
4 | getCLS(onPerfEntry);
5 | getFID(onPerfEntry);
6 | getFCP(onPerfEntry);
7 | getLCP(onPerfEntry);
8 | getTTFB(onPerfEntry);
9 | });
10 | }
11 | };
12 |
13 | export default reportWebVitals;
14 |
--------------------------------------------------------------------------------
/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "Geeky",
3 | "name": "Geeky Web App",
4 | "icons": [
5 | {
6 | "src": "favicon.ico",
7 | "sizes": "64x64 32x32 24x24 16x16",
8 | "type": "image/x-icon"
9 | },
10 | {
11 | "src": "android-chrome-192x192.png",
12 | "type": "image/png",
13 | "sizes": "192x192"
14 | },
15 | {
16 | "src": "android-chrome-512x512.png",
17 | "type": "image/png",
18 | "sizes": "512x512"
19 | }
20 | ],
21 | "start_url": ".",
22 | "display": "standalone",
23 | "theme_color": "#000000",
24 | "background_color": "#ffffff"
25 | }
26 |
--------------------------------------------------------------------------------
/src/components/home/Home.jsx:
--------------------------------------------------------------------------------
1 |
2 | import React from "react";
3 | import "./home.css"
4 | import Me from "../../assets/pfp-1.webp"
5 | import HeaderSocials from "./HeaderSocials";
6 | import ScrollDown from "./ScrollDown";
7 | import Shapes from "./Shapes";
8 |
9 | const Home = ()=>{
10 | return(
11 |
12 |
13 |

14 |
Misha Kaiser
15 |
React developer
16 |
17 |
18 |
19 |
Contact Me
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 | )
28 | }
29 |
30 | export default Home
--------------------------------------------------------------------------------
/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
11 | Geeky Web App
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "geeky",
3 | "version": "0.1.0",
4 | "private": true,
5 | "dependencies": {
6 | "cra-template": "1.2.0",
7 | "react": "^19.0.0",
8 | "react-dom": "^19.0.0",
9 | "react-scripts": "5.0.1",
10 | "swiper": "^11.2.1"
11 | },
12 | "scripts": {
13 | "start": "react-scripts start",
14 | "build": "react-scripts build",
15 | "test": "react-scripts test",
16 | "eject": "react-scripts eject"
17 | },
18 | "eslintConfig": {
19 | "extends": [
20 | "react-app",
21 | "react-app/jest"
22 | ]
23 | },
24 | "browserslist": {
25 | "production": [
26 | ">0.2%",
27 | "not dead",
28 | "not op_mini all"
29 | ],
30 | "development": [
31 | "last 1 chrome version",
32 | "last 1 firefox version",
33 | "last 1 safari version"
34 | ]
35 | },
36 | "devDependencies": {
37 | "web-vitals": "^4.2.4"
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/src/App.js:
--------------------------------------------------------------------------------
1 | import './App.css';
2 | import Sidebar from './components/sidebar/Sidebar';
3 | import Home from './components/home/Home';
4 | import About from './components/about/About';
5 | import Services from './components/services/Services';
6 | import Resume from './components/resume/Resume';
7 | import Portfolio from './components/portfolio/Portfolio';
8 | import Pricing from './components/pricing/Pricing';
9 | import Testimonials from './components/testimonials/Testimonials';
10 | import Blog from './components/blog/Blog';
11 | import Contact from './components/contact/Contact';
12 |
13 | function App() {
14 | return (
15 | <>
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 | >
29 | );
30 | }
31 |
32 | export default App;
33 |
--------------------------------------------------------------------------------
/src/components/home/HeaderSocials.jsx:
--------------------------------------------------------------------------------
1 |
2 | import React from 'react'
3 |
4 | const HeaderSocials = () => {
5 | return (
6 |
27 | )
28 | }
29 |
30 | export default HeaderSocials
31 |
--------------------------------------------------------------------------------
/src/components/portfolio/Menu.jsx:
--------------------------------------------------------------------------------
1 |
2 | import Work1 from "../../assets/work-1.svg"
3 | import Work2 from "../../assets/work-2.svg"
4 | import Work3 from "../../assets/work-3.svg"
5 | import Work4 from "../../assets/work-4.svg"
6 | import Work5 from "../../assets/work-5.svg"
7 | import Work6 from "../../assets/work-6.svg"
8 |
9 |
10 |
11 | const Menu = [
12 | {
13 | id: 1,
14 | image: Work1,
15 | title: "Project Management Illustration",
16 | category: "Design",
17 | },
18 | {
19 | id: 2,
20 | image: Work2,
21 | title: "Guest App Walkthrough Screens",
22 | category: "Art",
23 | },
24 | {
25 | id: 3,
26 | image: Work3,
27 | title: "Delivery App Wireframe",
28 | category: "Branding",
29 | },
30 | ,
31 | {
32 | id: 4,
33 | image: Work4,
34 | title: "Onboarding Motivation",
35 | category: "Design",
36 | },
37 | ,
38 | {
39 | id: 5,
40 | image: Work5,
41 | title: "iMac Mockup Design",
42 | category: "Creative",
43 | },
44 | ,
45 | {
46 | id: 6,
47 | image: Work6,
48 | title: "Game Store App Concept",
49 | category: "Art",
50 | },
51 | ];
52 |
53 | export default Menu
--------------------------------------------------------------------------------
/src/components/resume/Resume.jsx:
--------------------------------------------------------------------------------
1 |
2 | import React from "react";
3 | import "./resume.css"
4 | import Data from "./Data";
5 | import Card from "./Card";
6 |
7 | const Resume = ()=>{
8 | return(
9 |
10 | Experience
11 |
12 |
13 |
14 | {Data.map((val, id) =>{
15 | if(val.category === "education"){
16 | return (
17 |
23 | )
24 | }
25 | })}
26 |
27 |
28 |
29 | {Data.map((val, index) =>{
30 | if(val.category === "experience"){
31 | return (
32 |
38 | )
39 | }
40 | })}
41 |
42 |
43 |
44 | )
45 | }
46 |
47 | export default Resume
--------------------------------------------------------------------------------
/src/components/about/AboutBox.jsx:
--------------------------------------------------------------------------------
1 |
2 | import React from 'react'
3 |
4 | const AboutBox = () => {
5 | return (
6 |
7 |
8 |
9 |
10 |
11 |
34
12 | Project completed
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
2532
21 | Cup of coffee
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
143
30 | Satisfied clients
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
21
39 | Nominees winner
40 |
41 |
42 |
43 | )
44 | }
45 |
46 | export default AboutBox
47 |
--------------------------------------------------------------------------------
/src/components/sidebar/sidebar.css:
--------------------------------------------------------------------------------
1 |
2 |
3 | .aside{
4 | display: flex;
5 | flex-direction: column;
6 | justify-content: space-between;
7 | z-index: 10;
8 | position: fixed;
9 | left: 0;
10 | top: 0;
11 | background-color: var(--body-color);
12 | border-right: 1px solid rgba(0, 0, 0, 0.05);
13 | padding: 2.5rem;
14 | width: 110px;
15 | min-height: 100vh;
16 | transition: .3s;
17 | }
18 |
19 | .nav__list{
20 | display: flex;
21 | flex-direction: column;
22 | row-gap: 1rem;
23 | }
24 |
25 | .nav__link{
26 | font-size: 1.5rem;
27 | color: var(--title);
28 | font-weight: var(--font-bold);
29 | transition: ease .3s;
30 | }
31 |
32 | .nav__link:hover{
33 | color: hsl(43, 100%, 68%);
34 | }
35 |
36 | .copyright{
37 | color: hsl(245, 15%, 65%);
38 | font-size: var(--small-font-size);
39 | transform: rotate(-180deg);
40 | writing-mode: vertical-rl;
41 | }
42 |
43 | .nav__toggle{
44 | display: none;
45 | position: fixed;
46 | justify-content: center;
47 | align-items: center;
48 | top: 1.25rem;
49 | left: 1.875rem;
50 | cursor: pointer;
51 | height: 40px;
52 | width: 45px;
53 | background-color: var(--body-color);
54 | border: 1px solid #e8dfec;
55 | z-index: 1;
56 | transition: .3s;
57 | }
58 |
59 | @media screen and (max-width: 1024px){
60 | .aside{
61 | left: -110px;
62 | }
63 |
64 | .nav__toggle{
65 | display: flex;
66 | }
67 |
68 | .nav__toggle-open{
69 | left: 140px;
70 | }
71 |
72 | .show-menu{
73 | left: 0;
74 | }
75 | }
--------------------------------------------------------------------------------
/src/components/contact/Contact.jsx:
--------------------------------------------------------------------------------
1 |
2 | import React from "react";
3 | import "./contact.css"
4 |
5 | const Contact = ()=>{
6 | return(
7 |
43 | )
44 | }
45 |
46 | export default Contact
--------------------------------------------------------------------------------
/src/components/testimonials/testimonials.css:
--------------------------------------------------------------------------------
1 |
2 |
3 | .testimonials__container{
4 | max-width: 700px;
5 | margin: auto;
6 | }
7 |
8 | .testimonial__item{
9 | text-align: center;
10 | padding: 0 1.25rem 1.25rem;
11 | }
12 |
13 | .thumb{
14 | height: 17.6rem;
15 | width: 17.6rem;
16 | margin: 0 auto;
17 | }
18 |
19 | .thumb__img{
20 | height: 17.6rem;
21 | width: 17.6rem;
22 |
23 |
24 | }
25 |
26 | .testimonials__title{
27 | margin-top: 0.75rem;
28 | }
29 |
30 | .subtitle{
31 | color: #8b88b1;
32 | font-size: var(--small-font-size);
33 | }
34 |
35 | .comment{
36 | position: relative;
37 | background-color: var(--container-color);
38 | padding: 1.875rem;
39 | margin-top: 1.5rem;
40 | box-shadow: var(--shadow);
41 | border-radius: var(--border-radius);
42 | margin-bottom: 3rem;
43 | }
44 |
45 | .comment::before{
46 | content: "";
47 | position: absolute;
48 | left: 49.5%;
49 | top: -0.625rem;
50 | width: 0;
51 | height: 0;
52 | border-left: 10px solid transparent;
53 | border-right: 10px solid transparent;
54 | border-bottom: 10px solid var(--container-color);
55 | transform: translateY(-7.5px);
56 |
57 | }
58 |
59 | .swiper-pagination-bullet{
60 | width: 0.5rem !important;
61 | height: 0.375rem !important;
62 | background-color: var(--first-color) !important;
63 | opacity: 1;
64 | }
65 |
66 | .swiper-pagination-horizontal.swoper-pagination-bullets .swiper-pagination-bullet{
67 | margin: 0 0.2rem !important;
68 | }
69 |
70 | .swiper-pagination-bullet-active{
71 | width: 1.2rem !important;
72 | height: 0.375rem !important;
73 | border-radius: 0.5rem !important;
74 | }
--------------------------------------------------------------------------------
/src/components/resume/Data.jsx:
--------------------------------------------------------------------------------
1 |
2 | const Data = [
3 | {
4 | id: 1,
5 | category: "education",
6 | icon: "icon-graduation",
7 | year: "2019 - present",
8 | title: "Academic Degree",
9 | desc: "Lorem ipsum dolor sit amet quo ei simul congue exerci ad nec admodum perfecto.",
10 | },
11 | {
12 | id: 2,
13 | category: "education",
14 | icon: "icon-graduation",
15 | year: "2013 - 2017",
16 | title: "Bachelor's Degree",
17 | desc: "Lorem ipsum dolor sit amet quo ei simul congue exerci ad nec admodum perfecto.",
18 | },
19 | {
20 | id: 3,
21 | category: "education",
22 | icon: "icon-graduation",
23 | year: "2009 - 2013",
24 | title: "Honours Degree",
25 | desc: "Lorem ipsum dolor sit amet quo ei simul congue exerci ad nec admodum perfecto.",
26 | },
27 | {
28 | id: 4,
29 | category: "experience",
30 | icon: "icon-briefcase",
31 | year: "2019 - present",
32 | title: "Web Designer",
33 | desc: "Lorem ipsum dolor sit amet quo ei simul congue exerci ad nec admodum perfecto.",
34 | },
35 | {
36 | id: 5,
37 | category: "experience",
38 | icon: "icon-briefcase",
39 | year: "2013 - 2017",
40 | title: "Front-End Developer",
41 | desc: "Lorem ipsum dolor sit amet quo ei simul congue exerci ad nec admodum perfecto.",
42 | },
43 | {
44 | id: 6,
45 | category: "experience",
46 | icon: "icon-briefcase",
47 | year: "2009 - 2013",
48 | title: "Back-End Developer",
49 | desc: "Lorem ipsum dolor sit amet quo ei simul congue exerci ad nec admodum perfecto.",
50 | },
51 | ];
52 |
53 | export default Data
54 |
--------------------------------------------------------------------------------
/src/components/services/services.css:
--------------------------------------------------------------------------------
1 |
2 |
3 | .services__container{
4 | grid-template-columns: repeat(3, 1fr);
5 | column-gap: 1.875rem;
6 |
7 | }
8 |
9 | .services__card{
10 | text-align: center;
11 | padding: 1.875rem;
12 | border-radius: var(--border-radius);
13 | background-color: var(--container-color);
14 | transition: all .3s ease-in-out;
15 | }
16 |
17 | .services__card:hover{
18 | transform: translateY(-10px);
19 | }
20 |
21 | .services__card:nth-child(1){
22 | background-color: rgb(108, 108, 229);
23 | box-shadow: 0px 5px 20px 0px rgb(108, 108, 229 / 50%);
24 | }
25 |
26 | .services__card:nth-child(2){
27 | background-color: rgb(249, 215, 76);
28 | box-shadow: 0px 5px 20px 0px rgb(249, 215, 76 / 50%);
29 | }
30 |
31 | .services__card:nth-child(3){
32 | background-color: rgb(249, 123, 139);
33 | box-shadow: 0px 5px 20px 0px rgb(249, 123, 139 / 50%);
34 | }
35 |
36 | .services__img{
37 | margin-bottom: 1.25rem;
38 | }
39 |
40 | .services__title{
41 | font-size: var(--h3-font-size);
42 | margin-bottom: 1rem;
43 | color: #fff;
44 | }
45 |
46 | .services__description{
47 | color: #f8f9fa;
48 | }
49 |
50 | .services__card:nth-child(2) .services__title{
51 | color: var(--title-color);
52 | }
53 |
54 | .services__card:nth-child(2) .services__description{
55 | color: var(--text-color);
56 | }
57 |
58 | @media screen and (max-width: 1024px){
59 | .services__container{
60 | grid-template-columns: repeat(2, 330px);
61 | justify-content: center;
62 | row-gap: 1.875rem;
63 | }
64 | }
65 |
66 | @media screen and (max-width: 768px){
67 | .services__container{
68 | grid-template-columns: 310px;
69 |
70 | }
71 | }
--------------------------------------------------------------------------------
/src/components/blog/blog.css:
--------------------------------------------------------------------------------
1 |
2 | .blog__container{
3 | grid-template-columns: repeat(3, 1fr);
4 | column-gap: 1.875rem;
5 | }
6 |
7 | .blog__card{
8 | box-shadow: var(--shadow);
9 | border-radius: var(--border-radius);
10 | overflow: hidden;
11 | }
12 |
13 | .blog__thumb{
14 | position: relative;
15 | overflow: hidden;
16 | }
17 |
18 | .blog__img{
19 | transform: scale(1);
20 | transition: .3s;
21 | }
22 |
23 | .blog__thumb:hover .blog__img{
24 | transform: scale(1.1);
25 | }
26 |
27 | .blog__category{
28 | display: inline-block;
29 | position: absolute;
30 | top: 0;
31 | left: 1.25rem;
32 | padding: 0.125rem 0.5rem;
33 | color: #fff;
34 | background-color: var(--first-color);
35 | border-bottom-left-radius: 0.9375rem;
36 | border-bottom-right-radius: 0.9375rem;
37 | font-size: var(--small-font-size);
38 | transition: .3s;
39 | z-index: 1;
40 | }
41 |
42 | .blog__details{
43 | background-color: var(--container-color);
44 | padding: 1.25rem;
45 | }
46 |
47 | .blog__title{
48 | font-size: var(--h3-font-size);
49 | margin-bottom: 0.5rem;
50 | }
51 |
52 | .blog__meta{
53 | display: flex;
54 | column-gap: 0.6rem;
55 | font-size: var(--small-font-size);
56 | color: #8b88b1;
57 | }
58 |
59 | .blog__dot{
60 | font-weight: var(--font-bold);
61 | }
62 |
63 | @media screen and (max-width: 1024px){
64 | .blog__container{
65 | grid-template-columns: repeat(2, 330px);
66 | justify-content: center;
67 | row-gap: 1.875rem;
68 | }
69 | }
70 |
71 | @media screen and (max-width: 768px){
72 | .blog__container{
73 | grid-template-columns: 310px;
74 |
75 | }
76 | }
77 |
78 | @media screen and (max-width: 350px){
79 | .blog__container{
80 | grid-template-columns: 1fr;
81 | }
82 | }
--------------------------------------------------------------------------------
/src/components/contact/contact.css:
--------------------------------------------------------------------------------
1 |
2 | .contact.section{
3 | padding-bottom: 6.25rem;
4 | }
5 |
6 | .contact__container{
7 | grid-template-columns: 4fr 8fr;
8 | column-gap: 1.875rem;
9 | }
10 |
11 | .contact__title{
12 | font-size: var(--h3-font-size);
13 | margin-bottom: .5rem;
14 | }
15 |
16 | .contact__form-group{
17 | display: grid;
18 | grid-template-columns: repeat(2, 1fr);
19 | column-gap: 1.5rem;
20 | }
21 |
22 | .contact__form-div{
23 | position: relative;
24 | margin-bottom: 1.875rem;
25 | height: 3.75rem;
26 | }
27 |
28 | .contact__form-input{
29 | position: absolute;
30 | top: 0;
31 | left: 0;
32 | width: 100%;
33 | height: 100%;
34 | box-shadow: var(--shadow);
35 | background-color: var(--container-color);
36 | color: var(--text-color);
37 | border: none;
38 | outline: none;
39 | border-radius: 1.875rem;
40 | padding: 0.625rem;
41 | z-index: 1;
42 |
43 | }
44 |
45 | .contact__form-input::placeholder{
46 | display: flex;
47 | justify-content: center;
48 | align-items: center;
49 | padding-left: 1rem;
50 | }
51 |
52 | .contact__form-area{
53 | height: 10.25rem;
54 |
55 | }
56 |
57 | .contact__form-area textarea{
58 | resize: none;
59 |
60 | }
61 |
62 | @media screen and (max-width: 1024px){
63 | .contact__container{
64 | grid-template-columns: 300px 360px;
65 | justify-content: center;
66 | }
67 |
68 | .contact__form-group{
69 | grid-template-columns: 1fr;
70 | }
71 | }
72 |
73 | @media screen and (max-width: 768px){
74 | .contact__container{
75 | grid-template-columns: 310px;
76 | row-gap: 1.875rem;
77 | }
78 |
79 | .contact__info{
80 | text-align: center;
81 | }
82 | }
83 |
84 | @media screen and (max-width: 350px){
85 | .contact__container{
86 | grid-template-columns: 1fr;
87 | }
88 | }
--------------------------------------------------------------------------------
/src/components/portfolio/Portfolio.jsx:
--------------------------------------------------------------------------------
1 |
2 | import React, { useState } from "react";
3 | import "./portfolio.css"
4 | import Menu from "./Menu";
5 |
6 | const Portfolio = ()=>{
7 |
8 | const [items, setItems] = useState(Menu);
9 |
10 | const filterItem = (categoryItem) =>{
11 | const updatedItems = Menu.filter((curElem) =>{
12 | return curElem.category === categoryItem;
13 | })
14 |
15 | setItems(updatedItems);
16 | }
17 |
18 |
19 | return(
20 |
21 |
22 | Recent Works
23 |
24 |
25 |
26 | setItems(Menu)}>Everything
27 | filterItem("Creative")}>Creative
28 | filterItem("Art")}>Art
29 | filterItem("Design")}>Design
30 | filterItem("Branding")}>Branding
31 |
32 |
33 |
34 |
35 | {items.map((elem) =>{
36 | const{id, image, title, category} = elem;
37 | return(
38 |
39 |
40 |

41 |
42 |
43 |
44 |
{category}
45 |
{title}
46 |
47 |
48 |
49 |
50 | )
51 | })}
52 |
53 |
54 | )
55 | }
56 |
57 | export default Portfolio
--------------------------------------------------------------------------------
/src/components/resume/resume.css:
--------------------------------------------------------------------------------
1 |
2 |
3 | .resume__container{
4 | grid-template-columns: repeat(2, 1fr);
5 | column-gap: 1.875rem;
6 | }
7 |
8 | .timeline{
9 | position: relative;
10 | background-color: var(--container-color);
11 | padding: 1.875rem;
12 | border-radius: var(--border-radius);
13 | box-shadow: var(--shadow);
14 | }
15 |
16 | .timeline__item{
17 | position: relative;
18 | padding-left: 3.125rem;
19 | padding-bottom: 3.125rem;
20 | }
21 |
22 | .timeline__item:last-child{
23 | padding-bottom: 0;
24 | }
25 |
26 | .timeline__item::before{
27 | content: '';
28 | width: 1px;
29 | height: 100%;
30 | background-color: var(--first-color);
31 | position: absolute;
32 | left: .25rem;
33 | top: 0;
34 | }
35 |
36 | .timeline .icon-briefcase,
37 | .timeline .icon-graduation{
38 | position: absolute;
39 | left: -0.4375rem;
40 | top: 0;
41 | font-size: var(--h2-font-size);
42 | color: var(--first-color);
43 | background-color: var(--container-color);
44 | padding: 0.4375rem 0;
45 | }
46 |
47 | .timeline__date{
48 | color: #8b88b1;
49 | font-size: var(--small-font-size);
50 | }
51 |
52 | .timeline__title{
53 | font-size: var(--h3-font-size);
54 | margin: 0.5rem 0;
55 | }
56 |
57 | @media screen and (max-width: 1024px){
58 | .resume__container{
59 | grid-template-columns: 450px;
60 | justify-content: center;
61 | row-gap: 1.875rem;
62 | }
63 |
64 | .timeline__item::before{
65 | left: 2px;
66 | }
67 | }
68 |
69 | @media screen and (max-width: 576px){
70 | .resume__container{
71 | grid-template-columns: 1fr;
72 |
73 | }
74 | }
75 |
76 | @media screen and (max-width: 350px){
77 | .timeline__item{
78 | padding-left: 1.875rem;
79 | padding-bottom: 1.875rem;
80 | }
81 |
82 | .timeline__item::before{
83 | left: 0;
84 | }
85 |
86 | .timeline .icon-briefcase,
87 | .timeline .icon-graduation{
88 | left: -9px;
89 | }
90 |
91 | .timeline__text{
92 | text-align: justify;
93 | }
94 | }
--------------------------------------------------------------------------------
/src/components/pricing/Pricing.jsx:
--------------------------------------------------------------------------------
1 |
2 | import React from "react";
3 | import "./pricing.css"
4 | import Image1 from "../../assets/price-1.svg"
5 | import Image2 from "../../assets/price-2.svg"
6 | import Image3 from "../../assets/price-3.svg"
7 |
8 | const Pricing = ()=>{
9 | return(
10 |
11 |
12 | Pricing Plans
13 |
14 |
15 |
16 |
17 |

18 |
Basic
19 |
A Simple option but powerful to manage your business
20 |
Email support
21 |
22 | $ 9 Month
23 |
24 |
Get Started
25 |
26 |
27 |
28 |
Recommended
29 |

30 |
Premium
31 |
Unlimited product including app integration and more features
32 |
Mon-Fri support
33 |
34 | $ 15 Month
35 |
36 |
Get Started
37 |
38 |
39 |
40 |

41 |
Ultimate
42 |
A wise option for large companies and individuals
43 |
24/7 support
44 |
45 | $ 19 Month
46 |
47 |
Get Started
48 |
49 |
50 |
51 | )
52 | }
53 |
54 | export default Pricing
--------------------------------------------------------------------------------
/src/components/pricing/pricing.css:
--------------------------------------------------------------------------------
1 |
2 |
3 | .pricing__container{
4 | grid-template-columns: repeat(3, 1fr);
5 | align-items: center;
6 | }
7 |
8 | .pricing__item{
9 | padding: 1.875rem 2.5rem;
10 | background-color: var(--container-color);
11 | text-align: center;
12 | border-radius: var(--border-radius);
13 | box-shadow: var(--shadow);
14 | }
15 |
16 | .pricing__plan{
17 | margin: 1.25rem 0;
18 | font-size: var(--h2-font-size);
19 | }
20 |
21 | .pricing__title,
22 | .pricing__support{
23 | margin-bottom: 1rem;
24 | }
25 |
26 | .price{
27 | font-size: var(--h1-font-size);
28 | font-weight: var(--font-bold);
29 | }
30 |
31 | .price em{
32 | font-style: normal;
33 | font-size: var(--small-font-size);
34 | margin-right: 0.5rem;
35 | vertical-align: super;
36 | }
37 |
38 | .price span{
39 | font-size: var(--normal-font-size);
40 | font-weight: 400;
41 | margin-left: 0.75rem;
42 | }
43 |
44 | .pricing__item .btn{
45 | margin-top: 1.25rem;
46 | }
47 |
48 | .pricing__item.best{
49 | position: relative;
50 | padding: 3.4rem 2.5rem;
51 | z-index: 1;
52 | }
53 |
54 | .badge{
55 | position: absolute;
56 | left: 0;
57 | top: 2.6rem;
58 | color: #fff;
59 | background-color: #6c6ce5;
60 | transform: rotate(-90deg);
61 | padding: .25rem .75rem;
62 | font-size: var(--small-font-size);
63 | border-top-left-radius: var(--border-radius);
64 | border-bottom-left-radius: var(--border-radius);
65 | border-top-right-radius: 0;
66 | border-bottom-right-radius: 0;
67 | }
68 |
69 | @media screen and (max-width: 1024px){
70 | .pricing__container{
71 | grid-template-columns: repeat(2, 330px);
72 | justify-content: center;
73 | gap: 1.875rem;
74 | }
75 |
76 | .pricing__item.best{
77 | padding: 1.875rem 2.5rem;
78 | }
79 | }
80 |
81 | @media screen and (max-width: 768px){
82 | .pricing__container{
83 | grid-template-columns: 310px;
84 |
85 | }
86 | }
87 |
88 | @media screen and (max-width: 350px){
89 | .pricing__container{
90 | grid-template-columns: 1fr;
91 | }
92 | }
--------------------------------------------------------------------------------
/src/components/services/Services.jsx:
--------------------------------------------------------------------------------
1 |
2 |
3 | import React from "react";
4 | import "./services.css"
5 | import Image1 from "../../assets/service-1.svg";
6 | import Image2 from "../../assets/service-2.svg";
7 | import Image3 from "../../assets/service-3.svg";
8 |
9 | const data = [
10 | {
11 | id: 1,
12 | image: Image1,
13 | title: "UI/UX design",
14 | description:
15 | "Engaging user interfaces that are both functional and aesthetically pleasing. Leveraging React's capabilities to ensure components are reusable, maintainable, and optimized for performance, enhancing the overall user experience.",
16 | },
17 | {
18 | id: 2,
19 | image: Image2,
20 | title: "Web Development",
21 | description:
22 | "Adepting at both front-end and back-end technologies, ensuring robust, scalable, and secure websites or applications. Possessing a keen eye for design, strong problem-solving skills, and a commitment to staying updated with the latest web development trends and practices.",
23 | },
24 | {
25 | id: 3,
26 | image: Image3,
27 | title: "Photography",
28 | description:
29 | "Having an exceptional eye for detail, composition, and light, capturing moments that tell a story or evoke emotion. Mastering both the technical aspects of photography and the creative process, whether working with digital or analog techniques.",
30 | },
31 | ];
32 |
33 | const Services = ()=>{
34 | return
35 | Services
36 |
37 |
38 | {data.map(({id, image, title, description}) =>{
39 | return(
40 |
41 |

42 |
43 |
{title}
44 |
{description}
45 |
46 | )
47 | })}
48 |
49 |
50 |
51 | }
52 |
53 | export default Services
--------------------------------------------------------------------------------
/src/components/about/About.jsx:
--------------------------------------------------------------------------------
1 |
2 | import React from "react";
3 | import "./about.css"
4 | import avatar2 from "../../assets/pfp-2.webp";
5 | import AboutBox from "./AboutBox";
6 |
7 | const About = ()=>{
8 | return(
9 |
10 | About Me
11 |
12 |
13 |

14 |
15 |
16 |
17 |
18 |
I'm a software engineer that admires beautiful design and delicious coffee ☕ Trying my best to keep it elegant and useful.
19 |
Download CV
20 |
21 |
22 |
23 |
24 |
25 |
Development
26 | 95%
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
UI/UX design
37 | 80%
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
Photography
48 | 70%
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 | )
63 | }
64 |
65 | export default About
--------------------------------------------------------------------------------
/src/components/testimonials/Testimonials.jsx:
--------------------------------------------------------------------------------
1 |
2 |
3 | import React from "react";
4 | import "./testimonials.css";
5 | import Image1 from "../../assets/frank.webp";
6 | import Image3 from "../../assets/yarman.webp";
7 |
8 | import {Pagination} from 'swiper/modules';
9 |
10 | import { Swiper, SwiperSlide } from 'swiper/react';
11 |
12 | import 'swiper/css';
13 | import 'swiper/css/pagination';
14 |
15 |
16 | const data = [
17 | {
18 | id: 1,
19 | image: Image3,
20 | title: "Yarman",
21 | subtitle: "Executive director at Good Drivers Company",
22 | comment:
23 | "I enjoy working with the theme and learn so much. You guys make the process fun and interesting. Good luck! 👍",
24 | },
25 | {
26 | id: 2,
27 | image: Image1,
28 | title: "Frank MacDonald",
29 | subtitle: "Product manager at Amazon",
30 | comment:
31 | "I'm a big fan of this team. Y'all the best. Keep it up, folks. The project we've done together is top notch even for FFANG 👍",
32 | },
33 | ];
34 |
35 | const Testimonials = ()=>{
36 | return(
37 |
38 | Clients & Reviews
39 |
40 |
48 | {data.map(({id, image, title, subtitle, comment}) =>{
49 | return(
50 |
51 |
52 |

53 |
54 |
55 |
56 | {title}
57 |
58 |
59 | {subtitle}
60 |
61 |
62 | {comment}
63 |
64 |
65 | )
66 | })}
67 |
68 |
69 |
70 |
71 | )
72 | }
73 |
74 | export default Testimonials
--------------------------------------------------------------------------------
/src/components/sidebar/Sidebar.jsx:
--------------------------------------------------------------------------------
1 |
2 | import React, { useState } from "react";
3 | import "./sidebar.css"
4 | import Logo from "../../assets/logo.svg"
5 |
6 | const Sidebar = ()=>{
7 | const [toggle, showMenu] = useState(false);
8 | return(
9 | <>
10 |
69 |
70 |
71 | showMenu(!toggle)}>
72 |
73 |
74 | >
75 | )
76 | }
77 |
78 | export default Sidebar
79 |
--------------------------------------------------------------------------------
/src/components/blog/Blog.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import "./blog.css"
3 | import Image1 from "../../assets/blog-1.svg";
4 | import Image2 from "../../assets/blog-2.svg";
5 | import Image3 from "../../assets/blog-3.svg";
6 |
7 | const Blog = ()=>{
8 | return(
9 |
10 | Latest Posts
11 |
12 |
13 |
17 |
18 |
5 Best App Development Tool for Your Projects
19 |
20 | 09 February, 2022
21 | .
22 | Bolby
23 |
24 |
25 |
26 |
27 |
28 |
32 |
33 |
Common Misconceptions About Payment
34 |
35 | 07 February, 2022
36 | .
37 | Bolby
38 |
39 |
40 |
41 |
42 |
43 |
47 |
48 |
3 Things to know about startup business
49 |
50 | 05 February, 2022
51 | .
52 | Bolby
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 | )
61 | }
62 |
63 | export default Blog
--------------------------------------------------------------------------------
/src/assets/logo.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/src/assets/dots-bg.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/src/components/portfolio/portfolio.css:
--------------------------------------------------------------------------------
1 |
2 |
3 | .work__filters{
4 | display: flex;
5 | flex-wrap: wrap;
6 | align-items: center;
7 | column-gap: 1.875rem;
8 | margin-bottom: 2.5rem;
9 | }
10 |
11 | .work__item{
12 | cursor: pointer;
13 | font-weight: var(--font-bold);
14 | }
15 |
16 | .work__item:hover{
17 | color: var(--first-color);
18 | transition: all .3s ease;
19 | }
20 |
21 | .work__container{
22 | grid-template-columns: repeat(3, 1fr);
23 | gap: 1.875rem;
24 | }
25 |
26 | .work__card{
27 | position: relative;
28 | overflow: hidden;
29 | border-radius: var(--border-radius);
30 | box-shadow: var(--shadow);
31 | }
32 |
33 | .work__mask{
34 | position: absolute;
35 | top: 0;
36 | left: 0;
37 | height: 100%;
38 | width: 100%;
39 | background: #6c6ce5;
40 | transition: .3s;
41 | opacity: 0;
42 | }
43 |
44 | .work__card:hover .work__mask{
45 | opacity: 0.9;
46 | }
47 |
48 | .work__category{
49 | display: inline-block;
50 | position: absolute;
51 | top: 0;
52 | left: 1.5rem;
53 | padding: 0.19rem 0.625rem;
54 | color: #fff;
55 | background-color: var(--first-color);
56 | border-bottom-left-radius: 0.98rem;
57 | border-bottom-right-radius: 0.98rem;
58 | font-size: var(--small-font-size);
59 | transform: translateY(-40px);
60 | transition: .3s;
61 | }
62 |
63 | .work__title{
64 | position: absolute;
65 | top: 3.75rem;
66 | color: #fff;
67 | font-size: var(--h3-font-size);
68 | margin: 0 0 0.98rem;
69 | padding: 0 1.25rem;
70 | transform: translateY(30px);
71 | transition: .3s;
72 | opacity: 0;
73 | }
74 |
75 | .work__button{
76 | display: block;
77 | position: absolute;
78 | bottom: 1.5rem;
79 | left: 1.5rem;
80 | color: #fff;
81 | font-size: var(--h3-font-size);
82 | background-color: #ffd15c;
83 | height: 40px;
84 | width: 40px;
85 | cursor: pointer;
86 | border-radius: 50%;
87 | text-align: center;
88 | line-height: 42px;
89 | transition: .3s;
90 | opacity: 0;
91 | }
92 |
93 | .work__card:hover .work__button{
94 | opacity: 1;
95 | }
96 |
97 | .work__card:hover .work__title,
98 | .work__card:hover .work__category{
99 | opacity: 1;
100 | transform: translateY(0);
101 | }
102 |
103 | @media screen and (max-width: 1024px){
104 | .work__filters{
105 | justify-content: center;
106 | }
107 | .work__container{
108 | grid-template-columns: repeat(2, 330px);
109 | justify-content: center;
110 | row-gap: 1.875rem;
111 | }
112 | }
113 |
114 | @media screen and (max-width: 768px){
115 | .work__container{
116 | grid-template-columns: 310px;
117 |
118 | }
119 |
120 | .work__filters{
121 | row-gap: .25rem;
122 | }
123 | }
124 |
125 | @media screen and (max-width: 350px){
126 | .portfolio__container{
127 | grid-template-columns: 1fr;
128 | }
129 | }
--------------------------------------------------------------------------------
/src/components/home/home.css:
--------------------------------------------------------------------------------
1 |
2 |
3 | .home{
4 | display: flex;
5 | align-items: center;
6 | justify-content: center;
7 | position: relative;
8 | min-height: 100vh;
9 | }
10 |
11 | .intro{
12 | max-width: 540px;
13 | text-align: center;
14 | z-index: 1;
15 | }
16 |
17 | .home__img{
18 | margin-bottom: 1.5rem;
19 | height: 250px;
20 | }
21 |
22 | .home__name{
23 | font-size: var(--h1-font-size);
24 | font-weight: var(--font-bold);
25 | margin-bottom: 0.5rem;
26 | }
27 |
28 | .home__socials{
29 | display: flex;
30 | justify-content: center;
31 | column-gap: 1.75rem;
32 | margin: 1.5rem 0;
33 | }
34 |
35 | .home__social-link{
36 | color: var(--title-color);
37 | font-size: 1.3rem;
38 | transition: ease .3s;
39 | }
40 |
41 | .home__social-link:hover{
42 | color: hsl(43, 100%, 68%);
43 | }
44 |
45 | .scroll__down{
46 | position: absolute;
47 | bottom: 2.5rem;
48 | left: 0;
49 | width: 100%;
50 | }
51 |
52 | .home__scroll-name{
53 | font-size: var(--small-font-size);
54 | color: var(--title-color);
55 | text-decoration: none;
56 | }
57 |
58 | .mouse{
59 | display: block;
60 | position: relative;
61 | border: 2px solid #454360;
62 | height: 1.6rem;
63 | width: 1.25rem;
64 | margin: auto;
65 | margin-top: .75rem;
66 | border-radius: 1rem;
67 | }
68 |
69 | @keyframes ani-mouse{
70 | 0%{
71 | top: 29%;
72 | }
73 |
74 | 15%{
75 | top: 50%;
76 | }
77 |
78 | 50%{
79 | top: 50%;
80 | }
81 |
82 | 100%{
83 | top: 29%;
84 | }
85 | }
86 |
87 | .wheel{
88 | position: absolute;
89 | top: 0.5rem;
90 | left: 50%;
91 | background-color: var(--title-color);
92 | border-radius: 100%;
93 | width: 0.25rem;
94 | height: 0.25rem;
95 | transform: translateX(-50%);
96 | animation: ani-mouse 2s linear infinite;
97 | }
98 |
99 | .shapes{
100 | position: absolute;
101 | left: 0;
102 | top: 0;
103 | height: 100%;
104 | width: 100%;
105 | z-index: -9;
106 | }
107 |
108 | .shape{
109 | position: absolute;
110 | }
111 |
112 | .s1{
113 | left: 2%;
114 | top: 10%;
115 | }
116 |
117 | .s2{
118 | left: 18%;
119 | top: 30%;
120 | }
121 |
122 | .s3{
123 | left: 5%;
124 | bottom: 30%;
125 | }
126 |
127 | .s4{
128 | left: 2%;
129 | bottom: 10%;
130 | }
131 |
132 | .s5{
133 | left: 44%;
134 | top: 10%;
135 | }
136 |
137 | .s6{
138 | left: 36%;
139 | bottom: 10%;
140 | }
141 |
142 | .s7{
143 | top: 20%;
144 | right: 25%;
145 | }
146 |
147 | .s8{
148 | right: 24%;
149 | bottom: 20%;
150 | }
151 |
152 | .s9{
153 | right: 2%;
154 | top: 10%;
155 | }
156 |
157 | .s10{
158 | top: 45%;
159 | right: 11%;
160 | }
161 |
162 | .s11{
163 | bottom: 10%;
164 | right: 2%;
165 | }
166 |
167 |
168 |
169 | @media screen and (max-width: 1024px){
170 | .home__social-link {
171 | font-size: 1.125rem;
172 | }
173 | }
--------------------------------------------------------------------------------
/src/components/about/about.css:
--------------------------------------------------------------------------------
1 |
2 |
3 | .about__container{
4 | grid-template-columns: 3fr 9fr;
5 | column-gap: 1.875rem;
6 |
7 | margin-left: var(--indention);
8 | }
9 |
10 | .about__data{
11 | padding: 1.875rem;
12 | background-color: var(--container--color);
13 | box-shadow: var(--shadow);
14 | border-radius: var(--border-radius);
15 | grid-template-columns: repeat(2, 1fr);
16 | column-gap: 1.875rem;
17 | align-items: flex-start;
18 | position: relative;
19 |
20 | margin-right: 6rem;
21 | }
22 |
23 | .about__data::before{
24 | content: '';
25 | width: 0;
26 | height: 0;
27 | border-top: 10px solid transparent;
28 | border-bottom: 10px solid transparent;
29 | border-right: 15px solid var(--container--color);
30 | left: -0.93rem;
31 | top: 20%;
32 | position: absolute;
33 | }
34 |
35 | .about__description{
36 | margin-bottom: 1rem;
37 | text-align: justify;
38 | }
39 |
40 | .about__skills{
41 | row-gap: 1.25rem;
42 | }
43 |
44 | .skills_titles{
45 | display: flex;
46 | justify-content: space-between;
47 | margin-bottom: 1rem;
48 | }
49 |
50 | .skills__name{
51 | font-size: var(--normal-font-size);
52 | font-weight: var(--font-medium);
53 | }
54 |
55 | .skills__number{
56 | line-height: 1.2;
57 | }
58 |
59 | .skills__bar,
60 | .skills__percentage{
61 | height: 7px;
62 | border-radius: 0.25rem;
63 | }
64 |
65 | .skills__bar{
66 | background-color: #f1f1f1;
67 | }
68 |
69 | .skills__percentage{
70 | display: block;
71 | }
72 |
73 | .development{
74 | width: 95%;
75 | background-color: rgb(255, 209, 92);
76 | }
77 |
78 | .ui__design{
79 | width: 80%;
80 | background-color: rgb(255, 76, 96);
81 | }
82 |
83 | .photography{
84 | width: 70%;
85 | background-color: rgb(108, 108, 299);
86 | }
87 |
88 | .about__boxes{
89 | grid-template-columns: repeat(4, 1fr);
90 | column-gap: 1.875rem;
91 | margin-top: 4.35rem;
92 |
93 |
94 | margin-left: var(--indention);
95 |
96 | }
97 |
98 | .about__box{
99 | display: flex;
100 | column-gap: 1.5rem;
101 | }
102 |
103 | .about__icon{
104 | font-size: var(--h1-font-size);
105 | color: #dedeea;
106 | }
107 |
108 | .about__title{
109 | font-size: 1.875rem;
110 | }
111 |
112 | @media screen and (max-width: 1024px){
113 | .about__container{
114 | grid-template-columns: 720px;
115 | justify-content: center;
116 | row-gap: 1.875rem;
117 | }
118 |
119 | .about__data::before{
120 | border-left: 10px solid transparent;
121 | border-right: 10px solid transparent;
122 | border-bottom: 10px solid #fff;
123 | left: 49%;
124 | top: -20px;
125 | }
126 |
127 | .about__img{
128 | justify-self: center;
129 | height: 200px;
130 | }
131 |
132 | .about__box{
133 | flex-direction: column;
134 | text-align: center;
135 | row-gap: .5rem;
136 | }
137 | }
138 |
139 | @media screen and (max-width: 768px){
140 | .about__container{
141 | grid-template-columns: 350px;
142 | }
143 |
144 | .about__data::before{
145 | left: 47%;
146 | }
147 |
148 | .about__data{
149 | grid-template-columns: 1fr;
150 | row-gap: 1.875rem;
151 | }
152 |
153 | .about__boxes{
154 | grid-template-columns: repeat(2, 150px);
155 | row-gap: 1.5rem;
156 | justify-content: center;
157 | }
158 | }
159 |
160 | @media screen and (max-width: 576px){
161 | .about__container{
162 | grid-template-columns: 320px;
163 | }
164 | }
165 |
166 | @media screen and (max-width: 350px){
167 | .about__container{
168 | grid-template-columns: 1fr;
169 | }
170 |
171 | .about__boxes{
172 | grid-template-columns: 1fr;
173 | }
174 | }
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Getting Started with Create React App
2 |
3 | This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app).
4 |
5 | ## Available Scripts
6 |
7 | In the project directory, you can run:
8 |
9 | ### `npm start`
10 |
11 | Runs the app in the development mode.\
12 | Open [http://localhost:3000](http://localhost:3000) to view it in your browser.
13 |
14 | The page will reload when you make changes.\
15 | You may also see any lint errors in the console.
16 |
17 | ### `npm test`
18 |
19 | Launches the test runner in the interactive watch mode.\
20 | See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information.
21 |
22 | ### `npm run build`
23 |
24 | Builds the app for production to the `build` folder.\
25 | It correctly bundles React in production mode and optimizes the build for the best performance.
26 |
27 | The build is minified and the filenames include the hashes.\
28 | Your app is ready to be deployed!
29 |
30 | See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information.
31 |
32 | ### `npm run eject`
33 |
34 | **Note: this is a one-way operation. Once you `eject`, you can't go back!**
35 |
36 | If you aren't satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project.
37 |
38 | Instead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you're on your own.
39 |
40 | You don't have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn't feel obligated to use this feature. However we understand that this tool wouldn't be useful if you couldn't customize it when you are ready for it.
41 |
42 | ## Learn More
43 |
44 | You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started).
45 |
46 | To learn React, check out the [React documentation](https://reactjs.org/).
47 |
48 | ### Code Splitting
49 |
50 | This section has moved here: [https://facebook.github.io/create-react-app/docs/code-splitting](https://facebook.github.io/create-react-app/docs/code-splitting)
51 |
52 | ### Analyzing the Bundle Size
53 |
54 | This section has moved here: [https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size](https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size)
55 |
56 | ### Making a Progressive Web App
57 |
58 | This section has moved here: [https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app](https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app)
59 |
60 | ### Advanced Configuration
61 |
62 | This section has moved here: [https://facebook.github.io/create-react-app/docs/advanced-configuration](https://facebook.github.io/create-react-app/docs/advanced-configuration)
63 |
64 | ### Deployment
65 |
66 | This section has moved here: [https://facebook.github.io/create-react-app/docs/deployment](https://facebook.github.io/create-react-app/docs/deployment)
67 |
68 | ### `npm run build` fails to minify
69 |
70 | This section has moved here: [https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify](https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify)
71 |
--------------------------------------------------------------------------------
/src/index.css:
--------------------------------------------------------------------------------
1 |
2 | /* ----- Google Fonts ------ */
3 |
4 | @import url('https://fonts.googleapis.com/css2?family=Rubik:ital,wght@0,300..900;1,300..900&display=swap');
5 |
6 | /* ----- Variables CSS ------ */
7 |
8 | :root{
9 |
10 | /* ----- Colors ------ */
11 |
12 | /* ----- HSL (hue, saturation, lightness ------ */
13 | --first-color: hsl(353, 100%, 65%);
14 | --title-color: hsl(244, 24%, 26%);
15 | --text-color: hsl(244, 16%, 43%);
16 | --body-color: hsl(258, 60%, 98%);
17 | --container-color: #fff;
18 |
19 | /* ----- Font and Typography ------ */
20 | /* .5rem = 8px | 1rem = 16px */
21 | --body-font: 'Rubik', sans-serif;
22 | --h1-font-size: 2.25rem;
23 | --h2-font-size: 1.5rem;
24 | --h3-font-size: 1.25rem;
25 | --normal-font-size: 1rem;
26 | --small-font-size: .875rem;
27 | --smaller-font-size: .813rem;
28 |
29 | /* ----- Font and Typography ------ */
30 | --font-medium: 500;
31 | --font-semibold: 600;
32 | --font-bold: 700;
33 |
34 | /* ----- Box Shadow ------ */
35 | --shadow: 0 5px 20px 0 rgb(69 67 96 /10%);
36 |
37 | /* ----- Box Shadow ------ */
38 | --border-radius: 20px;
39 |
40 | }
41 |
42 | /* Responsive Typography */
43 | @media (max-width: 1024px) {
44 | :root{
45 | --h1-font-size: 1.75rem;
46 | --h2-font-size: 1.25rem;
47 | --h3-font-size: 1rem;
48 | --normal-font-size: 0.938rem;
49 | --small-font-size: .813rem;
50 | --smaller-font-size: .75rem;
51 | }
52 | }
53 |
54 |
55 | /* ----- Base ------ */
56 |
57 | *{
58 | margin: 0;
59 | padding: 0;
60 | box-sizing: border-box;
61 | }
62 |
63 | html{
64 | scroll-behavior: smooth;
65 | }
66 |
67 | body,
68 | button,
69 | input,
70 | textarea {
71 | font-family: var(--body-font);
72 | font-size: var(--normal-font-size);
73 | }
74 |
75 | body{
76 | background-color: var(--body-color);
77 | line-height: 1.7;
78 | color: var(--text-color);
79 | }
80 |
81 | h1, h2, h3 {
82 | color: var(--title-color);
83 | font-weight: var(--font-semibold);
84 | line-height: 1.2;
85 | }
86 |
87 | ul{
88 | list-style: none;
89 | }
90 |
91 | a{
92 | text-decoration: none;
93 | }
94 |
95 | button{
96 | cursor: pointer;
97 | border: none;
98 | outline: none;
99 | }
100 |
101 | img{
102 | max-width: 100%;
103 | height: auto;
104 | vertical-align: middle;
105 | }
106 |
107 | /* ----- Resuable CSS Classes ------ */
108 |
109 | .container{
110 | max-width: 1080px;
111 | padding-left: 15px;
112 | padding-right: 15px;
113 | margin: 0 auto;
114 | }
115 |
116 | .grid{
117 | display: grid;
118 | }
119 |
120 | .section{
121 | padding-top: 7rem;
122 | padding-bottom: 2rem;
123 | }
124 |
125 | .section__title{
126 | font-size: var(--h1-font-size);
127 | margin-left: 0.875rem;
128 | font-weight: var(--font-bold);
129 | position: relative;
130 | margin-bottom: 3.75rem;
131 | }
132 |
133 | .section__title::before{
134 | content: '';
135 | background: url(./assets/dots-bg.svg);
136 | height: 2.25rem;
137 | width: 2.25rem;
138 | position: absolute;
139 | top: -0.875rem;
140 | left: -0.875rem;
141 | }
142 |
143 | .btn{
144 | display: inline-block;
145 | padding: 0.75rem 2rem;
146 | line-height: 1;
147 | border-radius: 1.875rem;
148 | box-shadow: 0 0 1px rgb(0 0 0 /0%);
149 | border: 1px solid transparent;
150 | color: #fff;
151 | background-color: var(--first-color);
152 | font-weight: var(--font-bold);
153 | }
154 |
155 | @keyframes button-push{
156 | 50%{
157 | transform: scale(0.8);
158 | }
159 | 100%{
160 | transform: scale(1);
161 | }
162 | }
163 |
164 | .btn:hover{
165 | animation: button-push 0.3s linear 1;
166 | }
--------------------------------------------------------------------------------
/src/assets/price-2.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/src/assets/price-3.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/src/assets/service-2.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/src/components/home/Shapes.jsx:
--------------------------------------------------------------------------------
1 |
2 | import React from 'react'
3 |
4 | const Shapes = () => {
5 | return (
6 |
7 |
19 |
20 |
34 |
35 |
47 |
48 |
64 |
65 |
81 |
82 |
93 |
94 |
108 |
109 |
125 |
126 |
138 |
139 |
150 |
151 |
163 |
164 | )
165 | }
166 |
167 | export default Shapes
168 |
--------------------------------------------------------------------------------
/src/assets/price-1.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/src/assets/service-3.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/src/assets/work-2.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/src/assets/work-5.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/src/assets/work-6.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/src/assets/service-1.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/src/assets/work-1.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/src/assets/avatar-3.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------