├── .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 |
6 |

{{ aboutMe }}

7 |
8 |
9 |
10 |
11 |
12 |
13 |

My Skills

14 |
15 |
16 |
17 |
18 |
{{item}}
19 |
20 |
21 |
22 |
23 |
{{item}}
24 |
25 |
26 |
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 |
9 |
10 |
11 |
12 |
13 |

Get in Touch with us

14 |
15 |
16 |
17 |
18 |
19 | 20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 | 28 |
29 |
30 | 31 |
32 |
33 |
34 |
35 |
36 | 37 |
38 |
39 | 40 |
41 | 42 |
43 |
44 |
45 |
46 |
47 |
-------------------------------------------------------------------------------- /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 | Profile Photo 2 |

{{_userName}}

3 |
{{_userJob}}
4 |


5 |
6 |

{{_userLocation}}

7 |
8 |

{{_userEmail}}

9 |
10 |

{{_userDateOfBirth}}

11 |
12 |
13 | 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 |
2 |
3 |
4 |
5 |
6 | 7 |
8 |
9 |
10 |
11 |
12 | 13 | 14 |
15 |
16 |
17 |
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 | contact us -------------------------------------------------------------------------------- /src/assets/images/Design_Thinking.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/images/Reference.svg: -------------------------------------------------------------------------------- 1 | connected world -------------------------------------------------------------------------------- /src/assets/images/Skill.svg: -------------------------------------------------------------------------------- 1 | percentages -------------------------------------------------------------------------------- /src/assets/images/about.svg: -------------------------------------------------------------------------------- 1 | software engineer -------------------------------------------------------------------------------- /src/assets/images/education.svg: -------------------------------------------------------------------------------- 1 | exams -------------------------------------------------------------------------------- /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 | 7 | 8 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /src/assets/images/right-arrow.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 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 | } --------------------------------------------------------------------------------