├── .gitignore
├── _config.yml
├── images
├── css.png
├── Frame9.png
├── Shape.png
├── Snap1.png
├── Snap2.png
├── Snap3.png
├── Snap4.png
├── html.png
├── Counter.png
├── Frame10.png
├── Frame11.png
├── contact.png
├── Header_bg.png
├── Snapshoot1.png
├── Snapshoot2.png
├── Snapshoot3.png
├── Snapshoot4.png
├── contactbg.png
├── javaScript.png
├── screenshot.png
├── header-shape.png
└── social_media_icons.png
├── .stylelintrc.json
├── .hintrc
├── .eslintrc.json
├── README.md
├── .github
└── workflows
│ └── linters.yml
├── package.json
├── index.html
├── css
├── style.css
└── desktop.css
└── js
└── main.js
/.gitignore:
--------------------------------------------------------------------------------
1 | # Ignore node_modules folder
2 | node_modules
--------------------------------------------------------------------------------
/_config.yml:
--------------------------------------------------------------------------------
1 | theme: jekyll-theme-cayman
2 | google_analytics: UA-214417857-1
3 |
--------------------------------------------------------------------------------
/images/css.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tariktesfa/My-portfolio/HEAD/images/css.png
--------------------------------------------------------------------------------
/images/Frame9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tariktesfa/My-portfolio/HEAD/images/Frame9.png
--------------------------------------------------------------------------------
/images/Shape.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tariktesfa/My-portfolio/HEAD/images/Shape.png
--------------------------------------------------------------------------------
/images/Snap1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tariktesfa/My-portfolio/HEAD/images/Snap1.png
--------------------------------------------------------------------------------
/images/Snap2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tariktesfa/My-portfolio/HEAD/images/Snap2.png
--------------------------------------------------------------------------------
/images/Snap3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tariktesfa/My-portfolio/HEAD/images/Snap3.png
--------------------------------------------------------------------------------
/images/Snap4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tariktesfa/My-portfolio/HEAD/images/Snap4.png
--------------------------------------------------------------------------------
/images/html.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tariktesfa/My-portfolio/HEAD/images/html.png
--------------------------------------------------------------------------------
/images/Counter.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tariktesfa/My-portfolio/HEAD/images/Counter.png
--------------------------------------------------------------------------------
/images/Frame10.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tariktesfa/My-portfolio/HEAD/images/Frame10.png
--------------------------------------------------------------------------------
/images/Frame11.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tariktesfa/My-portfolio/HEAD/images/Frame11.png
--------------------------------------------------------------------------------
/images/contact.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tariktesfa/My-portfolio/HEAD/images/contact.png
--------------------------------------------------------------------------------
/images/Header_bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tariktesfa/My-portfolio/HEAD/images/Header_bg.png
--------------------------------------------------------------------------------
/images/Snapshoot1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tariktesfa/My-portfolio/HEAD/images/Snapshoot1.png
--------------------------------------------------------------------------------
/images/Snapshoot2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tariktesfa/My-portfolio/HEAD/images/Snapshoot2.png
--------------------------------------------------------------------------------
/images/Snapshoot3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tariktesfa/My-portfolio/HEAD/images/Snapshoot3.png
--------------------------------------------------------------------------------
/images/Snapshoot4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tariktesfa/My-portfolio/HEAD/images/Snapshoot4.png
--------------------------------------------------------------------------------
/images/contactbg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tariktesfa/My-portfolio/HEAD/images/contactbg.png
--------------------------------------------------------------------------------
/images/javaScript.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tariktesfa/My-portfolio/HEAD/images/javaScript.png
--------------------------------------------------------------------------------
/images/screenshot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tariktesfa/My-portfolio/HEAD/images/screenshot.png
--------------------------------------------------------------------------------
/images/header-shape.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tariktesfa/My-portfolio/HEAD/images/header-shape.png
--------------------------------------------------------------------------------
/images/social_media_icons.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tariktesfa/My-portfolio/HEAD/images/social_media_icons.png
--------------------------------------------------------------------------------
/.stylelintrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": ["stylelint-config-standard"],
3 | "plugins": ["stylelint-scss", "stylelint-csstree-validator"],
4 | "rules": {
5 | "at-rule-no-unknown": null,
6 | "scss/at-rule-no-unknown": true,
7 | "csstree/validator": true
8 | },
9 | "ignoreFiles": ["build/**", "dist/**", "**/reset*.css", "**/bootstrap*.css", "**/*.js", "**/*.jsx"]
10 | }
11 |
--------------------------------------------------------------------------------
/.hintrc:
--------------------------------------------------------------------------------
1 | {
2 | "connector": {
3 | "name": "local",
4 | "options": {
5 | "pattern": ["**", "!.git/**", "!node_modules/**"]
6 | }
7 | },
8 | "extends": ["development"],
9 | "formatters": ["stylish"],
10 | "hints": [
11 | "button-type",
12 | "disown-opener",
13 | "html-checker",
14 | "meta-charset-utf-8",
15 | "meta-viewport",
16 | "no-inline-styles:error"
17 | ]
18 | }
--------------------------------------------------------------------------------
/.eslintrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "env": {
3 | "browser": true,
4 | "es6": true,
5 | "jest": true
6 | },
7 | "parser": "babel-eslint",
8 | "parserOptions": {
9 | "ecmaVersion": 2018,
10 | "sourceType": "module"
11 | },
12 | "extends": ["airbnb-base"],
13 | "rules": {
14 | "no-shadow": "off",
15 | "no-param-reassign": "off",
16 | "eol-last": "off",
17 | "import/extensions": [ 1, {
18 | "js": "always", "json": "always"
19 | }]
20 | },
21 | "ignorePatterns": [
22 | "dist/",
23 | "build/"
24 | ]
25 | }
26 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # My-Portfolio
2 |
3 | > Portfolio: Desktop version + Mobile Version
4 |
5 | **This is a portfolio website created by using the template provided in Figma.**
6 |
7 | ## Built With
8 |
9 | - HTML
10 | - CSS
11 |
12 | ## Materials required for validation
13 |
14 | - follow this link :
15 | [HTML and CSS Linters link]( https://github.com/microverseinc/linters-config/tree/master/html-css)
16 |
17 | ## Screenshot
18 |
19 | 
20 |
21 |
22 | ## Live Demo
23 |
24 | [live demo](https://tariktesfa.github.io/My-portfolio/)
25 |
26 | ## Get Started
27 |
28 | To get a local copy up and running follow these simple example steps.
29 |
30 | 1. Clone the Repo or Download the Zip file
31 | 2. Run the live server or simply open index.html with your browser.
32 |
33 | ## Author
34 |
35 | 👤 **Tarikwa Tesfa**
36 |
37 | - GitHub: [@tariktesfa](https://github.com/tariktesfa)
38 | - Twitter: [@tariktesfa](https://twitter.com/tarik_tesfa)
39 | - LinkedIn: [LinkedIn](https://www.linkedin.com/in/tarikwa-tesfa-232a64167/)
40 |
41 | ## 🤝 Contributing
42 |
43 | Contributions, issues, and feature requests are welcome!
44 |
45 | Feel free to check the [issues page](../../issues/).
46 |
47 | ## Show your support
48 |
49 | Give a ⭐️ if you like this project!
50 |
--------------------------------------------------------------------------------
/.github/workflows/linters.yml:
--------------------------------------------------------------------------------
1 | name: Linters
2 |
3 | on: pull_request
4 |
5 | env:
6 | FORCE_COLOR: 1
7 |
8 | jobs:
9 | lighthouse:
10 | name: Lighthouse
11 | runs-on: ubuntu-18.04
12 | steps:
13 | - uses: actions/checkout@v2
14 | - uses: actions/setup-node@v1
15 | with:
16 | node-version: "12.x"
17 | - name: Setup Lighthouse
18 | run: npm install -g @lhci/cli@0.7.x
19 | - name: Lighthouse Report
20 | run: lhci autorun --upload.target=temporary-public-storage --collect.staticDistDir=.
21 | webhint:
22 | name: Webhint
23 | runs-on: ubuntu-18.04
24 | steps:
25 | - uses: actions/checkout@v2
26 | - uses: actions/setup-node@v1
27 | with:
28 | node-version: "12.x"
29 | - name: Setup Webhint
30 | run: |
31 | npm install --save-dev hint@6.x
32 | [ -f .hintrc ] || wget https://raw.githubusercontent.com/microverseinc/linters-config/master/html-css-js/.hintrc
33 | - name: Webhint Report
34 | run: npx hint .
35 | stylelint:
36 | name: Stylelint
37 | runs-on: ubuntu-18.04
38 | steps:
39 | - uses: actions/checkout@v2
40 | - uses: actions/setup-node@v1
41 | with:
42 | node-version: "12.x"
43 | - name: Setup Stylelint
44 | run: |
45 | npm install --save-dev stylelint@13.x stylelint-scss@3.x stylelint-config-standard@21.x stylelint-csstree-validator@1.x
46 | [ -f .stylelintrc.json ] || wget https://raw.githubusercontent.com/microverseinc/linters-config/master/html-css-js/.stylelintrc.json
47 | - name: Stylelint Report
48 | run: npx stylelint "**/*.{css,scss}"
49 | eslint:
50 | name: ESLint
51 | runs-on: ubuntu-18.04
52 | steps:
53 | - uses: actions/checkout@v2
54 | - uses: actions/setup-node@v1
55 | with:
56 | node-version: "12.x"
57 | - name: Setup ESLint
58 | run: |
59 | npm install --save-dev eslint@7.x eslint-config-airbnb-base@14.x eslint-plugin-import@2.x babel-eslint@10.x
60 | [ -f .eslintrc.json ] || wget https://raw.githubusercontent.com/microverseinc/linters-config/master/html-css-js/.eslintrc.json
61 | - name: ESLint Report
62 | run: npx eslint .
63 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "devDependencies": {
3 | "babel-eslint": "^10.1.0",
4 | "eslint": "^7.32.0",
5 | "eslint-config-airbnb-base": "^14.2.1",
6 | "eslint-plugin-import": "^2.25.3",
7 | "hint": "^6.1.9",
8 | "stylelint": "^13.13.1",
9 | "stylelint-config-standard": "^21.0.0",
10 | "stylelint-csstree-validator": "^1.9.0",
11 | "stylelint-scss": "^3.21.0"
12 | },
13 | "name": "my-portfolio",
14 | "description": "> Portfolio: Desktop version",
15 | "version": "1.0.0",
16 | "main": "index.js",
17 | "dependencies": {
18 | "acorn": "^8.6.0",
19 | "acorn-jsx": "^5.3.2",
20 | "ajv": "^8.8.2",
21 | "ansi-colors": "^4.1.1",
22 | "ansi-regex": "^5.0.1",
23 | "ansi-styles": "^4.3.0",
24 | "argparse": "^1.0.10",
25 | "array-includes": "^3.1.4",
26 | "array.prototype.flat": "^1.2.5",
27 | "astral-regex": "^2.0.0",
28 | "balanced-match": "^1.0.2",
29 | "brace-expansion": "^1.1.11",
30 | "call-bind": "^1.0.2",
31 | "callsites": "^3.1.0",
32 | "chalk": "^4.1.2",
33 | "color-convert": "^2.0.1",
34 | "color-name": "^1.1.4",
35 | "concat-map": "^0.0.1",
36 | "confusing-browser-globals": "^1.0.10",
37 | "cross-spawn": "^7.0.3",
38 | "debug": "^4.3.2",
39 | "deep-is": "^0.1.4",
40 | "define-properties": "^1.1.3",
41 | "doctrine": "^3.0.0",
42 | "emoji-regex": "^8.0.0",
43 | "enquirer": "^2.3.6",
44 | "es-abstract": "^1.19.1",
45 | "es-to-primitive": "^1.2.1",
46 | "escape-string-regexp": "^1.0.5",
47 | "eslint-import-resolver-node": "^0.3.6",
48 | "eslint-module-utils": "^2.7.1",
49 | "eslint-scope": "^5.1.1",
50 | "eslint-utils": "^2.1.0",
51 | "eslint-visitor-keys": "^2.1.0",
52 | "espree": "^7.3.1",
53 | "esprima": "^4.0.1",
54 | "esquery": "^1.4.0",
55 | "esrecurse": "^4.3.0",
56 | "estraverse": "^5.3.0",
57 | "esutils": "^2.0.3",
58 | "fast-deep-equal": "^3.1.3",
59 | "fast-json-stable-stringify": "^2.1.0",
60 | "fast-levenshtein": "^2.0.6",
61 | "file-entry-cache": "^6.0.1",
62 | "flat-cache": "^3.0.4",
63 | "flatted": "^3.2.4",
64 | "fs.realpath": "^1.0.0",
65 | "function-bind": "^1.1.1",
66 | "functional-red-black-tree": "^1.0.1",
67 | "get-intrinsic": "^1.1.1",
68 | "get-symbol-description": "^1.0.0",
69 | "glob": "^7.2.0",
70 | "glob-parent": "^5.1.2",
71 | "globals": "^11.12.0",
72 | "has": "^1.0.3",
73 | "has-bigints": "^1.0.1",
74 | "has-flag": "^4.0.0",
75 | "has-symbols": "^1.0.2",
76 | "has-tostringtag": "^1.0.0",
77 | "import-fresh": "^3.3.0",
78 | "imurmurhash": "^0.1.4",
79 | "inflight": "^1.0.6",
80 | "inherits": "^2.0.4",
81 | "internal-slot": "^1.0.3",
82 | "is-bigint": "^1.0.4",
83 | "is-boolean-object": "^1.1.2",
84 | "is-callable": "^1.2.4",
85 | "is-core-module": "^2.8.0",
86 | "is-date-object": "^1.0.5",
87 | "is-extglob": "^2.1.1",
88 | "is-fullwidth-code-point": "^3.0.0",
89 | "is-glob": "^4.0.3",
90 | "is-negative-zero": "^2.0.2",
91 | "is-number-object": "^1.0.6",
92 | "is-regex": "^1.1.4",
93 | "is-shared-array-buffer": "^1.0.1",
94 | "is-string": "^1.0.7",
95 | "is-symbol": "^1.0.4",
96 | "is-weakref": "^1.0.2",
97 | "isexe": "^2.0.0",
98 | "js-tokens": "^4.0.0",
99 | "js-yaml": "^3.14.1",
100 | "jsesc": "^2.5.2",
101 | "json-schema-traverse": "^1.0.0",
102 | "json-stable-stringify-without-jsonify": "^1.0.1",
103 | "levn": "^0.4.1",
104 | "lodash.merge": "^4.6.2",
105 | "lodash.truncate": "^4.4.2",
106 | "lru-cache": "^6.0.0",
107 | "minimatch": "^3.0.4",
108 | "minimist": "^1.2.5",
109 | "ms": "^2.1.2",
110 | "natural-compare": "^1.4.0",
111 | "object-inspect": "^1.11.1",
112 | "object-keys": "^1.1.1",
113 | "object.assign": "^4.1.2",
114 | "object.entries": "^1.1.5",
115 | "object.values": "^1.1.5",
116 | "once": "^1.4.0",
117 | "optionator": "^0.9.1",
118 | "parent-module": "^1.0.1",
119 | "path-is-absolute": "^1.0.1",
120 | "path-key": "^3.1.1",
121 | "path-parse": "^1.0.7",
122 | "prelude-ls": "^1.2.1",
123 | "progress": "^2.0.1",
124 | "punycode": "^2.1.1",
125 | "regexpp": "^3.2.0",
126 | "require-from-string": "^2.0.2",
127 | "resolve": "^1.20.0",
128 | "rimraf": "^3.0.2",
129 | "semver": "^7.3.5",
130 | "shebang-command": "^2.0.0",
131 | "shebang-regex": "^3.0.0",
132 | "side-channel": "^1.0.4",
133 | "slice-ansi": "^4.0.0",
134 | "sprintf-js": "^1.0.3",
135 | "string-width": "^4.2.3",
136 | "string.prototype.trimend": "^1.0.4",
137 | "string.prototype.trimstart": "^1.0.4",
138 | "strip-ansi": "^6.0.1",
139 | "strip-bom": "^3.0.0",
140 | "strip-json-comments": "^3.1.1",
141 | "supports-color": "^7.2.0",
142 | "table": "^6.7.3",
143 | "text-table": "^0.2.0",
144 | "to-fast-properties": "^2.0.0",
145 | "tsconfig-paths": "^3.12.0",
146 | "type-check": "^0.4.0",
147 | "type-fest": "^0.20.2",
148 | "unbox-primitive": "^1.0.1",
149 | "uri-js": "^4.4.1",
150 | "v8-compile-cache": "^2.3.0",
151 | "which": "^2.0.2",
152 | "which-boxed-primitive": "^1.0.2",
153 | "word-wrap": "^1.2.3",
154 | "wrappy": "^1.0.2",
155 | "yallist": "^4.0.0"
156 | },
157 | "scripts": {
158 | "test": "echo \"Error: no test specified\" && exit 1"
159 | },
160 | "repository": {
161 | "type": "git",
162 | "url": "git+https://github.com/tariktesfa/My-portfolio.git"
163 | },
164 | "keywords": [],
165 | "author": "",
166 | "license": "ISC",
167 | "bugs": {
168 | "url": "https://github.com/tariktesfa/My-portfolio/issues"
169 | },
170 | "homepage": "https://github.com/tariktesfa/My-portfolio#readme"
171 | }
172 |
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
15 |
16 |
17 |
18 |
19 |
20 |
21 | Tarikwa's Portfolio
22 |
23 |
24 |
25 |
44 |
45 |
46 | I'm Tarikwa Glad to see you!
47 | I’m a software developer! I can help you build a product , feature or website Look through some of my
48 | work and experience! If you like what you see and have a project you need coded, don’t hestiate to
49 | contact me.
50 | LET'S CONNECT
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
61 |
62 |
63 |
About Myself
64 |
I’m a software developer! I can help you build a product , feature or website Look through some of my
65 | work and experience! If you like what you see and have a project you need coded, don’t hestiate to
66 | contact me.
67 |
LET'S CONNECT
68 |
75 |
Get My Resume
76 |
77 |
78 |
79 |
80 | Languages
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 | JavaScript
89 |
90 |
91 |
92 |
93 |
94 | HTML
95 |
96 |
97 |
98 |
99 |
100 | CSS
101 |
102 |
103 |
104 |
105 |
106 | Frameworks
107 |
108 |
109 |
110 |
111 |
112 | Skills
113 |
114 |
115 |
116 |
117 |
118 |
139 |
140 |
142 |
143 |
144 |
145 |
146 |
--------------------------------------------------------------------------------
/css/style.css:
--------------------------------------------------------------------------------
1 | body {
2 | background-color: #e5e5e5;
3 | font-family: Poppins, sans-serif;
4 | padding: 0;
5 | margin: 0;
6 | }
7 |
8 | .desk-item,
9 | .desk-item1,
10 | .flex-item2-desk,
11 | .technology-desk,
12 | .lang-container {
13 | display: none;
14 | }
15 |
16 | nav {
17 | display: flex;
18 | flex: 1 1 auto;
19 | justify-content: space-between;
20 | text-align: center;
21 | padding: 1em;
22 | background-color: white;
23 | }
24 |
25 | /* .menu {
26 | display: block;
27 | } */
28 |
29 | a {
30 | font-style: normal;
31 | font-weight: bold;
32 | font-size: 25px;
33 | line-height: 20px;
34 | color: #6070ff;
35 | text-decoration-line: none;
36 | }
37 |
38 | .headline-section {
39 | background-image: url(../images/header-shape.png);
40 | background-repeat: no-repeat;
41 | background-size: 100% 100%;
42 | background-color: white;
43 | display: flex;
44 | height: 620px;
45 | flex-direction: column;
46 | padding: 20px 20px;
47 | border-bottom-left-radius: 25% 50px;
48 | margin-bottom: 100px;
49 | }
50 |
51 | h1 {
52 | color: #172b4d;
53 | font-weight: bold;
54 | font-size: 40px;
55 | line-height: 52px;
56 | }
57 |
58 | p {
59 | font-weight: normal;
60 | font-size: 16px;
61 | line-height: 24px;
62 | color: #344563;
63 | }
64 |
65 | .connect {
66 | color: #3d4ee4;
67 | font-weight: 500;
68 | font-size: 16px;
69 | line-height: 24px;
70 | }
71 |
72 | ul {
73 | list-style-type: none;
74 | display: flex;
75 | gap: 20px;
76 | padding: 1px;
77 | margin: 1px;
78 | }
79 |
80 | li a {
81 | color: #344563;
82 | margin-left: -40px;
83 | padding-right: 35px;
84 | }
85 |
86 | .social-icon {
87 | margin-left: 35px;
88 | display: flex;
89 | }
90 |
91 | .main-container {
92 | display: grid;
93 | grid-template-columns: 1fr;
94 | }
95 |
96 | .grid-item {
97 | background-color: white;
98 | display: flex;
99 | margin-bottom: 100px;
100 | flex-direction: column;
101 | padding: 20px 20px;
102 | border: 1px solid #e5e5e5;
103 | border-radius: 3%;
104 | }
105 |
106 | .mobile-item {
107 | position: fixed;
108 | height: 100%;
109 | width: 100%;
110 | left: 0;
111 | right: 0;
112 | top: 0;
113 | background-color: #6070fff0;
114 | text-align: left;
115 | display: none;
116 | }
117 |
118 | .mobile-item a {
119 | color: #fff;
120 | }
121 |
122 | .technology a {
123 | font-size: 12px;
124 | font-weight: 500;
125 | color: #6070ff;
126 | border-radius: 8px;
127 | text-align: center;
128 | background: #ebebff;
129 | padding: 5px 10px;
130 | margin-left: 0;
131 | }
132 |
133 | .flex-item3 a {
134 | font-size: 13px;
135 | font-weight: 600;
136 | display: flex;
137 | align-content: space-around;
138 | color: #7a869a;
139 | }
140 |
141 | .mobile-nav a {
142 | font-size: 32px;
143 | }
144 |
145 | .works-flex-pop span a {
146 | text-decoration: none;
147 | font-weight: bolder;
148 | color: #acb7c3;
149 | font-size: 20px;
150 | padding-right: 20px;
151 | }
152 |
153 | .mobile-item .close a {
154 | font-weight: lighter;
155 | font-size: 12px;
156 | }
157 |
158 | .mobile-item .close {
159 | padding-top: 50px;
160 | text-align: right;
161 | padding-right: 38px;
162 | font-weight: lighter;
163 | }
164 |
165 | .mobile-nav {
166 | padding: 15px 28px;
167 | }
168 |
169 | .flex-item2 {
170 | display: flex;
171 | margin-top: -30px;
172 | }
173 |
174 | .flex-item3 {
175 | display: flex;
176 | align-content: space-around;
177 | margin-left: 40px;
178 | }
179 |
180 | .flex-item5 {
181 | display: flex;
182 | }
183 |
184 | .inner-flex-item {
185 | display: flex;
186 | flex-direction: row;
187 | flex-wrap: wrap;
188 | width: 100%;
189 | }
190 |
191 | .expertise {
192 | display: flex;
193 | flex-direction: column;
194 | }
195 |
196 | .outer-flex {
197 | display: flex;
198 | flex-direction: column;
199 | }
200 |
201 | .skills {
202 | display: flex;
203 | flex: 1 1 auto;
204 | justify-content: space-between;
205 | text-align: center;
206 | border-bottom: 1px solid #acb7c3;
207 | }
208 |
209 | .about-myself i {
210 | padding-top: 22px;
211 | align-content: flex-end;
212 | }
213 |
214 | .framework {
215 | display: flex;
216 | text-align: center;
217 | flex: 1 1 auto;
218 | justify-content: space-between;
219 | border-bottom: 1px solid #acb7c3;
220 | }
221 |
222 | .framework p {
223 | color: #000;
224 | font-style: normal;
225 | font-weight: 500;
226 | font-size: 20px;
227 | }
228 |
229 | .skills p {
230 | color: #000;
231 | font-style: normal;
232 | font-weight: 500;
233 | font-size: 20px;
234 | }
235 |
236 | .language {
237 | display: flex;
238 | text-align: center;
239 | flex: 1 1 auto;
240 | justify-content: space-between;
241 | }
242 |
243 | .language p {
244 | color: #000;
245 | font-style: normal;
246 | font-weight: 500;
247 | font-size: 20px;
248 | }
249 |
250 | .outer-item {
251 | display: flex;
252 | text-align: center;
253 | flex: 1 1 auto;
254 | border-color: #acb7c3;
255 | border-radius: 8px;
256 | background-color: #f7f7f9;
257 | padding: 10px 10px;
258 | margin-bottom: 10px;
259 | }
260 |
261 | .outer-item p {
262 | font-weight: 500;
263 | font-size: 15px;
264 | color: #253858;
265 | line-height: 20px;
266 | }
267 |
268 | .grid-item img {
269 | width: 100%;
270 | height: 220px;
271 | }
272 |
273 | .about-myself {
274 | background-color: white;
275 | display: flex;
276 | flex-direction: column;
277 | padding: 20px 20px;
278 | padding-top: 100px;
279 | border-top-right-radius: 25% 50px;
280 | }
281 |
282 | .contact-icon {
283 | margin-left: 45px;
284 | padding-bottom: 20px;
285 | }
286 |
287 | .about-myself button {
288 | border-radius: 8px;
289 | border: 1px solid #3d4ee4;
290 | width: 170px;
291 | height: 50px;
292 | text-align: center;
293 | padding: 10px;
294 | font-weight: 500;
295 | font-size: 17px;
296 | line-height: 24px;
297 | letter-spacing: 0.03em;
298 | color: #396df2;
299 | background-color: white;
300 | margin-bottom: 20px;
301 | }
302 |
303 | .flex-item6 button {
304 | border-radius: 8px;
305 | border: 1px solid #3d4ee4;
306 | width: 140px;
307 | height: 50px;
308 | text-align: center;
309 | padding: 10px;
310 | font-style: normal;
311 | font-weight: 500;
312 | font-size: 17px;
313 | letter-spacing: 0.03em;
314 | color: #396df2;
315 | background-color: white;
316 | margin-top: 30px;
317 | }
318 |
319 | .flex-item3 img {
320 | width: auto;
321 | height: auto;
322 | padding-top: 5px;
323 | }
324 |
325 | .canopy {
326 | font-weight: 600;
327 | font-size: 13px;
328 | line-height: 16px;
329 | color: #344563;
330 | }
331 |
332 | .flex-item4 {
333 | font-size: 15px;
334 | line-height: 24px;
335 | color: #344563;
336 | }
337 |
338 | .flex-item2 h2 {
339 | color: #172b4d;
340 | font-weight: bold;
341 | font-size: 32px;
342 | }
343 |
344 | .inner-list {
345 | display: flex;
346 | flex-direction: column;
347 | }
348 |
349 | .contact {
350 | background-color: #6070ff;
351 | background-image: url(../images/contact.png);
352 | background-size: 100%;
353 | border-top-left-radius: 100px;
354 | margin-top: 100px;
355 | }
356 |
357 | .inner-div {
358 | padding-top: 100px;
359 | padding-right: 30px;
360 | padding-left: 20px;
361 | }
362 |
363 | .inner-div h2 {
364 | color: white;
365 | text-align: center;
366 | font-size: 40px;
367 | font-weight: 400;
368 | padding-bottom: 0;
369 | }
370 |
371 | .inner-div p {
372 | left: 24px;
373 | top: 4802px;
374 | font-size: 20px;
375 | line-height: 28px;
376 | text-align: center;
377 | color: #ebebff;
378 | }
379 |
380 | .form {
381 | padding-right: 30px;
382 | padding-left: 20px;
383 | }
384 |
385 | li input {
386 | background: #fff;
387 | border: 1px solid #cfd8dc;
388 | font-family: Poppins, sans-serif;
389 | border-radius: 8px;
390 | width: 100%;
391 | height: 50px;
392 | padding-left: 10px;
393 | color: #000;
394 | }
395 |
396 | li textarea {
397 | background: #fff;
398 | border: 1px solid #cfd8dc;
399 | font-family: Poppins, sans-serif;
400 | border-radius: 8px;
401 | width: 100%;
402 | height: 150px;
403 | padding-left: 10px;
404 | font-size: 15px;
405 | line-height: 24px;
406 | padding-top: 10px;
407 | }
408 |
409 | .shape {
410 | padding-right: 25%;
411 | padding-left: 35%;
412 | }
413 |
414 | button:hover {
415 | background: #8f9afc;
416 | color: white;
417 | }
418 |
419 | button:active {
420 | background: #0416b6;
421 | color: white;
422 | }
423 |
424 | #portfolioPopup {
425 | position: fixed;
426 | z-index: 1;
427 | left: 0;
428 | top: 0;
429 | width: 100%;
430 | height: 100%;
431 | overflow: auto;
432 | background-color: rgb(76, 78, 82, 0.7);
433 | display: none;
434 | }
435 |
436 | ul.works-flex-item.titles-container {
437 | margin: 10px;
438 | }
439 |
440 | .works-flex {
441 | padding: 20px;
442 | background: #fff;
443 | margin: 25px 20px;
444 | border-radius: 10px;
445 | }
446 |
447 | .work-image > img {
448 | width: 100%;
449 | }
450 |
451 | .titles-item {
452 | font-family: 'Poppins', sans-serif;
453 | font-size: 16px;
454 | color: lightslategray;
455 | font-weight: 500;
456 | list-style-image: url(../images/Counter.png);
457 | padding-right: 25px;
458 | }
459 |
460 | .list-main {
461 | padding-right: 10px;
462 | list-style-type: none;
463 | font-weight: 600;
464 | font-size: 14px;
465 | color: #344563;
466 | line-height: 24px;
467 | }
468 |
469 | .works-flex-pop {
470 | display: flex;
471 | flex-direction: row;
472 | justify-content: space-between;
473 | align-items: baseline;
474 | width: 100%;
475 | margin-left: 10px;
476 | font-size: 25px;
477 | }
478 |
479 | .work-description > p {
480 | font-size: 18px;
481 | color: #344563;
482 | font-weight: lighter;
483 | font-family: Popins, sans-serif;
484 | line-height: 28px;
485 | }
486 |
487 | .project-tags > div {
488 | margin-left: 10px;
489 | }
490 |
491 | .tags > ul {
492 | display: flex;
493 | flex-direction: row;
494 | list-style: none;
495 | margin-left: 5px;
496 | margin-top: 15px;
497 | }
498 |
499 | .lang-group {
500 | display: none;
501 | }
502 |
503 | #mobile {
504 | background: #ebebff;
505 | border-radius: 8px;
506 | font-size: 12px;
507 | padding: 4px 12px 4px;
508 | color: #6070ff;
509 | margin-top: 5px;
510 | line-height: 16px;
511 | }
512 |
513 | .btn-tags {
514 | border-top: 1px solid rgb(236, 234, 234);
515 | padding-top: 20px;
516 | }
517 |
518 | a.btn-see-project {
519 | text-decoration: none;
520 | color: #4053fc;
521 | }
522 |
523 | .btn-see-project {
524 | border: 1px solid #396df2;
525 | padding: 7px;
526 | border-radius: 8px;
527 | font-size: 16px;
528 | font-weight: 300;
529 | text-transform: capitalize;
530 | font-family: 'Poppins', sans-serif;
531 | transition-duration: 0.4s;
532 | margin: 0 5px 0 5px;
533 | }
534 |
--------------------------------------------------------------------------------
/css/desktop.css:
--------------------------------------------------------------------------------
1 | @media screen and (min-width: 992px) {
2 | body {
3 | background-color: #e5e5e5;
4 | font-family: Poppins, sans-serif;
5 | padding: 0;
6 | margin: 0;
7 | }
8 |
9 | a {
10 | text-decoration: none;
11 | text-decoration-line: none;
12 | }
13 |
14 | .flex-item1,
15 | .shape,
16 | .item,
17 | .flex-item2,
18 | .mobile-item,
19 | .mobile {
20 | display: none;
21 | }
22 |
23 | .desktop {
24 | position: fixed;
25 | width: 100%;
26 | display: flex;
27 | flex: 1 1 auto;
28 | text-align: center;
29 | padding: 1em;
30 | background-color: white;
31 | justify-content: space-between;
32 | }
33 |
34 | .all-item a {
35 | font-style: normal;
36 | font-weight: bold;
37 | font-size: 25px;
38 | line-height: 20px;
39 | color: #6070ff;
40 | margin-left: 150px;
41 | float: right;
42 | }
43 |
44 | .desk-item {
45 | display: flex;
46 | flex-direction: row;
47 | margin-right: 100px;
48 | }
49 |
50 | .desk-item a {
51 | padding-right: 20px;
52 | color: #344563;
53 | font-size: 15px;
54 | font-weight: 500;
55 | line-height: 20px;
56 | text-align: center;
57 | transition: color 2s;
58 | }
59 |
60 | .social-icon a {
61 | font-size: 2em;
62 | color: #344563;
63 | }
64 |
65 | .works-flex-pop span a {
66 | text-decoration: none;
67 | font-weight: bolder;
68 | color: #acb7c3;
69 | font-size: 20px;
70 | padding-right: 20px;
71 | }
72 |
73 | .headline-section {
74 | background-image: url(../images/Header_bg.png);
75 | background-repeat: no-repeat;
76 | background-size: 100% 100%;
77 | background-color: white;
78 | display: flex;
79 | height: 620px;
80 | flex-direction: column;
81 | padding: 300px 200px 50px 250px;
82 | margin-bottom: 120px;
83 | border-bottom-left-radius: 100px;
84 | }
85 |
86 | .headline-section h1 {
87 | color: #091e42;
88 | font-weight: bold;
89 | font-size: 48px;
90 | line-height: 60px;
91 | }
92 |
93 | .headline-section p {
94 | font-weight: normal;
95 | font-size: 20px;
96 | line-height: 28px;
97 | color: #344563;
98 | }
99 |
100 | .social-icon {
101 | list-style-type: none;
102 | display: flex;
103 | gap: 20px;
104 | padding: 1px;
105 | margin: 1px;
106 | }
107 |
108 | .main-container {
109 | display: grid;
110 | grid-template-columns: auto;
111 | grid-gap: 100px;
112 | align-content: space-around;
113 | margin: 100px 100px 150px 130px;
114 | }
115 |
116 | #work-1,
117 | #work-3 {
118 | background-color: white;
119 | display: flex;
120 | height: 450px;
121 | flex-direction: row;
122 | padding: 20px 20px;
123 | border: 1px solid #e5e5e5;
124 | border-radius: 30px;
125 | }
126 |
127 | #work-2,
128 | #work-4 {
129 | background-color: white;
130 | display: flex;
131 | height: 450px;
132 | flex-direction: row-reverse;
133 | padding: 20px 20px;
134 | border: 1px solid #e5e5e5;
135 | border-radius: 30px;
136 | }
137 |
138 | .desk-item1 {
139 | padding-right: 30px;
140 | }
141 |
142 | .desk-col {
143 | display: flex;
144 | flex-direction: column;
145 | padding: 1px 10px 100px 20px;
146 | }
147 |
148 | .desk-col h2 {
149 | font-weight: 700;
150 | font-size: 40px;
151 | line-height: 52px;
152 | color: #091e42;
153 | }
154 |
155 | ul {
156 | list-style-type: none;
157 | display: flex;
158 | gap: 20px;
159 | padding: 1px;
160 | margin-left: -40px;
161 | margin-top: -20px;
162 | }
163 |
164 | .inner-element li a {
165 | color: #6b778c;
166 | font-size: 18px;
167 | line-height: 24px;
168 | }
169 |
170 | .canopy {
171 | font-weight: 600;
172 | font-weight: bold;
173 | font-size: 18px;
174 | line-height: 24px;
175 | color: #344563;
176 | }
177 |
178 | .flex-item4 {
179 | padding-bottom: 25px;
180 | }
181 |
182 | .flex-item4 p {
183 | font-style: normal;
184 | font-weight: normal;
185 | font-size: 16px;
186 | line-height: 24px;
187 | color: #344563;
188 | }
189 |
190 | .flex-item3 {
191 | display: flex;
192 | align-content: space-around;
193 | margin-left: 40px;
194 | }
195 |
196 | .flex-item5 {
197 | display: flex;
198 | margin-left: 50px;
199 | }
200 |
201 | .inner-flex-item {
202 | display: flex;
203 | column-gap: 10px;
204 | }
205 |
206 | .inner-flex-item li a {
207 | font-size: 12px;
208 | font-weight: 500;
209 | color: #6070ff;
210 | border-radius: 8px;
211 | text-align: center;
212 | background: #ebebff;
213 | padding: 5px 10px;
214 | }
215 |
216 | .flex-item6 button {
217 | border: 1px solid #dfe1e6;
218 | border-radius: 8px;
219 | width: 140px;
220 | height: 50px;
221 | text-align: center;
222 | padding: 10px;
223 | font-style: normal;
224 | font-weight: 500;
225 | font-size: 17px;
226 | letter-spacing: 0.03em;
227 | color: #396df2;
228 | background-color: white;
229 | margin-top: 30px;
230 | }
231 |
232 | .resume {
233 | border: 1px solid #dfe1e6;
234 | border-radius: 8px;
235 | width: 180px;
236 | height: 50px;
237 | text-align: center;
238 | font-style: normal;
239 | font-weight: 500;
240 | font-size: 17px;
241 | letter-spacing: 0.03em;
242 | color: #396df2;
243 | background-color: white;
244 | }
245 |
246 | button:hover {
247 | background: #8f9afc;
248 | color: white;
249 | }
250 |
251 | button:active {
252 | background: #0416b6;
253 | color: white;
254 | box-shadow: 0 8px 16px;
255 | }
256 |
257 | .about-myself {
258 | background-color: white;
259 | display: flex;
260 | flex-direction: row;
261 | padding: 100px 20px 150px 20px;
262 | border-top-right-radius: 100px;
263 | height: 680px;
264 | }
265 |
266 | .desk-about {
267 | display: flex;
268 | flex-direction: column;
269 | width: 400px;
270 | padding: 80px 10px 100px 120px;
271 | }
272 |
273 | .expertise {
274 | display: flex;
275 | flex-direction: column;
276 | margin-right: 130px;
277 | margin-left: 80px;
278 | width: 500px;
279 | }
280 |
281 | .desk-programming {
282 | display: flex;
283 | flex-direction: row;
284 | }
285 |
286 | .outer-item {
287 | display: flex;
288 | flex-direction: column;
289 | width: 120px;
290 | height: 100px;
291 | background: #f7f7f9;
292 | border-radius: 8px;
293 | margin-right: 55px;
294 | margin-top: 2px;
295 | padding: 10px 10px 10px 10px;
296 | }
297 |
298 | .work-description > p {
299 | font-size: 18px;
300 | color: #344563;
301 | font-weight: lighter;
302 | font-family: Popins, sans-serif;
303 | line-height: 28px;
304 | }
305 |
306 | .outer-item li p {
307 | color: #253858;
308 | font-weight: 500;
309 | font-size: 15px;
310 | line-height: 20px;
311 | margin-top: -10px;
312 | }
313 |
314 | .desk-about h1 {
315 | color: #091e42;
316 | font-style: normal;
317 | font-weight: bold;
318 | font-size: 40px;
319 | line-height: 52px;
320 | }
321 |
322 | .desk-about li p {
323 | color: #344563;
324 | font-size: 16px;
325 | line-height: 24px;
326 | }
327 |
328 | p.connect {
329 | color: #3d4ee4;
330 | font-weight: 500;
331 | font-size: 16px;
332 | line-height: 24px;
333 | }
334 |
335 | .contact-icon {
336 | margin-left: 1px;
337 | padding: 10px;
338 | }
339 |
340 | .contact-icon li a {
341 | font-size: 1.5em;
342 | color: #505f79;
343 | }
344 |
345 | .language {
346 | display: flex;
347 | text-align: center;
348 | margin-top: 120px;
349 | justify-content: space-between;
350 | }
351 |
352 | .skills {
353 | display: flex;
354 | justify-content: space-between;
355 | text-align: center;
356 | padding-top: 20px;
357 | border-bottom: 1px solid #acb7c3;
358 | }
359 |
360 | .framework {
361 | display: flex;
362 | text-align: center;
363 | justify-content: space-between;
364 | border-bottom: 1px solid #acb7c3;
365 | padding-top: 20px;
366 | }
367 |
368 | .contact {
369 | background-color: #6070ff;
370 | background-image: url(../images/contactbg.png);
371 | background-size: 100%;
372 | border-top-left-radius: 100px;
373 | margin-top: -100px;
374 | padding: 150px 400px 150px 400px;
375 | }
376 |
377 | .inner-div {
378 | padding-right: 30px;
379 | padding-left: 20px;
380 | width: 550px;
381 | height: 100px;
382 | margin-bottom: 100px;
383 | }
384 |
385 | .inner-div h2 {
386 | color: white;
387 | text-align: center;
388 | font-size: 40px;
389 | font-weight: 400;
390 | padding-bottom: 0;
391 | }
392 |
393 | #inner-div {
394 | font-size: 20px;
395 | line-height: 28px;
396 | text-align: center;
397 | color: #ebebff;
398 | }
399 |
400 | .form {
401 | padding: 20px;
402 | }
403 |
404 | li input {
405 | background: #fff;
406 | border: 1px solid #cfd8dc;
407 | font-family: Poppins, sans-serif;
408 | border-radius: 8px;
409 | width: 100%;
410 | height: 50px;
411 | padding-left: 10px;
412 | color: #000;
413 | }
414 |
415 | li textarea {
416 | background: #fff;
417 | border: 1px solid #cfd8dc;
418 | font-family: Poppins, sans-serif;
419 | border-radius: 8px;
420 | width: 100%;
421 | height: 150px;
422 | padding-left: 10px;
423 | font-size: 15px;
424 | line-height: 24px;
425 | padding-top: 10px;
426 | }
427 |
428 | .inner-list {
429 | display: flex;
430 | flex-direction: column;
431 | margin: auto;
432 | width: 100%;
433 | }
434 |
435 | .inner-list .flex-item6 button {
436 | margin-left: 150px;
437 | margin-top: 1px;
438 | }
439 |
440 | .all-item:hover {
441 | transform: scale(1, 0.8);
442 | }
443 |
444 | .desk-item a:hover {
445 | color: #3d4ee4;
446 | }
447 |
448 | #portfolioPopup {
449 | position: fixed;
450 | z-index: 1;
451 | left: 0;
452 | top: 0;
453 | width: 100%;
454 | height: 100%;
455 | overflow: auto;
456 | background-color: rgb(76, 78, 82, 0.7);
457 | display: none;
458 | }
459 |
460 | ul.works-flex-item.titles-container {
461 | margin: 10px;
462 | }
463 |
464 | .works-flex {
465 | padding: 20px;
466 | background: #fff;
467 | margin: 50px 100px;
468 | border-radius: 10px;
469 | }
470 |
471 | .work-image > img {
472 | width: 100%;
473 | }
474 |
475 | .titles-item {
476 | font-family: 'Poppins', sans-serif;
477 | font-size: 16px;
478 | color: lightslategray;
479 | font-weight: 500;
480 | list-style-image: url(../images/Counter.png);
481 | padding-right: 25px;
482 | }
483 |
484 | .list-main {
485 | padding-right: 25px;
486 | list-style-type: none;
487 | font-weight: 600;
488 | font-size: 18px;
489 | color: #344563;
490 | line-height: 24px;
491 | }
492 |
493 | .works-flex-pop {
494 | display: flex;
495 | flex-direction: row;
496 | justify-content: space-between;
497 | align-items: baseline;
498 | width: 100%;
499 | margin-left: 10px;
500 | font-size: 25px;
501 | }
502 |
503 | .project-tags {
504 | display: flex;
505 | flex-direction: row;
506 | }
507 |
508 | .work-description {
509 | width: 75%;
510 | }
511 |
512 | .project-tags > div {
513 | margin-left: 10px;
514 | }
515 |
516 | .tags {
517 | width: 25%;
518 | }
519 |
520 | .tags > ul {
521 | display: flex;
522 | flex-direction: row;
523 | flex-wrap: wrap;
524 | list-style: none;
525 | margin-left: 5px;
526 | margin-top: 15px;
527 | }
528 |
529 | .lang-group,
530 | .lang-group-2 {
531 | background: #ebebff;
532 | border-radius: 8px;
533 | font-size: 12px;
534 | padding: 4px 12px 4px;
535 | color: #6070ff;
536 | margin-top: 5px;
537 | line-height: 16px;
538 | }
539 |
540 | .btn-tags {
541 | border-top: 1px solid rgb(236, 234, 234);
542 | padding-top: 20px;
543 | }
544 |
545 | a.btn-see-project {
546 | text-decoration: none;
547 | color: #4053fc;
548 | }
549 |
550 | .btn-see-project {
551 | border: 1px solid #396df2;
552 | padding: 7px;
553 | border-radius: 8px;
554 | font-size: 16px;
555 | font-weight: 300;
556 | text-transform: capitalize;
557 | font-family: 'Poppins', sans-serif;
558 | transition-duration: 0.4s;
559 | margin: 0 5px 0 5px;
560 | }
561 | }
562 |
--------------------------------------------------------------------------------
/js/main.js:
--------------------------------------------------------------------------------
1 | const menuItem = document.querySelector('.mobile-item');
2 | const closeMobileItems = document.querySelectorAll('.closeMenu');
3 | const displayMobileMenu = () => {
4 | menuItem.style.display = 'block';
5 | };
6 | const closeMobileMenu = () => {
7 | menuItem.style.display = 'none';
8 | };
9 | document.querySelector('.openMenu').addEventListener('click', displayMobileMenu);
10 | closeMobileItems.forEach(((element) => element.addEventListener('click', closeMobileMenu)));
11 | /* Project Detail objects */
12 | const projectDetail = [{
13 | title: 'Tonic',
14 | exprience: ['CANOPY', 'Back End Dev', '2015'],
15 | desription: 'A daily selection of privately personalized reads; no accounts or sign-ups required.',
16 | popDescription: 'Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it 1960s with the releaLorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it 1960s with the releorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum han printer took a galley of type and scrambled it 1960s with the releawn printer took a galley of type and scrambled it 1960s with the releaLorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it 1960s with the relea',
17 | technologies: ['html', 'css', 'javascript'],
18 | popupTech: ['html', 'css', 'javaScript', 'github', 'Ruby', 'Bootstrap'],
19 | image: './images/Snap1.png',
20 | imageMobile: './images/Snapshoot1.png',
21 | imagePopup: './images/Snap1.png',
22 | imageMobilePopup: './images/Snapshoot1.png',
23 | seeLive: 'https://tariktesfa.github.io/My-portfolio/',
24 | seeSource: 'https://github.com/tariktesfa/My-portfolio',
25 | },
26 | {
27 | title: 'Multi-Post Stories',
28 | exprience: ['FACEBOOK', 'Back End Dev', '2015'],
29 | desription: 'Experimental content creation feature that allows users to add to an existing story over the course of a day without spamming their friends.',
30 | popDescription: 'Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it 1960s with the releaLorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it 1960s with the releorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum han printer took a galley of type and scrambled it 1960s with the releawn printer took a galley of type and scrambled it 1960s with the releaLorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it 1960s with the relea',
31 | technologies: ['html', 'Ruby on rails', 'css', 'javascript'],
32 | popupTech: ['html', 'css', 'javaScript', 'github', 'Ruby', 'Bootstrap'],
33 | image: './images/Snap2.png',
34 | imageMobile: './images/Snapshoot2.png',
35 | imagePopup: './images/Snap2.png',
36 | imageMobilePopup: './images/Snapshoot2.png',
37 | seeLive: 'https://tariktesfa.github.io/My-portfolio/',
38 | seeSource: 'https://github.com/tariktesfa/My-portfolio',
39 | },
40 | {
41 | title: 'Facebook 360',
42 | exprience: ['FACEBOOK', 'Back End Dev', '2015'],
43 | desription: 'Exploring the future of media in Facebook first Virtual Reality app; a place to discover and enjoy 360 photos and videos on Gear VR.',
44 | popDescription: 'Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it 1960s with the releaLorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it 1960s with the releorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum han printer took a galley of type and scrambled it 1960s with the releawn printer took a galley of type and scrambled it 1960s with the releaLorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it 1960s with the relea',
45 | technologies: ['html', 'Ruby on rails', 'css', 'javascript'],
46 | popupTech: ['html', 'css', 'javaScript', 'github', 'Ruby', 'Bootstrap'],
47 | image: './images/Snap3.png',
48 | imageMobile: './images/Snapshoot3.png',
49 | imagePopup: './images/Snap3.png',
50 | imageMobilePopup: './images/Snapshoot3.png',
51 | seeLive: 'https://tariktesfa.github.io/My-portfolio/',
52 | seeSource: 'https://github.com/tariktesfa/My-portfolio',
53 | },
54 | {
55 | title: 'Uber Navigation',
56 | exprience: ['UBER', 'Lead Developer', '2018'],
57 | desription: 'A smart assistant to make driving more safe, efficient, and fun by unlocking your most expensive computer: your car.',
58 | popDescription: 'Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it 1960s with the releaLorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it 1960s with the releorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum han printer took a galley of type and scrambled it 1960s with the releawn printer took a galley of type and scrambled it 1960s with the releaLorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it 1960s with the relea.',
59 | technologies: ['html', 'Ruby on rails', 'css', 'javascript'],
60 | popupTech: ['html', 'css', 'javaScript', 'github', 'Ruby', 'Bootstrap'],
61 | image: './images/Snap4.png',
62 | imageMobile: './images/Snapshoot4.png',
63 | imagePopup: './images/Snap4.png',
64 | imageMobilePopup: './images/Snapshoot4.png',
65 | seeLive: 'https://tariktesfa.github.io/My-portfolio/',
66 | seeSource: 'https://github.com/tariktesfa/My-portfolio',
67 | },
68 | ];
69 | /* End of project detail object */
70 |
71 | /* Populate object to html elements when the page loads */
72 | for (let i = 0; i < projectDetail.length; i += 1) {
73 | let tech = '';
74 | let experienceList = '';
75 |
76 | for (let j = 0; j < projectDetail[i].technologies.length; j += 1) {
77 | tech += `${projectDetail[i].technologies[j]} `;
78 | }
79 |
80 | for (let k = 0; k < projectDetail[i].exprience.length; k += 1) {
81 | experienceList += (k === 0) ? `${projectDetail[i].exprience[k]} ` : `${projectDetail[i].exprience[k]} `;
82 | if (k !== projectDetail[i].exprience.length - 1) experienceList += ' ';
83 | }
84 | document.querySelector('#portfolio').innerHTML += `
85 |
86 |
87 |
88 |
89 |
90 |
${projectDetail[i].title}
91 |
92 |
93 |
${projectDetail[i].title}
94 |
95 |
96 |
97 | ${experienceList}
98 |
99 |
100 |
101 |
${projectDetail[i].desription}
102 |
103 |
108 |
See project
109 |
110 |
`;
111 | }
112 | /* End of project detail population when the pages loads */
113 |
114 | /* Display Popup modal */
115 |
116 | const popupModal = document.querySelector('#portfolioPopup');
117 | const displayPopupModal = (i) => {
118 | let tech = '';
119 | let techPop = '';
120 | let experienceList = '';
121 |
122 | for (let j = 0; j < projectDetail[i].technologies.length; j += 1) {
123 | tech += `
${projectDetail[i].technologies[j]} `;
124 | }
125 |
126 | for (let j = 0; j < projectDetail[i].popupTech.length; j += 1) {
127 | techPop += `
${projectDetail[i].popupTech[j]} `;
128 | }
129 |
130 | for (let k = 0; k < projectDetail[i].exprience.length; k += 1) {
131 | experienceList += (k === 0) ? `
${projectDetail[i].exprience[k]} ` : `
${projectDetail[i].exprience[k]} `;
132 | }
133 | document.querySelector('#portfolioPopup').innerHTML = `
134 |
135 |
136 |
137 |
${projectDetail[i].title}
138 |
139 |
140 |
141 | ${experienceList}
142 |
143 |
144 |
145 |
146 |
147 |
148 |
171 |
172 | `;
173 | popupModal.style.display = 'block';
174 | };
175 | document.querySelectorAll('.see-project').forEach((row) => row.addEventListener('click', () => displayPopupModal(row.getAttribute('data-index'))));
176 |
177 | const closeModal = document.querySelector('#portfolioPopup');
178 | const closePopupModal = () => {
179 | closeModal.style.display = 'none';
180 | };
181 | /* End of display popup modal */
182 |
183 | /* Contact Form validation */
184 | // eslint-disable-next-line no-useless-escape
185 | const regex = '[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,}$';
186 | document.querySelector('#form').addEventListener('submit', (e) => {
187 | for (let i = 0; i < e.target.length; i += 1) {
188 | if (e.target[i].classList.contains('form-control')) {
189 | if (e.target[i].value === '') {
190 | // e.target[i].nextElementSibling.style.display = 'block';
191 | e.target[i].parentElement.nextElementSibling.innerText = `Please enter your ${e.target[i].getAttribute('placeholder')}`;
192 | e.target[i].parentElement.nextElementSibling.style.color = 'red';
193 | e.preventDefault();
194 | } else if (e.target[i].type === 'input' && e.target[i].value.length > e.target[i].getAttribute('maxlength')) {
195 | e.target[i].parentElement.nextElementSibling.innerText = `The maximum number of character is ${e.target[i].getAttribute('maxlength')}`;
196 | e.target[i].parentElement.nextElementSibling.style.color = 'red';
197 | e.preventDefault();
198 | } else if (e.target[i].type === 'email' && e.target[i].value !== e.target[1].value.toLowerCase()) {
199 | e.target[i].parentElement.nextElementSibling.innerText = 'Please enter your email in lowercase';
200 | e.target[i].parentElement.nextElementSibling.style.color = 'red';
201 | e.preventDefault();
202 | } else if (e.target[i].type === 'email' && regex.test(e.target[i].value) !== e.target[i].value) {
203 | e.target[i].parentElement.nextElementSibling.textContent = 'Please enter a valid email address';
204 | e.target[i].parentElement.nextElementSibling.style.color = 'red';
205 | e.preventDefault();
206 | } else {
207 | e.target[i].parentElement.nextElementSibling.style.display = 'none';
208 | e.target[i].parentElement.nextElementSibling.innerText = '';
209 | }
210 | }
211 | }
212 | });
213 | /* End of Contact Form Validation */
214 |
--------------------------------------------------------------------------------