Compare commits

..

48 Commits

Author SHA1 Message Date
Kamran Ahmed
d94fb3bd43 Implement guides functionality 2025-06-19 02:17:01 +01:00
Kamran Ahmed
97be459fc4 Improve UI for explore page 2025-06-19 02:11:12 +01:00
Kamran Ahmed
e61381f842 Explore courses listing functionality 2025-06-19 02:07:53 +01:00
Kamran Ahmed
e2409190a1 Community page UI design 2025-06-19 02:04:52 +01:00
Kamran Ahmed
dda0ff0ced Staff picks UI changes 2025-06-19 01:52:19 +01:00
Kamran Ahmed
205437b088 Featured courses listing UI update 2025-06-19 01:50:00 +01:00
Kamran Ahmed
1c4a90551e Library guides listing UI 2025-06-19 01:38:31 +01:00
Kamran Ahmed
15f4a75523 Library guides listing UI 2025-06-19 01:36:27 +01:00
Kamran Ahmed
42b4c0cf6d User guides listing 2025-06-19 01:26:41 +01:00
Kamran Ahmed
2a61e6aab6 Guide listing UI update 2025-06-18 23:39:01 +01:00
Kamran Ahmed
0503b64cba UI improvements for ai library 2025-06-18 22:51:19 +01:00
Arik Chakma
256518b68c fix: chat responsiveness 2025-06-18 23:01:40 +06:00
Arik Chakma
3faedf80e0 fix: stop streaming 2025-06-18 22:10:57 +06:00
Kamran Ahmed
412246034b AI Guide chat 2025-06-18 16:55:18 +01:00
Kamran Ahmed
c293d38d88 Add AI guide 2025-06-18 16:06:47 +01:00
Kamran Ahmed
39ae86ef1c Improve UI for ai guide content 2025-06-18 15:54:41 +01:00
Kamran Ahmed
0f8505cf9a AI guide changes 2025-06-18 15:38:49 +01:00
Kamran Ahmed
1a99f2c860 Loading chip refactor 2025-06-18 15:30:09 +01:00
Kamran Ahmed
60c9f65ff5 Guide page UI improvements 2025-06-18 14:56:08 +01:00
Arik Chakma
338c624b8f fix: term and redirects 2025-06-18 18:45:12 +06:00
Arik Chakma
d3a5fd7c5f refactor: update the course card 2025-06-18 14:03:24 +06:00
Arik Chakma
9821a2e212 feat: update guide ui 2025-06-18 02:15:49 +06:00
Arik Chakma
11ce5fb8e3 fix: form ui 2025-06-17 12:39:59 +06:00
Arik Chakma
79fe083056 wip 2025-06-17 12:27:04 +06:00
Arik Chakma
4ff4b031e4 wip 2025-06-17 00:51:02 +06:00
Arik Chakma
1217a7afb7 wip 2025-06-17 00:27:05 +06:00
Arik Chakma
c118ce4020 wip 2025-06-17 00:17:41 +06:00
Arik Chakma
5da56891f1 wip 2025-06-17 00:15:36 +06:00
Arik Chakma
b91bb254b1 feat: regenerate guide 2025-06-16 19:23:14 +06:00
Arik Chakma
f1dd448222 wip 2025-06-13 23:10:29 +06:00
Arik Chakma
c382177277 wip 2025-06-13 17:50:09 +06:00
Arik Chakma
ac923a3cd9 wip 2025-06-13 17:43:26 +06:00
Arik Chakma
da2dc9add8 wip 2025-06-13 17:38:00 +06:00
Arik Chakma
661e1bb8e8 wip 2025-06-13 17:33:08 +06:00
Arik Chakma
df7fd0e9be wip 2025-06-13 17:25:14 +06:00
Arik Chakma
752e4759b1 wip 2025-06-13 16:41:32 +06:00
Arik Chakma
9a58991ad1 wip 2025-06-13 15:38:43 +06:00
Arik Chakma
106e754beb wip 2025-06-13 14:12:15 +06:00
Arik Chakma
bdc9dffcd2 wip 2025-06-13 13:28:52 +06:00
Arik Chakma
697488b0b4 Merge branch 'master' into feat/ai-document 2025-06-13 13:28:42 +06:00
Arik Chakma
7e63cc2031 wip 2025-06-13 13:17:54 +06:00
Arik Chakma
4871bb9ffd wip 2025-06-13 12:30:29 +06:00
Arik Chakma
f55b4bdfb0 wip 2025-06-13 12:10:33 +06:00
Arik Chakma
16de168751 wip 2025-06-13 12:08:35 +06:00
Kamran Ahmed
7af779d6ba AI Document content 2025-06-09 17:31:17 +01:00
Kamran Ahmed
e698410ecf Add basic error handling 2025-06-09 16:44:05 +01:00
Kamran Ahmed
2ed708d7ce Add AI course generation functionality 2025-06-09 16:34:20 +01:00
Kamran Ahmed
ec00ac6990 Refactor AI course 2025-06-09 13:13:23 +01:00
2560 changed files with 88566 additions and 86615 deletions

View File

