Compare commits
4 Commits
master
...
feat/web-m
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1af42a8060 | ||
|
|
f93c60a1a3 | ||
|
|
c7f45bc91f | ||
|
|
266491207e |
@@ -3,6 +3,6 @@
|
||||
"enabled": false
|
||||
},
|
||||
"_variables": {
|
||||
"lastUpdateCheck": 1763378528944
|
||||
"lastUpdateCheck": 1753810743067
|
||||
}
|
||||
}
|
||||
@@ -7,6 +7,4 @@ PUBLIC_STRIPE_INDIVIDUAL_MONTHLY_PRICE_ID=
|
||||
PUBLIC_STRIPE_INDIVIDUAL_YEARLY_PRICE_ID=
|
||||
|
||||
PUBLIC_STRIPE_INDIVIDUAL_MONTHLY_PRICE_AMOUNT=10
|
||||
PUBLIC_STRIPE_INDIVIDUAL_YEARLY_PRICE_AMOUNT=100
|
||||
|
||||
ROADMAP_API_KEY=
|
||||
PUBLIC_STRIPE_INDIVIDUAL_YEARLY_PRICE_AMOUNT=100
|
||||
35
.github/ISSUE_TEMPLATE/05-project-contribution.yml
vendored
Normal file
@@ -0,0 +1,35 @@
|
||||
name: "🙏 Submit a Project Idea"
|
||||
description: Help us add project ideas to roadmaps.
|
||||
labels: [project contribution]
|
||||
assignees: []
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
Thanks for taking the time to submit a project idea! Please fill out the information below and we'll get back to you as soon as we can.
|
||||
- type: input
|
||||
id: roadmap-title
|
||||
attributes:
|
||||
label: What Roadmap is this project for?
|
||||
placeholder: e.g. Backend Roadmap
|
||||
validations:
|
||||
required: true
|
||||
- type: dropdown
|
||||
id: project-difficulty
|
||||
attributes:
|
||||
label: Project Difficulty
|
||||
options:
|
||||
- Beginner
|
||||
- Intermediate
|
||||
- Advanced
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: roadmap-description
|
||||
attributes:
|
||||
label: Add Project Details
|
||||
description: Please write a detailed description of the project in 3rd person e.g. "You are required to build a..."
|
||||
placeholder: |
|
||||
e.g. You are required to build a RESTful API...
|
||||
validations:
|
||||
required: true
|
||||
80
.github/workflows/cleanup-orphaned-content.yml
vendored
@@ -1,80 +0,0 @@
|
||||
name: Cleanup Orphaned Content
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
roadmap_slug:
|
||||
description: "The ID of the roadmap to clean up"
|
||||
required: true
|
||||
|
||||
jobs:
|
||||
cleanup-content:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Setup pnpm@v9
|
||||
uses: pnpm/action-setup@v4
|
||||
with:
|
||||
version: 9
|
||||
run_install: false
|
||||
|
||||
- name: Setup Node.js Version 20 (LTS)
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: 20
|
||||
cache: 'pnpm'
|
||||
|
||||
- name: Install Dependencies and Run Cleanup
|
||||
run: |
|
||||
echo "Installing Dependencies"
|
||||
pnpm install
|
||||
echo "Running Orphaned Content Cleanup"
|
||||
npm run cleanup:orphaned-content -- --roadmap-slug=${{ inputs.roadmap_slug }}
|
||||
|
||||
- name: Read cleanup summary
|
||||
id: read-summary
|
||||
run: |
|
||||
if [ -f .cleanup-summary.md ]; then
|
||||
{
|
||||
echo 'summary<<EOF'
|
||||
cat .cleanup-summary.md
|
||||
echo 'EOF'
|
||||
} >> $GITHUB_OUTPUT
|
||||
fi
|
||||
|
||||
- name: Check for changes
|
||||
id: verify-changed-files
|
||||
run: |
|
||||
if [ -n "$(git status --porcelain)" ]; then
|
||||
echo "changed=true" >> $GITHUB_OUTPUT
|
||||
else
|
||||
echo "changed=false" >> $GITHUB_OUTPUT
|
||||
fi
|
||||
|
||||
- name: Delete summary file
|
||||
if: steps.verify-changed-files.outputs.changed == 'true'
|
||||
run: rm -f .cleanup-summary.md
|
||||
|
||||
- name: Create PR
|
||||
if: steps.verify-changed-files.outputs.changed == 'true'
|
||||
uses: peter-evans/create-pull-request@v7
|
||||
with:
|
||||
delete-branch: false
|
||||
branch: "chore/cleanup-orphaned-content-${{ inputs.roadmap_slug }}"
|
||||
base: "master"
|
||||
labels: |
|
||||
automated pr
|
||||
reviewers: jcanalesluna,kamranahmedse
|
||||
commit-message: "chore: cleanup orphaned content files"
|
||||
title: "chore: cleanup orphaned content - ${{ inputs.roadmap_slug }}"
|
||||
body: |
|
||||
${{ steps.read-summary.outputs.summary }}
|
||||
|
||||
> [!IMPORTANT]
|
||||
> This PR removes orphaned/duplicate content files for: ${{ inputs.roadmap_slug }}
|
||||
>
|
||||
> Commit: ${{ github.sha }}
|
||||
> Workflow Path: ${{ github.workflow_ref }}
|
||||
|
||||
**Please review the changes and merge the PR if everything looks correct.**
|
||||
52
.github/workflows/refresh-roadmap-content-json.yml
vendored
Normal file
@@ -0,0 +1,52 @@
|
||||
name: Refresh Roadmap Content JSON
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
- cron: '0 0 * * *'
|
||||
|
||||
jobs:
|
||||
refresh-content:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Setup pnpm@v9
|
||||
uses: pnpm/action-setup@v4
|
||||
with:
|
||||
version: 9
|
||||
run_install: false
|
||||
|
||||
- name: Setup Node.js Version 20 (LTS)
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: 20
|
||||
cache: 'pnpm'
|
||||
|
||||
- name: Install Dependencies and Generate Content JSON
|
||||
run: |
|
||||
pnpm install
|
||||
npm run generate:roadmap-content-json
|
||||
|
||||
- name: Create PR
|
||||
uses: peter-evans/create-pull-request@v7
|
||||
with:
|
||||
delete-branch: false
|
||||
branch: "chore/update-content-json"
|
||||
base: "master"
|
||||
labels: |
|
||||
dependencies
|
||||
automated pr
|
||||
reviewers: kamranahmedse
|
||||
commit-message: "chore: update roadmap content json"
|
||||
title: "Updated Roadmap Content JSON - Automated"
|
||||
body: |
|
||||
## Updated Roadmap Content JSON
|
||||
|
||||
> [!IMPORTANT]
|
||||
> This PR Updates the Roadmap Content JSON files stored in the `public` directory.
|
||||
>
|
||||
> Commit: ${{ github.sha }}
|
||||
> Workflow Path: ${{ github.workflow_ref }}
|
||||
|
||||
**Please Review the Changes and Merge the PR if everything is fine.**
|
||||
66
.github/workflows/sync-content-to-repo.yml
vendored
@@ -1,66 +0,0 @@
|
||||
name: Sync Content to Repo
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
roadmap_slug:
|
||||
description: "The ID of the roadmap to sync"
|
||||
required: true
|
||||
default: "__default__"
|
||||
|
||||
jobs:
|
||||
sync-content:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Setup pnpm@v9
|
||||
uses: pnpm/action-setup@v4
|
||||
with:
|
||||
version: 9
|
||||
run_install: false
|
||||
|
||||
- name: Setup Node.js Version 20 (LTS)
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: 20
|
||||
cache: 'pnpm'
|
||||
|
||||
- name: Install Dependencies and Sync Content
|
||||
run: |
|
||||
echo "Installing Dependencies"
|
||||
pnpm install
|
||||
echo "Syncing Content to Repo"
|
||||
npm run sync:content-to-repo -- --roadmap-slug=${{ inputs.roadmap_slug }} --secret=${{ secrets.GH_SYNC_SECRET }}
|
||||
|
||||
- name: Check for changes
|
||||
id: verify-changed-files
|
||||
run: |
|
||||
if [ -n "$(git status --porcelain)" ]; then
|
||||
echo "changed=true" >> $GITHUB_OUTPUT
|
||||
else
|
||||
echo "changed=false" >> $GITHUB_OUTPUT
|
||||
fi
|
||||
|
||||
- name: Create PR
|
||||
if: steps.verify-changed-files.outputs.changed == 'true'
|
||||
uses: peter-evans/create-pull-request@v7
|
||||
with:
|
||||
delete-branch: false
|
||||
branch: "chore/sync-content-to-repo-${{ inputs.roadmap_slug }}"
|
||||
base: "master"
|
||||
labels: |
|
||||
automated pr
|
||||
reviewers: jcanalesluna,kamranahmedse
|
||||
commit-message: "chore: sync content to repo"
|
||||
title: "chore: sync content to repository - ${{ inputs.roadmap_slug }}"
|
||||
body: |
|
||||
## Sync Content to Repo
|
||||
|
||||
> [!IMPORTANT]
|
||||
> This PR Syncs the Content to the Repo for the Roadmap: ${{ inputs.roadmap_slug }}
|
||||
>
|
||||
> Commit: ${{ github.sha }}
|
||||
> Workflow Path: ${{ github.workflow_ref }}
|
||||
|
||||
**Please Review the Changes and Merge the PR if everything is fine.**
|
||||
57
.github/workflows/sync-repo-to-database.yml
vendored
@@ -1,57 +0,0 @@
|
||||
name: Sync Repo to Database
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
roadmap_slug:
|
||||
description: "The slug of the roadmap to sync (e.g., frontend, backend)"
|
||||
required: true
|
||||
|
||||
jobs:
|
||||
sync-roadmap:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Setup pnpm@v9
|
||||
uses: pnpm/action-setup@v4
|
||||
with:
|
||||
version: 9
|
||||
run_install: false
|
||||
|
||||
- name: Setup Node.js Version 20 (LTS)
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: 20
|
||||
cache: 'pnpm'
|
||||
|
||||
- name: Get all roadmap files
|
||||
id: roadmap-files
|
||||
run: |
|
||||
ROADMAP_DIR="src/data/roadmaps/${{ inputs.roadmap_slug }}"
|
||||
|
||||
if [ ! -d "$ROADMAP_DIR" ]; then
|
||||
echo "Error: Roadmap directory '$ROADMAP_DIR' does not exist"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Getting all files in $ROADMAP_DIR"
|
||||
|
||||
ALL_FILES=$(find "$ROADMAP_DIR" -type f | tr '\n' ',')
|
||||
|
||||
echo "Files to sync:"
|
||||
echo "$ALL_FILES"
|
||||
|
||||
echo "files=$ALL_FILES" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Install Dependencies
|
||||
run: |
|
||||
echo "Installing Dependencies"
|
||||
pnpm install
|
||||
|
||||
- name: Run sync script
|
||||
run: |
|
||||
echo "Running sync script for roadmap: ${{ inputs.roadmap_slug }}"
|
||||
echo "Files: ${{ steps.roadmap-files.outputs.files }}"
|
||||
|
||||
npm run sync:repo-to-database -- --files="${{ steps.roadmap-files.outputs.files }}" --secret=${{ secrets.GH_SYNC_SECRET }}
|
||||
@@ -20,29 +20,10 @@ export default defineConfig({
|
||||
status: 301,
|
||||
destination: '/ai',
|
||||
},
|
||||
'/best-practices': {
|
||||
status: 301,
|
||||
destination: '/roadmaps',
|
||||
},
|
||||
'/best-practices/aws': {
|
||||
status: 301,
|
||||
destination: '/aws-best-practices',
|
||||
},
|
||||
'/best-practices/backend-performance': {
|
||||
status: 301,
|
||||
destination: '/backend-performance-best-practices',
|
||||
},
|
||||
'/best-practices/frontend-performance': {
|
||||
status: 301,
|
||||
destination: '/frontend-performance-best-practices',
|
||||
},
|
||||
'/best-practices/api-security': {
|
||||
status: 301,
|
||||
destination: '/api-security-best-practices',
|
||||
},
|
||||
'/best-practices/code-review': {
|
||||
status: 301,
|
||||
destination: '/code-review-best-practices',
|
||||
},
|
||||
vite: {
|
||||
server: {
|
||||
allowedHosts: ['roadmap.sh', 'port3k.kamranahmed.info'],
|
||||
},
|
||||
},
|
||||
markdown: {
|
||||
@@ -91,8 +72,5 @@ export default defineConfig({
|
||||
ssr: {
|
||||
noExternal: [/^@roadmapsh\/editor.*$/],
|
||||
},
|
||||
server: {
|
||||
allowedHosts: ['roadmap.sh', 'port3k.kamranahmed.info'],
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
@@ -6,10 +6,8 @@ First of all, thank you for considering to contribute. Please look at the detail
|
||||
- [Existing Roadmaps](#existing-roadmaps)
|
||||
- [Adding Projects](#adding-projects)
|
||||
- [Adding Content](#adding-content)
|
||||
- [How To Structure Content](#how-to-structure-content)
|
||||
- [Guidelines](#guidelines)
|
||||
- [Good vs. Not So Good Contributions](#good-vs-not-so-good-contributions)
|
||||
- [Local Development](#local-development)
|
||||
|
||||
## New Roadmaps
|
||||
|
||||
@@ -23,7 +21,7 @@ For new roadmaps, you can either:
|
||||
For the existing roadmaps, please follow the details listed for the nature of contribution:
|
||||
|
||||
- **Fixing Typos** — Make your changes in the [roadmap markdown file](https://github.com/kamranahmedse/developer-roadmap/tree/master/src/data/roadmaps) and submit a [PR](https://github.com/kamranahmedse/developer-roadmap/pulls).
|
||||
- **Adding/Removing Nodes and Modifying Node Titles** — Please open an [issue](https://github.com/kamranahmedse/developer-roadmap/issues) with your suggestion.
|
||||
- **Adding or Removing Nodes** — Please open an [issue](https://github.com/kamranahmedse/developer-roadmap/issues) with your suggestion.
|
||||
|
||||
**Note:** Please note that our goal is **not to have the biggest list of items**. Our goal is to list items or skills most relevant today.
|
||||
|
||||
@@ -55,7 +53,6 @@ Find [the content directory inside the relevant roadmap](https://github.com/kamr
|
||||
|
||||
- Content must be in English.
|
||||
- Maximum of 8 links per topic.
|
||||
- **No GeeksforGeeks links** — Links to geeksforgeeks.org are not accepted.
|
||||
- Follow the below style guide for content.
|
||||
|
||||
Please note that we are intentionally keeping the content under the topic popup concise. You MUST always aim to explain the topic simply in a **single paragraph** or so and provide external resources where users can learn more about the topic.
|
||||
|
||||
7
license
@@ -10,3 +10,10 @@ conditions do not apply to the readonly GitHub forks created using the Fork butt
|
||||
GitHub with the whole purpose of contributing to the project.
|
||||
|
||||
Copyright © 2017 - Present. Kamran Ahmed <kamranahmed.se@gmail.com>
|
||||
|
||||
Please note that I am really flexible with allowing the usage of the content in this
|
||||
repository. If you reach out to me with a brief detail of why and how you would like
|
||||
to use this content, there is a good chance that I will allow you to use it. The reason
|
||||
behind this strictness in the license is to stop the people who have been using these
|
||||
roadmaps in ill manners e.g. ripping people off with suggesting random affiliate links,
|
||||
redistributing these roadmaps just for the sake of monetizing the traffic.
|
||||
|
||||
@@ -29,12 +29,6 @@
|
||||
"compress:images": "tsx ./scripts/compress-images.ts",
|
||||
"generate:roadmap-content-json": "tsx ./scripts/editor-roadmap-content-json.ts",
|
||||
"migrate:editor-roadmaps": "tsx ./scripts/migrate-editor-roadmap.ts",
|
||||
"sync:content-to-repo": "tsx ./scripts/sync-content-to-repo.ts",
|
||||
"sync:repo-to-database": "tsx ./scripts/sync-repo-to-database.ts",
|
||||
"sync:roadmap": "tsx ./scripts/sync-roadmap-to-database.ts",
|
||||
"migrate:content-repo-to-database": "tsx ./scripts/migrate-content-repo-to-database.ts",
|
||||
"cleanup:orphaned-content": "tsx ./scripts/cleanup-orphaned-content.ts",
|
||||
"official:roadmap-assets": "tsx ./scripts/official-roadmap-assets.ts",
|
||||
"test:e2e": "playwright test"
|
||||
},
|
||||
"dependencies": {
|
||||
|
||||
2
pnpm-lock.yaml
generated
@@ -9897,4 +9897,4 @@ snapshots:
|
||||
react: 19.1.0
|
||||
use-sync-external-store: 1.5.0(react@19.1.0)
|
||||
|
||||
zwitch@2.0.4: {}
|
||||
zwitch@2.0.4: {}
|
||||
|
||||
BIN
public/guides/asymptotic-notation.png
Normal file
|
After Width: | Height: | Size: 351 KiB |
|
After Width: | Height: | Size: 420 KiB |
BIN
public/guides/backend-languages/back-vs-front.png
Normal file
|
After Width: | Height: | Size: 36 KiB |
BIN
public/guides/backend-languages/backend-roadmap-part.png
Normal file
|
After Width: | Height: | Size: 34 KiB |
BIN
public/guides/backend-languages/javascript-interest.png
Normal file
|
After Width: | Height: | Size: 36 KiB |
BIN
public/guides/backend-languages/pypl-go-index.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
public/guides/bash-vs-shell.jpeg
Normal file
|
After Width: | Height: | Size: 126 KiB |
BIN
public/guides/basic-authentication.png
Normal file
|
After Width: | Height: | Size: 431 KiB |
BIN
public/guides/basic-authentication/chrome-basic-auth.png
Normal file
|
After Width: | Height: | Size: 235 KiB |
BIN
public/guides/basic-authentication/safari-basic-auth.png
Normal file
|
After Width: | Height: | Size: 205 KiB |
BIN
public/guides/big-o-notation.png
Normal file
|
After Width: | Height: | Size: 242 KiB |
BIN
public/guides/character-encodings.png
Normal file
|
After Width: | Height: | Size: 572 KiB |
BIN
public/guides/ci-cd.png
Normal file
|
After Width: | Height: | Size: 283 KiB |
BIN
public/guides/dhcp.png
Normal file
|
After Width: | Height: | Size: 437 KiB |
BIN
public/guides/jwt-authentication.png
Normal file
|
After Width: | Height: | Size: 799 KiB |
BIN
public/guides/llms.png
Normal file
|
After Width: | Height: | Size: 233 KiB |
BIN
public/guides/oauth.png
Normal file
|
After Width: | Height: | Size: 1.0 MiB |
BIN
public/guides/project-history.png
Normal file
|
After Width: | Height: | Size: 756 KiB |
BIN
public/guides/proxy/forward-proxy.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
public/guides/proxy/proxy-example.png
Normal file
|
After Width: | Height: | Size: 7.7 KiB |
BIN
public/guides/proxy/reverse-proxy.png
Normal file
|
After Width: | Height: | Size: 18 KiB |
BIN
public/guides/random-numbers.png
Normal file
|
After Width: | Height: | Size: 142 KiB |
87
public/guides/scaling-databases.svg
Normal file
|
After Width: | Height: | Size: 1.4 MiB |
BIN
public/guides/session-authentication.png
Normal file
|
After Width: | Height: | Size: 685 KiB |
BIN
public/guides/sli-slo-sla.jpeg
Normal file
|
After Width: | Height: | Size: 128 KiB |
BIN
public/guides/ssl-tls-https-ssh.png
Normal file
|
After Width: | Height: | Size: 92 KiB |
BIN
public/guides/sso.png
Normal file
|
After Width: | Height: | Size: 835 KiB |
BIN
public/guides/token-authentication.png
Normal file
|
After Width: | Height: | Size: 602 KiB |
BIN
public/guides/torrent-client/address.png
Normal file
|
After Width: | Height: | Size: 22 KiB |
BIN
public/guides/torrent-client/bitfield.png
Normal file
|
After Width: | Height: | Size: 18 KiB |
BIN
public/guides/torrent-client/choke.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
public/guides/torrent-client/client-server-p2p.png
Normal file
|
After Width: | Height: | Size: 25 KiB |
BIN
public/guides/torrent-client/download.png
Normal file
|
After Width: | Height: | Size: 24 KiB |
BIN
public/guides/torrent-client/handshake.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
public/guides/torrent-client/info-hash-peer-id.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
public/guides/torrent-client/info-hash.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
public/guides/torrent-client/message.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
public/guides/torrent-client/pieces.png
Normal file
|
After Width: | Height: | Size: 17 KiB |
BIN
public/guides/torrent-client/pipelining.png
Normal file
|
After Width: | Height: | Size: 44 KiB |
BIN
public/guides/torrent-client/trackers.png
Normal file
|
After Width: | Height: | Size: 26 KiB |
BIN
public/guides/unfamiliar-codebase.png
Normal file
|
After Width: | Height: | Size: 345 KiB |
BIN
public/guides/web-vitals.png
Normal file
|
After Width: | Height: | Size: 516 KiB |