Skip to content

feat: standardize blog post slugs and improve website structure#57

Closed
Nliver wants to merge 8 commits intomainfrom
blog
Closed

feat: standardize blog post slugs and improve website structure#57
Nliver wants to merge 8 commits intomainfrom
blog

Conversation

@Nliver
Copy link
Collaborator

@Nliver Nliver commented Oct 20, 2025

Requested by @Nliver (Issue #67)

Summary

This PR implements website improvements for GitHub Pages deployment by standardizing blog post slugs to clean kebab-case format without path prefixes, and cleaning up the repository structure.

Changes Made

  1. Slug Standardization

    • ✅ Removed /blog/2025/ prefix from all blog post slugs
    • ✅ Updated 29 blog posts to use clean kebab-case format
    • ✅ Example: /blog/2025/what-makes-ai-application-completewhat-makes-ai-application-complete
  2. Duplicate Route Resolution

    • ✅ Fixed duplicate route issue for llgo-python-compilation-and-runtime-integration
    • ✅ Updated 2025-02-28 article slug to be more specific: llgo-python-compilation-runtime-integration-dependency-to-delivery
  3. Directory Cleanup

    • ✅ Removed 2025/ directory after successful migration to website/blog/
    • ✅ Deleted old migration scripts (comprehensive_migrate.py, copy_images.py, etc.)
    • ✅ Removed temporary files (slug_mapping.json)
  4. Build Verification

    • ✅ Docusaurus build succeeds with no duplicate route errors
    • ✅ All image paths verified and working correctly

Migration Status

  • Articles: Already migrated to website/blog/
  • Images: Already migrated to website/static/img/blog/
  • Image references: Already updated in articles ✅
  • Slugs: Now standardized to kebab-case format ✅
  • 2025/ directory: Deleted ✅

Testing

Local build verified:

cd website
npm install
npm run build
# ✅ Build successful with no errors

Breaking Changes

⚠️ URL Changes: Blog post URLs will change from /blog/2025/slug-name to /blog/slug-name. This improves SEO and URL structure for GitHub Pages deployment.


Related to #67

@Nliver Nliver requested review from CarlJi and Copilot and removed request for Copilot October 20, 2025 04:44
@gemini-code-assist
Copy link
Contributor

Summary of Changes

Hello @Nliver, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

本次拉取请求主要新增了一篇关于AI时代软件工程重塑的深度文章,该文章由许式伟先生撰写,详细阐述了AI技术如何改变软件开发范式。同时,对现有文档进行了重命名和结构调整,以保持内容组织的一致性,并对 README.md 文件进行了格式更新。

Highlights

  • 新增核心文章: 新增了一篇名为《许式伟:AI 时代重塑软件工程》的深度文章,探讨了AI对软件工程的深远影响。
  • 文档结构优化: 重命名了多个现有文档文件,以优化文档的编号和整体结构。
  • README更新: 更新了 README.md 文件中的表格标题,以改进格式和可读性。
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request updates the closing ceremony speech and reorders some documents. The newly added article, 'Reshaping Software Engineering in the AI Era,' is insightful and well-structured.

My review focuses on the new Markdown file, providing suggestions to improve its formatting and maintain consistency with standard practices. The feedback includes:

  • Adjusting heading levels for better document structure.
  • Using standard Markdown syntax for paragraph breaks.
  • Converting a plain URL into a clickable link for better usability.
  • Ensuring the file ends with a newline, which is a common convention.

These minor changes will help improve the overall quality and readability of the document. Please see the specific comments for details.


在第四期1024实训营结营仪式上,实训营发起人许式伟先生以《AI 时代重塑软件工程》为题,为全体学员和在线观众带来了一场深度分享。他从软件工程的基础理论出发,深入剖析了AI技术对软件工程领域的深刻影响与重塑。以下是演讲全文:

# 正文:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

It's recommended to adjust the heading level for better document structure. The main title of the article is already a level 1 heading (#). This line, 正文: (which means "Body text:"), should probably be a level 2 heading (##) to maintain a proper hierarchy. Alternatively, since it acts as an introduction, you could remove it entirely for a more compact presentation.

Suggested change
# 正文:
## 正文:


这意味着,“许式定律”中的极限理论不再只是思想实验,而成为每个团队必须面对的现实:

>如果你的产品需求清晰、架构拆解合理,AI能在几小时内交付过去需要数周的代码;<br/>但如果你的需求模糊、模块边界混乱,AI只会以百倍速度放大你的错误。
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

It's better to use standard Markdown for paragraph breaks within a blockquote. Using <br/> might not render consistently across all platforms. I suggest splitting the content into two separate blockquotes for better clarity and standard compliance.

Suggested change
>如果你的产品需求清晰、架构拆解合理,AI能在几小时内交付过去需要数周的代码;<br/>但如果你的需求模糊、模块边界混乱,AI只会以百倍速度放大你的错误。
>如果你的产品需求清晰、架构拆解合理,AI能在几小时内交付过去需要数周的代码;
>但如果你的需求模糊、模块边界混乱,AI只会以百倍速度放大你的错误。


如果一个公司的软件开发过程没有因为AI而实现效率倍增,那么它必将成为落后者。效率翻倍只是底线,实际上有潜力实现更高的提升。

在 XGo 语言的开发中,我们已经全面使用 AI Coding,并且以完全公开透明的方式展示整个过程——包括如何给 AI 提任务、如何指挥 AI 工作。欢迎大家到 XGo 仓库(github.com/goplus/xgo)观摩交流。
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

For better readability and accessibility, it's recommended to format this plain URL as a clickable Markdown link.

Suggested change
在 XGo 语言的开发中,我们已经全面使用 AI Coding,并且以完全公开透明的方式展示整个过程——包括如何给 AI 提任务、如何指挥 AI 工作。欢迎大家到 XGo 仓库(github.com/goplus/xgo)观摩交流。
在 XGo 语言的开发中,我们已经全面使用 AI Coding,并且以完全公开透明的方式展示整个过程——包括如何给 AI 提任务、如何指挥 AI 工作。欢迎大家到 XGo 仓库([github.com/goplus/xgo](https://github.com/goplus/xgo))观摩交流。


软件工程正在被重塑,而我们有幸成为这场变革的见证者和参与者。与其恐惧,不如拥抱;与其被动,不如主动学习驾驭这个强大的新工具。

未来的软件工程,属于那些能够将人类智慧与机器智能完美结合的组织和个人。 No newline at end of file
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

It's a common convention to have a single newline at the end of a file. This prevents issues with some command-line tools like cat and can avoid noisy diffs in version control.

Suggested change
未来的软件工程,属于那些能够将人类智慧与机器智能完美结合的组织和个人。
未来的软件工程,属于那些能够将人类智慧与机器智能完美结合的组织和个人。

@xgopilot
Copy link

xgopilot bot commented Oct 20, 2025

Review Summary

Content Quality: Excellent - well-structured articles with strong technical depth.

Critical Issues: Missing README entries for articles #16-22 (including new article #22), double H1 heading structure, missing trailing newline.

Status: Requires revisions before merge.

@@ -49,16 +49,16 @@
### 🎓 第 4 期训练营
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Critical: Missing entries for articles #16-22 in table of contents. The new article (#22) and 6 other existing articles are not discoverable via README. Please add:

| 16   | 关于架构设计的几点认知体会 | [📖 阅读](2025/16.%20关于架构设计的几点认知体会/content.md) |
| 17   | SPX-Algorithm:构建多模态搜索服务的一些心得 | [📖 阅读](2025/17.%20SPX-Algorithm:构建多模态搜索服务的一些心得/share.md) |
| 18   | 代码不是核心:从 XLink 项目看产品开发的决策层次 | [📖 阅读](2025/18.%20代码不是核心:从%20XLink%20项目看产品开发的决策层次/content.md) |
| 19   | llpyg: LLGo 快速集成 Python 生态的桥梁 | [📖 阅读](2025/19.%20llpyg:%20LLGo%20快速集成%20Python%20生态的桥梁/content.md) |
| 20   | X绘图-我们是如何让AI更好的融入我们的产品的 | [📖 阅读](2025/20.X绘图-我们是如何让AI更好的融入我们的产品的/实训感悟.md) |
| 21   | 实训营分享:LLGo 中 Python 编译与运行时集成 | [📖 阅读](2025/21.%20实训营分享:LLGo%20中%20Python%20编译与运行时集成/content.md) |
| 22   | 许式伟:AI时代重塑软件工程 | [📖 阅读](2025/22.许式伟:AI时代重塑软件工程/reinventing_software_engineering_in_the_AI_Era.md) |


在第四期1024实训营结营仪式上,实训营发起人许式伟先生以《AI 时代重塑软件工程》为题,为全体学员和在线观众带来了一场深度分享。他从软件工程的基础理论出发,深入剖析了AI技术对软件工程领域的深刻影响与重塑。以下是演讲全文:

# 正文:
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Critical: Double H1 heading violates markdown structure. Either remove "# 正文:" or change to ## 正文:. Recommend removing entirely as it adds no semantic value.


软件工程正在被重塑,而我们有幸成为这场变革的见证者和参与者。与其恐惧,不如拥抱;与其被动,不如主动学习驾驭这个强大的新工具。

未来的软件工程,属于那些能够将人类智慧与机器智能完美结合的组织和个人。 No newline at end of file
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Critical: Missing newline at end of file (violates POSIX and repository's own article #6 standard "一行之差:为什么你的文件末尾应该留一个空行?"). Please add trailing newline.


如果一个公司的软件开发过程没有因为AI而实现效率倍增,那么它必将成为落后者。效率翻倍只是底线,实际上有潜力实现更高的提升。

在 XGo 语言的开发中,我们已经全面使用 AI Coding,并且以完全公开透明的方式展示整个过程——包括如何给 AI 提任务、如何指挥 AI 工作。欢迎大家到 XGo 仓库(github.com/goplus/xgo)观摩交流。
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Consider converting to proper markdown link for better UX:

欢迎大家到 [XGo 仓库](https://github.com/goplus/xgo) 观摩交流。

架构设计之所以比产品设计更难,是因为它极度“逆直觉”。当我看到团队 Leader 简单地按照页面分配任务(页面A交给张三,页面B交给李四......)时,就知道这样的架构设计通常是错误的。**真正好的架构设计是在做“乘法”**,它要求每个模块都应被当作一个“子业务”来设计——**有独立需求边界、高复用性、低耦合。就像搭乐高,积木种类越少、拼装步骤越简、外部依赖越成熟,系统就越健壮**。


## AI时代:“人月神话” 的终结
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Inconsistent spacing: two blank lines before heading. Use single blank line for consistency.


这意味着,“许式定律”中的极限理论不再只是思想实验,而成为每个团队必须面对的现实:

>如果你的产品需求清晰、架构拆解合理,AI能在几小时内交付过去需要数周的代码;<br/>但如果你的需求模糊、模块边界混乱,AI只会以百倍速度放大你的错误。
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Consider using markdown line breaks instead of HTML <br/> for better portability:

> 如果你的产品需求清晰、架构拆解合理,AI能在几小时内交付过去需要数周的代码;
> 
> 但如果你的需求模糊、模块边界混乱,AI只会以百倍速度放大你的错误。

* feat: Add public-facing website with Docusaurus

Implements #51 - Build a public-facing site for 1024 TechCamp

**Features implemented:**
- Landing page with TechCamp branding and introduction
- Blog system with Markdown support
- Tagging system for blog posts (AI, Go, compiler, engineering, architecture)
- RSS feed support
- SEO-friendly URLs
- Mobile-first, responsive design
- Documentation pages (intro, contributing, proposals)

**Tech stack:**
- Docusaurus (React-based static site generator)
- TypeScript
- GitHub Pages for hosting

**Structure:**
- `/website` - Docusaurus site
  - `/blog` - Blog posts
  - `/docs` - Documentation pages
  - `/src` - React components and custom pages
  - `/static` - Static assets

**Note:** GitHub Pages deployment workflow needs to be added separately by a maintainer with workflow permissions. See website/README.md for deployment instructions.

Generated with [codeagent](https://github.com/qbox/codeagent)
Co-authored-by: Nliver <[email protected]>

* refactor: implement code review suggestions

- Remove demo blog posts and template content
- Clean up authors.yml (keep only techcamp team)
- Remove tutorial directories (tutorial-basics, tutorial-extras)
- Fix docusaurus.config.ts: add onBrokenMarkdownLinks, set blogSidebarCount to 10
- Fix React components: use stable keys, add aria-label for accessibility
- Remove inline styles, use CSS modules with gap property
- Clarify contributing.md documentation for blog vs technical articles

Generated with [codeagent](https://github.com/qbox/codeagent)
Co-authored-by: Nliver <[email protected]>

---------

Co-authored-by: xgopilot <[email protected]>
Co-authored-by: Nliver <[email protected]>
Copilot AI review requested due to automatic review settings November 7, 2025 06:18
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This PR adds a Docusaurus-based website for the 1024 TechCamp project. The website includes documentation, a blog section, and various static assets to provide information about the training camp, allow content contributions, and enable community engagement.

Key Changes

  • Added complete Docusaurus website infrastructure with TypeScript configuration
  • Created documentation pages (intro, contributing, proposals) and initial blog post
  • Configured multi-language support (Chinese) and GitHub Pages deployment
  • Added website-specific files to .gitignore

Reviewed Changes

Copilot reviewed 20 out of 39 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
website/docusaurus.config.ts Main Docusaurus configuration with site metadata, navigation, and deployment settings
website/package.json Dependencies for Docusaurus 3.9.2, React 19, and development tooling
website/tsconfig.json TypeScript configuration extending Docusaurus defaults
website/src/pages/index.tsx Homepage component with hero banner and feature sections
website/src/components/HomepageFeatures/index.tsx Features showcase component with SVG illustrations
website/docs/*.md Documentation pages for intro, contributing, and proposals
website/blog/2025-01-01-welcome.md Welcome blog post announcing the website
website/static/img/* Logo, favicon, and illustration SVG/image assets
.gitignore Updated to exclude website build artifacts

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +23 to +24
"react": "^19.0.0",
"react-dom": "^19.0.0"
Copy link

Copilot AI Nov 7, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Using React 19 with Docusaurus 3.9.2 may cause compatibility issues. Docusaurus 3.x typically requires React 18.x. Verify that Docusaurus 3.9.2 officially supports React 19, or consider downgrading to React ^18.0.0 to ensure compatibility.

Suggested change
"react": "^19.0.0",
"react-dom": "^19.0.0"
"react": "^18.0.0",
"react-dom": "^18.0.0"

Copilot uses AI. Check for mistakes.
xgopilot bot and others added 2 commits January 28, 2026 21:34
… hub (#62)

* update(docs):Fix document outline and update article expressions (#59)

* update(docs):Fix document outline and update article expressions

* Update 2025/21. LLGo 中 Python 编译与运行时集成/content.md

Signed-off-by: Nliver <[email protected]>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>

* chore: update the readme (#60)

* feat: Add public-facing website with blog and resource hub

- Built with Astro for fast, content-focused static site generation
- Responsive, mobile-first design with dark mode support
- Blog system with Markdown/MDX support
- Tag-based categorization and filtering
- RSS feed for blog posts
- SEO-friendly URLs
- Clean, minimal design inspired by modern dev sites

Resolves #51

Generated with codeagent (https://github.com/qbox/codeagent)
Co-authored-by: Nliver <[email protected]>

---------

Signed-off-by: Nliver <[email protected]>
Co-authored-by: Nliver <[email protected]>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: xgopilot <[email protected]>
* update(docs):Fix document outline and update article expressions (#59)

* update(docs):Fix document outline and update article expressions

* Update 2025/21. LLGo 中 Python 编译与运行时集成/content.md

Signed-off-by: Nliver <[email protected]>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>

* chore: update the readme (#60)

* feat: Add public-facing website with blog and resource hub

- Built with Astro for fast, content-focused static site generation
- Responsive, mobile-first design with dark mode support
- Blog system with Markdown/MDX support
- Tag-based categorization and filtering
- RSS feed for blog posts
- SEO-friendly URLs
- Clean, minimal design inspired by modern dev sites

Resolves #51

Generated with codeagent (https://github.com/qbox/codeagent)
Co-authored-by: Nliver <[email protected]>

* feat: Configure blog branch for direct GitHub Pages deployment

- Built Docusaurus static site and moved files to root directory
- Added .nojekyll file to prevent Jekyll processing
- Site can now be deployed by selecting blog branch (root /) in Pages settings
- Includes built HTML/CSS/JS for landing page, blog, and documentation

This allows GitHub Pages deployment without GitHub Actions by simply
configuring Settings > Pages to use the blog branch and root directory.

Generated with [codeagent](https://github.com/qbox/codeagent)
Co-authored-by: Nliver <[email protected]>

---------

Signed-off-by: Nliver <[email protected]>
Co-authored-by: Nliver <[email protected]>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: xgopilot <[email protected]>
Copilot AI review requested due to automatic review settings January 28, 2026 14:09
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 87 out of 116 changed files in this pull request and generated 10 comments.


💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines 1 to 18
import rss from '@astrojs/rss';
import { getCollection } from 'astro:content';

export async function GET(context) {
const posts = await getCollection('blog');
return rss({
title: '1024 TechCamp Blog',
description: '1024 实训营技术博客 - 工程实践、架构设计、AI 开发等深度技术分享',
site: context.site,
items: posts.map((post) => ({
title: post.data.title,
pubDate: post.data.pubDate,
description: post.data.description,
link: `/blog/${post.slug}/`,
})),
customData: `<language>zh-CN</language>`,
});
}
Copy link

Copilot AI Jan 28, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This file uses Astro server endpoint conventions (export async function GET, @astrojs/rss, astro:content). In a Docusaurus site, src/pages/*.js is expected to export a React component/MDX, so this will break the pages plugin build/bundle. Consider generating the RSS feed via Docusaurus blog feedOptions (already configured) and remove this file, or migrate the site to Astro fully.

Copilot uses AI. Check for mistakes.
Comment on lines 1 to 14
import { defineCollection, z } from 'astro:content';

const blog = defineCollection({
type: 'content',
schema: z.object({
title: z.string(),
description: z.string(),
pubDate: z.coerce.date(),
author: z.string().optional(),
tags: z.array(z.string()).optional(),
}),
});

export const collections = { blog };
Copy link

Copilot AI Jan 28, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This file imports astro:content, which is not available in the current website/package.json (Docusaurus-only). It will also cause tsc to fail module resolution during npm run typecheck. Remove/move this Astro content config unless the site is switching to Astro and the missing dependencies/types are added.

Copilot uses AI. Check for mistakes.
Comment on lines 1 to 15
import { defineConfig } from 'astro/config';
import mdx from '@astrojs/mdx';

// https://astro.build/config
export default defineConfig({
site: 'https://qiniu.github.io',
base: '/techcamp',
integrations: [mdx()],
markdown: {
shikiConfig: {
theme: 'github-dark',
wrap: true
}
}
});
Copy link

Copilot AI Jan 28, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This Astro configuration requires astro/@astrojs/mdx, but the website/ project is currently configured and scripted as Docusaurus-only. Keeping both configs is likely to confuse contributors and can lead to broken builds. Either remove astro.config.mjs or add the missing dependencies and update scripts/docs to indicate Astro is the intended build pipeline.

Copilot uses AI. Check for mistakes.
<div class="nav-links">
<a href="/techcamp/">首页</a>
<a href="/techcamp/blog">博客</a>
<a href="https://github.com/qiniu/techcamp" target="_blank">GitHub</a>
Copy link

Copilot AI Jan 28, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Links opened with target="_blank" should include rel="noopener noreferrer" to prevent tabnabbing and avoid exposing window.opener.

Copilot uses AI. Check for mistakes.
Comment on lines +6 to +31
"docusaurus": "docusaurus",
"start": "docusaurus start",
"build": "docusaurus build",
"swizzle": "docusaurus swizzle",
"deploy": "docusaurus deploy",
"clear": "docusaurus clear",
"serve": "docusaurus serve",
"write-translations": "docusaurus write-translations",
"write-heading-ids": "docusaurus write-heading-ids",
"typecheck": "tsc"
},
"dependencies": {
"@docusaurus/core": "3.9.2",
"@docusaurus/preset-classic": "3.9.2",
"@mdx-js/react": "^3.0.0",
"clsx": "^2.0.0",
"prism-react-renderer": "^2.3.0",
"react": "^19.0.0",
"react-dom": "^19.0.0"
},
"devDependencies": {
"@docusaurus/module-type-aliases": "3.9.2",
"@docusaurus/tsconfig": "3.9.2",
"@docusaurus/types": "3.9.2",
"typescript": "~5.6.2"
},
Copy link

Copilot AI Jan 28, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

package.json defines only Docusaurus scripts/dependencies, but this PR also adds Astro-specific config/code (e.g., website/astro.config.mjs, website/src/pages/rss.xml.js, website/src/content/config.ts) requiring astro, @astrojs/*, and astro:content. As-is, npm install + npm run typecheck/build will fail due to missing modules. Either remove the Astro files or add the required Astro dependencies/scripts and clearly choose the build system for website/.

Copilot uses AI. Check for mistakes.
Comment on lines +2 to +3
// This file is not used in compilation. It is here just for a nice editor experience.
"extends": "@docusaurus/tsconfig",
Copy link

Copilot AI Jan 28, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The comment says this tsconfig.json is “not used in compilation”, but website/package.json runs tsc for typecheck, which will use this file by default. This is misleading and may hide real typecheck failures (especially with the Astro files added). Update the comment and/or point the typecheck script at a dedicated config if you intend an editor-only tsconfig.

Copilot uses AI. Check for mistakes.
Comment on lines +7 to +10
const config: Config = {
title: '1024 TechCamp',
tagline: '携手成长,成就优秀工程师',
favicon: 'img/favicon.ico',
Copy link

Copilot AI Jan 28, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The PR title/description says it updates an article (“Reshaping Software Engineering in the AI Era”), but the diff introduces a full website setup plus generated build artifacts and many unrelated content/docs changes. Please clarify the PR scope or split this into smaller PRs so review and rollback risk is manageable.

Copilot uses AI. Check for mistakes.
Comment on lines 15 to 17
<a href="/techcamp/blog" class="btn btn-primary">浏览博客</a>
<a href="https://github.com/qiniu/techcamp" target="_blank" class="btn btn-secondary">GitHub 仓库</a>
</div>
Copy link

Copilot AI Jan 28, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This external link uses target="_blank" without rel="noopener noreferrer", which is a tabnabbing risk.

Copilot uses AI. Check for mistakes.
Comment on lines 62 to 63
<a href="https://github.com/qiniu/techcamp/tree/main/4th" target="_blank" class="category-card">
<h3>🎓 训练营课题</h3>
Copy link

Copilot AI Jan 28, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This external link uses target="_blank" without rel="noopener noreferrer", which is a tabnabbing risk.

Copilot uses AI. Check for mistakes.
Comment on lines 66 to 67
<a href="https://github.com/qiniu/techcamp" target="_blank" class="category-card">
<h3>📚 学习资料</h3>
Copy link

Copilot AI Jan 28, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This external link uses target="_blank" without rel="noopener noreferrer", which is a tabnabbing risk.

Copilot uses AI. Check for mistakes.
* update(docs):Fix document outline and update article expressions (#59)

* update(docs):Fix document outline and update article expressions

* Update 2025/21. LLGo 中 Python 编译与运行时集成/content.md

Signed-off-by: Nliver <[email protected]>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>

* chore: update the readme (#60)

* feat: Add public-facing website with blog and resource hub

- Built with Astro for fast, content-focused static site generation
- Responsive, mobile-first design with dark mode support
- Blog system with Markdown/MDX support
- Tag-based categorization and filtering
- RSS feed for blog posts
- SEO-friendly URLs
- Clean, minimal design inspired by modern dev sites

Resolves #51

Generated with codeagent (https://github.com/qbox/codeagent)
Co-authored-by: Nliver <[email protected]>

* feat: Configure blog branch for direct GitHub Pages deployment

- Built Docusaurus static site and moved files to root directory
- Added .nojekyll file to prevent Jekyll processing
- Site can now be deployed by selecting blog branch (root /) in Pages settings
- Includes built HTML/CSS/JS for landing page, blog, and documentation

This allows GitHub Pages deployment without GitHub Actions by simply
configuring Settings > Pages to use the blog branch and root directory.

Generated with [codeagent](https://github.com/qbox/codeagent)
Co-authored-by: Nliver <[email protected]>

* feat: Migrate 2025 articles to Docusaurus blog system

- Migrated 21 technical articles from 2025/ directory to website/blog/
- Added proper Docusaurus frontmatter with slug, title, authors, tags, date, description
- Configured 9 tags: ai, go, compiler, engineering, architecture, xgo, llgo, python, career
- Copied 15 images to website/static/img/blog/ directory
- Updated all image references to use correct paths
- Fixed YAML frontmatter issues and MDX compatibility
- All articles now build successfully

Articles cover topics:
- AI and engineering (19 articles)
- Architecture design (19 articles)
- Career development (14 articles)
- Go and compiler technology (11 articles)
- XGo/LLGo compilers (11 articles)

Date range: 2025-01-15 to 2025-02-24

Generated with [codeagent](https://github.com/qbox/codeagent)
Co-authored-by: Nliver <[email protected]>

---------

Signed-off-by: Nliver <[email protected]>
Co-authored-by: Nliver <[email protected]>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: xgopilot <[email protected]>
* update(docs):Fix document outline and update article expressions (#59)

* update(docs):Fix document outline and update article expressions

* Update 2025/21. LLGo 中 Python 编译与运行时集成/content.md

Signed-off-by: Nliver <[email protected]>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>

* chore: update the readme (#60)

* feat: Add public-facing website with blog and resource hub

- Built with Astro for fast, content-focused static site generation
- Responsive, mobile-first design with dark mode support
- Blog system with Markdown/MDX support
- Tag-based categorization and filtering
- RSS feed for blog posts
- SEO-friendly URLs
- Clean, minimal design inspired by modern dev sites

Resolves #51

Generated with codeagent (https://github.com/qbox/codeagent)
Co-authored-by: Nliver <[email protected]>

* feat: Configure blog branch for direct GitHub Pages deployment

- Built Docusaurus static site and moved files to root directory
- Added .nojekyll file to prevent Jekyll processing
- Site can now be deployed by selecting blog branch (root /) in Pages settings
- Includes built HTML/CSS/JS for landing page, blog, and documentation

This allows GitHub Pages deployment without GitHub Actions by simply
configuring Settings > Pages to use the blog branch and root directory.

Generated with [codeagent](https://github.com/qbox/codeagent)
Co-authored-by: Nliver <[email protected]>

* feat: Migrate 2025 articles to Docusaurus blog system

- Migrated 21 technical articles from 2025/ directory to website/blog/
- Added proper Docusaurus frontmatter with slug, title, authors, tags, date, description
- Configured 9 tags: ai, go, compiler, engineering, architecture, xgo, llgo, python, career
- Copied 15 images to website/static/img/blog/ directory
- Updated all image references to use correct paths
- Fixed YAML frontmatter issues and MDX compatibility
- All articles now build successfully

Articles cover topics:
- AI and engineering (19 articles)
- Architecture design (19 articles)
- Career development (14 articles)
- Go and compiler technology (11 articles)
- XGo/LLGo compilers (11 articles)

Date range: 2025-01-15 to 2025-02-24

Generated with [codeagent](https://github.com/qbox/codeagent)
Co-authored-by: Nliver <[email protected]>

* feat: Re-migrate blog articles with English slugs and configure edit URLs

- Translate all 21 article filenames from Chinese to English slugs
- Update frontmatter slugs to follow /blog/2025/english-slug format
- Configure editUrl to point to blog branch for direct editing
- Add translation script for automated slug conversion
- Verify build succeeds with new slug structure

Generated with codeagent
Co-authored-by: Nliver <[email protected]>

---------

Signed-off-by: Nliver <[email protected]>
Co-authored-by: Nliver <[email protected]>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: xgopilot <[email protected]>
Copilot AI review requested due to automatic review settings January 29, 2026 13:52
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 115 out of 176 changed files in this pull request and generated 15 comments.


💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines 1 to 2
import rss from '@astrojs/rss';
import { getCollection } from 'astro:content';
Copy link

Copilot AI Jan 29, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This page uses Astro-specific APIs (@astrojs/rss, astro:content) but the project is configured as a Docusaurus site (and website/package.json doesn’t include Astro deps). If this file is picked up by Docusaurus pages routing, it will fail to compile. Either rewrite RSS generation using Docusaurus’ built-in blog feed support / a Docusaurus-compatible implementation, or move this file out of website/src/pages (and remove the Astro imports) if it’s not meant to be built by Docusaurus.

Copilot uses AI. Check for mistakes.
Comment on lines 28 to 32
value = value.strip('"').strip("'")
# Replace Chinese quotes with regular text or escape them
value = value.replace('"', '').replace('"', '')
value = value.replace(''', '').replace(''', '')
# Truncate long descriptions
Copy link

Copilot AI Jan 29, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This script currently has invalid Python syntax on the value.replace(''', ...) lines, which will prevent it from running. Use properly-quoted strings (e.g., replace straight single quotes via "'") or handle quote normalization with a safer approach (like translating Unicode quote characters) before re-serializing YAML.

Copilot uses AI. Check for mistakes.
@@ -0,0 +1 @@
(()=>{"use strict";var e,a,t,r,o,c={},n={};function f(e){var a=n[e];if(void 0!==a)return a.exports;var t=n[e]={id:e,loaded:!1,exports:{}};return c[e].call(t.exports,t,t.exports,f),t.loaded=!0,t.exports}f.m=c,f.c=n,e=[],f.O=(a,t,r,o)=>{if(!t){var c=1/0;for(d=0;d<e.length;d++){for(var[t,r,o]=e[d],n=!0,b=0;b<t.length;b++)(!1&o||c>=o)&&Object.keys(f.O).every(e=>f.O[e](t[b]))?t.splice(b--,1):(n=!1,o<c&&(c=o));if(n){e.splice(d--,1);var i=r();void 0!==i&&(a=i)}}return a}o=o||0;for(var d=e.length;d>0&&e[d-1][2]>o;d--)e[d]=e[d-1];e[d]=[t,r,o]},f.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return f.d(a,{a:a}),a},t=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,f.t=function(e,r){if(1&r&&(e=this(e)),8&r)return e;if("object"==typeof e&&e){if(4&r&&e.__esModule)return e;if(16&r&&"function"==typeof e.then)return e}var o=Object.create(null);f.r(o);var c={};a=a||[null,t({}),t([]),t(t)];for(var n=2&r&&e;("object"==typeof n||"function"==typeof n)&&!~a.indexOf(n);n=t(n))Object.getOwnPropertyNames(n).forEach(a=>c[a]=()=>e[a]);return c.default=()=>e,f.d(o,c),o},f.d=(e,a)=>{for(var t in a)f.o(a,t)&&!f.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:a[t]})},f.f={},f.e=e=>Promise.all(Object.keys(f.f).reduce((a,t)=>(f.f[t](e,a),a),[])),f.u=e=>"assets/js/"+({6:"56162685",31:"019c0c06",48:"a94703ab",61:"1f391b9e",65:"6bf23e06",98:"a7bd4aaa",134:"393be207",173:"58ffb59a",209:"01a85c17",212:"621db11d",235:"a7456010",249:"ccc49370",260:"73c4bc96",308:"1d55f0a7",343:"0e5e3125",375:"3f11435e",401:"17896441",410:"9184c370",459:"4d54d076",472:"814f3328",583:"1df93b7f",643:"a6aa9e1f",647:"5e95c892",711:"9e4087bc",742:"aba21aa0",813:"6875c492",858:"36994c47",903:"acecf23e",976:"0e384e19"}[e]||e)+"."+{6:"c9400a4e",31:"32ba87d6",48:"c67b1bec",61:"4a62a5d2",65:"b560b789",98:"c16b59cf",134:"5b8acf55",159:"0f31272e",173:"893e8d8c",209:"d1c02b46",212:"aa2ed407",235:"0073e292",237:"99b167a9",249:"b3874173",260:"3dceff6f",308:"548fd4da",343:"dd101bd2",375:"c72c298d",401:"9e2c74b6",410:"d42e3f83",459:"1daa96e2",472:"78769193",583:"4f432530",643:"b2e0db8a",647:"b67cad83",711:"fe67bdb5",742:"f990d6fb",785:"55cecb07",813:"46d50236",858:"21894843",903:"d8580b40",976:"2d5ff814"}[e]+".js",f.miniCssF=e=>{},f.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),f.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),r={},o="website:",f.l=(e,a,t,c)=>{if(r[e])r[e].push(a);else{var n,b;if(void 0!==t)for(var i=document.getElementsByTagName("script"),d=0;d<i.length;d++){var l=i[d];if(l.getAttribute("src")==e||l.getAttribute("data-webpack")==o+t){n=l;break}}n||(b=!0,(n=document.createElement("script")).charset="utf-8",f.nc&&n.setAttribute("nonce",f.nc),n.setAttribute("data-webpack",o+t),n.src=e),r[e]=[a];var u=(a,t)=>{n.onerror=n.onload=null,clearTimeout(s);var o=r[e];if(delete r[e],n.parentNode&&n.parentNode.removeChild(n),o&&o.forEach(e=>e(t)),a)return a(t)},s=setTimeout(u.bind(null,void 0,{type:"timeout",target:n}),12e4);n.onerror=u.bind(null,n.onerror),n.onload=u.bind(null,n.onload),b&&document.head.appendChild(n)}},f.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},f.p="/techcamp/",f.gca=function(e){return e={17896441:"401",56162685:"6","019c0c06":"31",a94703ab:"48","1f391b9e":"61","6bf23e06":"65",a7bd4aaa:"98","393be207":"134","58ffb59a":"173","01a85c17":"209","621db11d":"212",a7456010:"235",ccc49370:"249","73c4bc96":"260","1d55f0a7":"308","0e5e3125":"343","3f11435e":"375","9184c370":"410","4d54d076":"459","814f3328":"472","1df93b7f":"583",a6aa9e1f:"643","5e95c892":"647","9e4087bc":"711",aba21aa0:"742","6875c492":"813","36994c47":"858",acecf23e:"903","0e384e19":"976"}[e]||e,f.p+f.u(e)},(()=>{var e={354:0,869:0};f.f.j=(a,t)=>{var r=f.o(e,a)?e[a]:void 0;if(0!==r)if(r)t.push(r[2]);else if(/^(354|869)$/.test(a))e[a]=0;else{var o=new Promise((t,o)=>r=e[a]=[t,o]);t.push(r[2]=o);var c=f.p+f.u(a),n=new Error;f.l(c,t=>{if(f.o(e,a)&&(0!==(r=e[a])&&(e[a]=void 0),r)){var o=t&&("load"===t.type?"missing":t.type),c=t&&t.target&&t.target.src;n.message="Loading chunk "+a+" failed.\n("+o+": "+c+")",n.name="ChunkLoadError",n.type=o,n.request=c,r[1](n)}},"chunk-"+a,a)}},f.O.j=a=>0===e[a];var a=(a,t)=>{var r,o,[c,n,b]=t,i=0;if(c.some(a=>0!==e[a])){for(r in n)f.o(n,r)&&(f.m[r]=n[r]);if(b)var d=b(f)}for(a&&a(t);i<c.length;i++)o=c[i],f.o(e,o)&&e[o]&&e[o][0](),e[o]=0;return f.O(d)},t=globalThis.webpackChunkwebsite=globalThis.webpackChunkwebsite||[];t.forEach(a.bind(null,0)),t.push=a.bind(null,t.push.bind(t))})()})(); No newline at end of file
Copy link

Copilot AI Jan 29, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This appears to be a generated/minified Webpack bundle from a site build. Checking built artifacts into the main repo will greatly increase repo size and create noisy diffs/merge conflicts. Prefer generating these in CI and publishing via GitHub Pages (or keep them on a dedicated gh-pages branch), and add an ignore rule if these are not intended to be versioned.

Copilot uses AI. Check for mistakes.
Comment on lines +48 to +53
| 16 | 关于架构设计的几点认知体会 | [📖 阅读](2025/16.%20关于架构设计的几点认知体会/content.md) |
| 17 | SPX-Algorithm:构建多模态搜索服务的一些心得 | [📖 阅读](2025/17.%20SPX-Algorithm:构建多模态搜索服务的一些心得/share.md) |
| 18 | 代码不是核心:从 XLink 项目看产品开发的决策层次 | [📖 阅读](2025/18.%20代码不是核心:从%20XLink%20项目看产品开发的决策层次/content.md) |
| 19 | llpyg: LLGo 快速集成 Python 生态的桥梁 | [📖 阅读](2025/19.%20llpyg:%20LLGo%20快速集成%20Python%20生态的桥梁/content.md) |
| 20 | X绘图:我们如何让 AI 更好地融入产品 | [📖 阅读](2025/20.%20X绘图-我们是如何让AI更好的融入我们的产品的/实训感悟.md) |
| 21 | LLGo 中 Python 编译与运行时集成:从依赖识别到一键交付 | [📖 阅读](2025/21.%20LLGo%20中%20Python%20编译与运行时集成/content.md) |
Copy link

Copilot AI Jan 29, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The PR metadata/description says it updates an article, but this change set introduces a full website scaffold (Docusaurus config, pages, blog content, build artifacts, scripts, etc.). Please clarify the intended scope and consider splitting into smaller PRs (e.g., site scaffolding vs. content updates) to keep reviewability and reduce merge risk.

Copilot uses AI. Check for mistakes.
Comment on lines 23 to 37
实训过程中最令我印象深刻的是导师们对工程质量的极致追求。一个 PR 经常被来回 review 三四十条 comment,比如 [https://lt;https://github.com/goplus/builder/pull/122\](https://lt;https://github.com/goplus/builder/pull/122\)gt; 和 [https://lt;https://github.com/goplus/builder/pull/96\](https://lt;https://github.com/goplus/builder/pull/96\)gt;。从前端构建过程到代码实现、从工程规范到部署落地,导师们以几乎"苛刻"的态度对待每一个技术细节。这种严谨的工程文化深深影响了我,至今在我的工作中,我仍然保持着对 PR 质量的高标准要求。

![pr-review](/img/blog/同学为什么我建议你关注-1024-实训营/pr-review.png)

在接口设计阶段,导师们也不会简单地告诉我们“应该怎么做”,而是引导我们思考:这个接口的核心需求是什么?未来可能如何演变?当前设计是否存在潜在问题?这种启发式的教学方式培养了我的系统思维能力和前瞻性设计意识,受益匪浅。

回到 XGo 这个项目本身,XGo 是实训营的核心内容,更是一个硬核的、涉及编程语言底层技术的开源项目,它为不同技术、不同水平的同学提供了丰富的学习机会:

- 前端开发者可以从 XBuilder 项目入手
- 对 AI 感兴趣的可以探索 AI 辅助编码功能
- 底层技术爱好者可以深入研究 XGo 编译器及 LLGo 编译器等

每一层技术挑战都有实力强悍的导师耐心指导。这种阶梯式的学习路径让每个人都能找到适合自己的成长方向。

目前我正在负责 XGo 的底层编译器 LLGo 的子项目——llcppg,旨在自动生成 C/C++ 库的 LLGo Binding。通过这个项目,我不仅更深入理解了 C 编译器工作原理,也更理解了不同语言在设计其语法特性时的思考,还经常能从这一角的开源实践,窥探到整个软件工程的历史。在开发过程中也经常会得到导师们的经验上的分享、以及在架构设计方面的持续指导,这段经历成为我技术成长的重要里程碑。对于该工程的相关技术细节我专门写了一篇文章分享([https://lt;https://mp.weixin.qq.com/s/cx9F5lYKyxwvFpokicJ8Yw\](https://lt;https://mp.weixin.qq.com/s/cx9F5lYKyxwvFpokicJ8Yw\)gt;),项目代码也已开源在 GitHub([https://lt;https://github.com/goplus/llcppg\](https://lt;https://github.com/goplus/llcppg\)gt;),欢迎沟通交流。
Copy link

Copilot AI Jan 29, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This markdown contains malformed links like https://lt;https://...\](https://lt;https://...\)gt;, which won’t render correctly and will likely confuse readers. Please replace them with standard markdown links (e.g., [text](https://...)) or plain URLs.

Copilot uses AI. Check for mistakes.
"""
Migrate articles from 2025/ directory to website/blog/ with Docusaurus frontmatter
"""
import os
Copy link

Copilot AI Jan 29, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Import of 'os' is not used.

Copilot uses AI. Check for mistakes.
"""Translate Chinese article titles to English slugs and re-migrate articles"""
import re
from pathlib import Path
from typing import Dict
Copy link

Copilot AI Jan 29, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Import of 'Dict' is not used.

Copilot uses AI. Check for mistakes.
<div class="nav-links">
<a href="/techcamp/">首页</a>
<a href="/techcamp/blog">博客</a>
<a href="https://github.com/qiniu/techcamp" target="_blank">GitHub</a>
Copy link

Copilot AI Jan 29, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The external GitHub link uses target="_blank" without rel="noopener noreferrer", which allows the opened page to access window.opener and potentially redirect the original tab (reverse tabnabbing). If that external site is compromised, an attacker could navigate your site’s tab to a phishing page under your domain. Add rel="noopener noreferrer" (or at least rel="noopener") to this and other external links opened in a new tab to prevent the new page from controlling window.opener.

Copilot uses AI. Check for mistakes.
</p>
<div class="cta-buttons">
<a href="/techcamp/blog" class="btn btn-primary">浏览博客</a>
<a href="https://github.com/qiniu/techcamp" target="_blank" class="btn btn-secondary">GitHub 仓库</a>
Copy link

Copilot AI Jan 29, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This external CTA link to GitHub opens in a new tab via target="_blank" but does not include rel="noopener noreferrer", which enables reverse tabnabbing: the GitHub page can access window.opener and redirect your site’s tab to a phishing page. Add rel="noopener noreferrer" (or rel="noopener") to all external links opened with target="_blank" to block access to window.opener and harden against tab hijacking.

Copilot uses AI. Check for mistakes.
Comment on lines 62 to 69
<a href="https://github.com/qiniu/techcamp/tree/main/4th" target="_blank" class="category-card">
<h3>🎓 训练营课题</h3>
<p>实训课题、公开课视频、导师分享</p>
</a>
<a href="https://github.com/qiniu/techcamp" target="_blank" class="category-card">
<h3>📚 学习资料</h3>
<p>规范文档、课程指导、学习资源</p>
</a>
Copy link

Copilot AI Jan 29, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These external GitHub links use target="_blank" without rel="noopener noreferrer", which exposes the page to reverse tabnabbing: the newly opened site can access window.opener and navigate your site’s tab to attacker-controlled content. Add rel="noopener noreferrer" (or rel="noopener") on all target="_blank" external links here so the new window cannot manipulate window.opener.

Copilot uses AI. Check for mistakes.
- Migrated all 24 articles from 2025/ directory to website/blog/
- Translated all slugs to English kebab-case format
- Added comprehensive slug mapping in slug_mapping.json
- Copied all article images to website/static/img/blog/
- Fixed MDX compilation issues:
  - Escaped YAML frontmatter quotes
  - Removed broken image references
  - Converted angle bracket URLs to markdown format
  - Escaped module tags
- Removed duplicate Chinese-slug files
- Removed conflicting Astro configuration files
- Build verified successfully

Slug examples:
- 工程实践分享 → engineering-practice-doing-small-things-well
- 许式伟聊AI时代 → xu-shiwei-on-engineer-development-in-ai-era
- Code Review 不是什么 → code-review-what-is-not

Generated with [codeagent](https://github.com/qbox/codeagent)
Co-authored-by: Nliver <[email protected]>
- Remove /blog/2025/ prefix from all slugs
- Update slugs to clean kebab-case format (e.g., 'what-makes-ai-application-complete')
- Fix duplicate route issue for llgo-python articles
- Delete 2025/ directory after successful migration to website/blog/
- Remove old migration scripts and temporary files
- Verify Docusaurus build succeeds with updated slug format

Generated with [codeagent](https://github.com/qbox/codeagent)
Co-authored-by: Nliver <[email protected]>
Copilot AI review requested due to automatic review settings January 29, 2026 14:55
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot encountered an error and was unable to review this pull request. You can try again by re-requesting a review.

@xgopilot xgopilot bot changed the title [docs]: update closing ceremony speech feat: standardize blog post slugs and improve website structure Jan 29, 2026
@Nliver
Copy link
Collaborator Author

Nliver commented Jan 29, 2026

This PR is outdated, so closing it

@Nliver Nliver closed this Jan 29, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants