├── .gitignore
├── .github
└── FUNDING.yml
├── backend_sanity_portfolio
├── plugins
│ └── .gitkeep
├── config
│ ├── @sanity
│ │ ├── data-aspects.json
│ │ ├── form-builder.json
│ │ ├── default-layout.json
│ │ └── default-login.json
│ └── .checksums
├── .eslintrc
├── static
│ ├── .gitkeep
│ └── favicon.ico
├── .npmignore
├── tsconfig.json
├── schemas
│ ├── experiences.js
│ ├── brands.js
│ ├── contact.js
│ ├── workExperience.js
│ ├── skills.js
│ ├── abouts.js
│ ├── testimonials.js
│ ├── schema.js
│ └── works.js
├── README.md
├── sanity.json
└── package.json
├── src
├── constants
│ ├── index.js
│ └── images.js
├── assets
│ ├── nb.png
│ ├── api.png
│ ├── asus.png
│ ├── bolt.png
│ ├── cpp.png
│ ├── css.png
│ ├── git.png
│ ├── html.png
│ ├── logo.png
│ ├── mu5.png
│ ├── node.png
│ ├── sass.png
│ ├── vue.png
│ ├── about01.png
│ ├── about02.png
│ ├── about03.png
│ ├── about04.png
│ ├── adidas.png
│ ├── amazon.png
│ ├── bgIMG.png
│ ├── bgWhite.png
│ ├── email.png
│ ├── figma.png
│ ├── flutter.png
│ ├── graphql.png
│ ├── mobile.png
│ ├── profile.png
│ ├── python.png
│ ├── react.png
│ ├── redux.png
│ ├── skype.png
│ ├── spotify.png
│ ├── javascript.png
│ ├── typescript.png
│ ├── circle.svg
│ └── logo.svg
├── wrapper
│ ├── index.js
│ ├── MotionWrap.js
│ └── AppWrap.js
├── components
│ ├── index.js
│ ├── SocialMedia.jsx
│ ├── NavigationDots.jsx
│ └── Navbar
│ │ ├── Navbar.jsx
│ │ └── Navbar.scss
├── index.js
├── container
│ ├── index.js
│ ├── About
│ │ ├── About.scss
│ │ └── About.jsx
│ ├── Header
│ │ ├── Header.jsx
│ │ └── Header.scss
│ ├── Testimonial
│ │ ├── Testimonial.jsx
│ │ └── Testimonial.scss
│ ├── Footer
│ │ ├── Footer.jsx
│ │ └── Footer.scss
│ ├── Skills
│ │ ├── Skills.jsx
│ │ └── Skills.scss
│ └── Work
│ │ ├── Work.scss
│ │ └── Work.jsx
├── App.js
├── client.js
├── index.css
└── App.scss
├── public
├── robots.txt
├── favicon.ico
├── logo192.png
├── logo512.png
├── manifest.json
└── index.html
├── README.md
├── package.json
└── .eslintrc.js
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | .env
3 |
--------------------------------------------------------------------------------
/.github/FUNDING.yml:
--------------------------------------------------------------------------------
1 | github: adrianhajdin
2 |
--------------------------------------------------------------------------------
/backend_sanity_portfolio/plugins/.gitkeep:
--------------------------------------------------------------------------------
1 | User-specific packages can be placed here
2 |
--------------------------------------------------------------------------------
/src/constants/index.js:
--------------------------------------------------------------------------------
1 | import images from './images';
2 |
3 | export { images };
4 |
--------------------------------------------------------------------------------
/backend_sanity_portfolio/config/@sanity/data-aspects.json:
--------------------------------------------------------------------------------
1 | {
2 | "listOptions": {}
3 | }
4 |
--------------------------------------------------------------------------------
/backend_sanity_portfolio/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "@sanity/eslint-config-studio"
3 | }
4 |
--------------------------------------------------------------------------------
/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/src/assets/nb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adrianhajdin/project_professional_portfolio/HEAD/src/assets/nb.png
--------------------------------------------------------------------------------
/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adrianhajdin/project_professional_portfolio/HEAD/public/favicon.ico
--------------------------------------------------------------------------------
/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adrianhajdin/project_professional_portfolio/HEAD/public/logo192.png
--------------------------------------------------------------------------------
/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adrianhajdin/project_professional_portfolio/HEAD/public/logo512.png
--------------------------------------------------------------------------------
/src/assets/api.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adrianhajdin/project_professional_portfolio/HEAD/src/assets/api.png
--------------------------------------------------------------------------------
/src/assets/asus.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adrianhajdin/project_professional_portfolio/HEAD/src/assets/asus.png
--------------------------------------------------------------------------------
/src/assets/bolt.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adrianhajdin/project_professional_portfolio/HEAD/src/assets/bolt.png
--------------------------------------------------------------------------------
/src/assets/cpp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adrianhajdin/project_professional_portfolio/HEAD/src/assets/cpp.png
--------------------------------------------------------------------------------
/src/assets/css.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adrianhajdin/project_professional_portfolio/HEAD/src/assets/css.png
--------------------------------------------------------------------------------
/src/assets/git.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adrianhajdin/project_professional_portfolio/HEAD/src/assets/git.png
--------------------------------------------------------------------------------
/src/assets/html.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adrianhajdin/project_professional_portfolio/HEAD/src/assets/html.png
--------------------------------------------------------------------------------
/src/assets/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adrianhajdin/project_professional_portfolio/HEAD/src/assets/logo.png
--------------------------------------------------------------------------------
/src/assets/mu5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adrianhajdin/project_professional_portfolio/HEAD/src/assets/mu5.png
--------------------------------------------------------------------------------
/src/assets/node.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adrianhajdin/project_professional_portfolio/HEAD/src/assets/node.png
--------------------------------------------------------------------------------
/src/assets/sass.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adrianhajdin/project_professional_portfolio/HEAD/src/assets/sass.png
--------------------------------------------------------------------------------
/src/assets/vue.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adrianhajdin/project_professional_portfolio/HEAD/src/assets/vue.png
--------------------------------------------------------------------------------
/src/assets/about01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adrianhajdin/project_professional_portfolio/HEAD/src/assets/about01.png
--------------------------------------------------------------------------------
/src/assets/about02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adrianhajdin/project_professional_portfolio/HEAD/src/assets/about02.png
--------------------------------------------------------------------------------
/src/assets/about03.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adrianhajdin/project_professional_portfolio/HEAD/src/assets/about03.png
--------------------------------------------------------------------------------
/src/assets/about04.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adrianhajdin/project_professional_portfolio/HEAD/src/assets/about04.png
--------------------------------------------------------------------------------
/src/assets/adidas.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adrianhajdin/project_professional_portfolio/HEAD/src/assets/adidas.png
--------------------------------------------------------------------------------
/src/assets/amazon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adrianhajdin/project_professional_portfolio/HEAD/src/assets/amazon.png
--------------------------------------------------------------------------------
/src/assets/bgIMG.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adrianhajdin/project_professional_portfolio/HEAD/src/assets/bgIMG.png
--------------------------------------------------------------------------------
/src/assets/bgWhite.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adrianhajdin/project_professional_portfolio/HEAD/src/assets/bgWhite.png
--------------------------------------------------------------------------------
/src/assets/email.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adrianhajdin/project_professional_portfolio/HEAD/src/assets/email.png
--------------------------------------------------------------------------------
/src/assets/figma.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adrianhajdin/project_professional_portfolio/HEAD/src/assets/figma.png
--------------------------------------------------------------------------------
/src/assets/flutter.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adrianhajdin/project_professional_portfolio/HEAD/src/assets/flutter.png
--------------------------------------------------------------------------------
/src/assets/graphql.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adrianhajdin/project_professional_portfolio/HEAD/src/assets/graphql.png
--------------------------------------------------------------------------------
/src/assets/mobile.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adrianhajdin/project_professional_portfolio/HEAD/src/assets/mobile.png
--------------------------------------------------------------------------------
/src/assets/profile.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adrianhajdin/project_professional_portfolio/HEAD/src/assets/profile.png
--------------------------------------------------------------------------------
/src/assets/python.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adrianhajdin/project_professional_portfolio/HEAD/src/assets/python.png
--------------------------------------------------------------------------------
/src/assets/react.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adrianhajdin/project_professional_portfolio/HEAD/src/assets/react.png
--------------------------------------------------------------------------------
/src/assets/redux.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adrianhajdin/project_professional_portfolio/HEAD/src/assets/redux.png
--------------------------------------------------------------------------------
/src/assets/skype.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adrianhajdin/project_professional_portfolio/HEAD/src/assets/skype.png
--------------------------------------------------------------------------------
/src/assets/spotify.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adrianhajdin/project_professional_portfolio/HEAD/src/assets/spotify.png
--------------------------------------------------------------------------------
/backend_sanity_portfolio/config/@sanity/form-builder.json:
--------------------------------------------------------------------------------
1 | {
2 | "images": {
3 | "directUploads": true
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/backend_sanity_portfolio/static/.gitkeep:
--------------------------------------------------------------------------------
1 | Files placed here will be served by the Sanity server under the `/static`-prefix
2 |
--------------------------------------------------------------------------------
/src/assets/javascript.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adrianhajdin/project_professional_portfolio/HEAD/src/assets/javascript.png
--------------------------------------------------------------------------------
/src/assets/typescript.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adrianhajdin/project_professional_portfolio/HEAD/src/assets/typescript.png
--------------------------------------------------------------------------------
/backend_sanity_portfolio/config/@sanity/default-layout.json:
--------------------------------------------------------------------------------
1 | {
2 | "toolSwitcher": {
3 | "order": [],
4 | "hidden": []
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/src/wrapper/index.js:
--------------------------------------------------------------------------------
1 | import AppWrap from './AppWrap';
2 | import MotionWrap from './MotionWrap';
3 |
4 | export {
5 | AppWrap,
6 | MotionWrap,
7 | };
8 |
--------------------------------------------------------------------------------
/backend_sanity_portfolio/static/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adrianhajdin/project_professional_portfolio/HEAD/backend_sanity_portfolio/static/favicon.ico
--------------------------------------------------------------------------------
/backend_sanity_portfolio/config/@sanity/default-login.json:
--------------------------------------------------------------------------------
1 | {
2 | "providers": {
3 | "mode": "append",
4 | "redirectOnSingle": false,
5 | "entries": []
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/backend_sanity_portfolio/.npmignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | /logs
3 | *.log
4 |
5 | # Coverage directory used by tools like istanbul
6 | /coverage
7 |
8 | # Dependency directories
9 | node_modules
10 |
11 | # Compiled sanity studio
12 | /dist
13 |
--------------------------------------------------------------------------------
/src/components/index.js:
--------------------------------------------------------------------------------
1 | import NavigationDots from './NavigationDots';
2 | import SocialMedia from './SocialMedia';
3 | import Navbar from './Navbar/Navbar';
4 |
5 | export {
6 | NavigationDots,
7 | SocialMedia,
8 | Navbar,
9 | };
10 |
--------------------------------------------------------------------------------
/src/index.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDOM from 'react-dom';
3 |
4 | import App from './App';
5 | import './index.css';
6 |
7 | ReactDOM.render(
8 |
9 |
10 | ,
11 | document.getElementById('root'),
12 | );
13 |
--------------------------------------------------------------------------------
/backend_sanity_portfolio/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | // Note: This config is only used to help editors like VS Code understand/resolve
3 | // parts, the actual transpilation is done by babel. Any compiler configuration in
4 | // here will be ignored.
5 | "include": ["./node_modules/@sanity/base/types/**/*.ts", "./**/*.ts", "./**/*.tsx"]
6 | }
7 |
--------------------------------------------------------------------------------
/src/container/index.js:
--------------------------------------------------------------------------------
1 | import About from './About/About';
2 | import Footer from './Footer/Footer';
3 | import Header from './Header/Header';
4 | import Skills from './Skills/Skills';
5 | import Testimonial from './Testimonial/Testimonial';
6 | import Work from './Work/Work';
7 |
8 | export {
9 | About,
10 | Footer,
11 | Header,
12 | Skills,
13 | Testimonial,
14 | Work,
15 | };
16 |
--------------------------------------------------------------------------------
/src/App.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | import { About, Footer, Header, Skills, Testimonial, Work } from './container';
4 | import { Navbar } from './components';
5 | import './App.scss';
6 |
7 | const App = () => (
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 | );
18 |
19 | export default App;
20 |
--------------------------------------------------------------------------------
/backend_sanity_portfolio/schemas/experiences.js:
--------------------------------------------------------------------------------
1 | export default{
2 | name:'experiences',
3 | title:'Experiences',
4 | type: 'document',
5 | fields:[
6 | {
7 | name:'year',
8 | title:'Year',
9 | type:'string'
10 | },
11 | {
12 | name:'works',
13 | title:'Works',
14 | type:'array',
15 | of:[{ type:'workExperience'}]
16 | },
17 | ]
18 | }
--------------------------------------------------------------------------------
/src/client.js:
--------------------------------------------------------------------------------
1 | import sanityClient from '@sanity/client';
2 | import imageUrlBuilder from '@sanity/image-url';
3 |
4 | export const client = sanityClient({
5 | projectId: process.env.REACT_APP_SANITY_PROJECT_ID,
6 | dataset: 'production',
7 | apiVersion: '2022-02-01',
8 | useCdn: true,
9 | token: process.env.REACT_APP_SANITY_TOKEN,
10 | });
11 |
12 | const builder = imageUrlBuilder(client);
13 |
14 | export const urlFor = (source) => builder.image(source);
15 |
--------------------------------------------------------------------------------
/src/components/SocialMedia.jsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { BsTwitter, BsInstagram } from 'react-icons/bs';
3 | import { FaFacebookF } from 'react-icons/fa';
4 |
5 | const SocialMedia = () => (
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 | );
18 |
19 | export default SocialMedia;
20 |
--------------------------------------------------------------------------------
/src/wrapper/MotionWrap.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { motion } from 'framer-motion';
3 |
4 | const MotionWrap = (Component, classNames) => function HOC() {
5 | return (
6 |
11 |
12 |
13 | );
14 | };
15 |
16 | export default MotionWrap;
17 |
--------------------------------------------------------------------------------
/src/assets/circle.svg:
--------------------------------------------------------------------------------
1 |
10 |
--------------------------------------------------------------------------------
/backend_sanity_portfolio/schemas/brands.js:
--------------------------------------------------------------------------------
1 | export default{
2 | name:'brands',
3 | title:'Brands',
4 | type: 'document',
5 | fields:[
6 | {
7 | name:'imgUrl',
8 | title:'ImgUrl',
9 | type: 'image',
10 | options: {
11 | hotspot: true,
12 | },
13 | },
14 | {
15 | name:'name',
16 | title:'Name',
17 | type:'string'
18 | }
19 | ]
20 | }
--------------------------------------------------------------------------------
/src/index.css:
--------------------------------------------------------------------------------
1 | @import url("https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;700&display=swap");
2 |
3 | :root {
4 | --font-base: "DM Sans", sans-serif;
5 |
6 | --primary-color: #edf2f8;
7 | --secondary-color: #313bac;
8 | --black-color: #030303;
9 | --lightGray-color: #e4e4e4;
10 | --gray-color: #6b7688;
11 | --brown-color: #46364a;
12 | --white-color: #ffffff;
13 | }
14 |
15 | * {
16 | box-sizing: border-box;
17 | padding: 0;
18 | margin: 0;
19 | scroll-behavior: smooth;
20 | }
21 |
--------------------------------------------------------------------------------
/backend_sanity_portfolio/schemas/contact.js:
--------------------------------------------------------------------------------
1 | export default {
2 | name:'contact',
3 | title:'Contact',
4 | type:'document',
5 | fields:[
6 | {
7 | name:'name',
8 | title:'Name',
9 | type:'string'
10 | },
11 | {
12 | name:'email',
13 | title:'Email',
14 | type:'string'
15 | },
16 | {
17 | name:'message',
18 | title:'Message',
19 | type:'text'
20 | }
21 | ]
22 | }
--------------------------------------------------------------------------------
/backend_sanity_portfolio/config/.checksums:
--------------------------------------------------------------------------------
1 | {
2 | "#": "Used by Sanity to keep track of configuration file checksums, do not delete or modify!",
3 | "@sanity/default-layout": "bb034f391ba508a6ca8cd971967cbedeb131c4d19b17b28a0895f32db5d568ea",
4 | "@sanity/default-login": "6fb6d3800aa71346e1b84d95bbcaa287879456f2922372bb0294e30b968cd37f",
5 | "@sanity/form-builder": "b38478227ba5e22c91981da4b53436df22e48ff25238a55a973ed620be5068aa",
6 | "@sanity/data-aspects": "d199e2c199b3e26cd28b68dc84d7fc01c9186bf5089580f2e2446994d36b3cb6"
7 | }
8 |
--------------------------------------------------------------------------------
/backend_sanity_portfolio/README.md:
--------------------------------------------------------------------------------
1 | # Sanity Clean Content Studio
2 |
3 | Congratulations, you have now installed the Sanity Content Studio, an open source real-time content editing environment connected to the Sanity backend.
4 |
5 | Now you can do the following things:
6 |
7 | - [Read “getting started” in the docs](https://www.sanity.io/docs/introduction/getting-started?utm_source=readme)
8 | - [Join the community Slack](https://slack.sanity.io/?utm_source=readme)
9 | - [Extend and build plugins](https://www.sanity.io/docs/content-studio/extending?utm_source=readme)
10 |
--------------------------------------------------------------------------------
/backend_sanity_portfolio/schemas/workExperience.js:
--------------------------------------------------------------------------------
1 | export default {
2 | name:'workExperience',
3 | title:'Work Experience',
4 | type:'document',
5 | fields:[
6 | {name:'name',
7 | title:'name',
8 | type:'string'
9 | },
10 | {
11 | name:'company',
12 | title:'Company',
13 | type:'string'
14 | },
15 | {
16 | name:'desc',
17 | title:'Desc',
18 | type:'string'
19 | }
20 | ]
21 | }
--------------------------------------------------------------------------------
/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "React App",
3 | "name": "Create React App Sample",
4 | "icons": [
5 | {
6 | "src": "favicon.ico",
7 | "sizes": "64x64 32x32 24x24 16x16",
8 | "type": "image/x-icon"
9 | },
10 | {
11 | "src": "logo192.png",
12 | "type": "image/png",
13 | "sizes": "192x192"
14 | },
15 | {
16 | "src": "logo512.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 |
--------------------------------------------------------------------------------
/backend_sanity_portfolio/schemas/skills.js:
--------------------------------------------------------------------------------
1 | export default{
2 | name:'skills',
3 | title:'Skills',
4 | type: 'document',
5 | fields:[
6 | {
7 | name:'name',
8 | title:'Name',
9 | type:'string'
10 | },
11 | {
12 | name:'bgColor',
13 | title:'BgColor',
14 | type:'string'
15 | },
16 | {
17 | name:'icon',
18 | title:'Icon',
19 | type: 'image',
20 | options: {
21 | hotspot: true,
22 | },
23 | },
24 |
25 | ]
26 | }
--------------------------------------------------------------------------------
/backend_sanity_portfolio/sanity.json:
--------------------------------------------------------------------------------
1 | {
2 | "root": true,
3 | "project": {
4 | "name": "backend_sanity_portfolio"
5 | },
6 | "api": {
7 | "projectId": "5aijr8b2",
8 | "dataset": "production"
9 | },
10 | "plugins": [
11 | "@sanity/base",
12 | "@sanity/default-layout",
13 | "@sanity/default-login",
14 | "@sanity/desk-tool"
15 | ],
16 | "env": {
17 | "development": {
18 | "plugins": [
19 | "@sanity/vision"
20 | ]
21 | }
22 | },
23 | "parts": [
24 | {
25 | "name": "part:@sanity/base/schema",
26 | "path": "./schemas/schema"
27 | }
28 | ]
29 | }
30 |
--------------------------------------------------------------------------------
/backend_sanity_portfolio/schemas/abouts.js:
--------------------------------------------------------------------------------
1 | export default{
2 | name:'abouts',
3 | title:'Abouts',
4 | type: 'document',
5 | fields:[
6 | {
7 | name:'title',
8 | title:'Title',
9 | type:'string'
10 | },
11 | {
12 | name:'description',
13 | title:'Description',
14 | type:'string'
15 | },
16 | {
17 | name:'imgUrl',
18 | title:'ImgUrl',
19 | type: 'image',
20 | options: {
21 | hotspot: true,
22 | },
23 | },
24 |
25 | ]
26 | }
--------------------------------------------------------------------------------
/src/components/NavigationDots.jsx:
--------------------------------------------------------------------------------
1 | /* eslint-disable jsx-a11y/control-has-associated-label */
2 | /* eslint-disable jsx-a11y/anchor-has-content */
3 |
4 | import React from 'react';
5 |
6 | const NavigationDots = ({ active }) => (
7 |
8 | {['home', 'about', 'work', 'skills', 'testimonial', 'contact'].map((item, index) => (
9 |
15 | ))}
16 |
17 | );
18 |
19 | export default NavigationDots;
20 |
--------------------------------------------------------------------------------
/src/wrapper/AppWrap.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { NavigationDots, SocialMedia } from '../components';
3 |
4 | const AppWrap = (Component, idName, classNames) => function HOC() {
5 | return (
6 |
7 |
8 |
9 |
10 |
11 |
12 |
@2020 MICHAEL
13 |
All rights reserved
14 |
15 |
16 |
17 |
18 | );
19 | };
20 |
21 | export default AppWrap;
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Micael - The Ultimate Web Development Portfolio
2 | 
3 |
4 | ### [🌟 Become a top 1% Next.js 13 developer in only one course](https://jsmastery.pro/next13)
5 | ### [🚀 Land your dream programming job in 6 months](https://jsmastery.pro/masterclass)
6 |
7 | ## Introduction
8 | This is a code repository for the corresponding video tutorial.
9 |
10 | Do you know the best way to show your skills to employers or potential clients? Stand out from the crowd by presenting a well-digitalized flexible portfolio and get your dream job.
11 |
12 | ## Stay up to date with new projects
13 | New major projects coming soon, subscribe to the mailing list to stay up to date https://resource.jsmasterypro.com/newsletter
14 |
--------------------------------------------------------------------------------
/backend_sanity_portfolio/schemas/testimonials.js:
--------------------------------------------------------------------------------
1 | export default {
2 | name:'testimonials',
3 | title:'Testimonials',
4 | type: 'document',
5 | fields:[
6 | {
7 | name:'name',
8 | title:'Name',
9 | type: 'string'
10 | },
11 | {
12 | name:'company',
13 | title:'Company',
14 | type:'string'
15 | },
16 | {
17 | name:'imgurl',
18 | title:'ImgUrl',
19 | type: 'image',
20 | options: {
21 | hotspot: true,
22 | },
23 | },
24 | {
25 | name:'feedback',
26 | title:'Feedback',
27 | type:'string'
28 | }
29 | ]
30 | }
--------------------------------------------------------------------------------
/src/container/About/About.scss:
--------------------------------------------------------------------------------
1 | .app__about {
2 | flex: 1;
3 | width: 100%;
4 | flex-direction: column;
5 | }
6 |
7 | .app__profiles {
8 | display: flex;
9 | justify-content: center;
10 | align-items: flex-start;
11 | flex-wrap: wrap;
12 | margin-top: 2rem;
13 | }
14 |
15 | .app__profile-item {
16 | width: 190px;
17 | display: flex;
18 | justify-content: flex-start;
19 | align-items: flex-start;
20 | flex-direction: column;
21 | margin: 2rem;
22 |
23 | img {
24 | width: 100%;
25 | height: 170px;
26 | border-radius: 15px;
27 | object-fit: cover;
28 | }
29 |
30 | @media screen and (min-width: 2000px) {
31 | width: 370px;
32 | margin: 2rem 4rem;
33 |
34 | img {
35 | height: 320px;
36 | }
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/backend_sanity_portfolio/schemas/schema.js:
--------------------------------------------------------------------------------
1 | // First, we must import the schema creator
2 | import createSchema from 'part:@sanity/base/schema-creator'
3 |
4 | // Then import schema types from any plugins that might expose them
5 | import schemaTypes from 'all:part:@sanity/base/schema-type'
6 | import works from './works'
7 | import testimonials from './testimonials'
8 | import brands from './brands'
9 | import abouts from './abouts'
10 | import experiences from './experiences'
11 | import skills from './skills'
12 | import workExperience from './workExperience'
13 | import contact from './contact'
14 |
15 |
16 | // Then we give our schema to the builder and provide the result to Sanity
17 | export default createSchema({
18 | // We name our schema
19 | name: 'default',
20 | // Then proceed to concatenate our document type
21 | // to the ones provided by any plugins that are installed
22 | types: schemaTypes.concat([works, testimonials, brands, abouts, skills, workExperience, experiences, contact
23 | /* Your types here! */
24 | ]),
25 | })
26 |
--------------------------------------------------------------------------------
/backend_sanity_portfolio/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "backendsanityportfolio",
3 | "private": true,
4 | "version": "1.0.0",
5 | "description": "",
6 | "main": "package.json",
7 | "author": "Mandeep Singhmar ",
8 | "license": "UNLICENSED",
9 | "scripts": {
10 | "start": "sanity start",
11 | "build": "sanity build"
12 | },
13 | "keywords": [
14 | "sanity"
15 | ],
16 | "dependencies": {
17 | "@sanity/base": "^2.25.4",
18 | "@sanity/core": "^2.25.0",
19 | "@sanity/default-layout": "^2.25.4",
20 | "@sanity/default-login": "^2.24.1",
21 | "@sanity/desk-tool": "^2.25.4",
22 | "@sanity/eslint-config-studio": "^2.0.0",
23 | "@sanity/vision": "^2.25.4",
24 | "eslint": "^8.6.0",
25 | "prop-types": "^15.7",
26 | "react": "^17.0",
27 | "react-dom": "^17.0",
28 | "styled-components": "^5.2.0"
29 | },
30 | "devDependencies": {},
31 | "repository": {
32 | "type": "git",
33 | "url": "git@github.com:adrianhajdin/project_professional_portfolio.git"
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/backend_sanity_portfolio/schemas/works.js:
--------------------------------------------------------------------------------
1 | export default {
2 | name: 'works',
3 | title: 'Works',
4 | type: 'document',
5 | fields: [
6 | {
7 | name: 'title',
8 | title: 'Title',
9 | type: 'string',
10 | },
11 |
12 | {
13 | name: 'description',
14 | title: 'Description',
15 | type: 'string',
16 | },
17 | {
18 | name: 'projectLink',
19 | title: 'Project Link',
20 | type: 'string',
21 | },
22 | {
23 | name: 'codeLink',
24 | title: 'Code Link',
25 | type: 'string',
26 | },
27 | {
28 | name: 'imgUrl',
29 | title: 'ImageUrl',
30 | type: 'image',
31 | options: {
32 | hotspot: true,
33 | },
34 | },
35 |
36 | {
37 | name: 'tags',
38 | title: 'Tags',
39 | type:'array',
40 | of: [
41 | {
42 | name:'tag',
43 | title:'Tag',
44 | type:'string'
45 | }
46 | ]
47 | },
48 |
49 | ],
50 | };
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "my-app",
3 | "version": "0.1.0",
4 | "private": true,
5 | "dependencies": {
6 | "@sanity/client": "^2.23.2",
7 | "@sanity/image-url": "^1.0.1",
8 | "@testing-library/jest-dom": "^5.16.1",
9 | "@testing-library/react": "^12.1.2",
10 | "@testing-library/user-event": "^13.5.0",
11 | "framer-motion": "^6.2.3",
12 | "node-sass": "^7.0.1",
13 | "react": "^17.0.2",
14 | "react-dom": "^17.0.2",
15 | "react-icons": "^4.3.1",
16 | "react-scripts": "5.0.0",
17 | "react-tooltip": "^4.2.21",
18 | "web-vitals": "^2.1.4"
19 | },
20 | "scripts": {
21 | "start": "react-scripts start",
22 | "build": "react-scripts build",
23 | "test": "react-scripts test",
24 | "eject": "react-scripts eject"
25 | },
26 | "eslintConfig": {
27 | "extends": [
28 | "react-app",
29 | "react-app/jest"
30 | ]
31 | },
32 | "browserslist": {
33 | "production": [
34 | ">0.2%",
35 | "not dead",
36 | "not op_mini all"
37 | ],
38 | "development": [
39 | "last 1 chrome version",
40 | "last 1 firefox version",
41 | "last 1 safari version"
42 | ]
43 | },
44 | "devDependencies": {
45 | "eslint": "^7.32.0",
46 | "eslint-config-airbnb": "^18.2.1",
47 | "eslint-plugin-import": "^2.25.2",
48 | "eslint-plugin-jsx-a11y": "^6.4.1",
49 | "eslint-plugin-react": "^7.26.1",
50 | "eslint-plugin-react-hooks": "^4.2.0"
51 | }
52 | }
53 |
--------------------------------------------------------------------------------
/src/container/About/About.jsx:
--------------------------------------------------------------------------------
1 | import React, { useState, useEffect } from 'react';
2 | import { motion } from 'framer-motion';
3 |
4 | import { AppWrap, MotionWrap } from '../../wrapper';
5 | import './About.scss';
6 | import { urlFor, client } from '../../client';
7 |
8 | const About = () => {
9 | const [abouts, setAbouts] = useState([]);
10 |
11 | useEffect(() => {
12 | const query = '*[_type == "abouts"]';
13 |
14 | client.fetch(query).then((data) => {
15 | setAbouts(data);
16 | });
17 | }, []);
18 |
19 | return (
20 | <>
21 | I Know that Good Design
means Good Business
22 |
23 |
24 | {abouts.map((about, index) => (
25 |
32 |
33 | {about.title}
34 | {about.description}
35 |
36 | ))}
37 |
38 | >
39 | );
40 | };
41 |
42 | export default AppWrap(
43 | MotionWrap(About, 'app__about'),
44 | 'about',
45 | 'app__whitebg',
46 | );
47 |
--------------------------------------------------------------------------------
/src/components/Navbar/Navbar.jsx:
--------------------------------------------------------------------------------
1 | import React, { useState } from 'react';
2 | import { HiMenuAlt4, HiX } from 'react-icons/hi';
3 | import { motion } from 'framer-motion';
4 |
5 | import { images } from '../../constants';
6 | import './Navbar.scss';
7 |
8 | const Navbar = () => {
9 | const [toggle, setToggle] = useState(false);
10 |
11 | return (
12 |
47 | );
48 | };
49 |
50 | export default Navbar;
51 |
--------------------------------------------------------------------------------
/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | env: {
3 | browser: true,
4 | es2021: true,
5 | },
6 | extends: [
7 | 'plugin:react/recommended',
8 | 'airbnb',
9 | ],
10 | parserOptions: {
11 | ecmaFeatures: {
12 | jsx: true,
13 | },
14 | ecmaVersion: 12,
15 | sourceType: 'module',
16 | },
17 | plugins: [
18 | 'react',
19 | ],
20 | rules: {
21 | 'react/function-component-definition': 0,
22 | 'import/extensions': 0,
23 | 'react/prop-types': 0,
24 | 'linebreak-style': 0,
25 | 'react/state-in-constructor': 0,
26 | 'import/prefer-default-export': 0,
27 | 'max-len': [
28 | 2,
29 | 550,
30 | ],
31 | 'no-multiple-empty-lines': [
32 | 'error',
33 | {
34 | max: 1,
35 | maxEOF: 1,
36 | },
37 | ],
38 | 'no-underscore-dangle': [
39 | 'error',
40 | {
41 | allow: [
42 | '_d',
43 | '_dh',
44 | '_h',
45 | '_id',
46 | '_m',
47 | '_n',
48 | '_t',
49 | '_text',
50 | ],
51 | },
52 | ],
53 | 'object-curly-newline': 0,
54 | 'react/jsx-filename-extension': 0,
55 | 'react/jsx-one-expression-per-line': 0,
56 | 'jsx-a11y/click-events-have-key-events': 0,
57 | 'jsx-a11y/alt-text': 0,
58 | 'jsx-a11y/no-autofocus': 0,
59 | 'jsx-a11y/no-static-element-interactions': 0,
60 | 'react/no-array-index-key': 0,
61 | 'jsx-a11y/anchor-is-valid': [
62 | 'error',
63 | {
64 | components: [
65 | 'Link',
66 | ],
67 | specialLink: [
68 | 'to',
69 | 'hrefLeft',
70 | 'hrefRight',
71 | ],
72 | aspects: [
73 | 'noHref',
74 | 'invalidHref',
75 | 'preferButton',
76 | ],
77 | },
78 | ],
79 | },
80 | };
81 |
--------------------------------------------------------------------------------
/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
12 |
13 |
17 |
18 |
27 | Micael
28 |
29 |
30 |
31 |
32 |
42 |
43 |
44 |
--------------------------------------------------------------------------------
/src/constants/images.js:
--------------------------------------------------------------------------------
1 | import email from '../assets/email.png';
2 | import mobile from '../assets/mobile.png';
3 | import api from '../assets/api.png';
4 | import cpp from '../assets/cpp.png';
5 | import css from '../assets/css.png';
6 | import figma from '../assets/figma.png';
7 | import flutter from '../assets/flutter.png';
8 | import git from '../assets/git.png';
9 | import graphql from '../assets/graphql.png';
10 | import html from '../assets/html.png';
11 | import javascript from '../assets/javascript.png';
12 | import mu5 from '../assets/mu5.png';
13 | import node from '../assets/node.png';
14 | import python from '../assets/python.png';
15 | import react from '../assets/react.png';
16 | import redux from '../assets/redux.png';
17 | import sass from '../assets/sass.png';
18 | import typescript from '../assets/typescript.png';
19 | import vue from '../assets/vue.png';
20 |
21 | import about01 from '../assets/about01.png';
22 | import about02 from '../assets/about02.png';
23 | import about03 from '../assets/about03.png';
24 | import about04 from '../assets/about04.png';
25 |
26 | import profile from '../assets/profile.png';
27 | import circle from '../assets/circle.svg';
28 | import logo from '../assets/logo.png';
29 |
30 | import adidas from '../assets/adidas.png';
31 | import amazon from '../assets/amazon.png';
32 | import asus from '../assets/asus.png';
33 | import bolt from '../assets/bolt.png';
34 | import nb from '../assets/nb.png';
35 | import skype from '../assets/skype.png';
36 | import spotify from '../assets/spotify.png';
37 |
38 | export default {
39 | email,
40 | mobile,
41 | api,
42 | cpp,
43 | css,
44 | figma,
45 | flutter,
46 | git,
47 | graphql,
48 | html,
49 | javascript,
50 | mu5,
51 | node,
52 | python,
53 | react,
54 | redux,
55 | sass,
56 | typescript,
57 | vue,
58 | about01,
59 | about02,
60 | about03,
61 | about04,
62 | profile,
63 | circle,
64 | logo,
65 | adidas,
66 | amazon,
67 | asus,
68 | bolt,
69 | nb,
70 | skype,
71 | spotify,
72 | };
73 |
--------------------------------------------------------------------------------
/src/container/Header/Header.jsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { motion } from 'framer-motion';
3 |
4 | import { AppWrap } from '../../wrapper';
5 | import { images } from '../../constants';
6 | import './Header.scss';
7 |
8 | const scaleVariants = {
9 | whileInView: {
10 | scale: [0, 1],
11 | opacity: [0, 1],
12 | transition: {
13 | duration: 1,
14 | ease: 'easeInOut',
15 | },
16 | },
17 | };
18 |
19 | const Header = () => (
20 |
21 |
26 |
27 |
28 |
👋
29 |
30 |
Hello, I am
31 |
Micael
32 |
33 |
34 |
35 |
36 |
Web Developer
37 |
Freelancer
38 |
39 |
40 |
41 |
42 |
47 |
48 |
55 |
56 |
57 |
62 | {[images.flutter, images.redux, images.sass].map((circle, index) => (
63 |
64 |

65 |
66 | ))}
67 |
68 |
69 | );
70 |
71 | export default AppWrap(Header, 'home');
72 |
--------------------------------------------------------------------------------
/src/container/Testimonial/Testimonial.jsx:
--------------------------------------------------------------------------------
1 | import React, { useState, useEffect } from 'react';
2 | import { HiChevronLeft, HiChevronRight } from 'react-icons/hi';
3 | import { motion } from 'framer-motion';
4 |
5 | import { AppWrap, MotionWrap } from '../../wrapper';
6 | import { urlFor, client } from '../../client';
7 | import './Testimonial.scss';
8 |
9 | const Testimonial = () => {
10 | const [currentIndex, setCurrentIndex] = useState(0);
11 | const [testimonials, setTestimonials] = useState([]);
12 | const [brands, setBrands] = useState([]);
13 |
14 | const handleClick = (index) => {
15 | setCurrentIndex(index);
16 | };
17 |
18 | useEffect(() => {
19 | const query = '*[_type == "testimonials"]';
20 | const brandsQuery = '*[_type == "brands"]';
21 |
22 | client.fetch(query).then((data) => {
23 | setTestimonials(data);
24 | });
25 |
26 | client.fetch(brandsQuery).then((data) => {
27 | setBrands(data);
28 | });
29 | }, []);
30 |
31 | return (
32 | <>
33 | {testimonials.length && (
34 | <>
35 |
36 |
![{testimonials[currentIndex].name}]({urlFor(testimonials[currentIndex].imgurl)})
37 |
38 |
{testimonials[currentIndex].feedback}
39 |
40 |
{testimonials[currentIndex].name}
41 | {testimonials[currentIndex].company}
42 |
43 |
44 |
45 |
46 |
47 |
handleClick(currentIndex === 0 ? testimonials.length - 1 : currentIndex - 1)}>
48 |
49 |
50 |
51 |
handleClick(currentIndex === testimonials.length - 1 ? 0 : currentIndex + 1)}>
52 |
53 |
54 |
55 | >
56 | )}
57 |
58 |
59 | {brands.map((brand) => (
60 |
65 |
66 |
67 | ))}
68 |
69 | >
70 | );
71 | };
72 |
73 | export default AppWrap(
74 | MotionWrap(Testimonial, 'app__testimonial'),
75 | 'testimonial',
76 | 'app__primarybg',
77 | );
78 |
--------------------------------------------------------------------------------
/src/container/Footer/Footer.jsx:
--------------------------------------------------------------------------------
1 | import React, { useState } from 'react';
2 |
3 | import { images } from '../../constants';
4 | import { AppWrap, MotionWrap } from '../../wrapper';
5 | import { client } from '../../client';
6 | import './Footer.scss';
7 |
8 | const Footer = () => {
9 | const [formData, setFormData] = useState({ name: '', email: '', message: '' });
10 | const [isFormSubmitted, setIsFormSubmitted] = useState(false);
11 | const [loading, setLoading] = useState(false);
12 |
13 | const { username, email, message } = formData;
14 |
15 | const handleChangeInput = (e) => {
16 | const { name, value } = e.target;
17 | setFormData({ ...formData, [name]: value });
18 | };
19 |
20 | const handleSubmit = () => {
21 | setLoading(true);
22 |
23 | const contact = {
24 | _type: 'contact',
25 | name: formData.username,
26 | email: formData.email,
27 | message: formData.message,
28 | };
29 |
30 | client.create(contact)
31 | .then(() => {
32 | setLoading(false);
33 | setIsFormSubmitted(true);
34 | })
35 | .catch((err) => console.log(err));
36 | };
37 |
38 | return (
39 | <>
40 | Take a coffee & chat with me
41 |
42 |
52 | {!isFormSubmitted ? (
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
68 |
69 |
70 |
71 | ) : (
72 |
73 |
74 | Thank you for getting in touch!
75 |
76 |
77 | )}
78 | >
79 | );
80 | };
81 |
82 | export default AppWrap(
83 | MotionWrap(Footer, 'app__footer'),
84 | 'contact',
85 | 'app__whitebg',
86 | );
87 |
--------------------------------------------------------------------------------
/src/container/Footer/Footer.scss:
--------------------------------------------------------------------------------
1 | .app__footer {
2 | flex: 1;
3 | width: 100%;
4 | flex-direction: column;
5 |
6 | @media screen and (max-width: 768px) {
7 | flex-direction: column;
8 | }
9 | }
10 |
11 | .app__footer-cards {
12 | width: 60%;
13 | display: flex;
14 | justify-content: space-evenly;
15 | align-items: center;
16 | flex-wrap: wrap;
17 | margin: 4em 2rem 2rem;
18 |
19 | .app__footer-card {
20 | min-width: 290px;
21 | display: flex;
22 | flex-direction: row;
23 | justify-content: flex-start;
24 | align-items: center;
25 |
26 | margin: 1rem 0;
27 | padding: 1rem;
28 | border-radius: 10px;
29 | cursor: pointer;
30 | background-color: #fef4f5;
31 |
32 | transition: all 0.3s ease-in-out;
33 |
34 | img {
35 | width: 40px;
36 | height: 40px;
37 | margin: 0 0.7rem;
38 | }
39 |
40 | p {
41 | font-weight: 500;
42 | }
43 | a {
44 | text-decoration: none;
45 | font-weight: 500;
46 | }
47 | &:hover {
48 | box-shadow: 0 0 25px #fef4f5;
49 | }
50 |
51 | @media screen and (max-width: 450px) {
52 | width: 100%;
53 | }
54 | }
55 |
56 | @media screen and (max-width: 768px) {
57 | width: 100%;
58 | }
59 | }
60 |
61 | .app__footer-cards .app__footer-card:last-child {
62 | background-color: #f2f7fb;
63 | }
64 |
65 | .app__footer-cards .app__footer-card:last-child:hover {
66 | box-shadow: 0 0 25px #f2f7fb;
67 | }
68 |
69 | .app__footer-form {
70 | width: 60%;
71 | flex-direction: column;
72 | margin: 1rem 2rem;
73 |
74 | div {
75 | width: 100%;
76 |
77 | margin: 0.75rem 0;
78 | border-radius: 10px;
79 | cursor: pointer;
80 | background-color: var(--primary-color);
81 |
82 | transition: all 0.3s ease-in-out;
83 |
84 | input,
85 | textarea {
86 | width: 100%;
87 | padding: 0.95rem;
88 | border: none;
89 | border-radius: 7px;
90 | background-color: var(--primary-color);
91 |
92 | font-family: var(--font-base);
93 | color: var(--secondary-color);
94 | outline: none;
95 | }
96 |
97 | textarea {
98 | height: 170px;
99 | }
100 |
101 | &:hover {
102 | box-shadow: 0 0 25px var(--primary-color);
103 | }
104 | }
105 |
106 | button {
107 | padding: 1rem 2rem;
108 | border-radius: 10px;
109 | border: none;
110 | background-color: var(--secondary-color);
111 |
112 | font-weight: 500;
113 | color: var(--white-color);
114 | outline: none;
115 | margin: 2rem 0 0 0;
116 | font-family: var(--font-base);
117 |
118 | transition: cubic-bezier(0.55, 0.085, 0.68, 0.53);
119 | cursor: pointer;
120 |
121 | &:hover {
122 | background-color: #2430af;
123 | }
124 | }
125 |
126 | @media screen and (max-width: 768px) {
127 | width: 100%;
128 | margin: 1rem 0;
129 | }
130 | }
131 |
--------------------------------------------------------------------------------
/src/container/Skills/Skills.jsx:
--------------------------------------------------------------------------------
1 | import React, { useState, useEffect } from 'react';
2 | import { motion } from 'framer-motion';
3 | import ReactTooltip from 'react-tooltip';
4 |
5 | import { AppWrap, MotionWrap } from '../../wrapper';
6 | import { urlFor, client } from '../../client';
7 | import './Skills.scss';
8 |
9 | const Skills = () => {
10 | const [experiences, setExperiences] = useState([]);
11 | const [skills, setSkills] = useState([]);
12 |
13 | useEffect(() => {
14 | const query = '*[_type == "experiences"]';
15 | const skillsQuery = '*[_type == "skills"]';
16 |
17 | client.fetch(query).then((data) => {
18 | setExperiences(data);
19 | });
20 |
21 | client.fetch(skillsQuery).then((data) => {
22 | setSkills(data);
23 | });
24 | }, []);
25 |
26 | return (
27 | <>
28 | Skills & Experiences
29 |
30 |
31 |
32 | {skills.map((skill) => (
33 |
39 |
43 |
})
44 |
45 | {skill.name}
46 |
47 | ))}
48 |
49 |
50 | {experiences.map((experience) => (
51 |
55 |
56 |
{experience.year}
57 |
58 |
59 | {experience.works.map((work) => (
60 | <>
61 |
69 | {work.name}
70 | {work.company}
71 |
72 |
78 | {work.desc}
79 |
80 | >
81 | ))}
82 |
83 |
84 | ))}
85 |
86 |
87 | >
88 | );
89 | };
90 |
91 | export default AppWrap(
92 | MotionWrap(Skills, 'app__skills'),
93 | 'skills',
94 | 'app__whitebg',
95 | );
96 |
--------------------------------------------------------------------------------
/src/container/Work/Work.scss:
--------------------------------------------------------------------------------
1 | .app__works {
2 | flex: 1;
3 | width: 100%;
4 | flex-direction: column;
5 | }
6 |
7 | .app__work-filter {
8 | display: flex;
9 | flex-direction: row;
10 | justify-content: flex-start;
11 | align-items: center;
12 | flex-wrap: wrap;
13 |
14 | margin: 4rem 0 2rem;
15 |
16 | .app__work-filter-item {
17 | padding: 0.5rem 1rem;
18 | border-radius: 0.5rem;
19 | background-color: #fff;
20 | color: #000;
21 | font-weight: 800;
22 |
23 | cursor: pointer;
24 | transition: all 0.3s ease;
25 | margin: 0.5rem;
26 |
27 | &:hover {
28 | background-color: var(--secondary-color);
29 | color: #fff;
30 | }
31 |
32 | @media screen and (min-width: 2000px) {
33 | padding: 1rem 2rem;
34 | border-radius: 0.85rem;
35 | }
36 | }
37 |
38 | .item-active {
39 | background-color: var(--secondary-color);
40 | color: #fff;
41 | }
42 | }
43 |
44 | .app__work-portfolio {
45 | display: flex;
46 | flex-wrap: wrap;
47 | justify-content: center;
48 | align-items: center;
49 |
50 | .app__work-item {
51 | width: 270px;
52 | flex-direction: column;
53 |
54 | margin: 2rem;
55 | padding: 1rem;
56 | border-radius: 0.5rem;
57 | background-color: #fff;
58 | color: #000;
59 |
60 | cursor: pointer;
61 | transition: all 0.3s ease;
62 |
63 | &:hover {
64 | box-shadow: 0 0 25px rgba(0, 0, 0, 0.2);
65 | }
66 |
67 | @media screen and (min-width: 2000px) {
68 | width: 470px;
69 | padding: 1.25rem;
70 | border-radius: 0.75rem;
71 | }
72 |
73 | @media screen and (max-width: 300px) {
74 | width: 100%;
75 | margin: 1rem;
76 | }
77 | }
78 | }
79 |
80 | .app__work-img {
81 | width: 100%;
82 | height: 230px;
83 |
84 | position: relative;
85 |
86 | img {
87 | width: 100%;
88 | height: 100%;
89 | border-radius: 0.5rem;
90 | object-fit: cover;
91 | }
92 |
93 | @media screen and (min-width: 2000px) {
94 | height: 350px;
95 | }
96 | }
97 |
98 | .app__work-hover {
99 | position: absolute;
100 | top: 0;
101 | left: 0;
102 | bottom: 0;
103 | right: 0;
104 | width: 100%;
105 | height: 100%;
106 | background-color: rgba(0, 0, 0, 0.5);
107 |
108 | border-radius: 0.5rem;
109 | opacity: 0;
110 | transition: all 0.3s ease;
111 |
112 | div {
113 | width: 50px;
114 | height: 50px;
115 | border-radius: 50%;
116 | background-color: rgba(0, 0, 0, 0.5);
117 | color: #fff;
118 |
119 | margin: 1rem;
120 | font-family: var(--font-base);
121 | font-weight: 800;
122 | cursor: pointer;
123 | transition: all 0.3s ease;
124 |
125 | svg {
126 | width: 50%;
127 | height: 50%;
128 | color: var(--white-color);
129 | }
130 | }
131 | }
132 |
133 | .app__work-content {
134 | padding: 0.5rem;
135 | width: 100%;
136 | position: relative;
137 | flex-direction: column;
138 |
139 | h4 {
140 | margin-top: 1rem;
141 | line-height: 1.5;
142 |
143 | @media screen and (min-width: 2000px) {
144 | margin-top: 3rem;
145 | }
146 | }
147 |
148 | .app__work-tag {
149 | position: absolute;
150 |
151 | padding: 0.5rem 1rem;
152 | border-radius: 10px;
153 | background-color: #fff;
154 | top: -25px;
155 | }
156 | }
157 |
--------------------------------------------------------------------------------
/src/container/Testimonial/Testimonial.scss:
--------------------------------------------------------------------------------
1 | .app__testimonial {
2 | flex: 1;
3 | width: 100%;
4 | flex-direction: column;
5 | }
6 |
7 | .app__testimonial-item {
8 | width: 60%;
9 | min-height: 320px;
10 | background-color: var(--white-color);
11 | display: flex;
12 | flex-direction: row;
13 | padding: 2rem;
14 | border-radius: 15px;
15 | box-shadow: 0px 0px 30px rgba(0, 0, 0, 0.1);
16 |
17 | transition: all 0.3s ease-in-out;
18 |
19 | img {
20 | width: 100px;
21 | height: 100px;
22 | border-radius: 50%;
23 | object-fit: cover;
24 | }
25 |
26 | @media screen and (min-width: 2000px) {
27 | min-height: 450px;
28 |
29 | img {
30 | width: 150px;
31 | height: 150px;
32 | }
33 | }
34 |
35 | @media screen and (max-width: 850px) {
36 | width: 100%;
37 | }
38 |
39 | @media screen and (max-width: 600px) {
40 | flex-direction: column;
41 | }
42 | }
43 |
44 | .app__testimonial-content {
45 | flex: 1;
46 | height: 100%;
47 | padding: 0 2rem;
48 | text-align: left;
49 |
50 | display: flex;
51 | flex-direction: column;
52 | justify-content: space-around;
53 | align-items: flex-start;
54 |
55 | p {
56 | font-size: 1.25rem;
57 | line-height: 2rem;
58 | color: var(--black-color);
59 | font-family: var(--font-base);
60 |
61 | @media screen and (min-width: 2000px) {
62 | font-size: 2rem;
63 | line-height: 3.5rem;
64 | }
65 | }
66 |
67 | h4 {
68 | font-weight: 600;
69 | color: var(--secondary-color);
70 | margin-top: 2rem;
71 | }
72 |
73 | h5 {
74 | font-weight: 400;
75 | color: var(--gray-color);
76 | margin-top: 5px;
77 | }
78 |
79 | @media screen and (max-width: 600px) {
80 | margin-top: 2rem;
81 | padding: 0;
82 | }
83 | }
84 |
85 | .app__testimonial-btns {
86 | flex-direction: row;
87 | margin-top: 1rem;
88 |
89 | div {
90 | width: 50px;
91 | height: 50px;
92 | border-radius: 50%;
93 | background-color: var(--white-color);
94 |
95 | margin: 1rem;
96 | transition: all 0.3s ease-in-out;
97 |
98 | svg {
99 | width: 20px;
100 | height: 20px;
101 | color: var(--secondary-color);
102 | }
103 |
104 | &:hover {
105 | background-color: var(--secondary-color);
106 |
107 | svg {
108 | color: var(--white-color);
109 | }
110 | }
111 |
112 | @media screen and (min-width: 2000px) {
113 | width: 100px;
114 | height: 100px;
115 |
116 | svg {
117 | width: 45px;
118 | height: 45px;
119 | }
120 | }
121 | }
122 | }
123 |
124 | .app__testimonial-brands {
125 | width: 80%;
126 | flex-wrap: wrap;
127 | margin-top: 2rem;
128 |
129 | div {
130 | width: 150px;
131 | margin: 1.5rem;
132 |
133 | img {
134 | width: 100%;
135 | height: auto;
136 | object-fit: cover;
137 | filter: grayscale(1);
138 | }
139 |
140 | &:hover {
141 | img {
142 | filter: grayscale(0);
143 | }
144 | }
145 |
146 | @media screen and (min-width: 2000px) {
147 | width: 210px;
148 | margin: 2rem;
149 | }
150 |
151 | @media screen and (max-width: 450px) {
152 | width: 120px;
153 | margin: 1rem;
154 | }
155 | }
156 |
157 | @media screen and (max-width: 800px) {
158 | width: 100%;
159 | }
160 | }
161 |
--------------------------------------------------------------------------------
/src/container/Skills/Skills.scss:
--------------------------------------------------------------------------------
1 | .app__skills {
2 | flex: 1;
3 | width: 100%;
4 | flex-direction: column;
5 | }
6 |
7 | .app__skills-container {
8 | width: 80%;
9 | margin-top: 3rem;
10 |
11 | display: flex;
12 | flex-direction: row;
13 |
14 | @media screen and (max-width: 900px) {
15 | width: 100%;
16 | flex-direction: column;
17 | }
18 | }
19 |
20 | .app__skills-list {
21 | flex: 1;
22 | display: flex;
23 | flex-wrap: wrap;
24 | justify-content: flex-start;
25 | align-items: flex-start;
26 |
27 | margin-right: 5rem;
28 |
29 | @media screen and (max-width: 900px) {
30 | margin-right: 0;
31 | justify-content: center;
32 | align-items: center;
33 | }
34 | }
35 |
36 | .app__skills-item {
37 | flex-direction: column;
38 | text-align: center;
39 |
40 | margin: 1rem;
41 |
42 | transition: all 0.3s ease-in-out;
43 |
44 | div {
45 | width: 90px;
46 | height: 90px;
47 | border-radius: 50%;
48 | background-color: #fef4f5;
49 |
50 | img {
51 | width: 50%;
52 | height: 50%;
53 | }
54 |
55 | &:hover {
56 | box-shadow: 0 0 25px #fef4f5;
57 | }
58 |
59 | @media screen and (min-width: 2000px) {
60 | width: 150px;
61 | height: 150px;
62 | }
63 |
64 | @media screen and (max-width: 450px) {
65 | width: 70px;
66 | height: 70px;
67 | }
68 | }
69 |
70 | p {
71 | font-weight: 500;
72 | margin-top: 0.5rem;
73 | }
74 |
75 | @media screen and (min-width: 2000px) {
76 | margin: 1rem 2rem;
77 |
78 | p {
79 | margin-top: 1rem;
80 | }
81 | }
82 | }
83 |
84 | .app__skills-exp {
85 | flex: 1;
86 | display: flex;
87 | justify-content: flex-start;
88 | align-items: flex-start;
89 | flex-direction: column;
90 |
91 | @media screen and (max-width: 900px) {
92 | margin-top: 2rem;
93 | }
94 | }
95 |
96 | .app__skills-exp-item {
97 | width: 100%;
98 | display: flex;
99 | flex-direction: row;
100 | justify-content: flex-start;
101 | align-items: flex-start;
102 | margin: 1rem 0;
103 | }
104 |
105 | .app__skills-exp-works {
106 | flex: 1;
107 |
108 | .app__skills-exp-work {
109 | display: flex;
110 | flex-direction: column;
111 | justify-content: flex-start;
112 | align-items: flex-start;
113 | margin-bottom: 1rem;
114 | cursor: pointer;
115 |
116 | h4 {
117 | font-weight: 500;
118 | }
119 |
120 | p {
121 | font-weight: 400;
122 | color: var(--gray-color);
123 | margin-top: 5px;
124 | }
125 | }
126 | }
127 |
128 | .app__skills-exp-year {
129 | margin-right: 3rem;
130 |
131 | p {
132 | font-weight: 800;
133 | color: var(--secondary-color);
134 | }
135 |
136 | @media screen and (max-width: 450px) {
137 | margin-right: 1rem;
138 | }
139 | }
140 |
141 | .skills-tooltip {
142 | max-width: 300px !important;
143 | background-color: var(--white-color) !important;
144 | box-shadow: 0 0 25px rgba(0, 0, 0, 0.1) !important;
145 | border-radius: 5px !important;
146 | padding: 1rem !important;
147 | color: var(--gray-color) !important;
148 | text-align: center !important;
149 | line-height: 1.5 !important;
150 | opacity: 1 !important;
151 |
152 | @media screen and (min-width: 2000px) {
153 | font-size: 1.75rem !important;
154 | max-width: 500px !important;
155 | line-height: 2 !important;
156 | }
157 | }
158 |
--------------------------------------------------------------------------------
/src/components/Navbar/Navbar.scss:
--------------------------------------------------------------------------------
1 | .app__navbar {
2 | width: 100%;
3 |
4 | display: flex;
5 | justify-content: space-between;
6 | align-items: center;
7 |
8 | padding: 1rem 2rem;
9 | background: rgba(255, 255, 255, 0.25);
10 | // box-shadow: 0 8px 32px 0 rgba( 31, 38, 135, 0.37 );
11 | backdrop-filter: blur(4px);
12 | -webkit-backdrop-filter: blur(4px);
13 | border: 1px solid rgba(255, 255, 255, 0.18);
14 | position: fixed;
15 | z-index: 2;
16 | }
17 |
18 | .app__navbar-logo {
19 | display: flex;
20 | justify-content: flex-start;
21 | align-items: center;
22 |
23 | img {
24 | width: 90px;
25 | height: 20px;
26 |
27 | @media screen and (min-width: 2000px) {
28 | width: 180px;
29 | height: 40px;
30 | }
31 | }
32 | }
33 |
34 | .app__navbar-links {
35 | flex: 1;
36 | display: flex;
37 | justify-content: center;
38 | align-items: center;
39 |
40 | list-style: none;
41 |
42 | li {
43 | margin: 0 1rem;
44 | cursor: pointer;
45 |
46 | flex-direction: column;
47 |
48 | div {
49 | width: 5px;
50 | height: 5px;
51 | background: transparent;
52 | border-radius: 50%;
53 |
54 | margin-bottom: 5px;
55 | }
56 |
57 | a {
58 | color: var(--gray-color);
59 | text-decoration: none;
60 | flex-direction: column;
61 |
62 | text-transform: uppercase;
63 | font-weight: 500;
64 |
65 | transition: all 0.3s ease-in-out;
66 |
67 | &:hover {
68 | color: var(--secondary-color);
69 | }
70 | }
71 |
72 | &:hover {
73 | div {
74 | background: var(--secondary-color);
75 | }
76 | }
77 | }
78 |
79 | @media screen and (max-width: 900px) {
80 | display: none;
81 | }
82 | }
83 |
84 | .app__navbar-menu {
85 | width: 35px;
86 | height: 35px;
87 | border-radius: 50%;
88 | position: relative;
89 |
90 | display: flex;
91 | justify-content: center;
92 | align-items: center;
93 | background-color: var(--secondary-color);
94 |
95 |
96 | svg {
97 | width: 70%;
98 | height: 70%;
99 | color: var(--white-color);
100 | }
101 |
102 | div {
103 | position: fixed;
104 | top: 0;
105 | bottom: 0;
106 | right: 0;
107 | z-index: 5;
108 |
109 | padding: 1rem;
110 |
111 | width: 80%;
112 | height: 100vh;
113 |
114 | display: flex;
115 | justify-content: flex-end;
116 | align-items: flex-end;
117 | flex-direction: column;
118 |
119 | background: url('../../assets/bgWhite.png');
120 | background-color: var(--white-color);
121 | background-size: cover;
122 | background-repeat: repeat;
123 |
124 | /* top box shadow */
125 | box-shadow: 0px 0px 20px rgba(168, 168, 168, 0.15);
126 |
127 | svg {
128 | width: 35px;
129 | height: 35px;
130 | color: var(--secondary-color);
131 | margin: 0.5rem 1rem;
132 | }
133 |
134 | ul {
135 | list-style: none;
136 | margin: 0;
137 | padding: 0;
138 | height: 100%;
139 | width: 100%;
140 |
141 | display: flex;
142 | justify-content: flex-start;
143 | align-items: flex-start;
144 | flex-direction: column;
145 |
146 | li {
147 | margin: 1rem;
148 |
149 | a {
150 | color: var(--gray-color);
151 | text-decoration: none;
152 | font-size: 1rem;
153 | text-transform: uppercase;
154 | font-weight: 500;
155 |
156 | transition: all 0.3s ease-in-out;
157 |
158 | &:hover {
159 | color: var(--secondary-color);
160 | }
161 | }
162 | }
163 | }
164 |
165 | @media screen and (min-width: 900px) {
166 | display: none;
167 | }
168 | }
169 |
170 | @media screen and (min-width: 900px) {
171 | display: none;
172 | }
173 | }
174 |
--------------------------------------------------------------------------------
/src/assets/logo.svg:
--------------------------------------------------------------------------------
1 |
2 |
61 |
--------------------------------------------------------------------------------
/src/App.scss:
--------------------------------------------------------------------------------
1 | .app {
2 | background-color: var(--primary-color);
3 | font-family: var(--font-base);
4 | }
5 |
6 | .app__whitebg {
7 | background-color: var(--white-color);
8 | }
9 |
10 | .app__primarybg {
11 | background-color: var(--primary-color);
12 | }
13 |
14 | .app__container {
15 | width: 100%;
16 | min-height: 100vh;
17 |
18 | display: flex;
19 | flex-direction: row;
20 | }
21 |
22 | .app__flex {
23 | display: flex;
24 | justify-content: center;
25 | align-items: center;
26 | }
27 |
28 | .app__wrapper {
29 | flex: 1;
30 | width: 100%;
31 | flex-direction: column;
32 | padding: 4rem 2rem;
33 |
34 | @media screen and (max-width: 450px) {
35 | padding: 4rem 1rem 2rem;
36 | }
37 | }
38 |
39 | .copyright {
40 | width: 100%;
41 | padding: 2rem 0 0;
42 |
43 | display: flex;
44 | flex-direction: column;
45 | justify-content: flex-end;
46 | align-items: flex-end;
47 |
48 | p {
49 | text-transform: uppercase;
50 | color: var(--black-color);
51 | }
52 | }
53 |
54 | .head-text {
55 | font-size: 2.75rem;
56 | font-weight: 800;
57 | text-align: center;
58 | color: var(--black-color);
59 | text-transform: capitalize;
60 |
61 | span {
62 | color: var(--secondary-color);
63 | }
64 |
65 | @media screen and (min-width: 2000px) {
66 | font-size: 4rem;
67 | }
68 |
69 | @media screen and (max-width: 450px) {
70 | font-size: 2rem;
71 | }
72 | }
73 |
74 | .p-text {
75 | font-size: 0.8rem;
76 | text-align: left;
77 | color: var(--gray-color);
78 | line-height: 1.5;
79 |
80 | @media screen and (min-width: 2000px) {
81 | font-size: 1.75rem;
82 | }
83 | }
84 |
85 | .bold-text {
86 | font-size: 1rem;
87 | font-weight: 800;
88 | color: var(--black-color);
89 | text-align: left;
90 |
91 | @media screen and (min-width: 2000px) {
92 | font-size: 2rem;
93 | }
94 |
95 | @media screen and (max-width: 450px) {
96 | font-size: 0.9rem;
97 | }
98 | }
99 |
100 | .app__social {
101 | display: flex;
102 | justify-content: flex-end;
103 | align-items: center;
104 | flex-direction: column;
105 |
106 | padding: 1rem;
107 |
108 | div {
109 | width: 40px;
110 | height: 40px;
111 | border-radius: 50%;
112 | background-color: var(--white-color);
113 | margin: 0.25rem 0;
114 | border: 1px solid var(--lightGray-color);
115 |
116 | display: flex;
117 | justify-content: center;
118 | align-items: center;
119 |
120 | transition: all 0.3s ease-in-out;
121 |
122 | svg {
123 | width: 15px;
124 | height: 15px;
125 | color: var(--gray-color);
126 | }
127 |
128 | &:hover {
129 | background-color: var(--secondary-color);
130 | border-color: var(--secondary-color);
131 |
132 | svg {
133 | color: var(--white-color);
134 | }
135 | }
136 |
137 | @media screen and (min-width: 2000px) {
138 | width: 70px;
139 | height: 70px;
140 |
141 | margin: 0.5rem 0;
142 |
143 | svg {
144 | width: 30px;
145 | height: 30px;
146 | }
147 | }
148 | }
149 | }
150 |
151 | .app__navigation {
152 | display: flex;
153 | justify-content: center;
154 | align-items: center;
155 | flex-direction: column;
156 |
157 | padding: 1rem;
158 |
159 | .app__navigation-dot {
160 | width: 10px;
161 | height: 10px;
162 | border-radius: 50%;
163 | background-color: #cbcbcb;
164 | margin: 0.5rem;
165 |
166 | transition: background-color 0.2s ease-in-out;
167 |
168 | &:hover {
169 | background-color: var(--secondary-color);
170 | }
171 |
172 | @media screen and (min-width: 2000px) {
173 | width: 20px;
174 | height: 20px;
175 | }
176 | }
177 | }
178 |
179 | @media screen and (max-width: 500px) {
180 | .app__navigation,
181 | .app__social {
182 | display: none;
183 | }
184 |
185 | .copyright {
186 | padding: 2rem;
187 | }
188 | }
189 |
--------------------------------------------------------------------------------
/src/container/Work/Work.jsx:
--------------------------------------------------------------------------------
1 | import React, { useState, useEffect } from 'react';
2 | import { AiFillEye, AiFillGithub } from 'react-icons/ai';
3 | import { motion } from 'framer-motion';
4 |
5 | import { AppWrap, MotionWrap } from '../../wrapper';
6 | import { urlFor, client } from '../../client';
7 | import './Work.scss';
8 |
9 | const Work = () => {
10 | const [works, setWorks] = useState([]);
11 | const [filterWork, setFilterWork] = useState([]);
12 | const [activeFilter, setActiveFilter] = useState('All');
13 | const [animateCard, setAnimateCard] = useState({ y: 0, opacity: 1 });
14 |
15 | useEffect(() => {
16 | const query = '*[_type == "works"]';
17 |
18 | client.fetch(query).then((data) => {
19 | setWorks(data);
20 | setFilterWork(data);
21 | });
22 | }, []);
23 |
24 | const handleWorkFilter = (item) => {
25 | setActiveFilter(item);
26 | setAnimateCard([{ y: 100, opacity: 0 }]);
27 |
28 | setTimeout(() => {
29 | setAnimateCard([{ y: 0, opacity: 1 }]);
30 |
31 | if (item === 'All') {
32 | setFilterWork(works);
33 | } else {
34 | setFilterWork(works.filter((work) => work.tags.includes(item)));
35 | }
36 | }, 500);
37 | };
38 |
39 | return (
40 | <>
41 | My Creative Portfolio Section
42 |
43 |
44 | {['UI/UX', 'Web App', 'Mobile App', 'React JS', 'All'].map((item, index) => (
45 |
handleWorkFilter(item)}
48 | className={`app__work-filter-item app__flex p-text ${activeFilter === item ? 'item-active' : ''}`}
49 | >
50 | {item}
51 |
52 | ))}
53 |
54 |
55 |
60 | {filterWork.map((work, index) => (
61 |
62 |
95 |
96 |
97 |
{work.title}
98 |
{work.description}
99 |
100 |
101 |
{work.tags[0]}
102 |
103 |
104 |
105 | ))}
106 |
107 | >
108 | );
109 | };
110 |
111 | export default AppWrap(
112 | MotionWrap(Work, 'app__works'),
113 | 'work',
114 | 'app__primarybg',
115 | );
116 |
--------------------------------------------------------------------------------
/src/container/Header/Header.scss:
--------------------------------------------------------------------------------
1 | #home {
2 | position: relative;
3 | background: url("../../assets/bgIMG.png");
4 | background-size: cover;
5 | background-position: center;
6 | background-repeat: repeat;
7 |
8 | // disable the default padding styles
9 | .app__wrapper {
10 | padding: 0;
11 |
12 | .copyright {
13 | display: none;
14 | }
15 | }
16 | }
17 |
18 | .app__header {
19 | flex: 1;
20 | width: 100%;
21 | height: 100%;
22 | flex-direction: row;
23 |
24 | padding: 6rem 2rem 0rem;
25 |
26 | @media screen and (min-width: 2000px) {
27 | padding-top: 8rem;
28 | }
29 |
30 | @media screen and (max-width: 1200px) {
31 | flex-direction: column;
32 | }
33 |
34 | @media screen and (max-width: 450px) {
35 | padding: 6rem 1rem 2rem;
36 | }
37 | }
38 |
39 | .app__header-info {
40 | flex: 0.65;
41 | display: flex;
42 | flex-direction: column;
43 | justify-content: flex-start;
44 | align-items: flex-start;
45 | height: 100%;
46 |
47 | margin: 0 2rem;
48 |
49 | @media screen and (max-width: 1200px) {
50 | width: 100%;
51 | margin-right: 0rem;
52 | }
53 | }
54 |
55 | .app__header-badge {
56 | width: 100%;
57 | display: flex;
58 | justify-content: flex-end;
59 | align-items: flex-end;
60 | flex-direction: column;
61 |
62 | .badge-cmp,
63 | .tag-cmp {
64 | padding: 1rem 2rem;
65 | background: var(--white-color);
66 | border-radius: 15px;
67 | flex-direction: row;
68 | width: auto;
69 |
70 | box-shadow: 0px 0px 20px rgba(0, 0, 0, 0.1);
71 | }
72 |
73 | .tag-cmp {
74 | flex-direction: column;
75 | margin-top: 3rem;
76 |
77 | p {
78 | width: 100%;
79 | text-transform: uppercase;
80 | text-align: right;
81 | }
82 | }
83 |
84 | span {
85 | font-size: 2.5rem;
86 |
87 | @media screen and (min-width: 2000px) {
88 | font-size: 5rem;
89 | }
90 | }
91 |
92 | @media screen and (max-width: 1200px) {
93 | justify-content: flex-start;
94 | align-items: flex-start;
95 | }
96 | }
97 |
98 | .app__header-circles {
99 | flex: 0.75;
100 | display: flex;
101 | flex-direction: column;
102 | justify-content: space-evenly;
103 | align-items: flex-start;
104 | height: 100%;
105 | margin-left: 1rem;
106 |
107 | div {
108 | width: 100px;
109 | height: 100px;
110 | border-radius: 50%;
111 |
112 | background: var(--white-color);
113 | box-shadow: 0px 0px 20px rgba(0, 0, 0, 0.1);
114 |
115 | img {
116 | width: 60%;
117 | height: 60%;
118 | }
119 | }
120 |
121 | // circles with different height & width
122 |
123 | div:nth-child(1) {
124 | width: 100px;
125 | height: 100px;
126 | }
127 |
128 | div:nth-child(2) {
129 | margin: 1.75rem;
130 | width: 150px;
131 | height: 150px;
132 | }
133 |
134 | div:nth-child(3) {
135 | width: 70px;
136 | height: 70px;
137 | }
138 |
139 | @media screen and (min-width: 2000px) {
140 | div:nth-child(2) {
141 | width: 400px;
142 | height: 400px;
143 | }
144 |
145 | div:nth-child(3) {
146 | width: 170px;
147 | height: 170px;
148 | }
149 |
150 | div:nth-child(1) {
151 | width: 200px;
152 | height: 200px;
153 | }
154 | }
155 |
156 | @media screen and (max-width: 1200px) {
157 | width: 100%;
158 | flex-direction: row;
159 | flex-wrap: wrap;
160 | margin-left: 0;
161 |
162 | div {
163 | margin: 1rem;
164 | }
165 | }
166 | }
167 |
168 | .app__header-img {
169 | flex: 1;
170 | height: 100%;
171 |
172 | display: flex;
173 | justify-content: flex-end;
174 | align-items: flex-end;
175 | position: relative;
176 |
177 | img {
178 | width: 100%;
179 | object-fit: contain;
180 | z-index: 1;
181 | }
182 |
183 | .overlay_circle {
184 | position: absolute;
185 | left: 0;
186 | right: 0;
187 | bottom: 0;
188 | z-index: 0;
189 | width: 100%;
190 | height: 90%;
191 | }
192 |
193 | @media screen and (max-width: 1200px) {
194 | margin: 2rem 0;
195 | }
196 | }
197 |
--------------------------------------------------------------------------------