diff --git a/.claude/plan.md b/.claude/plan.md
deleted file mode 100644
index 7498aff..0000000
--- a/.claude/plan.md
+++ /dev/null
@@ -1,163 +0,0 @@
-# RSS订阅功能实现计划
-
-## 概述
-为Go博客系统添加RSS 2.0订阅功能,允许用户通过RSS阅读器订阅博客的最新文章。
-
-## 当前项目分析
-
-### 技术栈
-- **框架**: Gin (HTTP框架)
-- **ORM**: GORM
-- **数据库**: SQLite/MySQL (可配置)
-- **模板**: Go HTML templates
-
-### 现有结构
-1. **路由**: 在 `main.go` 中集中注册
-2. **处理器**: 在 `handlers/` 目录下,按功能分文件
-3. **模型**: 在 `models/` 目录下
-4. **文章模型** (`models/article.go`):
- - 包含标题、摘要、内容、作者、发布时间等字段
- - 有状态管理(草稿/已发布/已归档)
- - 支持slug用于URL
-5. **主页** (`handlers/home.go`):
- - 已有获取已发布文章的逻辑
- - 按置顶和发布时间排序
- - 限制返回10篇文章
-
-### 发现
-- 项目没有现有的RSS或feed相关代码
-- 没有RSS相关的Go依赖包
-- 项目支持中英文双语(i18n)
-- 有网站设置模型 (`SiteSetting`),包含网站标题、描述等信息
-
-## 实现方案
-
-### 方案选择
-**推荐方案**: 使用标准库 `encoding/xml` 手动构建RSS 2.0格式
-- **优点**:
- - 无需引入新依赖
- - RSS 2.0格式简单明确
- - 完全控制输出格式
- - 符合项目轻量化原则
-- **缺点**:
- - 需要手动定义XML结构
-
-**备选方案**: 使用第三方库如 `github.com/gorilla/feeds`
-- **优点**: 简化RSS生成,支持RSS/Atom/JSON Feed
-- **缺点**: 引入新依赖
-
-**决策**: 采用推荐方案,使用标准库实现RSS 2.0
-
-### 实现步骤
-
-#### 1. 创建RSS模型和生成器 (`handlers/rss.go`)
-- 定义RSS 2.0的XML结构体:
- - `RSS` (根元素)
- - `Channel` (频道信息)
- - `Item` (文章项)
-- 实现 `RSSFeed` 处理器函数:
- - 从数据库获取最近20篇已发布文章(包含作者信息)
- - 从 `SiteSetting` 获取网站标题和描述
- - 根据当前语言决定使用中文或英文的网站信息
- - 构建RSS XML结构
- - 设置正确的Content-Type: `application/rss+xml; charset=utf-8`
- - 返回XML响应
-
-#### 2. RSS内容规范
-- **Channel级别**:
- - `title`: 网站标题(从 `SiteSetting.LogoText` 获取)
- - `link`: 网站首页URL
- - `description`: 网站描述(从 `SiteSetting.HomeSubtitle` 获取)
- - `language`: zh-CN 或 en-US(根据当前语言)
- - `lastBuildDate`: 最新文章的发布时间
-
-- **Item级别**:
- - `title`: 文章标题
- - `link`: 文章详情页URL(使用slug)
- - `description`: 文章摘要(如果有)或内容前200字符
- - `author`: 作者用户名或显示名称
- - `pubDate`: 文章发布时间(RFC822格式)
- - `guid`: 文章的唯一标识(使用文章详情URL)
-
-#### 3. 注册路由 (`main.go`)
-在public路由区域添加:
-```go
-router.GET("/rss", handlers.RSSFeed(db))
-router.GET("/feed", handlers.RSSFeed(db)) // 别名,增加兼容性
-```
-
-#### 4. 可选:在模板中添加RSS链接
-在HTML head中添加RSS自动发现标签:
-```html
-
-```
-
-### 技术细节
-
-#### URL生成
-- 需要构建完整的文章URL(包含域名)
-- 从请求的 `Host` 头获取域名
-- 构建格式: `http(s)://domain/article/{slug}`
-
-#### 时间格式
-- RSS 2.0要求使用RFC822格式
-- Go time包: `time.RFC1123Z` 或手动格式化
-
-#### 文章内容处理
-- 优先使用 `Summary` 字段
-- 如果没有摘要,截取 `Content` 前200字符
-- 需要处理HTML标签(strip或escape)
-
-#### 字符编码
-- 确保XML声明中包含 `encoding="UTF-8"`
-- Gin自动处理UTF-8编码
-
-### 安全考虑
-- RSS是只读接口,不需要认证
-- 只返回状态为"已发布"的文章
-- XSS防护:XML自动转义特殊字符
-
-### 性能考虑
-- 限制返回文章数量(20篇)
-- 使用数据库索引(status和published_at字段已有索引)
-- 可以考虑添加缓存(后续优化)
-
-## 文件清单
-
-### 新建文件
-1. `handlers/rss.go` - RSS处理器和XML结构定义
-
-### 修改文件
-1. `main.go` - 添加RSS路由
-2. 可选:`templates/layouts/base.html` - 添加RSS自动发现标签
-
-## 测试验证
-
-### 手动测试
-1. 启动服务器
-2. 访问 `http://localhost:PORT/rss`
-3. 验证返回的XML格式正确
-4. 检查Content-Type头
-5. 使用RSS阅读器(如Feedly)订阅测试
-
-### 测试点
-- [ ] RSS XML格式符合RSS 2.0规范
-- [ ] 包含最新的已发布文章
-- [ ] 文章链接可点击且正确
-- [ ] 中英文切换正常工作
-- [ ] 时间格式正确
-- [ ] 特殊字符正确转义
-- [ ] 在RSS阅读器中可正常显示
-
-## 实现优先级
-1. **核心功能**: RSS feed端点,返回最新文章
-2. **可选优化**:
- - 在页面头部添加RSS自动发现标签
- - 添加RSS订阅链接到导航栏
- - 实现缓存机制
-
-## 注意事项
-- 保持代码风格与现有项目一致
-- 遵循项目的命名约定
-- 添加适当的注释(中英文)
-- 确保RSS feed在中英文环境下都能正常工作
diff --git a/.claude/plans/nav_links_management.md b/.claude/plans/nav_links_management.md
deleted file mode 100644
index ca2f989..0000000
--- a/.claude/plans/nav_links_management.md
+++ /dev/null
@@ -1,191 +0,0 @@
-# Navigation Links Management - Implementation Plan
-
-## Overview
-Add a navigation links management feature that allows admins to configure custom links in the header navigation, with support for controlling whether links open in new windows.
-
-## Requirements Analysis
-Based on exploration:
-- User wants to add additional URLs next to "Home" in the header navigation
-- Backend admin interface to manage these URLs
-- Control over whether links open in new windows (target="_blank")
-- The site uses a multi-language system (zh/en)
-
-## Current Architecture Patterns
-
-### Database Models
-- Models are in `/models/` directory
-- Settings tables follow singleton pattern (ID=1) like `SiteSetting`, `CommentConfig`
-- Support for multi-language via `*Zh` and `*En` fields
-- Use GORM with auto-migration in `models/db.go`
-- Config cache system exists (`models/config_cache.go`, `models.LoadConfigCache()`, `models.RefreshConfigCache()`)
-
-### Handlers
-- Settings handlers in `handlers/settings.go`
-- Pattern: `{Feature}SettingsPage()` for GET, `{Feature}SettingsSave()` for POST
-- Uses `DefaultData(c)` helper for common template data
-- Multi-action POST pattern with `action` form field (see upload/download settings)
-- Session-based user ID tracking via `userIDFromSession()`
-
-### Templates
-- Admin templates in `templates/admin/`
-- Settings pages follow consistent UI pattern (tabs, success messages)
-- Header navigation in `templates/layouts/base.html` (lines 24-89)
-- Current navigation shows: Logo/Title, Home link, Login/User dropdown
-
-### Routing
-- Admin routes under `/admin` group with auth + admin middleware
-- Settings routes: `/admin/settings/site`, `/admin/settings/upload`, etc.
-
-### i18n
-- Translation keys in `i18n/i18n.go`
-- Follows pattern: `"feature_field_lang"` or `"feature_action"`
-- Both EN and ZH translations required
-
-## Proposed Implementation
-
-### 1. Database Model: `NavLink`
-Create `models/nav_link.go`:
-```go
-type NavLink struct {
- ID uint `gorm:"primarykey"`
- TitleZh string `gorm:"size:100;not null"` // Link text (Chinese)
- TitleEn string `gorm:"size:100;not null"` // Link text (English)
- URL string `gorm:"size:512;not null"` // Target URL
- OpenNew bool `gorm:"default:false"` // Open in new window
- Enabled bool `gorm:"default:true"` // Show/hide link
- Sort int `gorm:"default:0;index"` // Display order
- CreatedAt time.Time
- UpdatedAt time.Time
- UpdatedBy uint `gorm:"index"`
-}
-
-// Helper methods
-func (n *NavLink) Title(lang string) string {
- // Return title for language with fallback
-}
-```
-
-### 2. Database Migration
-Add to `models/db.go` `AutoMigrate()`:
-- Add `&NavLink{}` to the migration list
-
-### 3. Config Cache Integration
-Update `models/config_cache.go`:
-- Add `NavLinks []NavLink` field to cache struct
-- Load nav links in `LoadConfigCache()`
-- Make available to all handlers via middleware
-
-### 4. Backend Handler
-Add to `handlers/settings.go`:
-
-```go
-// NavLinksSettingsPage - render nav links management page
-func NavLinksSettingsPage(db *gorm.DB) gin.HandlerFunc
-
-// NavLinksSettingsSave - handle actions: add, toggle, delete, reorder
-func NavLinksSettingsSave(db *gorm.DB) gin.HandlerFunc
-
-// Helper functions:
-// - addNavLink()
-// - toggleNavLink()
-// - deleteNavLink()
-// - reorderNavLink()
-```
-
-Actions via POST form field:
-- `action=add` - create new link
-- `action=toggle` - enable/disable link
-- `action=delete` - remove link
-- `action=edit` - update link details
-
-### 5. Admin Template
-Create `templates/admin/settings_navlinks.html`:
-- Settings page with tab navigation matching existing pattern
-- Form to add new links (Title ZH/EN, URL, Open in new window checkbox)
-- List of existing links with:
- - Enable/disable toggle
- - Edit inline or modal
- - Delete button
- - Sort order controls (up/down arrows or drag)
-- Success message display
-- Consistent styling with other settings pages
-
-### 6. Frontend Template Updates
-Update `templates/layouts/base.html`:
-- Modify navigation section (around line 36-42) to render nav links
-- Loop through cached nav links after "Home" link
-- Apply language-specific titles
-- Add `target="_blank"` when `OpenNew` is true
-- Maintain consistent styling with existing nav items
-
-### 7. Routing
-Add to `main.go` settings group (around line 110-121):
-```go
-settings.GET("/navlinks", handlers.NavLinksSettingsPage(db))
-settings.POST("/navlinks", handlers.NavLinksSettingsSave(db))
-```
-
-### 8. i18n Translations
-Add to `i18n/i18n.go` for both EN and ZH:
-```
-"settings_navlinks_title": "Navigation Links"
-"settings_navlinks_desc": "Manage custom links in the header navigation"
-"navlinks_add": "Add Link"
-"navlinks_title_zh": "Link Text (Chinese)"
-"navlinks_title_en": "Link Text (English)"
-"navlinks_url": "URL"
-"navlinks_open_new": "Open in new window"
-"navlinks_enabled": "Enabled"
-"navlinks_edit": "Edit"
-"navlinks_delete": "Delete"
-"navlinks_confirm_delete": "Are you sure you want to delete this link?"
-"navlinks_no_links": "No navigation links configured yet."
-```
-
-## Implementation Order
-
-1. **Create database model** (`models/nav_link.go`)
-2. **Update database migration** (`models/db.go`)
-3. **Update config cache** (`models/config_cache.go`)
-4. **Add i18n translations** (`i18n/i18n.go`)
-5. **Create backend handlers** (`handlers/settings.go`)
-6. **Create admin template** (`templates/admin/settings_navlinks.html`)
-7. **Update frontend header** (`templates/layouts/base.html`)
-8. **Add routes** (`main.go`)
-9. **Test the feature**
-
-## Design Decisions
-
-### Why not singleton table?
-- Multiple nav links needed (vs single config)
-- Better suited for a regular table with multiple rows
-- Easier to add/remove/reorder individual links
-
-### Sort order implementation
-- Use integer `Sort` field
-- Lower numbers appear first
-- Admin can adjust via up/down buttons or explicit number input
-
-### Cache integration
-- Nav links loaded into cache at startup and on refresh
-- Avoids DB query on every page load
-- Consistent with existing upload/comment config pattern
-
-### Open in new window
-- Boolean field `OpenNew`
-- Renders as `target="_blank" rel="noopener noreferrer"` when true
-- Security: always include `rel="noopener noreferrer"` with `target="_blank"`
-
-## Testing Checklist
-
-- [ ] Create new nav link via admin
-- [ ] Nav link appears in header navigation
-- [ ] Correct language displayed based on user preference
-- [ ] "Open in new window" works correctly
-- [ ] Enable/disable toggle works
-- [ ] Delete link works
-- [ ] Sort order affects display order
-- [ ] Links render correctly for logged-in and anonymous users
-- [ ] Multiple links display properly
-- [ ] External and internal URLs both work
-- [ ] Mobile responsive layout maintained
diff --git a/.claude/plans/tag_and_search_feature.md b/.claude/plans/tag_and_search_feature.md
deleted file mode 100644
index 7f095e2..0000000
--- a/.claude/plans/tag_and_search_feature.md
+++ /dev/null
@@ -1,420 +0,0 @@
-# Tag and Search Feature - Implementation Plan
-
-## Overview
-Add a comprehensive tag management system with search functionality to allow users to categorize articles with tags and search articles by keywords.
-
-## Requirements
-Based on user request:
-1. **Tag Management**: Add tag functionality to articles
-2. **Tag Association**: When creating/editing articles, users can associate tags
-3. **Auto Tag Creation**: If a tag doesn't exist, create it automatically
-4. **Tag Display**: Show all tags in homepage right sidebar
-5. **Tag Filtering**: Filter articles by clicking on tags
-6. **Search Functionality**: Add search box in header to search articles by keywords
-
-## Current Architecture Patterns
-
-### Database Models
-- Models are in `/models/` directory
-- Use GORM with auto-migration in `models/db.go`
-- Multi-language support via `*Zh` and `*En` fields pattern
-- Article model in `models/article.go`
-
-### Handlers
-- Article handlers in `handlers/article.go` and `handlers/home.go`
-- Settings handlers in `handlers/settings.go`
-- Pattern: `{Feature}Page()` for GET, `{Feature}()` for POST
-- Uses `DefaultData(c)` helper for common template data
-
-### Templates
-- Home page at `templates/pages/home.html`
-- Article creation/edit at `templates/admin/article_create.html`
-- Layout header at `templates/layouts/base.html`
-
-### Routing
-- Main routes in `main.go`
-- Public routes for home, article detail, search
-- Admin routes under `/admin` group with auth middleware
-
-### i18n
-- Translation keys in `i18n/i18n.go`
-- Both EN and ZH translations required
-
-## Proposed Implementation
-
-### 1. Database Models
-
-#### `models/tag.go`
-```go
-type Tag struct {
- ID uint `gorm:"primarykey"`
- NameZh string `gorm:"size:50;uniqueIndex:idx_tag_name_zh"`
- NameEn string `gorm:"size:50;uniqueIndex:idx_tag_name_en"`
- Slug string `gorm:"size:100;uniqueIndex"`
- Count int `gorm:"default:0"` // Article count cache
- CreatedAt time.Time
- UpdatedAt time.Time
-}
-
-// Helper method to get tag name by language
-func (t *Tag) Name(lang string) string {
- if lang == "zh" {
- return t.NameZh
- }
- return t.NameEn
-}
-```
-
-#### `models/article_tag.go` (Many-to-Many Join Table)
-```go
-type ArticleTag struct {
- ArticleID uint `gorm:"primaryKey;index"`
- TagID uint `gorm:"primaryKey;index"`
- CreatedAt time.Time
-}
-```
-
-#### Update `models/article.go`
-```go
-type Article struct {
- // ... existing fields ...
- Tags []Tag `gorm:"many2many:article_tags;"`
-}
-```
-
-### 2. Database Migration
-Update `models/db.go` `AutoMigrate()`:
-- Add `&Tag{}` and `&ArticleTag{}` to the migration list
-
-### 3. Tag Management Functions
-
-#### Add to `models/tag.go`:
-```go
-// FindOrCreateTag finds a tag by name or creates it if not exists
-func FindOrCreateTag(db *gorm.DB, nameZh, nameEn string) (*Tag, error)
-
-// GetAllTags returns all tags ordered by count descending
-func GetAllTags(db *gorm.DB) ([]Tag, error)
-
-// GetTagBySlug returns a tag by its slug
-func GetTagBySlug(db *gorm.DB, slug string) (*Tag, error)
-
-// UpdateTagCount recalculates article count for a tag
-func UpdateTagCount(db *gorm.DB, tagID uint) error
-```
-
-### 4. Article Handler Updates
-
-#### Update `handlers/article.go`:
-
-**Modify `articleForm` struct:**
-```go
-type articleForm struct {
- // ... existing fields ...
- Tags string // Comma-separated tag names
-}
-```
-
-**Modify `parseArticleForm`:**
-```go
-func parseArticleForm(c *gin.Context) articleForm {
- return articleForm{
- // ... existing fields ...
- Tags: strings.TrimSpace(c.PostForm("tags")),
- }
-}
-```
-
-**Modify `applyFormToData`:**
-```go
-func applyFormToData(data gin.H, f articleForm) {
- // ... existing assignments ...
- data["FormTags"] = f.Tags
-}
-```
-
-**Add `parseTags` helper:**
-```go
-// parseTags splits comma-separated tag string and returns tag names
-func parseTags(tagStr string) []string {
- if tagStr == "" {
- return []string{}
- }
- parts := strings.Split(tagStr, ",")
- var tags []string
- for _, part := range parts {
- trimmed := strings.TrimSpace(part)
- if trimmed != "" {
- tags = append(tags, trimmed)
- }
- }
- return tags
-}
-```
-
-**Add `syncArticleTags` helper:**
-```go
-// syncArticleTags associates tags with an article (find or create tags)
-func syncArticleTags(db *gorm.DB, article *models.Article, tagNames []string) error
-```
-
-**Modify `ArticleCreate` and `ArticleUpdate`:**
-- Parse tags from form
-- Call `syncArticleTags` after article is created/updated
-- Update tag counts
-
-**Modify `ArticleEditPage`:**
-- Load article with tags preloaded
-- Format tags as comma-separated string for form
-
-### 5. Search and Filter Handlers
-
-#### Add to `handlers/home.go`:
-
-```go
-// SearchArticles handles article search by keyword
-func SearchArticles(db *gorm.DB) gin.HandlerFunc {
- return func(c *gin.Context) {
- keyword := strings.TrimSpace(c.Query("q"))
- tagSlug := strings.TrimSpace(c.Query("tag"))
-
- // Build query with filters
- // Return paginated results
- }
-}
-```
-
-**Modify `HomePage` and `HomeArticlesAPI`:**
-- Add tag filtering support via query parameter
-- Add search keyword filtering support
-
-### 6. Template Updates
-
-#### Update `templates/admin/article_create.html`:
-Add tag input field after content section:
-```html
-
-
-
-
-
{{index .Tr "article_tags_hint"}}
-
-```
-
-#### Update `templates/pages/home.html`:
-
-**Add search box in header (top section):**
-```html
-
-```
-
-**Add sidebar for tags:**
-```html
-
-
-
-
-
-
-
-
-
-
-
-```
-
-#### Create `templates/pages/search.html`:
-New template for search results page with similar layout to home.
-
-### 7. Routing Updates
-
-Update `main.go`:
-```go
-// Public routes
-router.GET("/", handlers.HomePage(db))
-router.GET("/search", handlers.SearchPage(db))
-router.GET("/api/articles", handlers.HomeArticlesAPI(db))
-```
-
-### 8. i18n Translations
-
-Add to `i18n/i18n.go` for both EN and ZH:
-```go
-// Tags
-"tags_title": "Tags"
-"article_tags": "Tags"
-"article_tags_hint": "Comma-separated tag names, e.g., golang, web, tutorial"
-"tag_filter": "Filter by tag"
-"tag_all": "All"
-
-// Search
-"search_placeholder": "Search articles..."
-"search_title": "Search Results"
-"search_results_for": "Search results for"
-"search_no_results": "No articles found matching your search."
-"search_keyword": "Keyword"
-```
-
-### 9. Homepage Handler Updates
-
-Update `handlers/home.go`:
-
-**Modify `HomePage`:**
-```go
-func HomePage(db *gorm.DB) gin.HandlerFunc {
- return func(c *gin.Context) {
- tr := getTr(c)
- data := DefaultData(c)
-
- // Get tag filter if present
- tagSlug := c.Query("tag")
-
- // Build query
- query := db.Where("status = ?", models.ArticlePublished)
-
- if tagSlug != "" {
- // Join with article_tags to filter by tag
- query = query.Joins("JOIN article_tags ON article_tags.article_id = articles.id").
- Joins("JOIN tags ON tags.id = article_tags.tag_id").
- Where("tags.slug = ?", tagSlug)
- }
-
- var articles []models.Article
- query.Preload("Tags").
- Order(publishedArticleOrder).
- Limit(10).
- Find(&articles)
-
- // Load all tags for sidebar
- var tags []models.Tag
- db.Order("count DESC, name_zh ASC").Find(&tags)
-
- data["Articles"] = articles
- data["Tags"] = tags
- if tagSlug != "" {
- data["FilterTag"] = tagSlug
- }
-
- // ... existing comment counts logic ...
-
- c.HTML(http.StatusOK, "home", data)
- }
-}
-```
-
-**Add `SearchPage` handler:**
-```go
-func SearchPage(db *gorm.DB) gin.HandlerFunc {
- return func(c *gin.Context) {
- keyword := strings.TrimSpace(c.Query("q"))
- // Search in title, summary, and content
- // Render search results template
- }
-}
-```
-
-## Implementation Order
-
-1. **Create database models** (`models/tag.go`, `models/article_tag.go`)
-2. **Update article model** to add Tags relationship
-3. **Update database migration** (`models/db.go`)
-4. **Add tag helper functions** in `models/tag.go`
-5. **Add i18n translations** (`i18n/i18n.go`)
-6. **Update article handlers** (`handlers/article.go`) - form parsing, tag syncing
-7. **Update article templates** (`templates/admin/article_create.html`) - add tag input
-8. **Update home handler** (`handlers/home.go`) - add tag filtering, search
-9. **Update home template** (`templates/pages/home.html`) - add search box, tag sidebar
-10. **Create search page template** (`templates/pages/search.html`)
-11. **Add routes** (`main.go`)
-12. **Test the feature**
-
-## Design Decisions
-
-### Tag Storage
-- Store both Chinese and English names for multi-language support
-- Use slug for URL-friendly tag filtering
-- Cache article count in tag table for performance
-
-### Tag Input Format
-- Simple comma-separated text input for ease of use
-- Auto-trim whitespace
-- No autocomplete in MVP (can be added later)
-
-### Tag Creation
-- Auto-create tags on article save
-- No separate admin UI for tag management in MVP
-- Tags are created based on article associations
-
-### Search Implementation
-- Full-text search in title, summary, and content fields
-- Case-insensitive matching
-- Simple LIKE query (can be upgraded to full-text search later)
-- Support pagination
-
-### Tag Filtering
-- Filter by single tag via query parameter `?tag=slug`
-- Show filtered tag in UI for user clarity
-- Compatible with infinite scroll
-
-### UI Layout
-- Search box prominent in header area
-- Tag sidebar on right (desktop only, hidden on mobile)
-- Tag cloud style with article count badges
-- Responsive design maintained
-
-## Testing Checklist
-
-- [ ] Create article with tags
-- [ ] Tags are saved and associated with article
-- [ ] Non-existent tags are created automatically
-- [ ] Edit article - existing tags are shown in form
-- [ ] Edit article - add/remove tags works
-- [ ] Tags appear in homepage sidebar
-- [ ] Tag count is accurate
-- [ ] Click tag filters articles correctly
-- [ ] Search box appears in header
-- [ ] Search by keyword finds matching articles
-- [ ] Search works with title matches
-- [ ] Search works with content matches
-- [ ] Tag filtering + search can work together
-- [ ] Pagination works with filters
-- [ ] Infinite scroll works with filters
-- [ ] Mobile responsive layout maintained
-- [ ] Multi-language support works (zh/en)
-
-## Future Enhancements
-
-- Tag management admin page (rename, merge, delete tags)
-- Tag autocomplete/suggestions in article form
-- Tag popularity visualization
-- Related articles by shared tags
-- Full-text search engine (Elasticsearch, etc.)
-- Search suggestions/autocomplete
-- Advanced search filters (by date, author, etc.)
diff --git a/.claude/settings.json b/.claude/settings.json
deleted file mode 100644
index 5df727e..0000000
--- a/.claude/settings.json
+++ /dev/null
@@ -1,23 +0,0 @@
-{
- "permissions": {
- "allow": [
- "Bash(curl -s -c /tmp/cookies.txt -L -X POST http://localhost:8099/login -d \"username=admin&password=admin\" -o /dev/null -w \"login final HTTP %{http_code}\\\\n\")",
- "Bash(curl -s -b /tmp/cookies.txt http://localhost:8099/admin -o /tmp/dash.html -w \"HTTP %{http_code}\\\\n\")",
- "Read(//tmp/**)",
- "Bash(sed -n 's/.*\\\\\\(text-3xl font-bold text-gray-900 mt-1\">1\\\\n\\\\\\).*//p' /tmp/dash.html)",
- "Bash(perl -0777 -ne 'while\\(/dash_posts.*?text-3xl[^>]*>\\(.*?\\)<\\\\/p>/sg\\){print \"POSTS BLOCK: $1\\\\n\"}' /tmp/dash.html)",
- "Bash(python -c ' *)",
- "Bash(curl -s -b /tmp/cookies.txt http://localhost:8099/admin -o dash.html)",
- "Bash(rm -f dash.html)",
- "Bash(curl -s http://localhost:8099/article/123 -o detail.html -w \"detail HTTP %{http_code}\\\\n\")",
- "Bash(rm -f detail.html)",
- "Bash(cp /tmp/cfg_backup.yaml win/etc/blog_go/config.yaml)",
- "Bash(pkill -f blogtest.exe)",
- "Bash(pkill -f \"blog_go.exe\")",
- "Bash(cd c:/Users/wuwen/Documents/project/go_blog && rm -f /tmp/blogtest.exe && git status --short && echo \"--- diff stat ---\" && git diff --stat)"
- ],
- "additionalDirectories": [
- "\\tmp"
- ]
- }
-}
diff --git a/ANALYTICS_CHANGELOG.md b/ANALYTICS_CHANGELOG.md
deleted file mode 100644
index 868d95c..0000000
--- a/ANALYTICS_CHANGELOG.md
+++ /dev/null
@@ -1,140 +0,0 @@
-# 阅读统计系统 - 更新日志
-
-## 2026-06-22 - v1.1
-
-### ✨ 改进:文章筛选方式优化
-
-**问题**:之前使用下拉框选择文章,当文章数量很多时不便使用。
-
-**解决方案**:改为输入框模糊搜索
-
-#### 变更内容
-
-**旧版本(v1.0)**:
-- 使用 `