diff --git a/CLAUDE.md b/CLAUDE.md
index f6e7581..e081b14 100644
--- a/CLAUDE.md
+++ b/CLAUDE.md
@@ -42,8 +42,8 @@ website/
│ │ ├── blog/ # 博客组件 (Grid, List, SinglePost)
│ │ ├── core/ # 核心组件 (MetaTags, LanguageSwitch, ToggleTheme)
│ │ ├── forms/ # 表单组件 (ImageUpload)
-│ │ ├── ui/ # UI 组件 (Button, Card, Input)
-│ │ │ └── cyber/ # Cyberpunk React 组件
+│ │ ├── ui/ # UI 组件 (Input, ScrollToTop)
+│ │ │ └── cyber/ # Cyberpunk React 组件 (CyberButton, CyberCard, GlitchText 等)
│ │ └── widgets/ # 功能组件 (Header, Footer, Hero, Vision)
│ ├── i18n/ # 国际化
│ │ └── languages.ts # 所有翻译键 (400+ 条目)
diff --git a/docs/ROADMAP.md b/docs/ROADMAP.md
index cebf4aa..53bc9a6 100644
--- a/docs/ROADMAP.md
+++ b/docs/ROADMAP.md
@@ -1,7 +1,7 @@
# Product Roadmap 2025-2026 | 产品路线图
-**Version**: 1.2.0
-**Last Updated**: 2025-11-21
+**Version**: 1.3.0
+**Last Updated**: 2025-11-22
**Project**: Open Wisdom Lab Website
**Related Documents**: [docs/](./docs/) 目录下的所有文档
@@ -63,10 +63,13 @@
- [x] Prettier + ESLint 配置完成
- [ ] Pre-commit hooks (Husky + lint-staged)
- [x] TypeScript strict mode (已配置)
-- [ ] 代码格式化和修复
- - [ ] 运行 Prettier 格式化所有文件
- - [ ] 统一 Import 路径为 `~/` 别名
- - [ ] 修复所有 ESLint 警告
+- [x] 代码格式化和修复
+ - [x] 修复 deprecated APIs (substr -> substring)
+ - [x] 修复 RSS endpoint handler (get -> GET)
+ - [x] 添加 script is:inline 指令修复 hints
+ - [x] 移除 6 个未使用组件 (HighlightedPosts, LatestPosts, Button, Card, Pricing, Announcement)
+ - [x] 优化 PageLayout 移除重复的背景动画组件
+ - [x] 补充 Note.astro 组件双语翻译
#### Week 3-4: TypeScript 迁移
- [x] 添加类型定义
@@ -755,6 +758,19 @@ Week 2:
## 📝 Changelog | 更新日志
+### Version 1.3.0 (2025-11-22)
+- **代码质量优化**
+ - 修复 deprecated API (substr -> substring)
+ - 修复 RSS endpoint handler 命名 (get -> GET)
+ - 添加 script is:inline 指令修复 Astro hints
+- **架构精简**
+ - 移除 6 个未使用组件 (HighlightedPosts, LatestPosts, Button, Card, Pricing, Announcement)
+ - 优化 PageLayout: 移除重复的 ParticlesBackground 和空的 Announcement 组件
+ - 保留单一 PhysicsBackground 动画,提升页面加载性能
+- **i18n 完善**
+ - 补充 Note.astro 组件的双语翻译 (note.* 翻译键)
+- **构建状态**: 0 errors, 0 warnings, 1 hint (ImageUpload 的 define:vars 为预期行为)
+
### Version 1.2.0 (2025-11-21)
- 更新 Phase 1 完成状态
- 标记设计系统相关任务为完成
@@ -790,8 +806,8 @@ Week 2:
---
-**Last Updated**: 2025-11-21
-**Next Review**: 2025-12-21
+**Last Updated**: 2025-11-22
+**Next Review**: 2025-12-22
**Document Owner**: Product Team
---
diff --git a/src/components/blog/HighlightedPosts.astro b/src/components/blog/HighlightedPosts.astro
deleted file mode 100644
index a84b484..0000000
--- a/src/components/blog/HighlightedPosts.astro
+++ /dev/null
@@ -1,27 +0,0 @@
----
-import Grid from '~/components/blog/Grid.astro';
-
-import { findPostsByIds } from '~/utils/posts';
-
-const ids = [
- 'get-started-website-with-astro-tailwind-css',
- 'how-to-customize-astrowind-to-your-brand',
- 'useful-resources-to-create-websites',
- 'astrowind-template-in-depth',
-];
-const posts = await findPostsByIds(ids);
----
-
-
-
-
- 最新动态 探索创新之旅
-
-
-
- 这里展示猫头鹰实验室的最新项目、研究成果、活动资讯和学生作品。见证创新在这里发生,了解我们如何通过跨学科融合和实践驱动培养创新人才。
-
-
-
-
-
diff --git a/src/components/blog/LatestPosts.astro b/src/components/blog/LatestPosts.astro
deleted file mode 100644
index 9075902..0000000
--- a/src/components/blog/LatestPosts.astro
+++ /dev/null
@@ -1,24 +0,0 @@
----
-import Grid from '~/components/blog/Grid.astro';
-
-import { findLatestPosts } from '~/utils/posts';
-
-const count = 4;
-const posts = await findLatestPosts({ count });
----
-
-
-
-
- Latest articles in our Blog
-
-
-
- The blog will be used to display AstroWind documentation. Each new article will be an important step that you will
- need to know to be an expert in creating a website using Astro + Tailwind CSS The blog does not exist yet, but
- very soon. Astro is a very interesting technology. Thanks.
-
-
-
-
-
diff --git a/src/components/core/SplitbeeAnalytics.astro b/src/components/core/SplitbeeAnalytics.astro
index b3c349a..66651db 100644
--- a/src/components/core/SplitbeeAnalytics.astro
+++ b/src/components/core/SplitbeeAnalytics.astro
@@ -3,4 +3,4 @@ const { doNotTrack = true, noCookieMode = false, url = 'https://cdn.splitbee.io/
---
-
+
diff --git a/src/components/ui/Button.astro b/src/components/ui/Button.astro
deleted file mode 100644
index 65e1861..0000000
--- a/src/components/ui/Button.astro
+++ /dev/null
@@ -1,159 +0,0 @@
----
-/**
- * Button - 赛博朋克风格按钮组件
- * 特点:故障效果(Glitch)、流光边框、霓虹发光
- */
-interface Props {
- variant?: 'neon' | 'ghost' | 'outline' | 'brutal';
- size?: 'sm' | 'md' | 'lg' | 'xl';
- glow?: boolean;
- glitch?: boolean;
- href?: string;
- type?: 'button' | 'submit' | 'reset';
- className?: string;
-}
-
-const {
- variant = 'neon',
- size = 'md',
- glow = true,
- glitch = false,
- href,
- type = 'button',
- className = '',
-} = Astro.props;
-
-const Tag = href ? 'a' : 'button';
-
-// 尺寸样式
-const sizeClasses = {
- sm: 'px-4 py-2 text-sm',
- md: 'px-6 py-3 text-base',
- lg: 'px-8 py-4 text-lg',
- xl: 'px-10 py-5 text-xl',
-};
-
-// 变体样式
-const variantClasses = {
- neon: 'bg-gradient-neon text-white font-bold',
- ghost: 'bg-transparent text-white border-2 border-white/20 hover:border-primary-400 hover:bg-white/5',
- outline: 'bg-transparent text-primary-400 border-2 border-primary-400 hover:bg-primary-400 hover:text-white',
- brutal: 'bg-primary-500 text-white font-black border-3 border-black',
-};
-
-// 发光效果
-const glowClass = glow ? {
- neon: 'shadow-neon hover:shadow-neon-lg',
- ghost: 'hover:shadow-glow',
- outline: 'hover:shadow-glow',
- brutal: 'shadow-brutal hover:shadow-brutal-sm',
-}[variant] : '';
----
-
-
-
- {variant === 'neon' && (
-
- )}
-
-
- {variant === 'brutal' && (
-
- )}
-
-
-
-
-
-
-
- {glow && (
-
- )}
-
-
-
diff --git a/src/components/ui/Card.astro b/src/components/ui/Card.astro
deleted file mode 100644
index 3aadc52..0000000
--- a/src/components/ui/Card.astro
+++ /dev/null
@@ -1,111 +0,0 @@
----
-/**
- * Card - 统一卡片组件
- * 简洁优雅的玻璃态效果,适配暗色主题
- * 支持多种交互效果和动画
- */
-interface Props {
- variant?: 'glass' | 'holographic' | 'neon' | 'brutal' | 'elevated' | 'outline';
- glow?: 'purple' | 'cyan' | 'green' | 'blue' | 'none';
- hover?: 'lift' | 'scale' | 'glow' | 'border' | 'none';
- className?: string;
- href?: string;
-}
-
-const {
- variant = 'glass',
- glow = 'none',
- hover = 'lift',
- className = '',
- href
-} = Astro.props;
-
-const Tag = href ? 'a' : 'div';
-
-// 变体样式 - 统一设计语言
-const variantClasses = {
- glass: 'bg-dark-surface/40 backdrop-blur-md border border-white/5 hover:border-white/10',
- holographic: 'bg-dark-surface/40 backdrop-blur-md border-2 border-transparent bg-gradient-to-br from-primary-500/20 via-transparent to-secondary-500/20',
- neon: 'bg-dark-surface/40 backdrop-blur-md border border-primary-500/30 hover:border-primary-500/50',
- brutal: 'bg-dark-surface border-2 border-white/10 hover:border-white/20',
- elevated: 'bg-white dark:bg-slate-800 shadow-md hover:shadow-xl border border-gray-100 dark:border-slate-700',
- outline: 'bg-transparent border-2 border-gray-200 dark:border-slate-700 hover:border-primary-500 dark:hover:border-primary-400',
-};
-
-// 发光效果(可选)
-const glowClasses = {
- purple: 'hover:shadow-[0_0_30px_rgba(168,85,247,0.4)]',
- cyan: 'hover:shadow-[0_0_30px_rgba(6,182,212,0.4)]',
- green: 'hover:shadow-[0_0_30px_rgba(34,197,94,0.4)]',
- blue: 'hover:shadow-[0_0_30px_rgba(59,130,246,0.4)]',
- none: '',
-};
-
-// 悬停效果
-const hoverClasses = {
- lift: 'hover:-translate-y-2',
- scale: 'hover:scale-[1.02]',
- glow: '',
- border: 'hover:border-primary-500',
- none: '',
-};
----
-
-
-
-
-
-
- {variant === 'glass' && (
-
- )}
-
-
- {variant === 'neon' && (
-
- )}
-
-
- {variant === 'brutal' && (
- <>
-
-
- >
- )}
-
-
-
diff --git a/src/components/ui/Input.astro b/src/components/ui/Input.astro
index 445f390..94b949d 100644
--- a/src/components/ui/Input.astro
+++ b/src/components/ui/Input.astro
@@ -25,7 +25,7 @@ const {
variant = 'default',
} = Astro.props;
-const inputId = id || name || `input-${Math.random().toString(36).substr(2, 9)}`;
+const inputId = id || name || `input-${Math.random().toString(36).substring(2, 11)}`;
// 变体样式
const variantClasses = {
diff --git a/src/components/widgets/Announcement.astro b/src/components/widgets/Announcement.astro
deleted file mode 100644
index d434e36..0000000
--- a/src/components/widgets/Announcement.astro
+++ /dev/null
@@ -1,27 +0,0 @@
----
----
-
-
diff --git a/src/components/widgets/Note.astro b/src/components/widgets/Note.astro
index 9c98638..9d70e34 100644
--- a/src/components/widgets/Note.astro
+++ b/src/components/widgets/Note.astro
@@ -6,12 +6,12 @@ import { Icon } from 'astro-icon/components';
- OWL理念:
+ OWL理念:
- 开放 //
- 交叉 //
- 连接 //
- 可持续 //
- 黑科技
+ 开放 //
+ 交叉 //
+ 连接 //
+ 可持续 //
+ 黑科技
diff --git a/src/components/widgets/Pricing.astro b/src/components/widgets/Pricing.astro
deleted file mode 100644
index 56aab7f..0000000
--- a/src/components/widgets/Pricing.astro
+++ /dev/null
@@ -1,274 +0,0 @@
----
----
-
-
-
-
-
-
Pricing
-
- Whatever your status, our offers evolve according to your needs.
-
-
-
-
-
-
-
-
-
Free
-
Free
-
Forever free
-
-
-
-
-
-
- 1 user
-
-
-
-
-
-
- Plan features
-
-
-
-
-
-
- Product support
-
-
-
-
Sign up
-
-
-
-
-
-
- Most popular
-
-
Startup
-
- $
- 39
-
-
All the basics for starting a new business
-
-
-
-
-
-
- 2 users
-
-
-
-
-
-
- Plan features
-
-
-
-
-
-
- Product support
-
-
-
-
Sign up
-
-
-
-
-
-
Team
-
- $
- 89
-
-
Everything you need for a growing business
-
-
-
-
-
-
- 5 users
-
-
-
-
-
-
- Plan features
-
-
-
-
-
-
- Product support
-
-
-
-
Sign up
-
-
-
-
-
-
Enterprise
-
- $
- 149
-
-
Advanced features for scaling your business
-
-
-
-
-
-
- 10 users
-
-
-
-
-
-
- Plan features
-
-
-
-
-
-
- Product support
-
-
-
-
Sign up
-
-
-
-
-
-
diff --git a/src/i18n/languages.ts b/src/i18n/languages.ts
index 29df501..85ffdee 100644
--- a/src/i18n/languages.ts
+++ b/src/i18n/languages.ts
@@ -625,6 +625,14 @@ export const ui = {
'timeline.owl3.tag1': '分布式',
'timeline.owl3.tag2': '智能化',
'timeline.owl3.tag3': '无边界',
+
+ // Note 组件
+ 'note.concept': 'OWL理念:',
+ 'note.openness': '开放',
+ 'note.interdisciplinary': '交叉',
+ 'note.connectivity': '连接',
+ 'note.sustainability': '可持续',
+ 'note.technology': '黑科技',
},
en: {
// Navigation
@@ -1244,6 +1252,14 @@ export const ui = {
'timeline.owl3.tag1': 'Distributed',
'timeline.owl3.tag2': 'Intelligent',
'timeline.owl3.tag3': 'Boundless',
+
+ // Note Component
+ 'note.concept': 'OWL Philosophy:',
+ 'note.openness': 'Openness',
+ 'note.interdisciplinary': 'Interdisciplinary',
+ 'note.connectivity': 'Connectivity',
+ 'note.sustainability': 'Sustainability',
+ 'note.technology': 'High-Tech',
},
} as const;
diff --git a/src/layouts/PageLayout.astro b/src/layouts/PageLayout.astro
index b295722..5c57971 100644
--- a/src/layouts/PageLayout.astro
+++ b/src/layouts/PageLayout.astro
@@ -2,18 +2,14 @@
import Layout from '~/layouts/BaseLayout.astro';
import Header from '~/components/widgets/Header.astro';
import Footer from '~/components/widgets/Footer.astro';
-import Announcement from '~/components/widgets/Announcement.astro';
import PhysicsBackground from '~/components/widgets/PhysicsBackground.astro';
-import ParticlesBackground from '~/components/widgets/ParticlesBackground.astro';
import ScrollToTop from '~/components/ui/ScrollToTop.astro';
const { meta } = Astro.props;
---
-
-
diff --git a/src/pages/rss.xml.js b/src/pages/rss.xml.js
index 19d586f..4c9a550 100644
--- a/src/pages/rss.xml.js
+++ b/src/pages/rss.xml.js
@@ -4,7 +4,7 @@ import { SITE, BLOG } from '~/config';
import { fetchPosts } from '~/utils/posts';
import { getPermalink } from '~/utils/permalinks';
-export const get = async () => {
+export const GET = async () => {
if (BLOG.disabled) {
return new Response(null, {
status: 404,