├── .editorconfig
├── .firebase
└── hosting.ZGlzdFxwb3J0Zm9saW8.cache
├── .firebaserc
├── .github
├── .gitkeep
└── workflows
│ ├── deploy.yml
│ └── integrate.yml
├── .gitignore
├── LICENSE.md
├── README.md
├── angular.json
├── browserslist
├── debug.log
├── e2e
├── protractor.conf.js
├── src
│ ├── app.e2e-spec.ts
│ └── app.po.ts
└── tsconfig.json
├── firebase.json
├── karma.conf.js
├── package-lock.json
├── package.json
├── src
├── app
│ ├── About
│ │ ├── About.component.html
│ │ ├── About.component.scss
│ │ ├── About.component.spec.ts
│ │ └── About.component.ts
│ ├── Contact
│ │ ├── Contact.component.css
│ │ ├── Contact.component.html
│ │ ├── Contact.component.spec.ts
│ │ └── Contact.component.ts
│ ├── Nav
│ │ ├── Nav.component.html
│ │ ├── Nav.component.scss
│ │ ├── Nav.component.spec.ts
│ │ └── Nav.component.ts
│ ├── Profile
│ │ ├── Profile.component.css
│ │ ├── Profile.component.html
│ │ ├── Profile.component.spec.ts
│ │ └── Profile.component.ts
│ ├── Resume
│ │ ├── Resume.component.css
│ │ ├── Resume.component.html
│ │ ├── Resume.component.spec.ts
│ │ └── Resume.component.ts
│ ├── Services
│ │ ├── Services.component.html
│ │ ├── Services.component.scss
│ │ ├── Services.component.spec.ts
│ │ └── Services.component.ts
│ ├── Testimonials
│ │ ├── Testimonials.component.html
│ │ ├── Testimonials.component.scss
│ │ ├── Testimonials.component.spec.ts
│ │ └── Testimonials.component.ts
│ ├── app.component.css
│ ├── app.component.html
│ ├── app.component.spec.ts
│ ├── app.component.ts
│ ├── app.module.ts
│ ├── appRoutes.ts
│ └── configuration.ts
├── assets
│ ├── .gitkeep
│ └── images
│ │ ├── Contact.svg
│ │ ├── Design_Thinking.svg
│ │ ├── Experience.svg
│ │ ├── Reference.svg
│ │ ├── Skill.svg
│ │ ├── about.svg
│ │ ├── education.svg
│ │ ├── portfolio-showcase.gif
│ │ ├── quotation-mark.svg
│ │ └── right-arrow.svg
├── environments
│ ├── environment.prod.ts
│ └── environment.ts
├── favicon.ico
├── index.html
├── main.ts
├── polyfills.ts
├── styles.css
└── test.ts
├── tsconfig.app.json
├── tsconfig.json
├── tsconfig.spec.json
└── tslint.json
/.editorconfig:
--------------------------------------------------------------------------------
1 | # Editor configuration, see https://editorconfig.org
2 | root = true
3 |
4 | [*]
5 | charset = utf-8
6 | indent_style = space
7 | indent_size = 2
8 | insert_final_newline = true
9 | trim_trailing_whitespace = true
10 |
11 | [*.ts]
12 | quote_type = single
13 |
14 | [*.md]
15 | max_line_length = off
16 | trim_trailing_whitespace = false
17 |
--------------------------------------------------------------------------------
/.firebase/hosting.ZGlzdFxwb3J0Zm9saW8.cache:
--------------------------------------------------------------------------------
1 | 3rdpartylicenses.txt,1604439420258,c8a4048d417b04c24d6e24980d0aeb7867b11e7c30fecc4784a143105286e9f6
2 | favicon.ico,1603545938225,2c19690e9587bae12f419b34d2edeecc76808099540a9c9f4ea6194116cfc8f7
3 | fontawesome-webfont.1e59d2330b4c6deb84b3.ttf,1604439420258,d9cef07d4f3569883fb4c3db76acea5478cef80775d012841eb78a42e60a8e89
4 | fontawesome-webfont.20fd1704ea223900efa9.woff2,1604439420258,38d88317bebc79b4945a679daadd47daebbadc5cd13b41473143394ca7e8d892
5 | fontawesome-webfont.8b43027f47b20503057d.eot,1604439420258,4944999b255adf473d5b86b300eba33737e8f598c17f24e82a28582393331209
6 | fontawesome-webfont.c1e38fd9e0e74ba58f7a.svg,1604439420258,9b74ca5333a9ca156ae6ef0920d5bc42d283e95d25651bf4375404f0407a63ab
7 | fontawesome-webfont.f691f37e57f04c152e23.woff,1604439420258,b51c2c79cce89b7c5947672c13f735c24ee1a9f8f6ebdb957c5fdfe567f27d37
8 | index.html,1604439420443,1f6e686cb3adef92a0f27f7c49bd9a572f9846ea07224af66f483d5a9777c04f
9 | main-es2015.e6419a40a17dbc19685c.js,1604436641107,f60666597d467b000e0548bc2300f5caf0a321d91479e2eba2bf733210326008
10 | main-es5.e6419a40a17dbc19685c.js,1604436640198,d00604a28af3811310d5916c5456220ddb4aa24ecc3187139793454e3f6981cc
11 | polyfills-es2015.f332a089ad1600448873.js,1603895683403,3e7c89812bf4fd87f9db14f54068690ed64b8be5e64316c9703f9616bef0b00e
12 | polyfills-es5.177e85a9724683782539.js,1603895687830,4f1a99830dd49db1d1cffcb8b4a23931d26817406e84ff1924e315758d4437e8
13 | runtime-es2015.0dae8cbc97194c7caed4.js,1603895682984,8351e28e6622d0d4825d766649b2ae0e8767c34304fff594f102bfe52b7e4e29
14 | runtime-es5.0dae8cbc97194c7caed4.js,1603895682984,8351e28e6622d0d4825d766649b2ae0e8767c34304fff594f102bfe52b7e4e29
15 | scripts.568694a568f45ab03c95.js,1604439420259,0296e64728ccef0556d1ff5c3180e1ec3cf131a8593ed2869d3b9a9d0076fe3e
16 | styles.afdf3b541c914d8cc18b.css,1604439420259,05a55ed903314917d9849739b8025d16ed362a8a4924e01bdd44977ff3c1cd9b
17 | assets/images/about.svg,1604250419938,41ffe497139c3f970b4ec84dace28587ded1c17a6150b1dbd8a89fac85f51c41
18 | assets/images/Contact.svg,1604250419981,528bf28d685bf519a1ff1dd68cd84d04d9ba0f203504585cbf73f90821f1a939
19 | assets/images/Design_Thinking.svg,1604418456218,c45c342e9402d90b36e7080ab016a20b712321fdc1a71ec96d25cc8caa091b37
20 | assets/images/education.svg,1604250420099,1bef2c8b2430384b9ff670ca91866645938f4481e93a47faed79fb2ce6de8b0a
21 | assets/images/Experience.svg,1604250420151,51c602f171c369f8dd8088bd8fca9c38ee05659dc6d167caf3bbc4ebe034469a
22 | assets/images/quotation-mark.svg,1604250420211,131a8b80cf5a417fbed2ca9ce19f7e06b1c28486999e80177077675aecd25c03
23 | assets/images/Reference.svg,1604250419818,e138669f4b924e46f2dd3b867b27dae314c97683ee8e59aac6faa5214772b0de
24 | assets/images/right-arrow.svg,1604250419861,f86400023a6727083d294a5a030b57262804b02126b0de5db6e5612fb74d827a
25 | assets/images/Skill.svg,1604250419894,3f90be848557d0d8e738b426885a83d054c1f5a241175b7568ba595d1cd1a44d
26 |
--------------------------------------------------------------------------------
/.firebaserc:
--------------------------------------------------------------------------------
1 | {
2 | "projects": {
3 | "default": "dev-portfolio-en"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/.github/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AbdullahOztuurkk/angular-dev-portfolio/0d6bf2d04fca0e59acc97e1db5c9fad1cdbf46fc/.github/.gitkeep
--------------------------------------------------------------------------------
/.github/workflows/deploy.yml:
--------------------------------------------------------------------------------
1 |
2 | name: Firebase Continuous Deployment
3 |
4 | on:
5 | push:
6 | branches: [ master ]
7 |
8 |
9 | jobs:
10 | deploy:
11 | runs-on: ubuntu-latest
12 | steps:
13 | - uses: actions/checkout@master
14 | - uses: actions/setup-node@master
15 | with:
16 | node-version: 12
17 | - run: npm ci
18 | - run: npm run build
19 | - uses: w9jds/firebase-action@master
20 | with:
21 | args: deploy --only hosting
22 | env:
23 | FIREBASE_TOKEN: ${{ secrets.FIREBASE_TOKEN }}
--------------------------------------------------------------------------------
/.github/workflows/integrate.yml:
--------------------------------------------------------------------------------
1 | name: Node Continuous Integration
2 |
3 | on:
4 | pull_request:
5 | branches: [ master ]
6 |
7 |
8 | jobs:
9 | test_pull_request:
10 | runs-on: ubuntu-latest
11 | steps:
12 | - uses: actions/checkout@v2
13 | - uses: actions/setup-node@v1
14 | with:
15 | node-version: 12
16 | - run: npm ci
17 | - run: npm test
18 | - run: npm run build
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # See http://help.github.com/ignore-files/ for more about ignoring files.
2 |
3 | # compiled output
4 | /dist
5 | /tmp
6 | /out-tsc
7 | # Only exists if Bazel was run
8 | /bazel-out
9 |
10 | # dependencies
11 | /node_modules
12 |
13 | # profiling files
14 | chrome-profiler-events*.json
15 | speed-measure-plugin*.json
16 |
17 | # IDEs and editors
18 | /.idea
19 | .project
20 | .classpath
21 | .c9/
22 | *.launch
23 | .settings/
24 | *.sublime-workspace
25 |
26 | # IDE - VSCode
27 | .vscode/*
28 | !.vscode/settings.json
29 | !.vscode/tasks.json
30 | !.vscode/launch.json
31 | !.vscode/extensions.json
32 | .history/*
33 |
34 | # misc
35 | /.sass-cache
36 | /connect.lock
37 | /coverage
38 | /libpeerconnection.log
39 | npm-debug.log
40 | yarn-error.log
41 | testem.log
42 | /typings
43 |
44 | # System Files
45 | .DS_Store
46 | Thumbs.db
47 |
--------------------------------------------------------------------------------
/LICENSE.md:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2022 Abdullah Öztürk
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Minimal Developer Portfolio
2 |
3 | ## A clean, minimal and responsive portfolio template for Developers!
4 |
5 |
6 |
7 |
8 |
9 | ### Motivation
10 | Creating a portfolio can take a long time since everything might be made from scratch. Moreover, the need of having a portfolio is essential for many developers. Having a nice and clean personal portfolio can impress several companies when applying for jobs or it can be something that developers want to show off to their friends. Therefore, Minimal Developer Portfolio is created to support and help programmers in many ways.
11 |
12 | ## Table of Contents
13 | - [Sections](#sections)
14 | - [Getting Started](#getting-started)
15 | - [How to Use](#how-to-use)
16 | - [Contributing](#contributing)
17 | - [Change and Customize](#change-and-customize-every-section-according-to-your-need)
18 | - [Technologies Used](#technologies-used)
19 | - [License](#license)
20 |
21 | ## Sections
22 | ✔️ About\
23 | ✔️ Resume\
24 | ✔️ Education in Resume section\
25 | ✔️ Job Experience in Resume section\
26 | ✔️ Services\
27 | ✔️ Testimonials\
28 | ✔️ Contact me
29 |
30 | To view a live example, **[click here](https://dev-portfolio-en.web.app/)**.
31 |
32 |
33 | ## Getting Started
34 |
35 | These instructions will get you a copy of the project up and running on your local machine for development and testing purposes.
36 |
37 | You'll need [Git](https://git-scm.com) and [Node.js](https://nodejs.org/en/download/) (which comes with [npm](http://npmjs.com)) installed on your computer.
38 |
39 | ```
40 | node@v12.18.0 or higher
41 | npm@6.9.0 or higher
42 | git@2.24.0 or higher
43 | ```
44 |
45 | ## How To Use
46 |
47 | From your command line, clone and run devPortfolio :
48 |
49 | ```bash
50 | # Clone this repository
51 | $ git clone https://github.com/abdullahoztuurkk/DevPortfolio.git
52 |
53 | # Go into the repository
54 | $ cd DevPortfolio
55 |
56 | # Install dependencies
57 | $ npm install
58 |
59 | #Start's development server
60 | $ npm start
61 | ```
62 |
63 |
64 | ## Change and customize every section according to your need.
65 |
66 | #### Personalize page content in `/src/app/portfolio.ts` & modify it as per your need.
67 |
68 | ```typescript
69 | /* Change this file to get your Personal Porfolio */
70 |
71 | export const Configuration =
72 |
73 | {
74 |
75 | profileUrl:"https://images.pexels.com/photos/2269872/pexels-photo-2269872.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=750&w=1260",
76 |
77 | userName:"Abdullah Öztürk",
78 |
79 | userJob:"Software Developer",
80 |
81 | userLocation:"İstanbul",
82 |
83 | .
84 | .
85 | .
86 | .
87 |
88 | };
89 | export const Skills =[ . . . ];
90 |
91 | export const JobExperience =[ . . . ];
92 |
93 | export const Education =[ . . . ];
94 |
95 | export const Services =[ . . .];
96 |
97 | export const Testimonials =[ . . . ];
98 |
99 | export const SocialMedia =
100 |
101 | {
102 |
103 | github:"github.com",
104 |
105 | instagram:"instagram.com",
106 |
107 | twitter:"twitter.com",
108 |
109 | linkedin:"linkedin.com",
110 |
111 | medium:"medium.com",
112 |
113 | facebook:"facebook.com"
114 |
115 | }
116 | ```
117 |
118 | ## Contributing
119 | Just change `src/app/configurations.ts` to get your personal portfolio. Feel free to use it as-is or customize it as much as you want.
120 |
121 | But if you want to **contribute** and make this much better for other developer have a look at [Issues](https://github.com/abdullahoztuurkk/devportfolio/issues).
122 |
123 |
124 | If you created something awesome and want to contribute then feel free to open an [pull request](https://github.com/abdullahoztuurkk/devportfolio/pulls).
125 | - Fork the project
126 | - Create a new branch (git checkout -b your-branch)
127 | - Create your new changes then commit your changes (git add . && git commit -n "New changes/issues")
128 | - Push your branch to the project (git push origin your-branch)
129 | - Submit your pull request
130 |
131 | ## Technologies Used
132 |
133 | - [Angular](https://reactjs.org/)
134 | - [Bootstrap](https://www.apollographql.com/docs/react/get-started/)
135 | - [Font-awesome](https://github.com/saurabhnemade/react-twitter-embed)
136 | - [Bootswatch](https://github.com/appfigures/react-easy-emoji)
137 |
138 | ## License
139 |
140 | This project is licensed under the MIT License - see the [LICENSE](https://github.com/AbdullahOztuurkk/angular-dev-portfolio/blob/master/LICENSE.md) file for details.
141 |
142 |
143 |
--------------------------------------------------------------------------------
/angular.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "./node_modules/@angular/cli/lib/config/schema.json",
3 | "version": 1,
4 | "newProjectRoot": "projects",
5 | "projects": {
6 | "portfolio": {
7 | "projectType": "application",
8 | "schematics": {},
9 | "root": "",
10 | "sourceRoot": "src",
11 | "prefix": "app",
12 | "architect": {
13 | "build": {
14 | "builder": "@angular-devkit/build-angular:browser",
15 | "options": {
16 | "outputPath": "dist/portfolio",
17 | "index": "src/index.html",
18 | "main": "src/main.ts",
19 | "polyfills": "src/polyfills.ts",
20 | "tsConfig": "tsconfig.app.json",
21 | "aot": true,
22 | "assets": [
23 | "src/favicon.ico",
24 | "src/assets"
25 | ],
26 | "styles": [
27 | "src/styles.css",
28 | "node_modules/bootstrap/dist/css/bootstrap.min.css",
29 | "node_modules/font-awesome/css/font-awesome.min.css",
30 | "node_modules/bootswatch/dist/minty/bootstrap.min.css"
31 | ],
32 | "scripts": [
33 | "node_modules/jquery/dist/jquery.min.js"
34 | ]
35 | },
36 | "configurations": {
37 | "production": {
38 | "fileReplacements": [
39 | {
40 | "replace": "src/environments/environment.ts",
41 | "with": "src/environments/environment.prod.ts"
42 | }
43 | ],
44 | "optimization": true,
45 | "outputHashing": "all",
46 | "sourceMap": false,
47 | "extractCss": true,
48 | "namedChunks": false,
49 | "extractLicenses": true,
50 | "vendorChunk": false,
51 | "buildOptimizer": true,
52 | "budgets": [
53 | {
54 | "type": "initial",
55 | "maximumWarning": "2mb",
56 | "maximumError": "5mb"
57 | },
58 | {
59 | "type": "anyComponentStyle",
60 | "maximumWarning": "6kb",
61 | "maximumError": "10kb"
62 | }
63 | ]
64 | }
65 | }
66 | },
67 | "serve": {
68 | "builder": "@angular-devkit/build-angular:dev-server",
69 | "options": {
70 | "browserTarget": "portfolio:build"
71 | },
72 | "configurations": {
73 | "production": {
74 | "browserTarget": "portfolio:build:production"
75 | }
76 | }
77 | },
78 | "extract-i18n": {
79 | "builder": "@angular-devkit/build-angular:extract-i18n",
80 | "options": {
81 | "browserTarget": "portfolio:build"
82 | }
83 | },
84 | "test": {
85 | "builder": "@angular-devkit/build-angular:karma",
86 | "options": {
87 | "main": "src/test.ts",
88 | "polyfills": "src/polyfills.ts",
89 | "tsConfig": "tsconfig.spec.json",
90 | "karmaConfig": "karma.conf.js",
91 | "assets": [
92 | "src/favicon.ico",
93 | "src/assets"
94 | ],
95 | "styles": [
96 | "src/styles.css"
97 | ],
98 | "scripts": []
99 | }
100 | },
101 | "lint": {
102 | "builder": "@angular-devkit/build-angular:tslint",
103 | "options": {
104 | "tsConfig": [
105 | "tsconfig.app.json",
106 | "tsconfig.spec.json",
107 | "e2e/tsconfig.json"
108 | ],
109 | "exclude": [
110 | "**/node_modules/**"
111 | ]
112 | }
113 | },
114 | "e2e": {
115 | "builder": "@angular-devkit/build-angular:protractor",
116 | "options": {
117 | "protractorConfig": "e2e/protractor.conf.js",
118 | "devServerTarget": "portfolio:serve"
119 | },
120 | "configurations": {
121 | "production": {
122 | "devServerTarget": "portfolio:serve:production"
123 | }
124 | }
125 | }
126 | }
127 | }},
128 | "defaultProject": "portfolio"
129 | }
130 |
--------------------------------------------------------------------------------
/browserslist:
--------------------------------------------------------------------------------
1 | # This file is used by the build system to adjust CSS and JS output to support the specified browsers below.
2 | # For additional information regarding the format and rule options, please see:
3 | # https://github.com/browserslist/browserslist#queries
4 |
5 | # You can see what browsers were selected by your queries by running:
6 | # npx browserslist
7 |
8 | > 0.5%
9 | last 2 versions
10 | Firefox ESR
11 | not dead
12 | not IE 9-11 # For IE 9-11 support, remove 'not'.
--------------------------------------------------------------------------------
/debug.log:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AbdullahOztuurkk/angular-dev-portfolio/0d6bf2d04fca0e59acc97e1db5c9fad1cdbf46fc/debug.log
--------------------------------------------------------------------------------
/e2e/protractor.conf.js:
--------------------------------------------------------------------------------
1 | // @ts-check
2 | // Protractor configuration file, see link for more information
3 | // https://github.com/angular/protractor/blob/master/lib/config.ts
4 |
5 | const { SpecReporter } = require('jasmine-spec-reporter');
6 |
7 | /**
8 | * @type { import("protractor").Config }
9 | */
10 | exports.config = {
11 | allScriptsTimeout: 11000,
12 | specs: [
13 | './src/**/*.e2e-spec.ts'
14 | ],
15 | capabilities: {
16 | browserName: 'chrome'
17 | },
18 | directConnect: true,
19 | baseUrl: 'http://localhost:4200/',
20 | framework: 'jasmine',
21 | jasmineNodeOpts: {
22 | showColors: true,
23 | defaultTimeoutInterval: 30000,
24 | print: function() {}
25 | },
26 | onPrepare() {
27 | require('ts-node').register({
28 | project: require('path').join(__dirname, './tsconfig.json')
29 | });
30 | jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } }));
31 | }
32 | };
--------------------------------------------------------------------------------
/e2e/src/app.e2e-spec.ts:
--------------------------------------------------------------------------------
1 | import { AppPage } from './app.po';
2 | import { browser, logging } from 'protractor';
3 |
4 | describe('workspace-project App', () => {
5 | let page: AppPage;
6 |
7 | beforeEach(() => {
8 | page = new AppPage();
9 | });
10 |
11 | it('should display welcome message', () => {
12 | page.navigateTo();
13 | expect(page.getTitleText()).toEqual('portfolio app is running!');
14 | });
15 |
16 | afterEach(async () => {
17 | // Assert that there are no errors emitted from the browser
18 | const logs = await browser.manage().logs().get(logging.Type.BROWSER);
19 | expect(logs).not.toContain(jasmine.objectContaining({
20 | level: logging.Level.SEVERE,
21 | } as logging.Entry));
22 | });
23 | });
24 |
--------------------------------------------------------------------------------
/e2e/src/app.po.ts:
--------------------------------------------------------------------------------
1 | import { browser, by, element } from 'protractor';
2 |
3 | export class AppPage {
4 | navigateTo(): Promise {
5 | return browser.get(browser.baseUrl) as Promise;
6 | }
7 |
8 | getTitleText(): Promise {
9 | return element(by.css('app-root .content span')).getText() as Promise;
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/e2e/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../tsconfig.json",
3 | "compilerOptions": {
4 | "outDir": "../out-tsc/e2e",
5 | "module": "commonjs",
6 | "target": "es5",
7 | "types": [
8 | "jasmine",
9 | "jasminewd2",
10 | "node"
11 | ]
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/firebase.json:
--------------------------------------------------------------------------------
1 | {
2 | "hosting": {
3 | "public": "dist/portfolio",
4 | "ignore": [
5 | "firebase.json",
6 | "**/.*",
7 | "**/node_modules/**"
8 | ],
9 | "rewrites": [
10 | {
11 | "source": "**",
12 | "destination": "/index.html"
13 | }
14 | ]
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/karma.conf.js:
--------------------------------------------------------------------------------
1 | // Karma configuration file, see link for more information
2 | // https://karma-runner.github.io/1.0/config/configuration-file.html
3 |
4 | module.exports = function (config) {
5 | config.set({
6 | basePath: '',
7 | frameworks: ['jasmine', '@angular-devkit/build-angular'],
8 | plugins: [
9 | require('karma-jasmine'),
10 | require('karma-chrome-launcher'),
11 | require('karma-jasmine-html-reporter'),
12 | require('karma-coverage-istanbul-reporter'),
13 | require('@angular-devkit/build-angular/plugins/karma')
14 | ],
15 | client: {
16 | clearContext: false // leave Jasmine Spec Runner output visible in browser
17 | },
18 | coverageIstanbulReporter: {
19 | dir: require('path').join(__dirname, './coverage/portfolio'),
20 | reports: ['html', 'lcovonly', 'text-summary'],
21 | fixWebpackSourcePaths: true
22 | },
23 | reporters: ['progress', 'kjhtml'],
24 | port: 9876,
25 | colors: true,
26 | logLevel: config.LOG_INFO,
27 | autoWatch: true,
28 | browsers: ['Chrome'],
29 | singleRun: false,
30 | restartOnFileChange: true
31 | });
32 | };
33 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "portfolio",
3 | "version": "0.0.0",
4 | "scripts": {
5 | "ng": "ng",
6 | "start": "ng serve",
7 | "build": "ng build",
8 | "test": "ng test",
9 | "lint": "ng lint",
10 | "e2e": "ng e2e"
11 | },
12 | "private": true,
13 | "dependencies": {
14 | "@angular/animations": "~9.1.11",
15 | "@angular/common": "~9.1.11",
16 | "@angular/compiler": "~9.1.11",
17 | "@angular/core": "~9.1.11",
18 | "@angular/forms": "~9.1.11",
19 | "@angular/platform-browser": "~9.1.11",
20 | "@angular/platform-browser-dynamic": "~9.1.11",
21 | "@angular/router": "~9.1.11",
22 | "bootstrap": "^4.5.3",
23 | "bootswatch": "^4.5.3",
24 | "font-awesome": "^4.7.0",
25 | "jquery": "^3.5.1",
26 | "rxjs": "~6.5.4",
27 | "tslib": "^1.10.0",
28 | "zone.js": "~0.10.2"
29 | },
30 | "devDependencies": {
31 | "@angular-devkit/build-angular": "~0.901.8",
32 | "@angular/cli": "~9.1.8",
33 | "@angular/compiler-cli": "~9.1.11",
34 | "@types/node": "^12.11.1",
35 | "@types/jasmine": "~3.5.0",
36 | "@types/jasminewd2": "~2.0.3",
37 | "codelyzer": "^5.1.2",
38 | "jasmine-core": "~3.5.0",
39 | "jasmine-spec-reporter": "~4.2.1",
40 | "karma": "~5.0.0",
41 | "karma-chrome-launcher": "~3.1.0",
42 | "karma-coverage-istanbul-reporter": "~2.1.0",
43 | "karma-jasmine": "~3.0.1",
44 | "karma-jasmine-html-reporter": "^1.4.2",
45 | "protractor": "~7.0.0",
46 | "ts-node": "~8.3.0",
47 | "tslint": "~6.1.0",
48 | "typescript": "~3.8.3"
49 | }
50 | }
51 |
--------------------------------------------------------------------------------
/src/app/About/About.component.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
Hello , I Am
4 |
5 |
8 |
9 |
10 |
11 |
12 |
13 |
My Skills
14 |
15 |
27 |
28 |
29 |

30 |
31 |
32 |
--------------------------------------------------------------------------------
/src/app/About/About.component.scss:
--------------------------------------------------------------------------------
1 | .about-top {
2 | width: 100%;
3 | height: 35%;
4 | background: rgba(196, 196, 196, 0.3);
5 | border-radius: 0px 0px 45% 15%;
6 | }
7 | .about-title {
8 | font-family: "Inter", sans-serif;
9 | margin-top: 18px;
10 | line-height: 30px;
11 | text-align: center;
12 | color: #000000;
13 | }
14 | .about-desc {
15 | margin: 0px 50px 0px 50px;
16 | font-family: "Inter", sans-serif;
17 | text-justify: auto;
18 | font-size: 1vw;
19 | line-height: 35px;
20 | text-indent: 5%;
21 | color: #000000;
22 | }
23 | .about-content{
24 | width: 100%;
25 | height: 55%;
26 | }
27 | .about-svg{
28 | width: 300px;
29 | height: 550px;
30 | }
31 | .skill-box{
32 | width: 100px;
33 | height: 30px;
34 | background: rgba(196, 196, 196, 0.3);
35 | box-shadow: 0px 4px 4px 1px rgba(0, 0, 0, 0.25);
36 | font-family: "Inter", sans-serif;
37 | text-align: center;
38 | padding: 2px 4px;
39 | margin: 10px;
40 | color: black;
41 | float:left;
42 | }
--------------------------------------------------------------------------------
/src/app/About/About.component.spec.ts:
--------------------------------------------------------------------------------
1 | /* tslint:disable:no-unused-variable */
2 | import { async, ComponentFixture, TestBed } from '@angular/core/testing';
3 | import { By } from '@angular/platform-browser';
4 | import { DebugElement } from '@angular/core';
5 |
6 | import { AboutComponent } from './About.component';
7 |
8 | describe('AboutComponent', () => {
9 | let component: AboutComponent;
10 | let fixture: ComponentFixture;
11 |
12 | beforeEach(async(() => {
13 | TestBed.configureTestingModule({
14 | declarations: [ AboutComponent ]
15 | })
16 | .compileComponents();
17 | }));
18 |
19 | beforeEach(() => {
20 | fixture = TestBed.createComponent(AboutComponent);
21 | component = fixture.componentInstance;
22 | fixture.detectChanges();
23 | });
24 |
25 | it('should create', () => {
26 | expect(component).toBeTruthy();
27 | });
28 | });
29 |
--------------------------------------------------------------------------------
/src/app/About/About.component.ts:
--------------------------------------------------------------------------------
1 | import { Configuration, Skills } from './../configuration';
2 | import { Component, OnInit } from '@angular/core';
3 |
4 | @Component({
5 | selector: 'app-About',
6 | templateUrl: './About.component.html',
7 | styleUrls: ['./About.component.scss']
8 | })
9 | export class AboutComponent implements OnInit {
10 |
11 | aboutMe:string;
12 | skills:any;
13 | constructor() {
14 | this.aboutMe=Configuration.aboutMe;
15 | this.skills=Skills;
16 | }
17 |
18 | ngOnInit() {
19 | }
20 |
21 | }
22 |
--------------------------------------------------------------------------------
/src/app/Contact/Contact.component.css:
--------------------------------------------------------------------------------
1 | .contact-card{
2 | width: 100%;
3 | text-align: center;
4 | height: 250px;
5 | font-family: 'Inter',sans-serif;
6 | }
7 | .contact-image{
8 | width: 370px;
9 | height: 320px;
10 | display: block;
11 | margin: auto;
12 | padding-bottom: 40px;
13 | }
14 | .contact-card>form>h4{
15 | font-family: 'Inter',sans-serif;
16 | }
17 |
--------------------------------------------------------------------------------
/src/app/Contact/Contact.component.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |

5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/src/app/Contact/Contact.component.spec.ts:
--------------------------------------------------------------------------------
1 | /* tslint:disable:no-unused-variable */
2 | import { async, ComponentFixture, TestBed } from '@angular/core/testing';
3 | import { By } from '@angular/platform-browser';
4 | import { DebugElement } from '@angular/core';
5 |
6 | import { ContactComponent } from './Contact.component';
7 |
8 | describe('ContactComponent', () => {
9 | let component: ContactComponent;
10 | let fixture: ComponentFixture;
11 |
12 | beforeEach(async(() => {
13 | TestBed.configureTestingModule({
14 | declarations: [ ContactComponent ]
15 | })
16 | .compileComponents();
17 | }));
18 |
19 | beforeEach(() => {
20 | fixture = TestBed.createComponent(ContactComponent);
21 | component = fixture.componentInstance;
22 | fixture.detectChanges();
23 | });
24 |
25 | it('should create', () => {
26 | expect(component).toBeTruthy();
27 | });
28 | });
29 |
--------------------------------------------------------------------------------
/src/app/Contact/Contact.component.ts:
--------------------------------------------------------------------------------
1 | import { Configuration } from './../configuration';
2 | import { Component, OnInit } from '@angular/core';
3 |
4 | @Component({
5 | selector: 'app-Contact',
6 | templateUrl: './Contact.component.html',
7 | styleUrls: ['./Contact.component.css']
8 | })
9 | export class ContactComponent implements OnInit {
10 |
11 | _userAddress:string;
12 | _userPhone:string;
13 | _userEmail:string;
14 | constructor() {
15 | this._userAddress=Configuration.userAddress;
16 | this._userPhone=Configuration.userPhone;
17 | this._userEmail=Configuration.userEmail;
18 | }
19 |
20 | ngOnInit() {
21 |
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/src/app/Nav/Nav.component.html:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/app/Nav/Nav.component.scss:
--------------------------------------------------------------------------------
1 | .nav-link{
2 | font-family: 'Inter',sans-serif;
3 | text-decoration: none;
4 | }
--------------------------------------------------------------------------------
/src/app/Nav/Nav.component.spec.ts:
--------------------------------------------------------------------------------
1 | /* tslint:disable:no-unused-variable */
2 | import { async, ComponentFixture, TestBed } from '@angular/core/testing';
3 | import { By } from '@angular/platform-browser';
4 | import { DebugElement } from '@angular/core';
5 |
6 | import { NavComponent } from './Nav.component';
7 |
8 | describe('NavComponent', () => {
9 | let component: NavComponent;
10 | let fixture: ComponentFixture;
11 |
12 | beforeEach(async(() => {
13 | TestBed.configureTestingModule({
14 | declarations: [ NavComponent ]
15 | })
16 | .compileComponents();
17 | }));
18 |
19 | beforeEach(() => {
20 | fixture = TestBed.createComponent(NavComponent);
21 | component = fixture.componentInstance;
22 | fixture.detectChanges();
23 | });
24 |
25 | it('should create', () => {
26 | expect(component).toBeTruthy();
27 | });
28 | });
29 |
--------------------------------------------------------------------------------
/src/app/Nav/Nav.component.ts:
--------------------------------------------------------------------------------
1 | import { Component, OnInit } from '@angular/core';
2 |
3 | @Component({
4 | selector: 'app-Nav',
5 | templateUrl: './Nav.component.html',
6 | styleUrls: ['./Nav.component.scss']
7 | })
8 | export class NavComponent implements OnInit {
9 |
10 | constructor() { }
11 |
12 | ngOnInit() {
13 | }
14 |
15 | }
16 |
--------------------------------------------------------------------------------
/src/app/Profile/Profile.component.css:
--------------------------------------------------------------------------------
1 | .profile-icon{
2 | height: 30px;
3 | width: 30px;
4 | color:black;
5 | padding: 2px;
6 | text-align: center;
7 | }
8 | .social-media{
9 | margin:20px 0px 0px 0px;
10 | text-align: center;
11 | font-family: "Inter", sans-serif;
12 | border: 1px solid lightgray;
13 | border-radius: 10px;
14 | padding: 5px;
15 | }
16 | .about-me>p>i{
17 | margin-bottom:5px;
18 | margin-right: 5px;
19 | width: 30px;
20 | }
21 | .about-me>p{
22 | font-size: 0.7vw;
23 | }
24 | .container-fluid{
25 | margin-left: -15px !important;
26 | }
27 | .text-center{
28 | font-family: "Inter", sans-serif !important;
29 | }
--------------------------------------------------------------------------------
/src/app/Profile/Profile.component.html:
--------------------------------------------------------------------------------
1 |
2 | {{_userName}}
3 | {{_userJob}}
4 |
5 |
6 |
{{_userLocation}}
7 |
8 |
{{_userEmail}}
9 |
10 |
{{_userDateOfBirth}}
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/src/app/Profile/Profile.component.spec.ts:
--------------------------------------------------------------------------------
1 | /* tslint:disable:no-unused-variable */
2 | import { async, ComponentFixture, TestBed } from '@angular/core/testing';
3 | import { By } from '@angular/platform-browser';
4 | import { DebugElement } from '@angular/core';
5 |
6 | import { ProfileComponent } from './Profile.component';
7 |
8 | describe('ProfileComponent', () => {
9 | let component: ProfileComponent;
10 | let fixture: ComponentFixture;
11 |
12 | beforeEach(async(() => {
13 | TestBed.configureTestingModule({
14 | declarations: [ ProfileComponent ]
15 | })
16 | .compileComponents();
17 | }));
18 |
19 | beforeEach(() => {
20 | fixture = TestBed.createComponent(ProfileComponent);
21 | component = fixture.componentInstance;
22 | fixture.detectChanges();
23 | });
24 |
25 | it('should create', () => {
26 | expect(component).toBeTruthy();
27 | });
28 | });
29 |
--------------------------------------------------------------------------------
/src/app/Profile/Profile.component.ts:
--------------------------------------------------------------------------------
1 | import { SocialMedia } from './../configuration';
2 | import { Component, OnInit } from '@angular/core';
3 | import { Configuration } from '../configuration';
4 |
5 | @Component({
6 | selector: 'app-Profile',
7 | templateUrl: './Profile.component.html',
8 | styleUrls: ['./Profile.component.css']
9 | })
10 | export class ProfileComponent implements OnInit {
11 |
12 | _profileUrl:string;
13 | _userName:string;
14 | _userJob:string;
15 | _userLocation:string;
16 | _userEmail:string;
17 | _userDateOfBirth:string;
18 | _github:string;
19 | _linkedin:string;
20 | _instagram:string;
21 | _twitter:string;
22 | _medium:string;
23 | _facebook:string;
24 | constructor() {
25 | this._profileUrl=Configuration.profileUrl;
26 | this._github=SocialMedia.github;
27 | this._instagram=SocialMedia.instagram;
28 | this._facebook=SocialMedia.facebook;
29 | this._twitter=SocialMedia.twitter;
30 | this._linkedin=SocialMedia.linkedin;
31 | this._medium=SocialMedia.medium;
32 | this._userName=Configuration.userName;
33 | this._userJob=Configuration.userJob;
34 | this._userLocation=Configuration.userLocation;
35 | this._userDateOfBirth=Configuration.userDateOfBirth;
36 | this._userEmail=Configuration.userEmail;
37 | }
38 |
39 | ngOnInit() {
40 | }
41 |
42 | }
43 |
--------------------------------------------------------------------------------
/src/app/Resume/Resume.component.css:
--------------------------------------------------------------------------------
1 | .container {
2 | display: flex;
3 | width: 100%;
4 | height: 600px;
5 | justify-content: center;
6 | align-items: center;
7 | }
8 | h4{
9 | font-family: 'Inter', sans-serif;
10 | }
11 | .resume-card{
12 | width: 320px;
13 | min-height: 125px;
14 | height: 100%;
15 | /*margin: 0px 15px;*/
16 | }
17 | .resume-icon{
18 | height: 100%;
19 | width: 25px;
20 | color:green;
21 | }
22 | .icon-text{
23 | margin-left: 0px;
24 | margin-top: -20px;
25 | float: left;
26 | }
27 | .middle-line{
28 | border-right: 1px solid lightgray;
29 | }
30 | .resume-card-title{
31 | color: black !important;
32 | font-family: 'Inter', sans-serif;
33 | min-height: 150px !important;
34 | }
35 | .resume-title{
36 | color: blue !important;
37 | font-family: 'Inter', sans-serif;
38 | min-height: 150px !important;
39 | }
40 | .img-fluid{
41 | width: 300px;
42 | height: 200px;
43 | }
--------------------------------------------------------------------------------
/src/app/Resume/Resume.component.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |

4 |
Experiences
5 |
6 |
7 |
8 | {{item.company}} ( {{item.date}} )
9 |
10 |
{{item.rank}}
11 |
{{item.description}}
12 |
13 |
14 |
15 |
16 |

17 |
Educations
18 |
19 |
20 |
21 | {{item.school}}
22 |
23 |
{{item.date}}
24 |
{{item.description}}
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/src/app/Resume/Resume.component.spec.ts:
--------------------------------------------------------------------------------
1 | /* tslint:disable:no-unused-variable */
2 | import { async, ComponentFixture, TestBed } from '@angular/core/testing';
3 | import { By } from '@angular/platform-browser';
4 | import { DebugElement } from '@angular/core';
5 |
6 | import { ResumeComponent } from './Resume.component';
7 |
8 | describe('ResumeComponent', () => {
9 | let component: ResumeComponent;
10 | let fixture: ComponentFixture;
11 |
12 | beforeEach(async(() => {
13 | TestBed.configureTestingModule({
14 | declarations: [ ResumeComponent ]
15 | })
16 | .compileComponents();
17 | }));
18 |
19 | beforeEach(() => {
20 | fixture = TestBed.createComponent(ResumeComponent);
21 | component = fixture.componentInstance;
22 | fixture.detectChanges();
23 | });
24 |
25 | it('should create', () => {
26 | expect(component).toBeTruthy();
27 | });
28 | });
29 |
--------------------------------------------------------------------------------
/src/app/Resume/Resume.component.ts:
--------------------------------------------------------------------------------
1 | import { JobExperience, Education } from './../configuration';
2 | import { Component, OnInit } from '@angular/core';
3 |
4 | @Component({
5 | selector: 'app-Resume',
6 | templateUrl: './Resume.component.html',
7 | styleUrls: ['./Resume.component.css']
8 | })
9 | export class ResumeComponent implements OnInit {
10 |
11 | _jobs:any;
12 | _educations;
13 | constructor() {
14 | this._jobs=JobExperience;
15 | this._educations=Education;
16 | }
17 |
18 | ngOnInit() {
19 | }
20 |
21 | }
22 |
--------------------------------------------------------------------------------
/src/app/Services/Services.component.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | {{item.serviceName}}
7 |
8 |
9 |
{{item.description}}
10 |
11 |
12 |

13 |
14 |
15 |
16 |
17 |
18 | {{item.serviceName}}
19 |
20 |
21 |
{{item.description}}
22 |
23 |
24 |

25 |
26 |
27 |
--------------------------------------------------------------------------------
/src/app/Services/Services.component.scss:
--------------------------------------------------------------------------------
1 | .container {
2 | width: 100%;
3 | height: 600px;
4 | justify-content: center;
5 | align-items: center;
6 | }
7 | .service-card {
8 | width: 320px;
9 | min-height: 125px;
10 | font-family: 'Inter', sans-serif;
11 | height: 100%;
12 | /*margin: 0px 15px;*/
13 | }
14 | .service-icon {
15 | height: 100%;
16 | width: 25px;
17 | color: blue;
18 | }
19 | .icon-text {
20 | margin-left: 0px;
21 | margin-top: -20px;
22 | float: left;
23 | }
24 | .middle-line {
25 | border-right: 1px solid lightgray;
26 | }
27 | .service-card-title {
28 | color: black;
29 | font-family: 'Inter', sans-serif;
30 | min-height: 150px !important;
31 | }
32 | .service-image{
33 | width: 300px;
34 | height: 300px;
35 | padding-bottom: 40px;
36 | padding-left: 20px;
37 | }
38 | .col{
39 | align-self: flex-end;
40 | }
--------------------------------------------------------------------------------
/src/app/Services/Services.component.spec.ts:
--------------------------------------------------------------------------------
1 | /* tslint:disable:no-unused-variable */
2 | import { async, ComponentFixture, TestBed } from '@angular/core/testing';
3 | import { By } from '@angular/platform-browser';
4 | import { DebugElement } from '@angular/core';
5 |
6 | import { ServicesComponent } from './Services.component';
7 |
8 | describe('ServicesComponent', () => {
9 | let component: ServicesComponent;
10 | let fixture: ComponentFixture;
11 |
12 | beforeEach(async(() => {
13 | TestBed.configureTestingModule({
14 | declarations: [ ServicesComponent ]
15 | })
16 | .compileComponents();
17 | }));
18 |
19 | beforeEach(() => {
20 | fixture = TestBed.createComponent(ServicesComponent);
21 | component = fixture.componentInstance;
22 | fixture.detectChanges();
23 | });
24 |
25 | it('should create', () => {
26 | expect(component).toBeTruthy();
27 | });
28 | });
29 |
--------------------------------------------------------------------------------
/src/app/Services/Services.component.ts:
--------------------------------------------------------------------------------
1 | import { Services } from './../configuration';
2 | import { Component, OnInit } from '@angular/core';
3 |
4 | @Component({
5 | selector: 'app-Services',
6 | templateUrl: './Services.component.html',
7 | styleUrls: ['./Services.component.scss']
8 | })
9 | export class ServicesComponent implements OnInit {
10 |
11 | _services:any;
12 | constructor() {
13 | this._services=Services;
14 | }
15 |
16 | ngOnInit() {
17 | }
18 |
19 | }
20 |
--------------------------------------------------------------------------------
/src/app/Testimonials/Testimonials.component.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | {{item.description}}
7 |
8 |
9 |
10 | {{item.name}} - {{item.company}}
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 | {{item.description}}
20 |
21 |
22 |
23 | {{item.name}} - {{item.company}}
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |

32 |
33 |
--------------------------------------------------------------------------------
/src/app/Testimonials/Testimonials.component.scss:
--------------------------------------------------------------------------------
1 | .container {
2 | display: flex;
3 | width: 100%;
4 | height: 600px;
5 | justify-content: center;
6 | align-items: center;
7 | }
8 | .testimonial-icon {
9 | height: 100%;
10 | width: 100px;
11 | }
12 | .icon-text {
13 | color: blue;
14 | margin-left: 20px;
15 | margin-top: -20px;
16 | float: left;
17 | }
18 | .testimonial-card {
19 | width: 320px;
20 | height: 130px;
21 | background-color: #f1ebeb;
22 | margin: 20px 0px;
23 | padding: 10px;
24 | border-radius: 13px;
25 | }
26 | .testimonial-text {
27 | font-family: 'Inter', sans-serif;
28 | font-size: small;
29 | color: #000000;
30 | }
31 | .testimonial-image{
32 | width: 370px;
33 | height: 370px;
34 | display: block;
35 | margin: auto;
36 | padding-bottom: 40px;
37 | padding-left: 20px;
38 | }
--------------------------------------------------------------------------------
/src/app/Testimonials/Testimonials.component.spec.ts:
--------------------------------------------------------------------------------
1 | /* tslint:disable:no-unused-variable */
2 | import { async, ComponentFixture, TestBed } from '@angular/core/testing';
3 | import { By } from '@angular/platform-browser';
4 | import { DebugElement } from '@angular/core';
5 |
6 | import { TestimonialsComponent } from './Testimonials.component';
7 |
8 | describe('TestimonialsComponent', () => {
9 | let component: TestimonialsComponent;
10 | let fixture: ComponentFixture;
11 |
12 | beforeEach(async(() => {
13 | TestBed.configureTestingModule({
14 | declarations: [ TestimonialsComponent ]
15 | })
16 | .compileComponents();
17 | }));
18 |
19 | beforeEach(() => {
20 | fixture = TestBed.createComponent(TestimonialsComponent);
21 | component = fixture.componentInstance;
22 | fixture.detectChanges();
23 | });
24 |
25 | it('should create', () => {
26 | expect(component).toBeTruthy();
27 | });
28 | });
29 |
--------------------------------------------------------------------------------
/src/app/Testimonials/Testimonials.component.ts:
--------------------------------------------------------------------------------
1 | import { Component, OnInit } from '@angular/core';
2 | import { Testimonials } from '../configuration';
3 |
4 | @Component({
5 | selector: 'app-Testimonials',
6 | templateUrl: './Testimonials.component.html',
7 | styleUrls: ['./Testimonials.component.scss']
8 | })
9 | export class TestimonialsComponent implements OnInit {
10 |
11 | _testimonials:any;
12 | constructor() {
13 | this._testimonials=Testimonials;
14 | }
15 |
16 | ngOnInit() {
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/src/app/app.component.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AbdullahOztuurkk/angular-dev-portfolio/0d6bf2d04fca0e59acc97e1db5c9fad1cdbf46fc/src/app/app.component.css
--------------------------------------------------------------------------------
/src/app/app.component.html:
--------------------------------------------------------------------------------
1 |
18 |
23 |
24 |
--------------------------------------------------------------------------------
/src/app/app.component.spec.ts:
--------------------------------------------------------------------------------
1 | import { TestBed, async } from '@angular/core/testing';
2 | import { AppComponent } from './app.component';
3 |
4 | describe('AppComponent', () => {
5 | beforeEach(async(() => {
6 | TestBed.configureTestingModule({
7 | declarations: [
8 | AppComponent
9 | ],
10 | }).compileComponents();
11 | }));
12 |
13 | it('should create the app', () => {
14 | const fixture = TestBed.createComponent(AppComponent);
15 | const app = fixture.componentInstance;
16 | expect(app).toBeTruthy();
17 | });
18 |
19 | it(`should have as title 'portfolio'`, () => {
20 | const fixture = TestBed.createComponent(AppComponent);
21 | const app = fixture.componentInstance;
22 | expect(app.title).toEqual('portfolio');
23 | });
24 |
25 | it('should render title', () => {
26 | const fixture = TestBed.createComponent(AppComponent);
27 | fixture.detectChanges();
28 | const compiled = fixture.nativeElement;
29 | expect(compiled.querySelector('.content span').textContent).toContain('portfolio app is running!');
30 | });
31 | });
32 |
--------------------------------------------------------------------------------
/src/app/app.component.ts:
--------------------------------------------------------------------------------
1 | import { Component } from '@angular/core';
2 |
3 | @Component({
4 | selector: 'app-root',
5 | templateUrl: './app.component.html',
6 | styleUrls: ['./app.component.css']
7 | })
8 | export class AppComponent {
9 | title = 'portfolio';
10 | }
11 |
--------------------------------------------------------------------------------
/src/app/app.module.ts:
--------------------------------------------------------------------------------
1 | import { BrowserModule } from '@angular/platform-browser';
2 | import { NgModule } from '@angular/core';
3 |
4 | import { AppComponent } from './app.component';
5 | import { AboutComponent } from './About/About.component';
6 | import { RouterModule } from '@angular/router';
7 | import { AppRoutes } from './appRoutes';
8 | import { ProfileComponent } from './Profile/Profile.component';
9 | import { NavComponent } from './Nav/Nav.component';
10 | import { ContactComponent } from './Contact/Contact.component';
11 | import { ServicesComponent } from './Services/Services.component';
12 | import { TestimonialsComponent } from './Testimonials/Testimonials.component';
13 | import { ResumeComponent } from './Resume/Resume.component';
14 |
15 | @NgModule({
16 | declarations: [
17 | AppComponent,
18 | AboutComponent,
19 | ProfileComponent,
20 | NavComponent,
21 | ContactComponent,
22 | ServicesComponent,
23 | TestimonialsComponent,
24 | ResumeComponent
25 | ],
26 | imports: [
27 | BrowserModule,
28 | RouterModule.forRoot(AppRoutes),
29 | ],
30 | providers: [],
31 | bootstrap: [AppComponent]
32 | })
33 | export class AppModule { }
34 |
--------------------------------------------------------------------------------
/src/app/appRoutes.ts:
--------------------------------------------------------------------------------
1 | import { ResumeComponent } from './Resume/Resume.component';
2 | import { ServicesComponent } from './Services/Services.component';
3 | import { TestimonialsComponent } from './Testimonials/Testimonials.component';
4 | import { ContactComponent } from './Contact/Contact.component';
5 | import { AboutComponent } from './About/About.component';
6 | import { Routes } from '@angular/router';
7 |
8 | export const AppRoutes:Routes =[
9 | {path:"about" , component:AboutComponent},
10 | {path:"testimonials" , component:TestimonialsComponent},
11 | {path:"services" , component:ServicesComponent},
12 | {path:"contact" , component:ContactComponent},
13 | {path:"resume" , component:ResumeComponent},
14 | {path:"**",component:AboutComponent,pathMatch:"full"},
15 | ]
16 |
--------------------------------------------------------------------------------
/src/app/configuration.ts:
--------------------------------------------------------------------------------
1 | export const Configuration =
2 | {
3 | profileUrl:"https://avatars2.githubusercontent.com/u/54680491?s=460&u=8d75b0e5a475bc8cd6f94aa5612e2b86faff6207&v=4",
4 | userName:"Abdullah Öztürk",
5 | userJob:"Software Developer",
6 | userLocation:"İstanbul",
7 | userEmail:"oabdullahozturk@yandex.com",
8 | userDateOfBirth:"12/09/1998",
9 | userAddress:"Bahçelievler / Istanbul",
10 | userPhone:"(555) 123 4567",
11 | aboutMe:"Abdullah Öztürk. I am fullstack developer and blogger. I interested in .net technologies for backend and angular for frontend. You can read my articles on medium.",
12 | };
13 |
14 | //Personal Informations
15 |
16 | export const Skills =
17 | [
18 | "C#",".Net Core","Angular","Asp.Net","Typescript","Javascript"
19 | ];
20 |
21 | //Max skills limit is 6 . If you add more than 6 skill , you may be disappointed.
22 |
23 | export const JobExperience =
24 | [
25 | {company : "IBM / Serii" , rank : "Logistic Support Personal " , date:"07/2017 - 08/2016" , description:"Lorem ipsum dolor sit amet, consectetur adipiscing elit."},
26 | {company : "Albayrak Bilgisayar" , rank : "Technical Service Personal" , date:"07/2015 - 07/2015" , description:"Lorem ipsum dolor sit amet, consectetur adipiscing elit."},
27 | ];
28 |
29 | //Max job experiences limit is 3 . If you add more than 3 skill , you may be disappointed.
30 |
31 | export const Education =
32 | [
33 | { school : "Sivas Cumhuriyet University" , date:"09/2018 - Present" , description:"Lorem ipsum dolor sit amet, consectetur adipiscing elit."},
34 | { school : "Türk Telekom Vocational High School" , date:"09/2013 - 07/2017" , description:"Lorem ipsum dolor sit amet, consectetur adipiscing elit."},
35 | ];
36 |
37 | //Max education limit is 3 . If you add more than 3 skill , you may be disappointed.
38 |
39 | export const Services =
40 | [
41 | { serviceName : "Web Design" , description:"Lorem ipsum dolor sit amet, consectetur adipiscing elit."},
42 | { serviceName : "Desktop Development" , description:"Lorem ipsum dolor sit amet, consectetur adipiscing elit."},
43 | { serviceName : "Software Architecture" , description:"Lorem ipsum dolor sit amet, consectetur adipiscing elit."},
44 | { serviceName : "Social Media Management" , description:"Lorem ipsum dolor sit amet, consectetur adipiscing elit."},
45 | { serviceName : "Logo Design" , description:"Lorem ipsum dolor sit amet, consectetur adipiscing elit."}
46 | ];
47 |
48 | //Max services limit is 6 . If you add more than 6 skill , you may be disappointed.
49 |
50 | export const Testimonials =
51 | [
52 | { name : "Person X" , company:"Facebook" , description:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam aliquam aliquet dui at ultricies. Donec fermentum lorem sit amet massa vestibulum, vel pellentesque lectus vestibulum." , review:85},
53 | { name : "Person Y" , company:"Instagram" , description:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam aliquam aliquet dui at ultricies. Donec fermentum lorem sit amet massa vestibulum, vel pellentesque lectus vestibulum." , review:80},
54 | { name : "Person Z" , company:"Uber" , description:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam aliquam aliquet dui at ultricies. Donec fermentum lorem sit amet massa vestibulum, vel pellentesque lectus vestibulum." , review:79},
55 | { name : "Person W" , company:"Airbnb" , description:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam aliquam aliquet dui at ultricies. Donec fermentum lorem sit amet massa vestibulum, vel pellentesque lectus vestibulum." , review:99}
56 |
57 | ];
58 |
59 | //Max testimonials limit is 4 . If you add more than 4 skill , you may be disappointed.
60 |
61 | export const SocialMedia =
62 | {
63 | github:"github.com",
64 | instagram:"instagram.com",
65 | twitter:"twitter.com",
66 | linkedin:"linkedin.com",
67 | medium:"medium.com",
68 | facebook:"facebook.com"
69 | }
--------------------------------------------------------------------------------
/src/assets/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AbdullahOztuurkk/angular-dev-portfolio/0d6bf2d04fca0e59acc97e1db5c9fad1cdbf46fc/src/assets/.gitkeep
--------------------------------------------------------------------------------
/src/assets/images/Contact.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/assets/images/Design_Thinking.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/assets/images/Reference.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/assets/images/Skill.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/assets/images/about.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/assets/images/education.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/assets/images/portfolio-showcase.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AbdullahOztuurkk/angular-dev-portfolio/0d6bf2d04fca0e59acc97e1db5c9fad1cdbf46fc/src/assets/images/portfolio-showcase.gif
--------------------------------------------------------------------------------
/src/assets/images/quotation-mark.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
48 |
--------------------------------------------------------------------------------
/src/assets/images/right-arrow.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
48 |
--------------------------------------------------------------------------------
/src/environments/environment.prod.ts:
--------------------------------------------------------------------------------
1 | export const environment = {
2 | production: true
3 | };
4 |
--------------------------------------------------------------------------------
/src/environments/environment.ts:
--------------------------------------------------------------------------------
1 | // This file can be replaced during build by using the `fileReplacements` array.
2 | // `ng build --prod` replaces `environment.ts` with `environment.prod.ts`.
3 | // The list of file replacements can be found in `angular.json`.
4 |
5 | export const environment = {
6 | production: false
7 | };
8 |
9 | /*
10 | * For easier debugging in development mode, you can import the following file
11 | * to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`.
12 | *
13 | * This import should be commented out in production mode because it will have a negative impact
14 | * on performance if an error is thrown.
15 | */
16 | // import 'zone.js/dist/zone-error'; // Included with Angular CLI.
17 |
--------------------------------------------------------------------------------
/src/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AbdullahOztuurkk/angular-dev-portfolio/0d6bf2d04fca0e59acc97e1db5c9fad1cdbf46fc/src/favicon.ico
--------------------------------------------------------------------------------
/src/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
12 |
13 |
14 | Portfolio
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/src/main.ts:
--------------------------------------------------------------------------------
1 | import { enableProdMode } from '@angular/core';
2 | import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
3 |
4 | import { AppModule } from './app/app.module';
5 | import { environment } from './environments/environment';
6 |
7 | if (environment.production) {
8 | enableProdMode();
9 | }
10 |
11 | platformBrowserDynamic().bootstrapModule(AppModule)
12 | .catch(err => console.error(err));
13 |
--------------------------------------------------------------------------------
/src/polyfills.ts:
--------------------------------------------------------------------------------
1 | /**
2 | * This file includes polyfills needed by Angular and is loaded before the app.
3 | * You can add your own extra polyfills to this file.
4 | *
5 | * This file is divided into 2 sections:
6 | * 1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers.
7 | * 2. Application imports. Files imported after ZoneJS that should be loaded before your main
8 | * file.
9 | *
10 | * The current setup is for so-called "evergreen" browsers; the last versions of browsers that
11 | * automatically update themselves. This includes Safari >= 10, Chrome >= 55 (including Opera),
12 | * Edge >= 13 on the desktop, and iOS 10 and Chrome on mobile.
13 | *
14 | * Learn more in https://angular.io/guide/browser-support
15 | */
16 |
17 | /***************************************************************************************************
18 | * BROWSER POLYFILLS
19 | */
20 |
21 | /** IE10 and IE11 requires the following for NgClass support on SVG elements */
22 | // import 'classlist.js'; // Run `npm install --save classlist.js`.
23 |
24 | /**
25 | * Web Animations `@angular/platform-browser/animations`
26 | * Only required if AnimationBuilder is used within the application and using IE/Edge or Safari.
27 | * Standard animation support in Angular DOES NOT require any polyfills (as of Angular 6.0).
28 | */
29 | // import 'web-animations-js'; // Run `npm install --save web-animations-js`.
30 |
31 | /**
32 | * By default, zone.js will patch all possible macroTask and DomEvents
33 | * user can disable parts of macroTask/DomEvents patch by setting following flags
34 | * because those flags need to be set before `zone.js` being loaded, and webpack
35 | * will put import in the top of bundle, so user need to create a separate file
36 | * in this directory (for example: zone-flags.ts), and put the following flags
37 | * into that file, and then add the following code before importing zone.js.
38 | * import './zone-flags';
39 | *
40 | * The flags allowed in zone-flags.ts are listed here.
41 | *
42 | * The following flags will work for all browsers.
43 | *
44 | * (window as any).__Zone_disable_requestAnimationFrame = true; // disable patch requestAnimationFrame
45 | * (window as any).__Zone_disable_on_property = true; // disable patch onProperty such as onclick
46 | * (window as any).__zone_symbol__UNPATCHED_EVENTS = ['scroll', 'mousemove']; // disable patch specified eventNames
47 | *
48 | * in IE/Edge developer tools, the addEventListener will also be wrapped by zone.js
49 | * with the following flag, it will bypass `zone.js` patch for IE/Edge
50 | *
51 | * (window as any).__Zone_enable_cross_context_check = true;
52 | *
53 | */
54 |
55 | /***************************************************************************************************
56 | * Zone JS is required by default for Angular itself.
57 | */
58 | import 'zone.js/dist/zone'; // Included with Angular CLI.
59 |
60 |
61 | /***************************************************************************************************
62 | * APPLICATION IMPORTS
63 | */
64 |
--------------------------------------------------------------------------------
/src/styles.css:
--------------------------------------------------------------------------------
1 | /* You can add global styles to this file, and also import other style files */
2 | .container {
3 | display: flex;
4 | width: 100%;
5 | height: 600px;
6 | justify-content: center;
7 | align-items: center;
8 | }
9 | .service-card{
10 | width: 330px;
11 | height: 100%;
12 | margin: 0px 15px;
13 | }
14 | .border{
15 | border: 3px solid red;
16 | margin-top: 20px;
17 | margin-bottom: 10px;
18 | }
19 | .support-icon{
20 | border: 1px solid black;
21 | padding: 3px;
22 | }
--------------------------------------------------------------------------------
/src/test.ts:
--------------------------------------------------------------------------------
1 | // This file is required by karma.conf.js and loads recursively all the .spec and framework files
2 |
3 | import 'zone.js/dist/zone-testing';
4 | import { getTestBed } from '@angular/core/testing';
5 | import {
6 | BrowserDynamicTestingModule,
7 | platformBrowserDynamicTesting
8 | } from '@angular/platform-browser-dynamic/testing';
9 |
10 | declare const require: {
11 | context(path: string, deep?: boolean, filter?: RegExp): {
12 | keys(): string[];
13 | (id: string): T;
14 | };
15 | };
16 |
17 | // First, initialize the Angular testing environment.
18 | getTestBed().initTestEnvironment(
19 | BrowserDynamicTestingModule,
20 | platformBrowserDynamicTesting()
21 | );
22 | // Then we find all the tests.
23 | const context = require.context('./', true, /\.spec\.ts$/);
24 | // And load the modules.
25 | context.keys().map(context);
26 |
--------------------------------------------------------------------------------
/tsconfig.app.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./tsconfig.json",
3 | "compilerOptions": {
4 | "outDir": "./out-tsc/app",
5 | "types": []
6 | },
7 | "files": [
8 | "src/main.ts",
9 | "src/polyfills.ts"
10 | ],
11 | "include": [
12 | "src/**/*.d.ts"
13 | ]
14 | }
15 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compileOnSave": false,
3 | "compilerOptions": {
4 | "baseUrl": "./",
5 | "outDir": "./dist/out-tsc",
6 | "sourceMap": true,
7 | "declaration": false,
8 | "downlevelIteration": true,
9 | "experimentalDecorators": true,
10 | "module": "esnext",
11 | "moduleResolution": "node",
12 | "importHelpers": true,
13 | "target": "es2015",
14 | "lib": [
15 | "es2018",
16 | "dom"
17 | ]
18 | },
19 | "angularCompilerOptions": {
20 | "fullTemplateTypeCheck": true,
21 | "strictInjectionParameters": true
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/tsconfig.spec.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./tsconfig.json",
3 | "compilerOptions": {
4 | "outDir": "./out-tsc/spec",
5 | "types": [
6 | "jasmine",
7 | "node"
8 | ]
9 | },
10 | "files": [
11 | "src/test.ts",
12 | "src/polyfills.ts"
13 | ],
14 | "include": [
15 | "src/**/*.spec.ts",
16 | "src/**/*.d.ts"
17 | ]
18 | }
19 |
--------------------------------------------------------------------------------
/tslint.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "tslint:recommended",
3 | "rules": {
4 | "align": {
5 | "options": [
6 | "parameters",
7 | "statements"
8 | ]
9 | },
10 | "array-type": false,
11 | "arrow-return-shorthand": true,
12 | "curly": true,
13 | "deprecation": {
14 | "severity": "warning"
15 | },
16 | "component-class-suffix": true,
17 | "contextual-lifecycle": true,
18 | "directive-class-suffix": true,
19 | "directive-selector": [
20 | true,
21 | "attribute",
22 | "app",
23 | "camelCase"
24 | ],
25 | "component-selector": [
26 | true,
27 | "element",
28 | "app",
29 | "kebab-case"
30 | ],
31 | "eofline": true,
32 | "import-blacklist": [
33 | true,
34 | "rxjs/Rx"
35 | ],
36 | "import-spacing": true,
37 | "indent": {
38 | "options": [
39 | "spaces"
40 | ]
41 | },
42 | "max-classes-per-file": false,
43 | "max-line-length": [
44 | true,
45 | 140
46 | ],
47 | "member-ordering": [
48 | true,
49 | {
50 | "order": [
51 | "static-field",
52 | "instance-field",
53 | "static-method",
54 | "instance-method"
55 | ]
56 | }
57 | ],
58 | "no-console": [
59 | true,
60 | "debug",
61 | "info",
62 | "time",
63 | "timeEnd",
64 | "trace"
65 | ],
66 | "no-empty": false,
67 | "no-inferrable-types": [
68 | true,
69 | "ignore-params"
70 | ],
71 | "no-non-null-assertion": true,
72 | "no-redundant-jsdoc": true,
73 | "no-switch-case-fall-through": true,
74 | "no-var-requires": false,
75 | "object-literal-key-quotes": [
76 | true,
77 | "as-needed"
78 | ],
79 | "quotemark": [
80 | true,
81 | "single"
82 | ],
83 | "semicolon": {
84 | "options": [
85 | "always"
86 | ]
87 | },
88 | "space-before-function-paren": {
89 | "options": {
90 | "anonymous": "never",
91 | "asyncArrow": "always",
92 | "constructor": "never",
93 | "method": "never",
94 | "named": "never"
95 | }
96 | },
97 | "typedef-whitespace": {
98 | "options": [
99 | {
100 | "call-signature": "nospace",
101 | "index-signature": "nospace",
102 | "parameter": "nospace",
103 | "property-declaration": "nospace",
104 | "variable-declaration": "nospace"
105 | },
106 | {
107 | "call-signature": "onespace",
108 | "index-signature": "onespace",
109 | "parameter": "onespace",
110 | "property-declaration": "onespace",
111 | "variable-declaration": "onespace"
112 | }
113 | ]
114 | },
115 | "variable-name": {
116 | "options": [
117 | "ban-keywords",
118 | "check-format",
119 | "allow-pascal-case"
120 | ]
121 | },
122 | "whitespace": {
123 | "options": [
124 | "check-branch",
125 | "check-decl",
126 | "check-operator",
127 | "check-separator",
128 | "check-type",
129 | "check-typecast"
130 | ]
131 | },
132 | "no-conflicting-lifecycle": true,
133 | "no-host-metadata-property": true,
134 | "no-input-rename": true,
135 | "no-inputs-metadata-property": true,
136 | "no-output-native": true,
137 | "no-output-on-prefix": true,
138 | "no-output-rename": true,
139 | "no-outputs-metadata-property": true,
140 | "template-banana-in-box": true,
141 | "template-no-negated-async": true,
142 | "use-lifecycle-interface": true,
143 | "use-pipe-transform-interface": true
144 | },
145 | "rulesDirectory": [
146 | "codelyzer"
147 | ]
148 | }
--------------------------------------------------------------------------------