diff --git a/.github/workflows/deployment.yml b/.github/workflows/deployment.yml index 4a605c7cb..68b983e59 100644 --- a/.github/workflows/deployment.yml +++ b/.github/workflows/deployment.yml @@ -39,6 +39,7 @@ jobs: run: | git clone https://${{ secrets.GH_PAT }}@github.com/roadmapsh/web-draw.git .temp/web-draw --depth 1 npm run generate-renderer + npm run compress:images npm run build # -------------------- diff --git a/astro.config.mjs b/astro.config.mjs index f4d152ab6..89e8133ef 100644 --- a/astro.config.mjs +++ b/astro.config.mjs @@ -2,7 +2,6 @@ import sitemap from '@astrojs/sitemap'; import tailwind from '@astrojs/tailwind'; import node from '@astrojs/node'; -import compress from 'astro-compress'; import { defineConfig } from 'astro/config'; import rehypeExternalLinks from 'rehype-external-links'; import { serializeSitemap, shouldIndexPage } from './sitemap.mjs'; @@ -56,11 +55,6 @@ export default defineConfig({ filter: shouldIndexPage, serialize: serializeSitemap, }), - compress({ - HTML: false, - CSS: false, - JavaScript: false, - }), react(), ], }); diff --git a/package.json b/package.json index 401e083bb..570c9a227 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,6 @@ "format": "prettier --write .", "astro": "astro", "deploy": "NODE_DEBUG=gh-pages gh-pages -d dist -t", - "compress:jsons": "node scripts/compress-jsons.cjs", "upgrade": "ncu -u", "roadmap-links": "node scripts/roadmap-links.cjs", "roadmap-dirs": "node scripts/roadmap-dirs.cjs", @@ -20,6 +19,7 @@ "best-practice-dirs": "node scripts/best-practice-dirs.cjs", "best-practice-content": "node scripts/best-practice-content.cjs", "generate:og": "node ./scripts/generate-og-images.mjs", + "compress:images": "tsx ./scripts/compress-images.ts", "test:e2e": "playwright test" }, "dependencies": { @@ -33,7 +33,6 @@ "@types/react": "^18.2.56", "@types/react-dom": "^18.2.19", "astro": "^4.4.0", - "astro-compress": "^2.2.10", "clsx": "^2.1.0", "dayjs": "^1.11.10", "dom-to-image": "^2.6.0", @@ -81,6 +80,7 @@ "openai": "^4.28.0", "prettier": "^3.2.5", "prettier-plugin-astro": "^0.13.0", - "prettier-plugin-tailwindcss": "^0.5.11" + "prettier-plugin-tailwindcss": "^0.5.11", + "tsx": "^4.7.2" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0452e828f..344bf7ff8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -178,6 +178,9 @@ devDependencies: prettier-plugin-tailwindcss: specifier: ^0.5.11 version: 0.5.11(prettier-plugin-astro@0.13.0)(prettier@3.2.5) + tsx: + specifier: ^4.7.2 + version: 4.7.2 packages: @@ -577,7 +580,6 @@ packages: cpu: [ppc64] os: [aix] requiresBuild: true - dev: false optional: true /@esbuild/android-arm64@0.19.11: @@ -586,7 +588,6 @@ packages: cpu: [arm64] os: [android] requiresBuild: true - dev: false optional: true /@esbuild/android-arm@0.19.11: @@ -595,7 +596,6 @@ packages: cpu: [arm] os: [android] requiresBuild: true - dev: false optional: true /@esbuild/android-x64@0.19.11: @@ -604,7 +604,6 @@ packages: cpu: [x64] os: [android] requiresBuild: true - dev: false optional: true /@esbuild/darwin-arm64@0.19.11: @@ -613,7 +612,6 @@ packages: cpu: [arm64] os: [darwin] requiresBuild: true - dev: false optional: true /@esbuild/darwin-x64@0.19.11: @@ -622,7 +620,6 @@ packages: cpu: [x64] os: [darwin] requiresBuild: true - dev: false optional: true /@esbuild/freebsd-arm64@0.19.11: @@ -631,7 +628,6 @@ packages: cpu: [arm64] os: [freebsd] requiresBuild: true - dev: false optional: true /@esbuild/freebsd-x64@0.19.11: @@ -640,7 +636,6 @@ packages: cpu: [x64] os: [freebsd] requiresBuild: true - dev: false optional: true /@esbuild/linux-arm64@0.19.11: @@ -649,7 +644,6 @@ packages: cpu: [arm64] os: [linux] requiresBuild: true - dev: false optional: true /@esbuild/linux-arm@0.19.11: @@ -658,7 +652,6 @@ packages: cpu: [arm] os: [linux] requiresBuild: true - dev: false optional: true /@esbuild/linux-ia32@0.19.11: @@ -667,7 +660,6 @@ packages: cpu: [ia32] os: [linux] requiresBuild: true - dev: false optional: true /@esbuild/linux-loong64@0.19.11: @@ -676,7 +668,6 @@ packages: cpu: [loong64] os: [linux] requiresBuild: true - dev: false optional: true /@esbuild/linux-mips64el@0.19.11: @@ -685,7 +676,6 @@ packages: cpu: [mips64el] os: [linux] requiresBuild: true - dev: false optional: true /@esbuild/linux-ppc64@0.19.11: @@ -694,7 +684,6 @@ packages: cpu: [ppc64] os: [linux] requiresBuild: true - dev: false optional: true /@esbuild/linux-riscv64@0.19.11: @@ -703,7 +692,6 @@ packages: cpu: [riscv64] os: [linux] requiresBuild: true - dev: false optional: true /@esbuild/linux-s390x@0.19.11: @@ -712,7 +700,6 @@ packages: cpu: [s390x] os: [linux] requiresBuild: true - dev: false optional: true /@esbuild/linux-x64@0.19.11: @@ -721,7 +708,6 @@ packages: cpu: [x64] os: [linux] requiresBuild: true - dev: false optional: true /@esbuild/netbsd-x64@0.19.11: @@ -730,7 +716,6 @@ packages: cpu: [x64] os: [netbsd] requiresBuild: true - dev: false optional: true /@esbuild/openbsd-x64@0.19.11: @@ -739,7 +724,6 @@ packages: cpu: [x64] os: [openbsd] requiresBuild: true - dev: false optional: true /@esbuild/sunos-x64@0.19.11: @@ -748,7 +732,6 @@ packages: cpu: [x64] os: [sunos] requiresBuild: true - dev: false optional: true /@esbuild/win32-arm64@0.19.11: @@ -757,7 +740,6 @@ packages: cpu: [arm64] os: [win32] requiresBuild: true - dev: false optional: true /@esbuild/win32-ia32@0.19.11: @@ -766,7 +748,6 @@ packages: cpu: [ia32] os: [win32] requiresBuild: true - dev: false optional: true /@esbuild/win32-x64@0.19.11: @@ -775,7 +756,6 @@ packages: cpu: [x64] os: [win32] requiresBuild: true - dev: false optional: true /@fingerprintjs/fingerprintjs@4.2.2: @@ -3112,7 +3092,6 @@ packages: '@esbuild/win32-arm64': 0.19.11 '@esbuild/win32-ia32': 0.19.11 '@esbuild/win32-x64': 0.19.11 - dev: false /escalade@3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} @@ -3429,6 +3408,12 @@ packages: engines: {node: '>=16'} dev: false + /get-tsconfig@4.7.3: + resolution: {integrity: sha512-ZvkrzoUA0PQZM6fy6+/Hce561s+faD1rsNwhnO5FelNjyy7EMGJ3Rz1AQ8GYDWjhRs/7dBLOEJvhK8MiEJOAFg==} + dependencies: + resolve-pkg-maps: 1.0.0 + dev: true + /gh-pages@6.1.1: resolution: {integrity: sha512-upnohfjBwN5hBP9w2dPE7HO5JJTHzSGMV1JrLrHvNuqmjoYHg6TBrCcnEoorjG/e0ejbuvnwyKMdTyM40PEByw==} engines: {node: '>=10'} @@ -6152,6 +6137,10 @@ packages: resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} dev: false + /resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + dev: true + /resolve@1.22.8: resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true @@ -6940,6 +6929,17 @@ packages: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} dev: false + /tsx@4.7.2: + resolution: {integrity: sha512-BCNd4kz6fz12fyrgCTEdZHGJ9fWTGeUzXmQysh0RVocDY3h4frk05ZNCXSy4kIenF7y/QnrdiVpTsyNRn6vlAw==} + engines: {node: '>=18.0.0'} + hasBin: true + dependencies: + esbuild: 0.19.11 + get-tsconfig: 4.7.3 + optionalDependencies: + fsevents: 2.3.3 + dev: true + /tuf-js@1.1.7: resolution: {integrity: sha512-i3P9Kgw3ytjELUfpuKVDNBJvk4u5bXL6gskv572mcevPbSKCV3zt3djhmlEQ65yERjIbOSncy7U4cQJaB1CBCg==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} diff --git a/public/authors/dmytrobol.png b/public/authors/dmytrobol.png index 5bdc96cb8..4ff2ccb33 100644 Binary files a/public/authors/dmytrobol.png and b/public/authors/dmytrobol.png differ diff --git a/public/authors/ebrahimbharmal007.png b/public/authors/ebrahimbharmal007.png index 148e9f2be..31cf45d5d 100644 Binary files a/public/authors/ebrahimbharmal007.png and b/public/authors/ebrahimbharmal007.png differ diff --git a/public/authors/jesse.png b/public/authors/jesse.png index a02fc7972..2cc1e31d9 100644 Binary files a/public/authors/jesse.png and b/public/authors/jesse.png differ diff --git a/public/authors/peter-thaleikis.png b/public/authors/peter-thaleikis.png index a338ab497..fbefc2962 100644 Binary files a/public/authors/peter-thaleikis.png and b/public/authors/peter-thaleikis.png differ diff --git a/public/best-practices/api-security.png b/public/best-practices/api-security.png index e696f8ecb..00669b03b 100644 Binary files a/public/best-practices/api-security.png and b/public/best-practices/api-security.png differ diff --git a/public/best-practices/aws.png b/public/best-practices/aws.png index 2c284a8fe..61bfbe757 100644 Binary files a/public/best-practices/aws.png and b/public/best-practices/aws.png differ diff --git a/public/best-practices/backend-performance.png b/public/best-practices/backend-performance.png index 34d812938..7364471a1 100644 Binary files a/public/best-practices/backend-performance.png and b/public/best-practices/backend-performance.png differ diff --git a/public/best-practices/frontend-performance.png b/public/best-practices/frontend-performance.png index b1479204c..e6eccf4b3 100644 Binary files a/public/best-practices/frontend-performance.png and b/public/best-practices/frontend-performance.png differ diff --git a/public/guides/asymptotic-notation.png b/public/guides/asymptotic-notation.png index 8e7f17e53..827d5ba96 100644 Binary files a/public/guides/asymptotic-notation.png and b/public/guides/asymptotic-notation.png differ diff --git a/public/guides/avoid-render-blocking-javascript-with-async-defer.png b/public/guides/avoid-render-blocking-javascript-with-async-defer.png index 92354dd55..e489d93b4 100644 Binary files a/public/guides/avoid-render-blocking-javascript-with-async-defer.png and b/public/guides/avoid-render-blocking-javascript-with-async-defer.png differ diff --git a/public/guides/backend-languages/back-vs-front.png b/public/guides/backend-languages/back-vs-front.png index e64f196aa..aa0746d02 100644 Binary files a/public/guides/backend-languages/back-vs-front.png and b/public/guides/backend-languages/back-vs-front.png differ diff --git a/public/guides/backend-languages/backend-roadmap-part.png b/public/guides/backend-languages/backend-roadmap-part.png index 4ddfc1ba9..425ba4d14 100644 Binary files a/public/guides/backend-languages/backend-roadmap-part.png and b/public/guides/backend-languages/backend-roadmap-part.png differ diff --git a/public/guides/backend-languages/javascript-interest.png b/public/guides/backend-languages/javascript-interest.png index 76f6ae6b1..79efa69de 100644 Binary files a/public/guides/backend-languages/javascript-interest.png and b/public/guides/backend-languages/javascript-interest.png differ diff --git a/public/guides/backend-languages/pypl-go-index.png b/public/guides/backend-languages/pypl-go-index.png index 1af2b8f6b..7c6fd1c31 100644 Binary files a/public/guides/backend-languages/pypl-go-index.png and b/public/guides/backend-languages/pypl-go-index.png differ diff --git a/public/guides/bash-vs-shell.jpeg b/public/guides/bash-vs-shell.jpeg index b5ea28aef..6f7c01f06 100644 Binary files a/public/guides/bash-vs-shell.jpeg and b/public/guides/bash-vs-shell.jpeg differ diff --git a/public/guides/basic-authentication.png b/public/guides/basic-authentication.png index 7b8992571..60fd1c53a 100644 Binary files a/public/guides/basic-authentication.png and b/public/guides/basic-authentication.png differ diff --git a/public/guides/basic-authentication/chrome-basic-auth.png b/public/guides/basic-authentication/chrome-basic-auth.png index 22f73f93e..0ada97354 100644 Binary files a/public/guides/basic-authentication/chrome-basic-auth.png and b/public/guides/basic-authentication/chrome-basic-auth.png differ diff --git a/public/guides/basic-authentication/safari-basic-auth.png b/public/guides/basic-authentication/safari-basic-auth.png index c3b04523d..81d90d76b 100644 Binary files a/public/guides/basic-authentication/safari-basic-auth.png and b/public/guides/basic-authentication/safari-basic-auth.png differ diff --git a/public/guides/big-o-notation.png b/public/guides/big-o-notation.png index 1afe6efca..b78f0db27 100644 Binary files a/public/guides/big-o-notation.png and b/public/guides/big-o-notation.png differ diff --git a/public/guides/character-encodings.png b/public/guides/character-encodings.png index 961c4f085..12008c7ca 100644 Binary files a/public/guides/character-encodings.png and b/public/guides/character-encodings.png differ diff --git a/public/guides/ci-cd.png b/public/guides/ci-cd.png index ded525fae..1d3ad42c7 100644 Binary files a/public/guides/ci-cd.png and b/public/guides/ci-cd.png differ diff --git a/public/guides/dhcp.png b/public/guides/dhcp.png index 360c8a9cc..4e2f19837 100644 Binary files a/public/guides/dhcp.png and b/public/guides/dhcp.png differ diff --git a/public/guides/jwt-authentication.png b/public/guides/jwt-authentication.png index 0e015e887..931fe709a 100644 Binary files a/public/guides/jwt-authentication.png and b/public/guides/jwt-authentication.png differ diff --git a/public/guides/llms.png b/public/guides/llms.png index c2cc54c18..c1445185a 100644 Binary files a/public/guides/llms.png and b/public/guides/llms.png differ diff --git a/public/guides/project-history.png b/public/guides/project-history.png index 7ea6f87a0..f116d03f9 100644 Binary files a/public/guides/project-history.png and b/public/guides/project-history.png differ diff --git a/public/guides/proxy/forward-proxy.png b/public/guides/proxy/forward-proxy.png index f68a56e09..572640f45 100644 Binary files a/public/guides/proxy/forward-proxy.png and b/public/guides/proxy/forward-proxy.png differ diff --git a/public/guides/proxy/proxy-example.png b/public/guides/proxy/proxy-example.png index 11cf6edf4..058cd7c4d 100644 Binary files a/public/guides/proxy/proxy-example.png and b/public/guides/proxy/proxy-example.png differ diff --git a/public/guides/proxy/reverse-proxy.png b/public/guides/proxy/reverse-proxy.png index 95a0be4db..a9296a371 100644 Binary files a/public/guides/proxy/reverse-proxy.png and b/public/guides/proxy/reverse-proxy.png differ diff --git a/public/guides/random-numbers.png b/public/guides/random-numbers.png index 7a41a271e..9306f3b95 100644 Binary files a/public/guides/random-numbers.png and b/public/guides/random-numbers.png differ diff --git a/public/guides/session-authentication.png b/public/guides/session-authentication.png index d35178077..787bfee07 100644 Binary files a/public/guides/session-authentication.png and b/public/guides/session-authentication.png differ diff --git a/public/guides/sli-slo-sla.jpeg b/public/guides/sli-slo-sla.jpeg index 0eec28167..0e95c46ee 100644 Binary files a/public/guides/sli-slo-sla.jpeg and b/public/guides/sli-slo-sla.jpeg differ diff --git a/public/guides/ssl-tls-https-ssh.png b/public/guides/ssl-tls-https-ssh.png index 4e997016c..3a77c8ae6 100644 Binary files a/public/guides/ssl-tls-https-ssh.png and b/public/guides/ssl-tls-https-ssh.png differ diff --git a/public/guides/token-authentication.png b/public/guides/token-authentication.png index 40eb86755..a46b5ddc5 100644 Binary files a/public/guides/token-authentication.png and b/public/guides/token-authentication.png differ diff --git a/public/guides/torrent-client/download.png b/public/guides/torrent-client/download.png index c5a8f86d0..591d39b27 100644 Binary files a/public/guides/torrent-client/download.png and b/public/guides/torrent-client/download.png differ diff --git a/public/guides/torrent-client/pipelining.png b/public/guides/torrent-client/pipelining.png index bdfc029be..d6e5ebdfc 100644 Binary files a/public/guides/torrent-client/pipelining.png and b/public/guides/torrent-client/pipelining.png differ diff --git a/public/guides/unfamiliar-codebase.png b/public/guides/unfamiliar-codebase.png index 12e704966..c6afdec69 100644 Binary files a/public/guides/unfamiliar-codebase.png and b/public/guides/unfamiliar-codebase.png differ diff --git a/public/guides/web-vitals.png b/public/guides/web-vitals.png index a50f7db40..835fad9f5 100644 Binary files a/public/guides/web-vitals.png and b/public/guides/web-vitals.png differ diff --git a/public/images/brand.png b/public/images/brand.png index 5a4b8ad50..8ccbb4fd8 100644 Binary files a/public/images/brand.png and b/public/images/brand.png differ diff --git a/public/images/default-avatar.png b/public/images/default-avatar.png index 775eba2fb..8bf3235fd 100644 Binary files a/public/images/default-avatar.png and b/public/images/default-avatar.png differ diff --git a/public/images/features/in-progress.png b/public/images/features/in-progress.png index 5909144b6..a14373714 100644 Binary files a/public/images/features/in-progress.png and b/public/images/features/in-progress.png differ diff --git a/public/images/icons8-wand.gif b/public/images/icons8-wand.gif index 621b405e3..53222141c 100644 Binary files a/public/images/icons8-wand.gif and b/public/images/icons8-wand.gif differ diff --git a/public/images/partners/ambassador-graphic-1.png b/public/images/partners/ambassador-graphic-1.png index fb72d712d..71ef0ebfd 100644 Binary files a/public/images/partners/ambassador-graphic-1.png and b/public/images/partners/ambassador-graphic-1.png differ diff --git a/public/images/partners/ambassador-graphic-2.png b/public/images/partners/ambassador-graphic-2.png index 300e32c5c..17bd629e6 100644 Binary files a/public/images/partners/ambassador-graphic-2.png and b/public/images/partners/ambassador-graphic-2.png differ diff --git a/public/images/partners/apollo-workshop.png b/public/images/partners/apollo-workshop.png index 0b40c44b8..beecb62ef 100644 Binary files a/public/images/partners/apollo-workshop.png and b/public/images/partners/apollo-workshop.png differ diff --git a/public/images/partners/graphql-summit.png b/public/images/partners/graphql-summit.png index 7d4d336cf..d58efa217 100644 Binary files a/public/images/partners/graphql-summit.png and b/public/images/partners/graphql-summit.png differ diff --git a/public/images/partners/nginx.png b/public/images/partners/nginx.png index 8522893be..87cae3e40 100644 Binary files a/public/images/partners/nginx.png and b/public/images/partners/nginx.png differ diff --git a/public/images/roadmap-editor.jpeg b/public/images/roadmap-editor.jpeg index 39fa63007..f0ae1ba37 100644 Binary files a/public/images/roadmap-editor.jpeg and b/public/images/roadmap-editor.jpeg differ diff --git a/public/images/system-design.png b/public/images/system-design.png index 567d40603..7839665d3 100644 Binary files a/public/images/system-design.png and b/public/images/system-design.png differ diff --git a/public/images/team-promo/contact.png b/public/images/team-promo/contact.png index 48699fb98..ba84d37dc 100644 Binary files a/public/images/team-promo/contact.png and b/public/images/team-promo/contact.png differ diff --git a/public/images/team-promo/documentation.png b/public/images/team-promo/documentation.png index 7569b360a..71399990a 100644 Binary files a/public/images/team-promo/documentation.png and b/public/images/team-promo/documentation.png differ diff --git a/public/images/team-promo/growth-plans.png b/public/images/team-promo/growth-plans.png index c8baf7ceb..3043324ad 100644 Binary files a/public/images/team-promo/growth-plans.png and b/public/images/team-promo/growth-plans.png differ diff --git a/public/images/team-promo/hero-img.png b/public/images/team-promo/hero-img.png index 9c54c9356..18c0ebe6f 100644 Binary files a/public/images/team-promo/hero-img.png and b/public/images/team-promo/hero-img.png differ diff --git a/public/images/team-promo/hero.png b/public/images/team-promo/hero.png index e1d766df4..8b525e90c 100644 Binary files a/public/images/team-promo/hero.png and b/public/images/team-promo/hero.png differ diff --git a/public/images/team-promo/invite-members.png b/public/images/team-promo/invite-members.png index c96c09b73..42af447c1 100644 Binary files a/public/images/team-promo/invite-members.png and b/public/images/team-promo/invite-members.png differ diff --git a/public/images/team-promo/many-roadmaps.png b/public/images/team-promo/many-roadmaps.png index 14447464e..b5bffc374 100644 Binary files a/public/images/team-promo/many-roadmaps.png and b/public/images/team-promo/many-roadmaps.png differ diff --git a/public/images/team-promo/onboarding.png b/public/images/team-promo/onboarding.png index 19616c40d..056d988aa 100644 Binary files a/public/images/team-promo/onboarding.png and b/public/images/team-promo/onboarding.png differ diff --git a/public/images/team-promo/our-roadmaps.png b/public/images/team-promo/our-roadmaps.png index 7d9d33a3c..aaf748377 100644 Binary files a/public/images/team-promo/our-roadmaps.png and b/public/images/team-promo/our-roadmaps.png differ diff --git a/public/images/team-promo/progress-tracking.png b/public/images/team-promo/progress-tracking.png index 952e2b982..288b95811 100644 Binary files a/public/images/team-promo/progress-tracking.png and b/public/images/team-promo/progress-tracking.png differ diff --git a/public/images/team-promo/roadmap-editor.png b/public/images/team-promo/roadmap-editor.png index 57e5add63..0da30037c 100644 Binary files a/public/images/team-promo/roadmap-editor.png and b/public/images/team-promo/roadmap-editor.png differ diff --git a/public/images/team-promo/sharing-settings.png b/public/images/team-promo/sharing-settings.png index 892971aaa..093bbd1ed 100644 Binary files a/public/images/team-promo/sharing-settings.png and b/public/images/team-promo/sharing-settings.png differ diff --git a/public/images/team-promo/skill-gap.png b/public/images/team-promo/skill-gap.png index ead2644f5..96e344989 100644 Binary files a/public/images/team-promo/skill-gap.png and b/public/images/team-promo/skill-gap.png differ diff --git a/public/images/team-promo/team-dashboard.png b/public/images/team-promo/team-dashboard.png index a39261c10..04144c691 100644 Binary files a/public/images/team-promo/team-dashboard.png and b/public/images/team-promo/team-dashboard.png differ diff --git a/public/images/team-promo/team-insights.png b/public/images/team-promo/team-insights.png index 76ea015bc..17e8169e6 100644 Binary files a/public/images/team-promo/team-insights.png and b/public/images/team-promo/team-insights.png differ diff --git a/public/images/team-promo/update-progress.png b/public/images/team-promo/update-progress.png index 3adc2aeca..84c1864de 100644 Binary files a/public/images/team-promo/update-progress.png and b/public/images/team-promo/update-progress.png differ diff --git a/public/manifest/apple-touch-icon.png b/public/manifest/apple-touch-icon.png index 736fdfea2..1177db3a3 100644 Binary files a/public/manifest/apple-touch-icon.png and b/public/manifest/apple-touch-icon.png differ diff --git a/public/manifest/icon152.png b/public/manifest/icon152.png index 2fa1f417c..3fa1a99a7 100644 Binary files a/public/manifest/icon152.png and b/public/manifest/icon152.png differ diff --git a/public/manifest/icon196.png b/public/manifest/icon196.png index 63dbf37bb..3369c0729 100644 Binary files a/public/manifest/icon196.png and b/public/manifest/icon196.png differ diff --git a/public/manifest/icon32.png b/public/manifest/icon32.png index 90706bc95..06a7807cc 100644 Binary files a/public/manifest/icon32.png and b/public/manifest/icon32.png differ diff --git a/public/og-images/best-practices/api-security.png b/public/og-images/best-practices/api-security.png index 2b223533d..edec25565 100644 Binary files a/public/og-images/best-practices/api-security.png and b/public/og-images/best-practices/api-security.png differ diff --git a/public/og-images/best-practices/aws.png b/public/og-images/best-practices/aws.png index 0d736a471..bc587253c 100644 Binary files a/public/og-images/best-practices/aws.png and b/public/og-images/best-practices/aws.png differ diff --git a/public/og-images/best-practices/backend-performance.png b/public/og-images/best-practices/backend-performance.png index c79f8ec7e..4a3db8242 100644 Binary files a/public/og-images/best-practices/backend-performance.png and b/public/og-images/best-practices/backend-performance.png differ diff --git a/public/og-images/best-practices/code-review.png b/public/og-images/best-practices/code-review.png index 2fc5b01b2..3a8e419fe 100644 Binary files a/public/og-images/best-practices/code-review.png and b/public/og-images/best-practices/code-review.png differ diff --git a/public/og-images/best-practices/frontend-performance.png b/public/og-images/best-practices/frontend-performance.png index 2b5f9be3f..aa179766a 100644 Binary files a/public/og-images/best-practices/frontend-performance.png and b/public/og-images/best-practices/frontend-performance.png differ diff --git a/public/og-images/guides/asymptotic-notation.png b/public/og-images/guides/asymptotic-notation.png index 921123291..8a7563af9 100644 Binary files a/public/og-images/guides/asymptotic-notation.png and b/public/og-images/guides/asymptotic-notation.png differ diff --git a/public/og-images/guides/avoid-render-blocking-javascript-with-async-defer.png b/public/og-images/guides/avoid-render-blocking-javascript-with-async-defer.png index 1ea6f9b15..78ff8f00c 100644 Binary files a/public/og-images/guides/avoid-render-blocking-javascript-with-async-defer.png and b/public/og-images/guides/avoid-render-blocking-javascript-with-async-defer.png differ diff --git a/public/og-images/guides/backend-developer-skills.png b/public/og-images/guides/backend-developer-skills.png index 492feba01..456cd4db6 100644 Binary files a/public/og-images/guides/backend-developer-skills.png and b/public/og-images/guides/backend-developer-skills.png differ diff --git a/public/og-images/guides/backend-developer-tools.png b/public/og-images/guides/backend-developer-tools.png index 0b0a578f3..689aa04f8 100644 Binary files a/public/og-images/guides/backend-developer-tools.png and b/public/og-images/guides/backend-developer-tools.png differ diff --git a/public/og-images/guides/backend-languages.png b/public/og-images/guides/backend-languages.png index c3f383a65..bdcbed3f1 100644 Binary files a/public/og-images/guides/backend-languages.png and b/public/og-images/guides/backend-languages.png differ diff --git a/public/og-images/guides/basic-authentication.png b/public/og-images/guides/basic-authentication.png index 6ba219322..f12760325 100644 Binary files a/public/og-images/guides/basic-authentication.png and b/public/og-images/guides/basic-authentication.png differ diff --git a/public/og-images/guides/basics-of-authentication.png b/public/og-images/guides/basics-of-authentication.png index dd9bdcebf..ec91f7153 100644 Binary files a/public/og-images/guides/basics-of-authentication.png and b/public/og-images/guides/basics-of-authentication.png differ diff --git a/public/og-images/guides/big-o-notation.png b/public/og-images/guides/big-o-notation.png index c55d03c30..9c4b60f24 100644 Binary files a/public/og-images/guides/big-o-notation.png and b/public/og-images/guides/big-o-notation.png differ diff --git a/public/og-images/guides/character-encodings.png b/public/og-images/guides/character-encodings.png index 368d80239..8bd6c5cde 100644 Binary files a/public/og-images/guides/character-encodings.png and b/public/og-images/guides/character-encodings.png differ diff --git a/public/og-images/guides/ci-cd.png b/public/og-images/guides/ci-cd.png index 32163c495..5b961759d 100644 Binary files a/public/og-images/guides/ci-cd.png and b/public/og-images/guides/ci-cd.png differ diff --git a/public/og-images/guides/consistency-patterns-in-distributed-systems.png b/public/og-images/guides/consistency-patterns-in-distributed-systems.png index ca233251e..8c1d60515 100644 Binary files a/public/og-images/guides/consistency-patterns-in-distributed-systems.png and b/public/og-images/guides/consistency-patterns-in-distributed-systems.png differ diff --git a/public/og-images/guides/design-patterns-for-humans.png b/public/og-images/guides/design-patterns-for-humans.png index 54ef033cd..c35eceadd 100644 Binary files a/public/og-images/guides/design-patterns-for-humans.png and b/public/og-images/guides/design-patterns-for-humans.png differ diff --git a/public/og-images/guides/dhcp-in-one-picture.png b/public/og-images/guides/dhcp-in-one-picture.png index acf29d7a0..2b6dc91f9 100644 Binary files a/public/og-images/guides/dhcp-in-one-picture.png and b/public/og-images/guides/dhcp-in-one-picture.png differ diff --git a/public/og-images/guides/dns-in-one-picture.png b/public/og-images/guides/dns-in-one-picture.png index 2059486f4..5705bf1ba 100644 Binary files a/public/og-images/guides/dns-in-one-picture.png and b/public/og-images/guides/dns-in-one-picture.png differ diff --git a/public/og-images/guides/free-resources-to-learn-llms.png b/public/og-images/guides/free-resources-to-learn-llms.png index 78c6cebfe..285f41d28 100644 Binary files a/public/og-images/guides/free-resources-to-learn-llms.png and b/public/og-images/guides/free-resources-to-learn-llms.png differ diff --git a/public/og-images/guides/history-of-javascript.png b/public/og-images/guides/history-of-javascript.png index 77d462465..f0a500962 100644 Binary files a/public/og-images/guides/history-of-javascript.png and b/public/og-images/guides/history-of-javascript.png differ diff --git a/public/og-images/guides/how-to-setup-a-jump-server.png b/public/og-images/guides/how-to-setup-a-jump-server.png index b5f0dc813..5956397dc 100644 Binary files a/public/og-images/guides/how-to-setup-a-jump-server.png and b/public/og-images/guides/how-to-setup-a-jump-server.png differ diff --git a/public/og-images/guides/http-basic-authentication.png b/public/og-images/guides/http-basic-authentication.png index c9046bd75..e4fd57091 100644 Binary files a/public/og-images/guides/http-basic-authentication.png and b/public/og-images/guides/http-basic-authentication.png differ diff --git a/public/og-images/guides/http-caching.png b/public/og-images/guides/http-caching.png index 6ef24a29d..30e42bec5 100644 Binary files a/public/og-images/guides/http-caching.png and b/public/og-images/guides/http-caching.png differ diff --git a/public/og-images/guides/introduction-to-llms.png b/public/og-images/guides/introduction-to-llms.png index 36f51062d..0c67a9243 100644 Binary files a/public/og-images/guides/introduction-to-llms.png and b/public/og-images/guides/introduction-to-llms.png differ diff --git a/public/og-images/guides/journey-to-http2.png b/public/og-images/guides/journey-to-http2.png index 7e40ed967..6aaafe73d 100644 Binary files a/public/og-images/guides/journey-to-http2.png and b/public/og-images/guides/journey-to-http2.png differ diff --git a/public/og-images/guides/jwt-authentication.png b/public/og-images/guides/jwt-authentication.png index 25253dcc8..1443c59d9 100644 Binary files a/public/og-images/guides/jwt-authentication.png and b/public/og-images/guides/jwt-authentication.png differ diff --git a/public/og-images/guides/levels-of-seniority.png b/public/og-images/guides/levels-of-seniority.png index ea9de6478..73eef6eda 100644 Binary files a/public/og-images/guides/levels-of-seniority.png and b/public/og-images/guides/levels-of-seniority.png differ diff --git a/public/og-images/guides/oauth.png b/public/og-images/guides/oauth.png index 858fa198d..38c14d42a 100644 Binary files a/public/og-images/guides/oauth.png and b/public/og-images/guides/oauth.png differ diff --git a/public/og-images/guides/proxy-servers.png b/public/og-images/guides/proxy-servers.png index 4575d08e0..249bb1eb2 100644 Binary files a/public/og-images/guides/proxy-servers.png and b/public/og-images/guides/proxy-servers.png differ diff --git a/public/og-images/guides/random-numbers.png b/public/og-images/guides/random-numbers.png index c34710534..86d7cc2eb 100644 Binary files a/public/og-images/guides/random-numbers.png and b/public/og-images/guides/random-numbers.png differ diff --git a/public/og-images/guides/scaling-databases.png b/public/og-images/guides/scaling-databases.png index 0e251e355..ae390ef6d 100644 Binary files a/public/og-images/guides/scaling-databases.png and b/public/og-images/guides/scaling-databases.png differ diff --git a/public/og-images/guides/session-authentication.png b/public/og-images/guides/session-authentication.png index 5f20cf034..3fbc401ec 100644 Binary files a/public/og-images/guides/session-authentication.png and b/public/og-images/guides/session-authentication.png differ diff --git a/public/og-images/guides/session-based-authentication.png b/public/og-images/guides/session-based-authentication.png index f27349ea9..961494edc 100644 Binary files a/public/og-images/guides/session-based-authentication.png and b/public/og-images/guides/session-based-authentication.png differ diff --git a/public/og-images/guides/setup-and-auto-renew-ssl-certificates.png b/public/og-images/guides/setup-and-auto-renew-ssl-certificates.png index 764565dee..8f6a39674 100644 Binary files a/public/og-images/guides/setup-and-auto-renew-ssl-certificates.png and b/public/og-images/guides/setup-and-auto-renew-ssl-certificates.png differ diff --git a/public/og-images/guides/single-command-database-setup.png b/public/og-images/guides/single-command-database-setup.png index f59c1461c..2a01e9438 100644 Binary files a/public/og-images/guides/single-command-database-setup.png and b/public/og-images/guides/single-command-database-setup.png differ diff --git a/public/og-images/guides/ssl-tls-https-ssh.png b/public/og-images/guides/ssl-tls-https-ssh.png index 23c643a98..eb73e5dd8 100644 Binary files a/public/og-images/guides/ssl-tls-https-ssh.png and b/public/og-images/guides/ssl-tls-https-ssh.png differ diff --git a/public/og-images/guides/sso.png b/public/og-images/guides/sso.png index 964611c47..dce149d8e 100644 Binary files a/public/og-images/guides/sso.png and b/public/og-images/guides/sso.png differ diff --git a/public/og-images/guides/token-authentication.png b/public/og-images/guides/token-authentication.png index df474f238..35db620bd 100644 Binary files a/public/og-images/guides/token-authentication.png and b/public/og-images/guides/token-authentication.png differ diff --git a/public/og-images/guides/torrent-client.png b/public/og-images/guides/torrent-client.png index 5402dfcf0..6dcb81b02 100644 Binary files a/public/og-images/guides/torrent-client.png and b/public/og-images/guides/torrent-client.png differ diff --git a/public/og-images/guides/unfamiliar-codebase.png b/public/og-images/guides/unfamiliar-codebase.png index 9b30849a6..b87a59b26 100644 Binary files a/public/og-images/guides/unfamiliar-codebase.png and b/public/og-images/guides/unfamiliar-codebase.png differ diff --git a/public/og-images/guides/what-are-web-vitals.png b/public/og-images/guides/what-are-web-vitals.png index ffaa0699c..f4ed7e104 100644 Binary files a/public/og-images/guides/what-are-web-vitals.png and b/public/og-images/guides/what-are-web-vitals.png differ diff --git a/public/og-images/guides/what-is-internet.png b/public/og-images/guides/what-is-internet.png index ebc49266d..4b116b7ba 100644 Binary files a/public/og-images/guides/what-is-internet.png and b/public/og-images/guides/what-is-internet.png differ diff --git a/public/og-images/guides/what-is-sli-slo-sla.png b/public/og-images/guides/what-is-sli-slo-sla.png index 1cd1cbd01..375eeff3a 100644 Binary files a/public/og-images/guides/what-is-sli-slo-sla.png and b/public/og-images/guides/what-is-sli-slo-sla.png differ diff --git a/public/og-images/guides/why-build-it-and-they-will-come-wont-work-anymore.png b/public/og-images/guides/why-build-it-and-they-will-come-wont-work-anymore.png index 07d31f813..70bb0ba3d 100644 Binary files a/public/og-images/guides/why-build-it-and-they-will-come-wont-work-anymore.png and b/public/og-images/guides/why-build-it-and-they-will-come-wont-work-anymore.png differ diff --git a/public/og-images/roadmaps/ai-data-scientist.png b/public/og-images/roadmaps/ai-data-scientist.png index 698dc1105..195e70115 100644 Binary files a/public/og-images/roadmaps/ai-data-scientist.png and b/public/og-images/roadmaps/ai-data-scientist.png differ diff --git a/public/og-images/roadmaps/android.png b/public/og-images/roadmaps/android.png index 22185d37b..c7d7674b1 100644 Binary files a/public/og-images/roadmaps/android.png and b/public/og-images/roadmaps/android.png differ diff --git a/public/og-images/roadmaps/angular.png b/public/og-images/roadmaps/angular.png index 93ed3436f..cd593f85e 100644 Binary files a/public/og-images/roadmaps/angular.png and b/public/og-images/roadmaps/angular.png differ diff --git a/public/og-images/roadmaps/aspnet-core.png b/public/og-images/roadmaps/aspnet-core.png index e76626536..cb061ef0b 100644 Binary files a/public/og-images/roadmaps/aspnet-core.png and b/public/og-images/roadmaps/aspnet-core.png differ diff --git a/public/og-images/roadmaps/aws.png b/public/og-images/roadmaps/aws.png index d483cc8a6..b8d6697c0 100644 Binary files a/public/og-images/roadmaps/aws.png and b/public/og-images/roadmaps/aws.png differ diff --git a/public/og-images/roadmaps/backend.png b/public/og-images/roadmaps/backend.png index adb0f1345..71f2a2c94 100644 Binary files a/public/og-images/roadmaps/backend.png and b/public/og-images/roadmaps/backend.png differ diff --git a/public/og-images/roadmaps/blockchain.png b/public/og-images/roadmaps/blockchain.png index d99d16985..854ff9fa3 100644 Binary files a/public/og-images/roadmaps/blockchain.png and b/public/og-images/roadmaps/blockchain.png differ diff --git a/public/og-images/roadmaps/code-review.png b/public/og-images/roadmaps/code-review.png index 055390d47..a8d5c610f 100644 Binary files a/public/og-images/roadmaps/code-review.png and b/public/og-images/roadmaps/code-review.png differ diff --git a/public/og-images/roadmaps/computer-science.png b/public/og-images/roadmaps/computer-science.png index 50bb98a5c..27835513e 100644 Binary files a/public/og-images/roadmaps/computer-science.png and b/public/og-images/roadmaps/computer-science.png differ diff --git a/public/og-images/roadmaps/cpp.png b/public/og-images/roadmaps/cpp.png index a0622b049..68254db40 100644 Binary files a/public/og-images/roadmaps/cpp.png and b/public/og-images/roadmaps/cpp.png differ diff --git a/public/og-images/roadmaps/cyber-security.png b/public/og-images/roadmaps/cyber-security.png index 4417371c7..0fa8c4db8 100644 Binary files a/public/og-images/roadmaps/cyber-security.png and b/public/og-images/roadmaps/cyber-security.png differ diff --git a/public/og-images/roadmaps/data-analyst.png b/public/og-images/roadmaps/data-analyst.png index 825571d57..8514bced7 100644 Binary files a/public/og-images/roadmaps/data-analyst.png and b/public/og-images/roadmaps/data-analyst.png differ diff --git a/public/og-images/roadmaps/datastructures-and-algorithms.png b/public/og-images/roadmaps/datastructures-and-algorithms.png index 8a349c525..eff90c4d2 100644 Binary files a/public/og-images/roadmaps/datastructures-and-algorithms.png and b/public/og-images/roadmaps/datastructures-and-algorithms.png differ diff --git a/public/og-images/roadmaps/design-system.png b/public/og-images/roadmaps/design-system.png index db30cbade..0d36da247 100644 Binary files a/public/og-images/roadmaps/design-system.png and b/public/og-images/roadmaps/design-system.png differ diff --git a/public/og-images/roadmaps/devops.png b/public/og-images/roadmaps/devops.png index bacedd8ae..cebc2757d 100644 Binary files a/public/og-images/roadmaps/devops.png and b/public/og-images/roadmaps/devops.png differ diff --git a/public/og-images/roadmaps/docker.png b/public/og-images/roadmaps/docker.png index 6ddc7c738..5808a51f3 100644 Binary files a/public/og-images/roadmaps/docker.png and b/public/og-images/roadmaps/docker.png differ diff --git a/public/og-images/roadmaps/flutter.png b/public/og-images/roadmaps/flutter.png index cb525de86..b24cbb6c4 100644 Binary files a/public/og-images/roadmaps/flutter.png and b/public/og-images/roadmaps/flutter.png differ diff --git a/public/og-images/roadmaps/frontend.png b/public/og-images/roadmaps/frontend.png index 18620b7da..24c238eae 100644 Binary files a/public/og-images/roadmaps/frontend.png and b/public/og-images/roadmaps/frontend.png differ diff --git a/public/og-images/roadmaps/full-stack.png b/public/og-images/roadmaps/full-stack.png index c0110efb2..c8fd6d841 100644 Binary files a/public/og-images/roadmaps/full-stack.png and b/public/og-images/roadmaps/full-stack.png differ diff --git a/public/og-images/roadmaps/game-developer.png b/public/og-images/roadmaps/game-developer.png index 9023ca835..b5d5d191a 100644 Binary files a/public/og-images/roadmaps/game-developer.png and b/public/og-images/roadmaps/game-developer.png differ diff --git a/public/og-images/roadmaps/golang.png b/public/og-images/roadmaps/golang.png index cc41702b0..9863bd8c5 100644 Binary files a/public/og-images/roadmaps/golang.png and b/public/og-images/roadmaps/golang.png differ diff --git a/public/og-images/roadmaps/graphql.png b/public/og-images/roadmaps/graphql.png index df845bcad..e53d26523 100644 Binary files a/public/og-images/roadmaps/graphql.png and b/public/og-images/roadmaps/graphql.png differ diff --git a/public/og-images/roadmaps/java.png b/public/og-images/roadmaps/java.png index 21c0f8305..566bd93c1 100644 Binary files a/public/og-images/roadmaps/java.png and b/public/og-images/roadmaps/java.png differ diff --git a/public/og-images/roadmaps/javascript.png b/public/og-images/roadmaps/javascript.png index 6f51c790e..269608713 100644 Binary files a/public/og-images/roadmaps/javascript.png and b/public/og-images/roadmaps/javascript.png differ diff --git a/public/og-images/roadmaps/kubernetes.png b/public/og-images/roadmaps/kubernetes.png index 6dc011149..583d166fb 100644 Binary files a/public/og-images/roadmaps/kubernetes.png and b/public/og-images/roadmaps/kubernetes.png differ diff --git a/public/og-images/roadmaps/linux.png b/public/og-images/roadmaps/linux.png index 589d709ca..6bc3dba27 100644 Binary files a/public/og-images/roadmaps/linux.png and b/public/og-images/roadmaps/linux.png differ diff --git a/public/og-images/roadmaps/mlops.png b/public/og-images/roadmaps/mlops.png index 50f78c154..3bb6e9e6e 100644 Binary files a/public/og-images/roadmaps/mlops.png and b/public/og-images/roadmaps/mlops.png differ diff --git a/public/og-images/roadmaps/mongodb.png b/public/og-images/roadmaps/mongodb.png index c4b152ddd..e2b6f80d4 100644 Binary files a/public/og-images/roadmaps/mongodb.png and b/public/og-images/roadmaps/mongodb.png differ diff --git a/public/og-images/roadmaps/nodejs.png b/public/og-images/roadmaps/nodejs.png index bd05279b5..b4396fe03 100644 Binary files a/public/og-images/roadmaps/nodejs.png and b/public/og-images/roadmaps/nodejs.png differ diff --git a/public/og-images/roadmaps/postgresql-dba.png b/public/og-images/roadmaps/postgresql-dba.png index 7fd7cfa86..67b0816f1 100644 Binary files a/public/og-images/roadmaps/postgresql-dba.png and b/public/og-images/roadmaps/postgresql-dba.png differ diff --git a/public/og-images/roadmaps/prompt-engineering.png b/public/og-images/roadmaps/prompt-engineering.png index c308dfd40..37ddec03e 100644 Binary files a/public/og-images/roadmaps/prompt-engineering.png and b/public/og-images/roadmaps/prompt-engineering.png differ diff --git a/public/og-images/roadmaps/python.png b/public/og-images/roadmaps/python.png index 35687f082..6725d90fc 100644 Binary files a/public/og-images/roadmaps/python.png and b/public/og-images/roadmaps/python.png differ diff --git a/public/og-images/roadmaps/qa.png b/public/og-images/roadmaps/qa.png index 283ac7a8f..ddc5d8d4d 100644 Binary files a/public/og-images/roadmaps/qa.png and b/public/og-images/roadmaps/qa.png differ diff --git a/public/og-images/roadmaps/react-native.png b/public/og-images/roadmaps/react-native.png index 5083e915f..ffd72bef4 100644 Binary files a/public/og-images/roadmaps/react-native.png and b/public/og-images/roadmaps/react-native.png differ diff --git a/public/og-images/roadmaps/react.png b/public/og-images/roadmaps/react.png index f3f6792ff..8221c8003 100644 Binary files a/public/og-images/roadmaps/react.png and b/public/og-images/roadmaps/react.png differ diff --git a/public/og-images/roadmaps/rust.png b/public/og-images/roadmaps/rust.png index 9cb0233aa..8e46b0c7d 100644 Binary files a/public/og-images/roadmaps/rust.png and b/public/og-images/roadmaps/rust.png differ diff --git a/public/og-images/roadmaps/server-side-game-developer.png b/public/og-images/roadmaps/server-side-game-developer.png index 89759d0a0..e3e1f9579 100644 Binary files a/public/og-images/roadmaps/server-side-game-developer.png and b/public/og-images/roadmaps/server-side-game-developer.png differ diff --git a/public/og-images/roadmaps/software-architect.png b/public/og-images/roadmaps/software-architect.png index 41adfc831..23a07a325 100644 Binary files a/public/og-images/roadmaps/software-architect.png and b/public/og-images/roadmaps/software-architect.png differ diff --git a/public/og-images/roadmaps/software-design-architecture.png b/public/og-images/roadmaps/software-design-architecture.png index 3b9d260ef..731077b24 100644 Binary files a/public/og-images/roadmaps/software-design-architecture.png and b/public/og-images/roadmaps/software-design-architecture.png differ diff --git a/public/og-images/roadmaps/spring-boot.png b/public/og-images/roadmaps/spring-boot.png index ca550d6b7..99b939764 100644 Binary files a/public/og-images/roadmaps/spring-boot.png and b/public/og-images/roadmaps/spring-boot.png differ diff --git a/public/og-images/roadmaps/sql.png b/public/og-images/roadmaps/sql.png index 7a30c975d..3333757fc 100644 Binary files a/public/og-images/roadmaps/sql.png and b/public/og-images/roadmaps/sql.png differ diff --git a/public/og-images/roadmaps/system-design.png b/public/og-images/roadmaps/system-design.png index 1dfd75e7d..c099f4fd9 100644 Binary files a/public/og-images/roadmaps/system-design.png and b/public/og-images/roadmaps/system-design.png differ diff --git a/public/og-images/roadmaps/technical-writer.png b/public/og-images/roadmaps/technical-writer.png index a0250aafb..f52989f5a 100644 Binary files a/public/og-images/roadmaps/technical-writer.png and b/public/og-images/roadmaps/technical-writer.png differ diff --git a/public/og-images/roadmaps/typescript.png b/public/og-images/roadmaps/typescript.png index df2128886..44a659ec2 100644 Binary files a/public/og-images/roadmaps/typescript.png and b/public/og-images/roadmaps/typescript.png differ diff --git a/public/og-images/roadmaps/ux-design.png b/public/og-images/roadmaps/ux-design.png index 590445acf..48e522746 100644 Binary files a/public/og-images/roadmaps/ux-design.png and b/public/og-images/roadmaps/ux-design.png differ diff --git a/public/og-images/roadmaps/vue.png b/public/og-images/roadmaps/vue.png index 05c7e0e16..4dd43d8d0 100644 Binary files a/public/og-images/roadmaps/vue.png and b/public/og-images/roadmaps/vue.png differ diff --git a/public/og-images/sql-roadmap.png b/public/og-images/sql-roadmap.png index c4da5aa4b..fd35764b9 100644 Binary files a/public/og-images/sql-roadmap.png and b/public/og-images/sql-roadmap.png differ diff --git a/public/roadmaps/ai-data-scientist.png b/public/roadmaps/ai-data-scientist.png index d06add1d1..f0990b443 100644 Binary files a/public/roadmaps/ai-data-scientist.png and b/public/roadmaps/ai-data-scientist.png differ diff --git a/public/roadmaps/android.png b/public/roadmaps/android.png index 2192b35d7..42b11aa4d 100644 Binary files a/public/roadmaps/android.png and b/public/roadmaps/android.png differ diff --git a/public/roadmaps/aspnet-core.png b/public/roadmaps/aspnet-core.png index 16d03dd13..4cabef640 100644 Binary files a/public/roadmaps/aspnet-core.png and b/public/roadmaps/aspnet-core.png differ diff --git a/public/roadmaps/aws.png b/public/roadmaps/aws.png index 83cff17ea..460b1528d 100644 Binary files a/public/roadmaps/aws.png and b/public/roadmaps/aws.png differ diff --git a/public/roadmaps/backend.png b/public/roadmaps/backend.png index 60d0ab988..3f02f0537 100644 Binary files a/public/roadmaps/backend.png and b/public/roadmaps/backend.png differ diff --git a/public/roadmaps/blockchain.png b/public/roadmaps/blockchain.png index bf1cd6de2..b67227383 100644 Binary files a/public/roadmaps/blockchain.png and b/public/roadmaps/blockchain.png differ diff --git a/public/roadmaps/computer-science.png b/public/roadmaps/computer-science.png index 9e266b9d6..13fd96f67 100644 Binary files a/public/roadmaps/computer-science.png and b/public/roadmaps/computer-science.png differ diff --git a/public/roadmaps/cpp.png b/public/roadmaps/cpp.png index d251d110f..fdfd14db5 100644 Binary files a/public/roadmaps/cpp.png and b/public/roadmaps/cpp.png differ diff --git a/public/roadmaps/cyber-security.png b/public/roadmaps/cyber-security.png index f71616a4d..2e431caeb 100644 Binary files a/public/roadmaps/cyber-security.png and b/public/roadmaps/cyber-security.png differ diff --git a/public/roadmaps/data-analyst.png b/public/roadmaps/data-analyst.png index f228e33ed..b905e8efe 100644 Binary files a/public/roadmaps/data-analyst.png and b/public/roadmaps/data-analyst.png differ diff --git a/public/roadmaps/design-system.png b/public/roadmaps/design-system.png index dcb8e1b54..d51776f1a 100644 Binary files a/public/roadmaps/design-system.png and b/public/roadmaps/design-system.png differ diff --git a/public/roadmaps/devops.png b/public/roadmaps/devops.png index f24f34836..c2785cc84 100644 Binary files a/public/roadmaps/devops.png and b/public/roadmaps/devops.png differ diff --git a/public/roadmaps/docker.png b/public/roadmaps/docker.png index a3cddad81..c398e3092 100644 Binary files a/public/roadmaps/docker.png and b/public/roadmaps/docker.png differ diff --git a/public/roadmaps/flutter.png b/public/roadmaps/flutter.png index c1411c4f8..9dabe4027 100644 Binary files a/public/roadmaps/flutter.png and b/public/roadmaps/flutter.png differ diff --git a/public/roadmaps/frontend.png b/public/roadmaps/frontend.png index 42ef8d745..b1701a1a9 100644 Binary files a/public/roadmaps/frontend.png and b/public/roadmaps/frontend.png differ diff --git a/public/roadmaps/full-stack.png b/public/roadmaps/full-stack.png index 3d63b71b9..2bb1f50a8 100644 Binary files a/public/roadmaps/full-stack.png and b/public/roadmaps/full-stack.png differ diff --git a/public/roadmaps/game-developer.png b/public/roadmaps/game-developer.png index 3fdb00941..ba5ca892a 100644 Binary files a/public/roadmaps/game-developer.png and b/public/roadmaps/game-developer.png differ diff --git a/public/roadmaps/graphql.png b/public/roadmaps/graphql.png index 700c9166f..553ab00a7 100644 Binary files a/public/roadmaps/graphql.png and b/public/roadmaps/graphql.png differ diff --git a/public/roadmaps/intro.png b/public/roadmaps/intro.png index 9e5c2b7e3..d298db124 100644 Binary files a/public/roadmaps/intro.png and b/public/roadmaps/intro.png differ diff --git a/public/roadmaps/java.png b/public/roadmaps/java.png index c4b6865d1..e33a49925 100644 Binary files a/public/roadmaps/java.png and b/public/roadmaps/java.png differ diff --git a/public/roadmaps/javascript.png b/public/roadmaps/javascript.png index e594af903..3dd4109e2 100644 Binary files a/public/roadmaps/javascript.png and b/public/roadmaps/javascript.png differ diff --git a/public/roadmaps/kubernetes.png b/public/roadmaps/kubernetes.png index 3a8c85a05..df0a62329 100644 Binary files a/public/roadmaps/kubernetes.png and b/public/roadmaps/kubernetes.png differ diff --git a/public/roadmaps/linux.png b/public/roadmaps/linux.png index f39cf7035..de17d4a1e 100644 Binary files a/public/roadmaps/linux.png and b/public/roadmaps/linux.png differ diff --git a/public/roadmaps/mlops.png b/public/roadmaps/mlops.png index 6167956bb..a92d54685 100644 Binary files a/public/roadmaps/mlops.png and b/public/roadmaps/mlops.png differ diff --git a/public/roadmaps/mongodb.png b/public/roadmaps/mongodb.png index 9ab826b3f..06828b945 100644 Binary files a/public/roadmaps/mongodb.png and b/public/roadmaps/mongodb.png differ diff --git a/public/roadmaps/nodejs.png b/public/roadmaps/nodejs.png index 6cafe0b5b..8a68c1e71 100644 Binary files a/public/roadmaps/nodejs.png and b/public/roadmaps/nodejs.png differ diff --git a/public/roadmaps/python.png b/public/roadmaps/python.png index 9c9487ede..d9c553070 100644 Binary files a/public/roadmaps/python.png and b/public/roadmaps/python.png differ diff --git a/public/roadmaps/qa.png b/public/roadmaps/qa.png index 1979442ac..bb5cf61f5 100644 Binary files a/public/roadmaps/qa.png and b/public/roadmaps/qa.png differ diff --git a/public/roadmaps/react.png b/public/roadmaps/react.png index 8058e53d3..6df1d03a8 100644 Binary files a/public/roadmaps/react.png and b/public/roadmaps/react.png differ diff --git a/public/roadmaps/rust.png b/public/roadmaps/rust.png index dcc150e00..4773cc024 100644 Binary files a/public/roadmaps/rust.png and b/public/roadmaps/rust.png differ diff --git a/public/roadmaps/software-architect.png b/public/roadmaps/software-architect.png index 430377240..a5bdbd14b 100644 Binary files a/public/roadmaps/software-architect.png and b/public/roadmaps/software-architect.png differ diff --git a/public/roadmaps/software-design-architecture.png b/public/roadmaps/software-design-architecture.png index d30910269..01b1eb911 100644 Binary files a/public/roadmaps/software-design-architecture.png and b/public/roadmaps/software-design-architecture.png differ diff --git a/public/roadmaps/sql.png b/public/roadmaps/sql.png index b3a4abd36..a50bdadb2 100644 Binary files a/public/roadmaps/sql.png and b/public/roadmaps/sql.png differ diff --git a/public/roadmaps/technical-writer.png b/public/roadmaps/technical-writer.png index 9da49ad08..d5cdb233c 100644 Binary files a/public/roadmaps/technical-writer.png and b/public/roadmaps/technical-writer.png differ diff --git a/public/roadmaps/typescript.png b/public/roadmaps/typescript.png index bc0ee447a..6bfd2cecd 100644 Binary files a/public/roadmaps/typescript.png and b/public/roadmaps/typescript.png differ diff --git a/public/roadmaps/ux-design.png b/public/roadmaps/ux-design.png index 5813c1a00..05f10c130 100644 Binary files a/public/roadmaps/ux-design.png and b/public/roadmaps/ux-design.png differ diff --git a/public/roadmaps/vue.png b/public/roadmaps/vue.png index 3b811e587..bb9235ea4 100644 Binary files a/public/roadmaps/vue.png and b/public/roadmaps/vue.png differ diff --git a/scripts/compress-images.ts b/scripts/compress-images.ts new file mode 100644 index 000000000..1db8f5f86 --- /dev/null +++ b/scripts/compress-images.ts @@ -0,0 +1,154 @@ +import fs from 'node:fs/promises'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; +import sharp from 'sharp'; + +// ERROR: `__dirname` is not defined in ES module scope +// https://iamwebwiz.medium.com/how-to-fix-dirname-is-not-defined-in-es-module-scope-34d94a86694d +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); + +const allowedFileExtensions = [ + '.avif', + '.gif', + '.heif', + '.jpeg', + '.png', + '.raw', + '.tiff', + '.webp', +] as const; +type AllowedFileExtension = (typeof allowedFileExtensions)[number]; + +const publicDir = path.join(__dirname, '../public'); +const cacheFile = path.join(__dirname, '/compressed-images.json'); + +const KB_IN_BYTES = 1024; +const COMPRESS_CONFIG = { + avif: { + chromaSubsampling: '4:4:4', + effort: 9.0, + }, + gif: { + effort: 10.0, + }, + jpeg: { + chromaSubsampling: '4:4:4', + mozjpeg: true, + trellisQuantisation: true, + overshootDeringing: true, + optimiseScans: true, + }, + png: { + compressionLevel: 9.0, + palette: true, + }, + raw: {}, + tiff: { + compression: 'lzw', + }, + webp: { + effort: 6.0, + }, +}; + +(async () => { + let cache: string[] = []; + const isCacheFileExists = await fs + .access(cacheFile) + .then(() => true) + .catch(() => false); + + if (isCacheFileExists) { + const cacheFileContent = await fs.readFile(cacheFile, 'utf8'); + cache = JSON.parse(cacheFileContent); + } + + const images = await recursiveGetImages(publicDir); + for (const image of images) { + const extname = path.extname(image).toLowerCase() as AllowedFileExtension; + if ( + !allowedFileExtensions.includes(extname) || + image.includes('node_modules') || + image.includes('.astro') || + image.includes('.vscode') || + image.includes('.git') + ) { + continue; + } + + const stats = await fs.stat(image); + const relativeImagePath = path.relative(path.join(__dirname, '..'), image); + if (cache.includes(relativeImagePath)) { + continue; + } + + const prevSize = stats.size / KB_IN_BYTES; + + let imageBuffer: Buffer | undefined; + switch (extname) { + case '.avif': + imageBuffer = await sharp(image).avif(COMPRESS_CONFIG.avif).toBuffer(); + break; + case '.gif': + imageBuffer = await sharp(image).gif(COMPRESS_CONFIG.gif).toBuffer(); + break; + case '.heif': + imageBuffer = await sharp(image).heif().toBuffer(); + break; + case '.jpeg': + imageBuffer = await sharp(image).jpeg(COMPRESS_CONFIG.jpeg).toBuffer(); + break; + case '.png': + imageBuffer = await sharp(image).png(COMPRESS_CONFIG.png).toBuffer(); + break; + case '.raw': + imageBuffer = await sharp(image).raw().toBuffer(); + break; + case '.tiff': + imageBuffer = await sharp(image).tiff(COMPRESS_CONFIG.tiff).toBuffer(); + break; + case '.webp': + imageBuffer = await sharp(image).webp(COMPRESS_CONFIG.webp).toBuffer(); + break; + } + + if (!imageBuffer) { + console.error(`❌ ${image} Compressing failed!`); + continue; + } + + const newSize = imageBuffer.length / KB_IN_BYTES; + const diff = prevSize - newSize; + if (diff <= 0) { + console.log(`📦 Skipped ${relativeImagePath}`); + continue; + } + + const diffPercent = ((diff / prevSize) * 100).toFixed(2); + console.log( + `📦 Reduced ${prevSize.toFixed(2)}KB → ${newSize.toFixed(2)}KB (${diff.toFixed(2)}KB, ${diffPercent}%) for ${relativeImagePath}`, + ); + + await fs.writeFile(image, imageBuffer); + cache.push(relativeImagePath); + + // So that we don't lose the cache if the script crashes + await fs.writeFile(cacheFile, JSON.stringify(cache, null, 2), 'utf8'); + } + + await fs.writeFile(cacheFile, JSON.stringify(cache, null, 2), 'utf8'); +})(); + +async function recursiveGetImages(dir: string): Promise { + const subdirs = await fs.readdir(dir, { withFileTypes: true }); + + const files = await Promise.all( + subdirs.map((dirent) => { + const res = path.resolve(dir, dirent.name); + return dirent.isDirectory() ? recursiveGetImages(res) : res; + }), + ); + + return Array.prototype.concat(...files); +} diff --git a/scripts/compressed-images.json b/scripts/compressed-images.json new file mode 100644 index 000000000..29927b4b6 --- /dev/null +++ b/scripts/compressed-images.json @@ -0,0 +1,199 @@ +[ + "public/authors/dmytrobol.png", + "public/authors/ebrahimbharmal007.png", + "public/authors/jesse.png", + "public/authors/peter-thaleikis.png", + "public/best-practices/api-security.png", + "public/best-practices/aws.png", + "public/best-practices/backend-performance.png", + "public/best-practices/frontend-performance.png", + "public/guides/asymptotic-notation.png", + "public/guides/avoid-render-blocking-javascript-with-async-defer.png", + "public/guides/backend-languages/back-vs-front.png", + "public/guides/backend-languages/backend-roadmap-part.png", + "public/guides/backend-languages/javascript-interest.png", + "public/guides/backend-languages/pypl-go-index.png", + "public/guides/bash-vs-shell.jpeg", + "public/guides/basic-authentication/chrome-basic-auth.png", + "public/guides/basic-authentication/safari-basic-auth.png", + "public/guides/basic-authentication.png", + "public/guides/big-o-notation.png", + "public/guides/character-encodings.png", + "public/guides/ci-cd.png", + "public/guides/dhcp.png", + "public/guides/jwt-authentication.png", + "public/guides/llms.png", + "public/guides/project-history.png", + "public/guides/proxy/forward-proxy.png", + "public/guides/proxy/proxy-example.png", + "public/guides/proxy/reverse-proxy.png", + "public/guides/random-numbers.png", + "public/guides/session-authentication.png", + "public/guides/sli-slo-sla.jpeg", + "public/guides/ssl-tls-https-ssh.png", + "public/guides/token-authentication.png", + "public/guides/torrent-client/download.png", + "public/guides/torrent-client/pipelining.png", + "public/guides/unfamiliar-codebase.png", + "public/guides/web-vitals.png", + "public/images/brand.png", + "public/images/default-avatar.png", + "public/images/features/in-progress.png", + "public/images/icons8-wand.gif", + "public/images/partners/ambassador-graphic-1.png", + "public/images/partners/ambassador-graphic-2.png", + "public/images/partners/apollo-workshop.png", + "public/images/partners/graphql-summit.png", + "public/images/partners/nginx.png", + "public/images/roadmap-editor.jpeg", + "public/images/system-design.png", + "public/images/team-promo/contact.png", + "public/images/team-promo/documentation.png", + "public/images/team-promo/growth-plans.png", + "public/images/team-promo/hero-img.png", + "public/images/team-promo/hero.png", + "public/images/team-promo/invite-members.png", + "public/images/team-promo/many-roadmaps.png", + "public/images/team-promo/onboarding.png", + "public/images/team-promo/our-roadmaps.png", + "public/images/team-promo/progress-tracking.png", + "public/images/team-promo/roadmap-editor.png", + "public/images/team-promo/sharing-settings.png", + "public/images/team-promo/skill-gap.png", + "public/images/team-promo/team-dashboard.png", + "public/images/team-promo/team-insights.png", + "public/images/team-promo/update-progress.png", + "public/manifest/apple-touch-icon.png", + "public/manifest/icon152.png", + "public/manifest/icon196.png", + "public/manifest/icon32.png", + "public/og-images/best-practices/api-security.png", + "public/og-images/best-practices/aws.png", + "public/og-images/best-practices/backend-performance.png", + "public/og-images/best-practices/code-review.png", + "public/og-images/best-practices/frontend-performance.png", + "public/og-images/guides/asymptotic-notation.png", + "public/og-images/guides/avoid-render-blocking-javascript-with-async-defer.png", + "public/og-images/guides/backend-developer-skills.png", + "public/og-images/guides/backend-developer-tools.png", + "public/og-images/guides/backend-languages.png", + "public/og-images/guides/basic-authentication.png", + "public/og-images/guides/basics-of-authentication.png", + "public/og-images/guides/big-o-notation.png", + "public/og-images/guides/character-encodings.png", + "public/og-images/guides/ci-cd.png", + "public/og-images/guides/consistency-patterns-in-distributed-systems.png", + "public/og-images/guides/design-patterns-for-humans.png", + "public/og-images/guides/dhcp-in-one-picture.png", + "public/og-images/guides/dns-in-one-picture.png", + "public/og-images/guides/free-resources-to-learn-llms.png", + "public/og-images/guides/history-of-javascript.png", + "public/og-images/guides/how-to-setup-a-jump-server.png", + "public/og-images/guides/http-basic-authentication.png", + "public/og-images/guides/http-caching.png", + "public/og-images/guides/introduction-to-llms.png", + "public/og-images/guides/journey-to-http2.png", + "public/og-images/guides/jwt-authentication.png", + "public/og-images/guides/levels-of-seniority.png", + "public/og-images/guides/oauth.png", + "public/og-images/guides/proxy-servers.png", + "public/og-images/guides/random-numbers.png", + "public/og-images/guides/scaling-databases.png", + "public/og-images/guides/session-authentication.png", + "public/og-images/guides/session-based-authentication.png", + "public/og-images/guides/setup-and-auto-renew-ssl-certificates.png", + "public/og-images/guides/single-command-database-setup.png", + "public/og-images/guides/ssl-tls-https-ssh.png", + "public/og-images/guides/sso.png", + "public/og-images/guides/token-authentication.png", + "public/og-images/guides/torrent-client.png", + "public/og-images/guides/unfamiliar-codebase.png", + "public/og-images/guides/what-are-web-vitals.png", + "public/og-images/guides/what-is-internet.png", + "public/og-images/guides/what-is-sli-slo-sla.png", + "public/og-images/guides/why-build-it-and-they-will-come-wont-work-anymore.png", + "public/og-images/roadmaps/android.png", + "public/og-images/roadmaps/angular.png", + "public/og-images/roadmaps/aspnet-core.png", + "public/og-images/roadmaps/aws.png", + "public/og-images/roadmaps/backend.png", + "public/og-images/roadmaps/blockchain.png", + "public/og-images/roadmaps/code-review.png", + "public/og-images/roadmaps/computer-science.png", + "public/og-images/roadmaps/cpp.png", + "public/og-images/roadmaps/cyber-security.png", + "public/og-images/roadmaps/data-analyst.png", + "public/og-images/roadmaps/datastructures-and-algorithms.png", + "public/og-images/roadmaps/design-system.png", + "public/og-images/roadmaps/devops.png", + "public/og-images/roadmaps/docker.png", + "public/og-images/roadmaps/flutter.png", + "public/og-images/roadmaps/frontend.png", + "public/og-images/roadmaps/full-stack.png", + "public/og-images/roadmaps/game-developer.png", + "public/og-images/roadmaps/golang.png", + "public/og-images/roadmaps/graphql.png", + "public/og-images/roadmaps/java.png", + "public/og-images/roadmaps/javascript.png", + "public/og-images/roadmaps/kubernetes.png", + "public/og-images/roadmaps/mlops.png", + "public/og-images/roadmaps/mongodb.png", + "public/og-images/roadmaps/nodejs.png", + "public/og-images/roadmaps/postgresql-dba.png", + "public/og-images/roadmaps/prompt-engineering.png", + "public/og-images/roadmaps/python.png", + "public/og-images/roadmaps/qa.png", + "public/og-images/roadmaps/react-native.png", + "public/og-images/roadmaps/react.png", + "public/og-images/roadmaps/rust.png", + "public/og-images/roadmaps/server-side-game-developer.png", + "public/og-images/roadmaps/software-architect.png", + "public/og-images/roadmaps/software-design-architecture.png", + "public/og-images/roadmaps/spring-boot.png", + "public/og-images/roadmaps/sql.png", + "public/og-images/roadmaps/system-design.png", + "public/og-images/roadmaps/technical-writer.png", + "public/og-images/roadmaps/typescript.png", + "public/og-images/roadmaps/ux-design.png", + "public/og-images/roadmaps/vue.png", + "public/og-images/sql-roadmap.png", + "public/roadmaps/android.png", + "public/roadmaps/aspnet-core.png", + "public/roadmaps/aws.png", + "public/roadmaps/backend.png", + "public/roadmaps/blockchain.png", + "public/roadmaps/computer-science.png", + "public/roadmaps/cpp.png", + "public/roadmaps/cyber-security.png", + "public/roadmaps/data-analyst.png", + "public/roadmaps/design-system.png", + "public/roadmaps/devops.png", + "public/roadmaps/docker.png", + "public/roadmaps/flutter.png", + "public/roadmaps/frontend.png", + "public/roadmaps/full-stack.png", + "public/roadmaps/game-developer.png", + "public/roadmaps/graphql.png", + "public/roadmaps/intro.png", + "public/roadmaps/java.png", + "public/roadmaps/javascript.png", + "public/roadmaps/kubernetes.png", + "public/roadmaps/mlops.png", + "public/roadmaps/mongodb.png", + "public/roadmaps/nodejs.png", + "public/roadmaps/python.png", + "public/roadmaps/qa.png", + "public/roadmaps/react.png", + "public/roadmaps/rust.png", + "public/roadmaps/software-architect.png", + "public/roadmaps/software-design-architecture.png", + "public/roadmaps/sql.png", + "public/roadmaps/technical-writer.png", + "public/roadmaps/typescript.png", + "public/roadmaps/ux-design.png", + "public/roadmaps/vue.png", + "public/og-images/roadmaps/ai-data-scientist.png", + "public/og-images/roadmaps/linux.png", + "public/roadmaps/ai-data-scientist.png", + "public/roadmaps/linux.png" +] \ No newline at end of file