@@ -3,6 +3,6 @@
"enabled": false
},
"_variables": {
"lastUpdateCheck": 1753810743067
"lastUpdateCheck": 1749465237682
}
}

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

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

View File

@@ -1,155 +0,0 @@
---
description: When user requests migrating old roadmap content to new folder from content-old to content folder
globs:
alwaysApply: false
---
# Content Migration Rule
## Rule Name: content-migration
## Description
This rule provides a complete process for migrating roadmap content from old structure to new structure using migration mapping files.
## When to Use
Use this rule when you need to:
- Migrate content from content-old directories to content directories
- Use a migration-mapping.json file to map topic paths to content IDs
- Populate empty content files with existing content from legacy structure
## Process
### 1. Prerequisites Check
- Verify the roadmap directory has a `migration-mapping.json` file
- Confirm `content-old/` directory exists with source content
- Confirm `content/` directory exists with target files
### 2. Migration Script Creation
Create a Node.js script with the following functionality:
```javascript
const fs = require('fs');
const path = require('path');
// Load the migration mapping
const migrationMapping = JSON.parse(fs.readFileSync('migration-mapping.json', 'utf8'));
// Function to find old content file based on topic path
function findOldContentFile(topicPath) {
const parts = topicPath.split(':');
if (parts.length === 1) {
// Top level file like "introduction"
return path.join('content-old', parts[0], 'index.md');
} else if (parts.length === 2) {
// Like "introduction:what-is-rust"
const [folder, filename] = parts;
return path.join('content-old', folder, `${filename}.md`);
} else if (parts.length === 3) {
// Like "language-basics:syntax:variables"
const [folder, subfolder, filename] = parts;
return path.join('content-old', folder, subfolder, `${filename}.md`);
}
return null;
}
// Function to find new content file based on content ID
function findNewContentFile(contentId) {
const contentDir = 'content';
const files = fs.readdirSync(contentDir);
// Find file that ends with the content ID
const matchingFile = files.find(file => file.includes(`@${contentId}.md`));
if (matchingFile) {
return path.join(contentDir, matchingFile);
}
return null;
}
// Process each mapping
console.log('Starting content migration...\n');
let migratedCount = 0;
let skippedCount = 0;
for (const [topicPath, contentId] of Object.entries(migrationMapping)) {
const oldFilePath = findOldContentFile(topicPath);
const newFilePath = findNewContentFile(contentId);
if (!oldFilePath) {
console.log(`❌ Could not determine old file path for: ${topicPath}`);
skippedCount++;
continue;
}
if (!newFilePath) {
console.log(`❌ Could not find new file for content ID: ${contentId} (topic: ${topicPath})`);
skippedCount++;
continue;
}
if (!fs.existsSync(oldFilePath)) {
console.log(`❌ Old file does not exist: ${oldFilePath} (topic: ${topicPath})`);
skippedCount++;
continue;
}
try {
// Read old content
const oldContent = fs.readFileSync(oldFilePath, 'utf8');
// Write to new file
fs.writeFileSync(newFilePath, oldContent);
console.log(`✅ Migrated: ${topicPath} -> ${path.basename(newFilePath)}`);
migratedCount++;
} catch (error) {
console.log(`❌ Error migrating ${topicPath}: ${error.message}`);
skippedCount++;
}
}
console.log(`\n📊 Migration complete:`);
console.log(` Migrated: ${migratedCount} files`);
console.log(` Skipped: ${skippedCount} files`);
console.log(` Total: ${Object.keys(migrationMapping).length} mappings`);
```
### 3. Execution Steps
1. Navigate to the roadmap directory (e.g., `src/data/roadmaps/[roadmap-name]`)
2. Create the migration script as `migrate_content.cjs`
3. Run: `node migrate_content.cjs`
4. Review the migration results
5. Clean up the temporary script file
### 4. Validation
After migration:
- Verify a few migrated files have proper content (not just titles)
- Check that the content structure matches the old content
- Ensure proper markdown formatting is preserved
## File Structure Expected
```
roadmap-directory/
├── migration-mapping.json
├── content/
│ ├── file1@contentId1.md
│ ├── file2@contentId2.md
│ └── ...
└── content-old/
├── section1/
│ ├── index.md
│ ├── topic1.md
│ └── subsection1/
│ └── subtopic1.md
└── section2/
└── ...
```
## Notes
- The migration mapping uses colons (`:`) to separate nested paths
- Content files in the new structure use the pattern `filename@contentId.md`
- The script handles 1-3 levels of nesting in the old structure
- Always create the script with `.cjs` extension to avoid ES module issues

View File

@@ -16,7 +16,6 @@
"roadmap-links": "node scripts/roadmap-links.cjs",
"roadmap-dirs": "node scripts/roadmap-dirs.cjs",
"roadmap-assets": "tsx scripts/editor-roadmap-assets.ts",
"refresh-assets": "tsx scripts/refresh-assets.ts",
"editor-roadmap-dirs": "tsx scripts/editor-roadmap-dirs.ts",
"editor-roadmap-content": "tsx scripts/editor-roadmap-content.ts",
"roadmap-content": "node scripts/roadmap-content.cjs",

