Compare commits

..

6 Commits

Author SHA1 Message Date
Kamran Ahmed
67530bdbc5 Update .github/workflows/sync-content-to-repo.yml 2025-08-20 13:47:16 +01:00
Kamran Ahmed
29162e9de1 Update .github/workflows/sync-content-to-repo.yml 2025-08-20 13:46:05 +01:00
Arik Chakma
fe047b23db fix: sync repo to db 2025-08-20 14:38:44 +06:00
Arik Chakma
8841fe1ce8 chore: sync repo to database 2025-08-20 13:57:24 +06:00
Arik Chakma
819550f0b0 fix: replace the api endpoint 2025-08-20 12:28:03 +06:00
Arik Chakma
ea0934b0bd chore: sync content to repo 2025-08-20 12:19:06 +06:00
6853 changed files with 145826 additions and 46017 deletions

View File

@@ -3,6 +3,6 @@
"enabled": false
},
"_variables": {
"lastUpdateCheck": 1763378528944
"lastUpdateCheck": 1755042938009
}
}

1
.astro/types.d.ts vendored
View File

@@ -1,2 +1 @@
/// <reference types="astro/client" />
/// <reference path="content.d.ts" />

View File

@@ -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

View 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

View File

@@ -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.**

View 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.**

View File

@@ -50,10 +50,11 @@ jobs:
branch: "chore/sync-content-to-repo-${{ inputs.roadmap_slug }}"
base: "master"
labels: |
dependencies
automated pr
reviewers: jcanalesluna,kamranahmedse
reviewers: arikchakma
commit-message: "chore: sync content to repo"
title: "chore: sync content to repository - ${{ inputs.roadmap_slug }}"
title: "Sync Content to Repo - Automated"
body: |
## Sync Content to Repo
@@ -63,4 +64,4 @@ jobs:
> Commit: ${{ github.sha }}
> Workflow Path: ${{ github.workflow_ref }}
**Please Review the Changes and Merge the PR if everything is fine.**
**Please Review the Changes and Merge the PR if everything is fine.**

View File

@@ -1,17 +1,19 @@
name: Sync Repo to Database
name: Sync on Roadmap Changes
on:
workflow_dispatch:
inputs:
roadmap_slug:
description: "The slug of the roadmap to sync (e.g., frontend, backend)"
required: true
push:
branches:
- master
paths:
- 'src/data/roadmaps/**'
jobs:
sync-roadmap:
sync-on-changes:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 2 # Fetch previous commit to compare changes
- name: Setup pnpm@v9
uses: pnpm/action-setup@v4
@@ -25,33 +27,40 @@ jobs:
node-version: 20
cache: 'pnpm'
- name: Get all roadmap files
id: roadmap-files
- name: Get changed files
id: changed-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
echo "Getting changed files in /src/data/roadmaps/"
# Get changed files between HEAD and previous commit
CHANGED_FILES=$(git diff --name-only HEAD~1 HEAD -- src/data/roadmaps/)
if [ -z "$CHANGED_FILES" ]; then
echo "No changes found in roadmaps directory"
echo "has_changes=false" >> $GITHUB_OUTPUT
exit 0
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
echo "Changed files:"
echo "$CHANGED_FILES"
# Convert to space-separated list for the script
CHANGED_FILES_LIST=$(echo "$CHANGED_FILES" | tr '\n' ' ')
echo "has_changes=true" >> $GITHUB_OUTPUT
echo "changed_files=$CHANGED_FILES_LIST" >> $GITHUB_OUTPUT
- name: Install Dependencies
if: steps.changed-files.outputs.has_changes == 'true'
run: |
echo "Installing Dependencies"
pnpm install
- name: Run sync script
- name: Run sync script with changed files
if: steps.changed-files.outputs.has_changes == 'true'
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 }}
echo "Running sync script for changed roadmap files"
echo "Changed files: ${{ steps.changed-files.outputs.changed_files }}"
# Run your script with the changed file paths
npm run sync:repo-to-database -- --files="${{ steps.changed-files.outputs.changed_files }}" --secret=${{ secrets.TOPIC_CONTENT_SYNC_SECRET }}

View File

@@ -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'],
},
},
});

View File

@@ -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.

View File

@@ -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.

View File

@@ -31,10 +31,6 @@
"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
View File

@@ -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: {}

Binary file not shown.

After

Width:  |  Height:  |  Size: 351 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 420 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 126 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 431 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 235 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 205 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 242 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 572 KiB

BIN
public/guides/ci-cd.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 283 KiB

BIN
public/guides/dhcp.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 437 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 799 KiB

BIN
public/guides/llms.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 233 KiB

BIN
public/guides/oauth.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 756 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 142 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 685 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 128 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 KiB

BIN
public/guides/sso.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 835 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 602 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 345 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 516 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More