diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index a33d436..a3f67b7 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -8,7 +8,8 @@
"name": "portfolio",
"version": "0.0.1",
"dependencies": {
- "bootstrap": "^5.3.3"
+ "bootstrap": "^5.3.3",
+ "playwright": "^1.49.0"
},
"devDependencies": {
"@playwright/test": "^1.48.0",
@@ -19,13 +20,13 @@
"@sveltejs/vite-plugin-svelte": "^3.0.0",
"@types/eslint": "^9.6.0",
"@types/node": "^22.7.5",
- "eslint": "^9.0.0",
+ "eslint": "^9.15.0",
"eslint-config-prettier": "^9.1.0",
"eslint-plugin-svelte": "^2.36.0",
"globals": "^15.0.0",
- "prettier": "^3.1.1",
+ "prettier": "^3.4.0",
"prettier-plugin-svelte": "^3.1.2",
- "svelte": "^4.2.7",
+ "svelte": "^4.2.19",
"svelte-check": "^4.0.0",
"typescript": "^5.0.0",
"typescript-eslint": "^8.0.0",
@@ -1137,9 +1138,9 @@
}
},
"node_modules/@sveltejs/kit": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-2.8.3.tgz",
- "integrity": "sha512-DVBVwugfzzn0SxKA+eAmKqcZ7aHZROCHxH7/pyrOi+HLtQ721eEsctGb9MkhEuqj6q/9S/OFYdn37vdxzFPdvw==",
+ "version": "2.8.4",
+ "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-2.8.4.tgz",
+ "integrity": "sha512-oDSBHPokbP2iaQlHiEWAkVLsIugsXve8YtABtlyHBUljA63Wgx0UtV8MSOQOGpRft1M+Cd5rzer+0SFlppQwOg==",
"dev": true,
"hasInstallScript": true,
"license": "MIT",
@@ -1243,13 +1244,13 @@
"license": "MIT"
},
"node_modules/@types/node": {
- "version": "22.9.3",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-22.9.3.tgz",
- "integrity": "sha512-F3u1fs/fce3FFk+DAxbxc78DF8x0cY09RRL8GnXLmkJ1jvx3TtPdWoTT5/NiYfI5ASqXBmfqJi9dZ3gxMx4lzw==",
+ "version": "22.10.0",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.0.tgz",
+ "integrity": "sha512-XC70cRZVElFHfIUB40FgZOBbgJYFKKMa5nb9lxcwYstFG/Mi+/Y0bGS+rs6Dmhmkpq4pnNiLiuZAbc02YCOnmA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "undici-types": "~6.19.8"
+ "undici-types": "~6.20.0"
}
},
"node_modules/@types/resolve": {
@@ -1260,17 +1261,17 @@
"license": "MIT"
},
"node_modules/@typescript-eslint/eslint-plugin": {
- "version": "8.15.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.15.0.tgz",
- "integrity": "sha512-+zkm9AR1Ds9uLWN3fkoeXgFppaQ+uEVtfOV62dDmsy9QCNqlRHWNEck4yarvRNrvRcHQLGfqBNui3cimoz8XAg==",
+ "version": "8.16.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.16.0.tgz",
+ "integrity": "sha512-5YTHKV8MYlyMI6BaEG7crQ9BhSc8RxzshOReKwZwRWN0+XvvTOm+L/UYLCYxFpfwYuAAqhxiq4yae0CMFwbL7Q==",
"dev": true,
"license": "MIT",
"dependencies": {
"@eslint-community/regexpp": "^4.10.0",
- "@typescript-eslint/scope-manager": "8.15.0",
- "@typescript-eslint/type-utils": "8.15.0",
- "@typescript-eslint/utils": "8.15.0",
- "@typescript-eslint/visitor-keys": "8.15.0",
+ "@typescript-eslint/scope-manager": "8.16.0",
+ "@typescript-eslint/type-utils": "8.16.0",
+ "@typescript-eslint/utils": "8.16.0",
+ "@typescript-eslint/visitor-keys": "8.16.0",
"graphemer": "^1.4.0",
"ignore": "^5.3.1",
"natural-compare": "^1.4.0",
@@ -1294,16 +1295,16 @@
}
},
"node_modules/@typescript-eslint/parser": {
- "version": "8.15.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.15.0.tgz",
- "integrity": "sha512-7n59qFpghG4uazrF9qtGKBZXn7Oz4sOMm8dwNWDQY96Xlm2oX67eipqcblDj+oY1lLCbf1oltMZFpUso66Kl1A==",
+ "version": "8.16.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.16.0.tgz",
+ "integrity": "sha512-D7DbgGFtsqIPIFMPJwCad9Gfi/hC0PWErRRHFnaCWoEDYi5tQUDiJCTmGUbBiLzjqAck4KcXt9Ayj0CNlIrF+w==",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
- "@typescript-eslint/scope-manager": "8.15.0",
- "@typescript-eslint/types": "8.15.0",
- "@typescript-eslint/typescript-estree": "8.15.0",
- "@typescript-eslint/visitor-keys": "8.15.0",
+ "@typescript-eslint/scope-manager": "8.16.0",
+ "@typescript-eslint/types": "8.16.0",
+ "@typescript-eslint/typescript-estree": "8.16.0",
+ "@typescript-eslint/visitor-keys": "8.16.0",
"debug": "^4.3.4"
},
"engines": {
@@ -1323,14 +1324,14 @@
}
},
"node_modules/@typescript-eslint/scope-manager": {
- "version": "8.15.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.15.0.tgz",
- "integrity": "sha512-QRGy8ADi4J7ii95xz4UoiymmmMd/zuy9azCaamnZ3FM8T5fZcex8UfJcjkiEZjJSztKfEBe3dZ5T/5RHAmw2mA==",
+ "version": "8.16.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.16.0.tgz",
+ "integrity": "sha512-mwsZWubQvBki2t5565uxF0EYvG+FwdFb8bMtDuGQLdCCnGPrDEDvm1gtfynuKlnpzeBRqdFCkMf9jg1fnAK8sg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "8.15.0",
- "@typescript-eslint/visitor-keys": "8.15.0"
+ "@typescript-eslint/types": "8.16.0",
+ "@typescript-eslint/visitor-keys": "8.16.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -1341,14 +1342,14 @@
}
},
"node_modules/@typescript-eslint/type-utils": {
- "version": "8.15.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.15.0.tgz",
- "integrity": "sha512-UU6uwXDoI3JGSXmcdnP5d8Fffa2KayOhUUqr/AiBnG1Gl7+7ut/oyagVeSkh7bxQ0zSXV9ptRh/4N15nkCqnpw==",
+ "version": "8.16.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.16.0.tgz",
+ "integrity": "sha512-IqZHGG+g1XCWX9NyqnI/0CX5LL8/18awQqmkZSl2ynn8F76j579dByc0jhfVSnSnhf7zv76mKBQv9HQFKvDCgg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/typescript-estree": "8.15.0",
- "@typescript-eslint/utils": "8.15.0",
+ "@typescript-eslint/typescript-estree": "8.16.0",
+ "@typescript-eslint/utils": "8.16.0",
"debug": "^4.3.4",
"ts-api-utils": "^1.3.0"
},
@@ -1369,9 +1370,9 @@
}
},
"node_modules/@typescript-eslint/types": {
- "version": "8.15.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.15.0.tgz",
- "integrity": "sha512-n3Gt8Y/KyJNe0S3yDCD2RVKrHBC4gTUcLTebVBXacPy091E6tNspFLKRXlk3hwT4G55nfr1n2AdFqi/XMxzmPQ==",
+ "version": "8.16.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.16.0.tgz",
+ "integrity": "sha512-NzrHj6thBAOSE4d9bsuRNMvk+BvaQvmY4dDglgkgGC0EW/tB3Kelnp3tAKH87GEwzoxgeQn9fNGRyFJM/xd+GQ==",
"dev": true,
"license": "MIT",
"engines": {
@@ -1383,14 +1384,14 @@
}
},
"node_modules/@typescript-eslint/typescript-estree": {
- "version": "8.15.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.15.0.tgz",
- "integrity": "sha512-1eMp2JgNec/niZsR7ioFBlsh/Fk0oJbhaqO0jRyQBMgkz7RrFfkqF9lYYmBoGBaSiLnu8TAPQTwoTUiSTUW9dg==",
+ "version": "8.16.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.16.0.tgz",
+ "integrity": "sha512-E2+9IzzXMc1iaBy9zmo+UYvluE3TW7bCGWSF41hVWUE01o8nzr1rvOQYSxelxr6StUvRcTMe633eY8mXASMaNw==",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
- "@typescript-eslint/types": "8.15.0",
- "@typescript-eslint/visitor-keys": "8.15.0",
+ "@typescript-eslint/types": "8.16.0",
+ "@typescript-eslint/visitor-keys": "8.16.0",
"debug": "^4.3.4",
"fast-glob": "^3.3.2",
"is-glob": "^4.0.3",
@@ -1438,16 +1439,16 @@
}
},
"node_modules/@typescript-eslint/utils": {
- "version": "8.15.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.15.0.tgz",
- "integrity": "sha512-k82RI9yGhr0QM3Dnq+egEpz9qB6Un+WLYhmoNcvl8ltMEededhh7otBVVIDDsEEttauwdY/hQoSsOv13lxrFzQ==",
+ "version": "8.16.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.16.0.tgz",
+ "integrity": "sha512-C1zRy/mOL8Pj157GiX4kaw7iyRLKfJXBR3L82hk5kS/GyHcOFmy4YUq/zfZti72I9wnuQtA/+xzft4wCC8PJdA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@eslint-community/eslint-utils": "^4.4.0",
- "@typescript-eslint/scope-manager": "8.15.0",
- "@typescript-eslint/types": "8.15.0",
- "@typescript-eslint/typescript-estree": "8.15.0"
+ "@typescript-eslint/scope-manager": "8.16.0",
+ "@typescript-eslint/types": "8.16.0",
+ "@typescript-eslint/typescript-estree": "8.16.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -1466,13 +1467,13 @@
}
},
"node_modules/@typescript-eslint/visitor-keys": {
- "version": "8.15.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.15.0.tgz",
- "integrity": "sha512-h8vYOulWec9LhpwfAdZf2bjr8xIp0KNKnpgqSz0qqYYKAW/QZKw3ktRndbiAtUz4acH4QLQavwZBYCc0wulA/Q==",
+ "version": "8.16.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.16.0.tgz",
+ "integrity": "sha512-pq19gbaMOmFE3CbL0ZB8J8BFCo2ckfHBfaIsaOZgBIF4EoISJIdLX5xRhd0FGB0LlHReNRuzoJoMGpTjq8F2CQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "8.15.0",
+ "@typescript-eslint/types": "8.16.0",
"eslint-visitor-keys": "^4.2.0"
},
"engines": {
@@ -2436,7 +2437,6 @@
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
"integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
- "dev": true,
"hasInstallScript": true,
"license": "MIT",
"optional": true,
@@ -2771,9 +2771,9 @@
"license": "MIT"
},
"node_modules/magic-string": {
- "version": "0.30.13",
- "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.13.tgz",
- "integrity": "sha512-8rYBO+MsWkgjDSOvLomYnzhdwEG51olQ4zL5KXnNJWV5MNmrb4rTZdrtkhxjnD/QyZUqR/Z/XDsUs/4ej2nx0g==",
+ "version": "0.30.14",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.14.tgz",
+ "integrity": "sha512-5c99P1WKTed11ZC0HMJOj6CDIue6F8ySu+bJL+85q1zBEIY8IklrJ1eiKC2NDRh3Ct3FcvmJPyQHb9erXMTJNw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3053,7 +3053,6 @@
"version": "1.49.0",
"resolved": "https://registry.npmjs.org/playwright/-/playwright-1.49.0.tgz",
"integrity": "sha512-eKpmys0UFDnfNb3vfsf8Vx2LEOtflgRebl0Im2eQQnYMA4Aqd+Zw8bEOB+7ZKvN76901mRnqdsiOGKxzVTbi7A==",
- "dev": true,
"license": "Apache-2.0",
"dependencies": {
"playwright-core": "1.49.0"
@@ -3072,7 +3071,6 @@
"version": "1.49.0",
"resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.49.0.tgz",
"integrity": "sha512-R+3KKTQF3npy5GTiKH/T+kdhoJfJojjHESR1YEWhYuEKRVfVaxH3+4+GvXE5xyCngCxhxnykk0Vlah9v8fs3jA==",
- "dev": true,
"license": "Apache-2.0",
"bin": {
"playwright-core": "cli.js"
@@ -3209,9 +3207,9 @@
}
},
"node_modules/prettier": {
- "version": "3.3.3",
- "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz",
- "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==",
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.4.0.tgz",
+ "integrity": "sha512-/OXNZcLyWkfo13ofOW5M7SLh+k5pnIs07owXK2teFpnfaOEcycnSy7HQxldaVX1ZP/7Q8oO1eDuQJNwbomQq5Q==",
"dev": true,
"license": "MIT",
"bin": {
@@ -3760,9 +3758,9 @@
}
},
"node_modules/ts-api-utils": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.1.tgz",
- "integrity": "sha512-5RU2/lxTA3YUZxju61HO2U6EoZLvBLtmV2mbTvqyu4a/7s7RmJPT+1YekhMVsQhznRWk/czIwDUg+V8Q9ZuG4w==",
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.2.tgz",
+ "integrity": "sha512-ZF5gQIQa/UmzfvxbHZI3JXN0/Jt+vnAfAviNRAMc491laiK6YCLpCW9ft8oaCRFOTxCZtUTE6XB0ZQAe3olntw==",
"dev": true,
"license": "MIT",
"engines": {
@@ -3800,15 +3798,15 @@
}
},
"node_modules/typescript-eslint": {
- "version": "8.15.0",
- "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.15.0.tgz",
- "integrity": "sha512-wY4FRGl0ZI+ZU4Jo/yjdBu0lVTSML58pu6PgGtJmCufvzfV565pUF6iACQt092uFOd49iLOTX/sEVmHtbSrS+w==",
+ "version": "8.16.0",
+ "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.16.0.tgz",
+ "integrity": "sha512-wDkVmlY6O2do4V+lZd0GtRfbtXbeD0q9WygwXXSJnC1xorE8eqyC2L1tJimqpSeFrOzRlYtWnUp/uzgHQOgfBQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/eslint-plugin": "8.15.0",
- "@typescript-eslint/parser": "8.15.0",
- "@typescript-eslint/utils": "8.15.0"
+ "@typescript-eslint/eslint-plugin": "8.16.0",
+ "@typescript-eslint/parser": "8.16.0",
+ "@typescript-eslint/utils": "8.16.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -3827,9 +3825,9 @@
}
},
"node_modules/undici-types": {
- "version": "6.19.8",
- "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz",
- "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==",
+ "version": "6.20.0",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz",
+ "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==",
"dev": true,
"license": "MIT"
},
diff --git a/frontend/package.json b/frontend/package.json
index a7d9e02..135a186 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -23,13 +23,13 @@
"@sveltejs/vite-plugin-svelte": "^3.0.0",
"@types/eslint": "^9.6.0",
"@types/node": "^22.7.5",
- "eslint": "^9.0.0",
+ "eslint": "^9.15.0",
"eslint-config-prettier": "^9.1.0",
"eslint-plugin-svelte": "^2.36.0",
"globals": "^15.0.0",
- "prettier": "^3.1.1",
+ "prettier": "^3.4.0",
"prettier-plugin-svelte": "^3.1.2",
- "svelte": "^4.2.7",
+ "svelte": "^4.2.19",
"svelte-check": "^4.0.0",
"typescript": "^5.0.0",
"typescript-eslint": "^8.0.0",
@@ -38,6 +38,7 @@
},
"type": "module",
"dependencies": {
- "bootstrap": "^5.3.3"
+ "bootstrap": "^5.3.3",
+ "playwright": "^1.49.0"
}
}
diff --git a/frontend/src/lib/components/BookList.svelte b/frontend/src/lib/components/BookList.svelte
index f58275b..879cfa6 100644
--- a/frontend/src/lib/components/BookList.svelte
+++ b/frontend/src/lib/components/BookList.svelte
@@ -1,47 +1,47 @@
-
+
+
+ {title}
+
+ {#each books as book}
+ -
+
+ {book.title}
+
+ by {book.author}: {book.Description}
+
+ {/each}
+
+
+
+
\ No newline at end of file
+ .book-list-li a:hover {
+ text-decoration: underline;
+ }
+
diff --git a/frontend/src/lib/components/BoopableLink.svelte b/frontend/src/lib/components/BoopableLink.svelte
index 4cbdb01..67be5ca 100644
--- a/frontend/src/lib/components/BoopableLink.svelte
+++ b/frontend/src/lib/components/BoopableLink.svelte
@@ -17,7 +17,8 @@
}
-
-
+
\ No newline at end of file
+ a:hover {
+ text-decoration: underline;
+ }
+
diff --git a/frontend/src/routes/+layout.svelte b/frontend/src/routes/+layout.svelte
index 068064e..cbc2478 100644
--- a/frontend/src/routes/+layout.svelte
+++ b/frontend/src/routes/+layout.svelte
@@ -1,6 +1,6 @@
-
-
-
\ No newline at end of file
+ import Header from '$lib/components/Header.svelte';
+
+
+
+
diff --git a/frontend/src/routes/reading-list/+page.svelte b/frontend/src/routes/reading-list/+page.svelte
index e0399d5..4a211e3 100644
--- a/frontend/src/routes/reading-list/+page.svelte
+++ b/frontend/src/routes/reading-list/+page.svelte
@@ -1,54 +1,58 @@
-
+ import type { Book } from '$lib/types/Books';
+ import BookList from '$lib/components/BookList.svelte';
+ //import { general_code_practice, organizational_advice_personal, organizational_advice_company } from './data'; // Import data if externalized
+
+ // Good Code Practices
+ const general_code_practice: Book[] = [
+ {
+ title: 'Clean Code: A Handbook of Agile Software Craftsmanship',
+ author: 'Robert C. Martin',
+ pdf_link:
+ 'https://inprogrammer.com/wp-content/uploads/2022/01/Martin-Robert-Cecil-Clean-code_-a-handbook-of-agile-software-craftsmanship-2009-Prentice-Hall-libgen.lc_.pdf',
+ Description: 'First and most well known of the Clean series of Uncle Bob, a must-read on TDD',
+ additional_resources: {
+ 'Test driven development - A no-BS guide by the Excellent Continuous Delivery YouTuber':
+ 'https://www.youtube.com/watch?v=ln4WnxX-wrw&t=96s',
+ 'A series of conferences by the man himself':
+ 'https://www.youtube.com/watch?v=ln4WnxX-wrw&t=96s'
+ }
+ }
+ ];
+ // Organizational Advice (Personal)
+ const organizational_advice_personal: Book[] = [
+ {
+ title: 'The Clean Coder',
+ author: 'Robert C. Martin',
+ pdf_link: 'https://blog.freec.asia/wp-content/uploads/2020/12/The-Clean-Coder.pdf',
+ Description:
+ "What is a good Dev, where does he fit in an organization? How should he organize his time at work? Here you'll find advicestuff like the pomodoro technique, pair programming, and more",
+ additional_resources: {}
+ }
+ ];
+
+ // Organizational Advice (Company)
+ const organizational_advice_company: Book[] = [
+ {
+ title: 'The Phoenix Project',
+ author: 'Gene Kim, Kevin Behr, George Spafford',
+ pdf_link: 'https://theswissbay.ch/pdf/Books/Computer%20science/PhoenixProjectExcerpt.pdf',
+ Description:
+ 'A book about the origins of Agile and DevOps and how it took inspiration from Lean in manufacturing. Not technical at all, but too important in the history of DevOps to be skipped',
+ additional_resources: {}
+ },
+ {
+ title: 'Accelerate',
+ author: 'Nicole Forsgren, Jez Humble, Gene Kim',
+ pdf_link: '/Accelerate.pdf',
+ Description:
+ 'Another foundational book about DevOps from a company organization perspective, this one is based on data issued from research',
+ additional_resources: {}
+ }
+ ];
+
-
-
-
\ No newline at end of file
+
+
+