View File

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 2.4 KiB

View File

Before

Width:  |  Height:  |  Size: 3.6 KiB

After

Width:  |  Height:  |  Size: 3.6 KiB

View File

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 2.6 KiB

View File

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 3.1 KiB

View File

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 17 KiB

View File

Before

Width:  |  Height:  |  Size: 821 KiB

After

Width:  |  Height:  |  Size: 821 KiB

View File

Before

Width:  |  Height:  |  Size: 386 KiB

After

Width:  |  Height:  |  Size: 386 KiB

View File

Before

Width:  |  Height:  |  Size: 256 KiB

After

Width:  |  Height:  |  Size: 256 KiB

View File

Before

Width:  |  Height:  |  Size: 145 KiB

After

Width:  |  Height:  |  Size: 145 KiB

View File

Before

Width:  |  Height:  |  Size: 1.0 MiB

After

Width:  |  Height:  |  Size: 1.0 MiB

View File

Before

Width:  |  Height:  |  Size: 1013 KiB

After

Width:  |  Height:  |  Size: 1013 KiB

View File

Before

Width:  |  Height:  |  Size: 370 KiB

After

Width:  |  Height:  |  Size: 370 KiB

View File

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

Before

Width:  |  Height:  |  Size: 203 B

After

Width:  |  Height:  |  Size: 203 B

View File

Before

Width:  |  Height:  |  Size: 1021 B

After

Width:  |  Height:  |  Size: 1021 B

View File

Before

Width:  |  Height:  |  Size: 54 KiB

After

Width:  |  Height:  |  Size: 54 KiB

View File

Before

Width:  |  Height:  |  Size: 5.0 KiB

After

Width:  |  Height:  |  Size: 5.0 KiB

View File

Before

Width:  |  Height:  |  Size: 38 KiB

After

Width:  |  Height:  |  Size: 38 KiB

View File

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 26 KiB

View File

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 22 KiB

View File

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 36 KiB

View File

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 20 KiB

View File

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 17 KiB

View File

Before

Width:  |  Height:  |  Size: 405 KiB

After

Width:  |  Height:  |  Size: 405 KiB

View File

Before

Width:  |  Height:  |  Size: 8.9 KiB

After

Width:  |  Height:  |  Size: 8.9 KiB

View File

Before

Width:  |  Height:  |  Size: 149 KiB

After

Width:  |  Height:  |  Size: 149 KiB

View File

Before

Width:  |  Height:  |  Size: 936 KiB

After

Width:  |  Height:  |  Size: 936 KiB

View File

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

Before

Width:  |  Height:  |  Size: 398 KiB

After

Width:  |  Height:  |  Size: 398 KiB

View File

Before

Width:  |  Height:  |  Size: 286 KiB

After

Width:  |  Height:  |  Size: 286 KiB

View File

Before

Width:  |  Height:  |  Size: 60 KiB

After

Width:  |  Height:  |  Size: 60 KiB

View File

Before

Width:  |  Height:  |  Size: 132 KiB

After

Width:  |  Height:  |  Size: 132 KiB

View File

Before

Width:  |  Height:  |  Size: 137 KiB

After

Width:  |  Height:  |  Size: 137 KiB

View File

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

View File

Before

Width:  |  Height:  |  Size: 123 KiB

After

Width:  |  Height:  |  Size: 123 KiB

View File

Before

Width:  |  Height:  |  Size: 66 KiB

After

Width:  |  Height:  |  Size: 66 KiB

View File

Before

Width:  |  Height:  |  Size: 96 KiB

After

Width:  |  Height:  |  Size: 96 KiB

View File

Before

Width:  |  Height:  |  Size: 119 KiB

After

Width:  |  Height:  |  Size: 119 KiB

View File

Before

Width:  |  Height:  |  Size: 114 KiB

After

Width:  |  Height:  |  Size: 114 KiB

View File

Before

Width:  |  Height:  |  Size: 129 KiB

After

Width:  |  Height:  |  Size: 129 KiB

View File

Before

Width:  |  Height:  |  Size: 312 KiB

After

Width:  |  Height:  |  Size: 312 KiB

View File

Before

Width:  |  Height:  |  Size: 99 KiB

After

Width:  |  Height:  |  Size: 99 KiB

View File

Before

Width:  |  Height:  |  Size: 132 KiB

After

Width:  |  Height:  |  Size: 132 KiB

View File

Before

Width:  |  Height:  |  Size: 76 KiB

After

Width:  |  Height:  |  Size: 76 KiB

View File

Before

Width:  |  Height:  |  Size: 116 KiB

After

Width:  |  Height:  |  Size: 116 KiB

View File

Before

Width:  |  Height:  |  Size: 123 KiB

After

Width:  |  Height:  |  Size: 123 KiB

View File

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

Before

Width:  |  Height:  |  Size: 7.3 KiB

After

Width:  |  Height:  |  Size: 7.3 KiB

View File

Before

Width:  |  Height:  |  Size: 170 KiB

After

Width:  |  Height:  |  Size: 170 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.

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