Compare commits
182 Commits
ai/roadmap
...
fix/activi
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0264b88069 | ||
|
|
71d84faf73 | ||
|
|
66e4793032 | ||
|
|
32cbfd6699 | ||
|
|
043bf59c87 | ||
|
|
3e0d8a5b3d | ||
|
|
2b20996134 | ||
|
|
20be28653f | ||
|
|
755e494224 | ||
|
|
f6d4da48f9 | ||
|
|
a5c28f09a7 | ||
|
|
25675613a6 | ||
|
|
89f975e10d | ||
|
|
59695c2032 | ||
|
|
b7a858823c | ||
|
|
d441c9ac58 | ||
|
|
6c977a2781 | ||
|
|
0fa4dfe93e | ||
|
|
b9b9a68eaa | ||
|
|
e7f8f394b4 | ||
|
|
5a910b53e6 | ||
|
|
c72dd0081c | ||
|
|
f2a2ac9ec8 | ||
|
|
8ceedadd22 | ||
|
|
c3bcaa7489 | ||
|
|
83f60ce01b | ||
|
|
88b29a963e | ||
|
|
cf7bb32277 | ||
|
|
2eb90d78e5 | ||
|
|
2a9195c6d2 | ||
|
|
cdd02fef30 | ||
|
|
b884a9cd29 | ||
|
|
ed06724d78 | ||
|
|
3e52fef36b | ||
|
|
38b29c3bf1 | ||
|
|
a739d56d97 | ||
|
|
24ade1c8f3 | ||
|
|
9fcf7b7c93 | ||
|
|
3f132ca632 | ||
|
|
8d42807d0c | ||
|
|
90f1a9c432 | ||
|
|
bd5eee4a9e | ||
|
|
a1710b17c8 | ||
|
|
f77bfc499f | ||
|
|
33c318fbda | ||
|
|
961d398b8d | ||
|
|
6326a80b22 | ||
|
|
88147bef31 | ||
|
|
240c55cc6a | ||
|
|
f173220966 | ||
|
|
3a1b896eb2 | ||
|
|
caa8681272 | ||
|
|
ba8217d61c | ||
|
|
57faa21148 | ||
|
|
f30334cb9b | ||
|
|
e1069bbae3 | ||
|
|
7ea80b39fa | ||
|
|
7b297bdba6 | ||
|
|
3d53ce67e9 | ||
|
|
6cfea7994e | ||
|
|
d802841f1a | ||
|
|
fd46f026dd | ||
|
|
41b179fc66 | ||
|
|
5f96fac3cc | ||
|
|
39fc4cb502 | ||
|
|
fac9a2bd6a | ||
|
|
2bc6d16f3f | ||
|
|
a77b0eefd0 | ||
|
|
dccbe683fd | ||
|
|
4db353e017 | ||
|
|
91dc6b862c | ||
|
|
d2efad25a8 | ||
|
|
4db5cc920b | ||
|
|
eef734abfd | ||
|
|
8e252cc062 | ||
|
|
abf33b8f47 | ||
|
|
e1a9dcc511 | ||
|
|
3cf246cc31 | ||
|
|
f9e90bfda5 | ||
|
|
d042f4511c | ||
|
|
b2adb619f0 | ||
|
|
3ab6942cee | ||
|
|
a20400f6a2 | ||
|
|
285f2c05f2 | ||
|
|
e716007245 | ||
|
|
c2a5e5a805 | ||
|
|
c4c7499a22 | ||
|
|
ad6002a514 | ||
|
|
b029eebd7b | ||
|
|
bacf0e6320 | ||
|
|
64ed4b6c23 | ||
|
|
5da5f41a8d | ||
|
|
ed6f4b64a6 | ||
|
|
c768cac62f | ||
|
|
3ad7765658 | ||
|
|
0e0a70fcbd | ||
|
|
5c330094f9 | ||
|
|
e9f5462180 | ||
|
|
c9534b30f5 | ||
|
|
8537698d91 | ||
|
|
9414089714 | ||
|
|
25965d91a0 | ||
|
|
7ce02300de | ||
|
|
f0859628f7 | ||
|
|
ff94ea7116 | ||
|
|
abad548961 | ||
|
|
6e81855645 | ||
|
|
60568caff7 | ||
|
|
852622f5ac | ||
|
|
03173f6017 | ||
|
|
5c1e3cae3f | ||
|
|
a3f9c8e5e2 | ||
|
|
43f9412dd4 | ||
|
|
58e11afc94 | ||
|
|
854c39ec39 | ||
|
|
907391b34c | ||
|
|
5a56b0f753 | ||
|
|
5fb4d3e2dc | ||
|
|
0a89057823 | ||
|
|
add0db5514 | ||
|
|
2eec44303c | ||
|
|
84fc0e40b5 | ||
|
|
d3ee18e2a1 | ||
|
|
4988ba0604 | ||
|
|
fd48e980cd | ||
|
|
dd728b526e | ||
|
|
f8f29d2a17 | ||
|
|
5bdfe48cad | ||
|
|
e4e0f9ac98 | ||
|
|
40c8bfc312 | ||
|
|
3479201e20 | ||
|
|
1092528de0 | ||
|
|
45086a6314 | ||
|
|
b6798ea3a2 | ||
|
|
1cb29d0fc7 | ||
|
|
1d9adf742b | ||
|
|
625d9a1f5b | ||
|
|
08bc4c38ae | ||
|
|
cabbf51150 | ||
|
|
730af9b973 | ||
|
|
4e96a58e54 | ||
|
|
5230ae22be | ||
|
|
18deef46db | ||
|
|
e6bea59ab5 | ||
|
|
66e4f3c97c | ||
|
|
9511de967c | ||
|
|
038bdb0e7d | ||
|
|
8a1f5d1bb4 | ||
|
|
3e8af3bd0f | ||
|
|
08a3970d08 | ||
|
|
e4f9b9fe01 | ||
|
|
2ab7690271 | ||
|
|
cdb9a87c85 | ||
|
|
0d43103323 | ||
|
|
77d67e29eb | ||
|
|
4a00a7bc79 | ||
|
|
ff2c13947b | ||
|
|
d880f84e0a | ||
|
|
7cffcccfe8 | ||
|
|
88ddeeb5fb | ||
|
|
812a39154c | ||
|
|
6e6489bc4c | ||
|
|
696e4f1890 | ||
|
|
37c18ec3cc | ||
|
|
9e3d50a84d | ||
|
|
01c65084b5 | ||
|
|
05fe51ca33 | ||
|
|
59c0a7d451 | ||
|
|
d0bd4d6faf | ||
|
|
ec9d2d4c74 | ||
|
|
1eb5a9c49d | ||
|
|
c3a61e7f34 | ||
|
|
f838b5dac7 | ||
|
|
64cfe503af | ||
|
|
5b7e7b9767 | ||
|
|
58a5d27854 | ||
|
|
18db62748c | ||
|
|
c9703c8589 | ||
|
|
da526fa684 | ||
|
|
cd6232035f | ||
|
|
09cb1ea827 | ||
|
|
d5fdc62343 |
8
.astro/settings.json
Normal file
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"devToolbar": {
|
||||
"enabled": false
|
||||
},
|
||||
"_variables": {
|
||||
"lastUpdateCheck": 1714413381505
|
||||
}
|
||||
}
|
||||
20
.github/workflows/cloudfront-cache.yml
vendored
Normal file
@@ -0,0 +1,20 @@
|
||||
name: Clears Cloudfront Cache
|
||||
on:
|
||||
# Allow manual Run
|
||||
workflow_dispatch:
|
||||
# Run at midnight utc
|
||||
schedule:
|
||||
- cron: '0 0 * * *'
|
||||
jobs:
|
||||
aws_costs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Clear Cloudfront Caching
|
||||
run: |
|
||||
curl -L \
|
||||
-X POST \
|
||||
-H "Accept: application/vnd.github+json" \
|
||||
-H "Authorization: Bearer ${{ secrets.GH_PAT }}" \
|
||||
-H "X-GitHub-Api-Version: 2022-11-28" \
|
||||
https://api.github.com/repos/roadmapsh/infra-ansible/actions/workflows/playbook.yml/dispatches \
|
||||
-d '{ "ref":"master", "inputs": { "playbook": "roadmap_web.yml", "tags": "cloudfront", "is_verbose": false } }'
|
||||
93
.github/workflows/deployment.yml
vendored
@@ -1,41 +1,62 @@
|
||||
name: App Deployment
|
||||
name: Deploy to EC2
|
||||
on:
|
||||
workflow_dispatch: # allow manual run
|
||||
push:
|
||||
branches: [ master ]
|
||||
env:
|
||||
PUBLIC_API_URL: "https://api.roadmap.sh"
|
||||
PUBLIC_EDITOR_APP_URL: "https://draw.roadmap.sh"
|
||||
PUBLIC_AVATAR_BASE_URL: "https://dodrc8eu8m09s.cloudfront.net/avatars"
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
CI: true
|
||||
branches:
|
||||
- master
|
||||
jobs:
|
||||
build:
|
||||
deploy:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
persist-credentials: false
|
||||
- uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: 18
|
||||
- name: Prepare Draw Repository
|
||||
run: |
|
||||
git clone https://${{ secrets.GH_PAT }}@github.com/roadmapsh/web-draw.git .temp/web-draw --depth 1
|
||||
- uses: pnpm/action-setup@v2.2.2
|
||||
with:
|
||||
version: 7.13.4
|
||||
- name: Setup Environment
|
||||
run: |
|
||||
pnpm install
|
||||
- name: Generate meta and build
|
||||
run: |
|
||||
npm run generate-renderer
|
||||
npm run build
|
||||
touch ./dist/.nojekyll
|
||||
echo 'roadmap.sh' > ./dist/CNAME
|
||||
- name: Deploy to GH Pages
|
||||
run: |
|
||||
git config user.email "kamranahmed.se@gmail.com"
|
||||
git config user.name "Kamran Ahmed"
|
||||
git remote set-url origin https://x-access-token:${GITHUB_TOKEN}@github.com/${GITHUB_REPOSITORY}.git
|
||||
npm run deploy
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
fetch-depth: 2
|
||||
- uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: 20
|
||||
- uses: pnpm/action-setup@v3.0.0
|
||||
with:
|
||||
version: 8.15.6
|
||||
|
||||
# --------------------
|
||||
# Setup configuration
|
||||
# --------------------
|
||||
- name: Prepare configuration files
|
||||
run: |
|
||||
git clone https://${{ secrets.GH_PAT }}@github.com/roadmapsh/infra-config.git configuration --depth 1
|
||||
- name: Copy configuration files
|
||||
run: |
|
||||
cp configuration/dist/github/developer-roadmap.env .env
|
||||
|
||||
# --------------------
|
||||
# Prepare the build
|
||||
# --------------------
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
pnpm install
|
||||
- name: Generate build
|
||||
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
|
||||
|
||||
# --------------------
|
||||
# Deploy to EC2
|
||||
# --------------------
|
||||
- uses: webfactory/ssh-agent@v0.7.0
|
||||
with:
|
||||
ssh-private-key: ${{ secrets.EC2_PRIVATE_KEY }}
|
||||
- name: Deploy app to EC2
|
||||
run: |
|
||||
rsync -apvz --delete --no-times --exclude "configuration" -e "ssh -o StrictHostKeyChecking=no" -p ./ ${{ secrets.EC2_USERNAME }}@${{ secrets.EC2_HOST }}:/var/www/roadmap.sh/
|
||||
- name: Restart PM2
|
||||
uses: appleboy/ssh-action@master
|
||||
with:
|
||||
host: ${{ secrets.EC2_HOST }}
|
||||
username: ${{ secrets.EC2_USERNAME }}
|
||||
key: ${{ secrets.EC2_PRIVATE_KEY }}
|
||||
script: |
|
||||
cd /var/www/roadmap.sh
|
||||
sudo pm2 restart web-roadmap
|
||||
@@ -1,10 +1,9 @@
|
||||
// https://astro.build/config
|
||||
import sitemap from '@astrojs/sitemap';
|
||||
import tailwind from '@astrojs/tailwind';
|
||||
import compress from 'astro-compress';
|
||||
import node from '@astrojs/node';
|
||||
import { defineConfig } from 'astro/config';
|
||||
import rehypeExternalLinks from 'rehype-external-links';
|
||||
import { fileURLToPath } from 'node:url';
|
||||
import { serializeSitemap, shouldIndexPage } from './sitemap.mjs';
|
||||
|
||||
import react from '@astrojs/react';
|
||||
@@ -29,7 +28,7 @@ export default defineConfig({
|
||||
'mailto:',
|
||||
'https://github.com/kamranahmedse',
|
||||
'https://thenewstack.io',
|
||||
'https://cs.fyi',
|
||||
'https://kamranahmed.info',
|
||||
'https://roadmap.sh',
|
||||
];
|
||||
if (whiteListedStarts.some((start) => href.startsWith(start))) {
|
||||
@@ -41,9 +40,11 @@ export default defineConfig({
|
||||
],
|
||||
],
|
||||
},
|
||||
build: {
|
||||
format: 'file',
|
||||
},
|
||||
output: 'hybrid',
|
||||
adapter: node({
|
||||
mode: 'standalone',
|
||||
}),
|
||||
trailingSlash: 'never',
|
||||
integrations: [
|
||||
tailwind({
|
||||
config: {
|
||||
@@ -54,11 +55,6 @@ export default defineConfig({
|
||||
filter: shouldIndexPage,
|
||||
serialize: serializeSitemap,
|
||||
}),
|
||||
compress({
|
||||
HTML: false,
|
||||
CSS: false,
|
||||
JavaScript: false,
|
||||
}),
|
||||
react(),
|
||||
],
|
||||
});
|
||||
|
||||
67
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",
|
||||
@@ -19,55 +18,69 @@
|
||||
"generate-renderer": "sh scripts/generate-renderer.sh",
|
||||
"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": {
|
||||
"@astrojs/react": "^3.0.10",
|
||||
"@astrojs/sitemap": "^3.0.5",
|
||||
"@astrojs/node": "^8.2.5",
|
||||
"@astrojs/react": "^3.3.1",
|
||||
"@astrojs/sitemap": "^3.1.4",
|
||||
"@astrojs/tailwind": "^5.1.0",
|
||||
"@fingerprintjs/fingerprintjs": "^4.2.2",
|
||||
"@nanostores/react": "^0.7.1",
|
||||
"@types/react": "^18.2.56",
|
||||
"@types/react-dom": "^18.2.19",
|
||||
"astro": "^4.4.0",
|
||||
"astro-compress": "^2.2.10",
|
||||
"clsx": "^2.1.0",
|
||||
"@fingerprintjs/fingerprintjs": "^4.3.0",
|
||||
"@nanostores/react": "^0.7.2",
|
||||
"@resvg/resvg-js": "^2.6.2",
|
||||
"@types/react": "^18.3.1",
|
||||
"@types/react-dom": "^18.3.0",
|
||||
"astro": "^4.7.0",
|
||||
"clsx": "^2.1.1",
|
||||
"dayjs": "^1.11.11",
|
||||
"dom-to-image": "^2.6.0",
|
||||
"dracula-prism": "^2.1.16",
|
||||
"jose": "^5.2.2",
|
||||
"gray-matter": "^4.0.3",
|
||||
"htm": "^3.1.1",
|
||||
"image-size": "^1.1.1",
|
||||
"jose": "^5.2.4",
|
||||
"js-cookie": "^3.0.5",
|
||||
"lucide-react": "^0.334.0",
|
||||
"nanoid": "^5.0.5",
|
||||
"nanostores": "^0.9.5",
|
||||
"node-html-parser": "^6.1.12",
|
||||
"npm-check-updates": "^16.14.15",
|
||||
"lucide-react": "^0.376.0",
|
||||
"nanoid": "^5.0.7",
|
||||
"nanostores": "^0.10.3",
|
||||
"node-html-parser": "^6.1.13",
|
||||
"npm-check-updates": "^16.14.20",
|
||||
"prismjs": "^1.29.0",
|
||||
"react": "^18.2.0",
|
||||
"react": "^18.3.1",
|
||||
"react-calendar-heatmap": "^1.9.0",
|
||||
"react-confetti": "^6.1.0",
|
||||
"react-dom": "^18.2.0",
|
||||
"reactflow": "^11.10.4",
|
||||
"react-dom": "^18.3.1",
|
||||
"react-tooltip": "^5.26.4",
|
||||
"reactflow": "^11.11.2",
|
||||
"rehype-external-links": "^3.0.0",
|
||||
"remark-parse": "^11.0.0",
|
||||
"roadmap-renderer": "^1.0.6",
|
||||
"satori": "^0.10.13",
|
||||
"satori-html": "^0.3.2",
|
||||
"sharp": "^0.33.3",
|
||||
"slugify": "^1.6.6",
|
||||
"tailwind-merge": "^2.2.1",
|
||||
"tailwindcss": "^3.4.1",
|
||||
"tailwind-merge": "^2.3.0",
|
||||
"tailwindcss": "^3.4.3",
|
||||
"unified": "^11.0.4",
|
||||
"zustand": "^4.5.1"
|
||||
"zustand": "^4.5.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@playwright/test": "^1.41.2",
|
||||
"@tailwindcss/typography": "^0.5.10",
|
||||
"@playwright/test": "^1.43.1",
|
||||
"@tailwindcss/typography": "^0.5.13",
|
||||
"@types/dom-to-image": "^2.6.7",
|
||||
"@types/js-cookie": "^3.0.6",
|
||||
"@types/prismjs": "^1.26.3",
|
||||
"@types/react-calendar-heatmap": "^1.6.7",
|
||||
"csv-parser": "^3.0.0",
|
||||
"gh-pages": "^6.1.1",
|
||||
"js-yaml": "^4.1.0",
|
||||
"markdown-it": "^14.0.0",
|
||||
"openai": "^4.28.0",
|
||||
"markdown-it": "^14.1.0",
|
||||
"openai": "^4.38.5",
|
||||
"prettier": "^3.2.5",
|
||||
"prettier-plugin-astro": "^0.13.0",
|
||||
"prettier-plugin-tailwindcss": "^0.5.11"
|
||||
"prettier-plugin-tailwindcss": "^0.5.14",
|
||||
"tsx": "^4.7.3"
|
||||
}
|
||||
}
|
||||
|
||||
3081
pnpm-lock.yaml
generated
|
Before Width: | Height: | Size: 844 KiB After Width: | Height: | Size: 509 KiB |
|
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 4.3 KiB After Width: | Height: | Size: 2.2 KiB |
|
Before Width: | Height: | Size: 150 KiB After Width: | Height: | Size: 31 KiB |
|
Before Width: | Height: | Size: 505 KiB After Width: | Height: | Size: 185 KiB |
|
Before Width: | Height: | Size: 469 KiB After Width: | Height: | Size: 174 KiB |
BIN
public/best-practices/backend-performance.png
Normal file
|
After Width: | Height: | Size: 479 KiB |
|
Before Width: | Height: | Size: 378 KiB After Width: | Height: | Size: 140 KiB |
BIN
public/fonts/BalsamiqSans-Regular.ttf
Normal file
|
Before Width: | Height: | Size: 987 KiB After Width: | Height: | Size: 351 KiB |
|
Before Width: | Height: | Size: 875 KiB After Width: | Height: | Size: 420 KiB |
|
Before Width: | Height: | Size: 119 KiB After Width: | Height: | Size: 36 KiB |
|
Before Width: | Height: | Size: 80 KiB After Width: | Height: | Size: 34 KiB |
|
Before Width: | Height: | Size: 99 KiB After Width: | Height: | Size: 36 KiB |
|
Before Width: | Height: | Size: 48 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 148 KiB After Width: | Height: | Size: 126 KiB |
|
Before Width: | Height: | Size: 834 KiB After Width: | Height: | Size: 431 KiB |
|
Before Width: | Height: | Size: 404 KiB After Width: | Height: | Size: 235 KiB |
|
Before Width: | Height: | Size: 383 KiB After Width: | Height: | Size: 205 KiB |
|
Before Width: | Height: | Size: 447 KiB After Width: | Height: | Size: 242 KiB |
|
Before Width: | Height: | Size: 1.4 MiB After Width: | Height: | Size: 572 KiB |
|
Before Width: | Height: | Size: 734 KiB After Width: | Height: | Size: 283 KiB |
|
Before Width: | Height: | Size: 1.1 MiB After Width: | Height: | Size: 437 KiB |
|
Before Width: | Height: | Size: 2.1 MiB After Width: | Height: | Size: 799 KiB |
|
Before Width: | Height: | Size: 691 KiB After Width: | Height: | Size: 233 KiB |
|
Before Width: | Height: | Size: 2.0 MiB After Width: | Height: | Size: 756 KiB |
|
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 7.7 KiB |
|
Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 248 KiB After Width: | Height: | Size: 142 KiB |
|
Before Width: | Height: | Size: 1.7 MiB After Width: | Height: | Size: 685 KiB |
|
Before Width: | Height: | Size: 168 KiB After Width: | Height: | Size: 128 KiB |
|
Before Width: | Height: | Size: 297 KiB After Width: | Height: | Size: 92 KiB |
|
Before Width: | Height: | Size: 1.5 MiB After Width: | Height: | Size: 602 KiB |
|
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 84 KiB After Width: | Height: | Size: 44 KiB |
|
Before Width: | Height: | Size: 937 KiB After Width: | Height: | Size: 345 KiB |
|
Before Width: | Height: | Size: 1.1 MiB After Width: | Height: | Size: 516 KiB |
|
Before Width: | Height: | Size: 3.8 KiB After Width: | Height: | Size: 3.6 KiB |
|
Before Width: | Height: | Size: 7.1 KiB After Width: | Height: | Size: 3.1 KiB |
|
Before Width: | Height: | Size: 58 KiB After Width: | Height: | Size: 17 KiB |
3
public/images/graph.svg
Normal file
@@ -0,0 +1,3 @@
|
||||
<svg width="46" height="27" viewBox="0 0 46 27" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M43.354 0.9C42.184 0.9 41.2371 1.84684 41.2371 3.01686C41.2371 3.30867 41.3062 3.57708 41.4117 3.82435L33.4085 15.0163C33.38 15.0161 33.3514 15.0167 33.3248 15.0172C33.3051 15.0176 33.2864 15.018 33.2697 15.018C32.8703 15.018 32.484 15.1223 32.161 15.3186L25.2976 11.9024C25.1995 10.8219 24.2903 9.97585 23.1854 9.97585C22.0154 9.97585 21.0686 10.9227 21.0686 12.0927C21.0686 12.1865 21.0799 12.2794 21.0925 12.3656L13.8077 18.1561C13.5852 18.0783 13.3472 18.0433 13.1011 18.0433C12.0622 18.0433 11.2066 18.7882 11.0265 19.7732L4.26122 22.5041C3.91213 22.2447 3.48642 22.077 3.01686 22.077C1.84684 22.077 0.9 23.0238 0.9 24.1938C0.9 25.3639 1.84684 26.3107 3.01686 26.3107C4.06426 26.3107 4.92372 25.5497 5.0923 24.5492L11.8566 21.8497C12.2057 22.1092 12.6315 22.277 13.1011 22.277C14.2711 22.277 15.218 21.3301 15.218 20.1601C15.218 20.0663 15.2067 19.9735 15.194 19.8873L22.4789 14.0968C22.7013 14.1746 22.9393 14.2096 23.1854 14.2096C23.5848 14.2096 23.9711 14.1053 24.2941 13.909L31.1575 17.3252C31.2556 18.4057 32.1649 19.2517 33.2697 19.2517C34.4397 19.2517 35.3866 18.3049 35.3866 17.1348C35.3866 16.843 35.3175 16.5746 35.2119 16.3273L43.2151 5.13536C43.2437 5.13561 43.2723 5.13503 43.2989 5.13449C43.3186 5.13409 43.3373 5.13371 43.354 5.13371C44.524 5.13371 45.4708 4.18687 45.4708 3.01686C45.4708 1.84684 44.524 0.9 43.354 0.9Z" fill="black" stroke="black" stroke-width="0.2" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 1021 B |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 5.0 KiB |
|
Before Width: | Height: | Size: 71 KiB After Width: | Height: | Size: 38 KiB |
|
Before Width: | Height: | Size: 92 KiB After Width: | Height: | Size: 36 KiB |
|
Before Width: | Height: | Size: 52 KiB After Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 1.1 MiB After Width: | Height: | Size: 405 KiB |
|
Before Width: | Height: | Size: 448 KiB After Width: | Height: | Size: 398 KiB |
|
Before Width: | Height: | Size: 832 KiB After Width: | Height: | Size: 286 KiB |
|
Before Width: | Height: | Size: 140 KiB After Width: | Height: | Size: 60 KiB |
|
Before Width: | Height: | Size: 316 KiB After Width: | Height: | Size: 132 KiB |
|
Before Width: | Height: | Size: 326 KiB After Width: | Height: | Size: 137 KiB |
|
Before Width: | Height: | Size: 33 KiB After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 294 KiB After Width: | Height: | Size: 123 KiB |
|
Before Width: | Height: | Size: 199 KiB After Width: | Height: | Size: 66 KiB |
|
Before Width: | Height: | Size: 261 KiB After Width: | Height: | Size: 96 KiB |
|
Before Width: | Height: | Size: 277 KiB After Width: | Height: | Size: 119 KiB |
|
Before Width: | Height: | Size: 279 KiB After Width: | Height: | Size: 114 KiB |
|
Before Width: | Height: | Size: 296 KiB After Width: | Height: | Size: 129 KiB |
|
Before Width: | Height: | Size: 773 KiB After Width: | Height: | Size: 312 KiB |
|
Before Width: | Height: | Size: 263 KiB After Width: | Height: | Size: 99 KiB |
|
Before Width: | Height: | Size: 318 KiB After Width: | Height: | Size: 132 KiB |
|
Before Width: | Height: | Size: 218 KiB After Width: | Height: | Size: 76 KiB |
|
Before Width: | Height: | Size: 275 KiB After Width: | Height: | Size: 116 KiB |
|
Before Width: | Height: | Size: 345 KiB After Width: | Height: | Size: 123 KiB |
|
Before Width: | Height: | Size: 4.1 KiB After Width: | Height: | Size: 1.9 KiB |
|
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 267 B After Width: | Height: | Size: 218 B |
BIN
public/og-images/best-practices/api-security.png
Normal file
|
After Width: | Height: | Size: 184 KiB |
BIN
public/og-images/best-practices/aws.png
Normal file
|
After Width: | Height: | Size: 154 KiB |
BIN
public/og-images/best-practices/backend-performance.png
Normal file
|
After Width: | Height: | Size: 150 KiB |
BIN
public/og-images/best-practices/code-review.png
Normal file
|
After Width: | Height: | Size: 37 KiB |
BIN
public/og-images/best-practices/frontend-performance.png
Normal file
|
After Width: | Height: | Size: 184 KiB |
BIN
public/og-images/guides/asymptotic-notation.png
Normal file
|
After Width: | Height: | Size: 41 KiB |
|
After Width: | Height: | Size: 46 KiB |
BIN
public/og-images/guides/backend-developer-skills.png
Normal file
|
After Width: | Height: | Size: 55 KiB |
BIN
public/og-images/guides/backend-developer-tools.png
Normal file
|
After Width: | Height: | Size: 54 KiB |
BIN
public/og-images/guides/backend-languages.png
Normal file
|
After Width: | Height: | Size: 59 KiB |
BIN
public/og-images/guides/basic-authentication.png
Normal file
|
After Width: | Height: | Size: 39 KiB |
BIN
public/og-images/guides/basics-of-authentication.png
Normal file
|
After Width: | Height: | Size: 38 KiB |
BIN
public/og-images/guides/big-o-notation.png
Normal file
|
After Width: | Height: | Size: 37 KiB |
BIN
public/og-images/guides/character-encodings.png
Normal file
|
After Width: | Height: | Size: 40 KiB |
BIN
public/og-images/guides/ci-cd.png
Normal file
|
After Width: | Height: | Size: 39 KiB |
|
After Width: | Height: | Size: 41 KiB |
BIN
public/og-images/guides/design-patterns-for-humans.png
Normal file
|
After Width: | Height: | Size: 43 KiB |
BIN
public/og-images/guides/dhcp-in-one-picture.png
Normal file
|
After Width: | Height: | Size: 37 KiB |
BIN
public/og-images/guides/dns-in-one-picture.png
Normal file
|
After Width: | Height: | Size: 38 KiB |
BIN
public/og-images/guides/free-resources-to-learn-llms.png
Normal file
|
After Width: | Height: | Size: 41 KiB |
BIN
public/og-images/guides/history-of-javascript.png
Normal file
|
After Width: | Height: | Size: 40 KiB |
BIN
public/og-images/guides/how-to-setup-a-jump-server.png
Normal file
|
After Width: | Height: | Size: 44 KiB |
BIN
public/og-images/guides/http-basic-authentication.png
Normal file
|
After Width: | Height: | Size: 42 KiB |
BIN
public/og-images/guides/http-caching.png
Normal file
|
After Width: | Height: | Size: 32 KiB |