feat: 服务器迁移后的全量演进(依赖升级/安全审计/设计统一/截图/SEO 底座化)
在原仓库历史之上同步本服务器上的全部演进: - 迁移至新服务器并重建 PG 数据库 + ddnc 开发域名绑定 - 全部依赖升级至最新(Next 16.3.5 / React 19.3 / better-auth 1.7.5 / Drizzle 0.45 / TS 7), overrides 消除已知 CVE,安全审计 19 项发现全部修复闭环 - 设计统一:各站宽度 token(--container + site-container)、classic hero 重设计、 头部换行修复、页面过渡与 View Transitions - 截图功能:api.adx9.com 截图服务接入(ow=800 本地化 webp、cf=1、去重/限流/占位图) - SEO 底座化:canonical/hreflang/sitemap/JSON-LD/robots 全部收进 core,新站自动继承 - 加载体验:五站五形态路由骨架(data-theme 切换、shimmer 微光、延迟淡入)+ 过滤 useTransition 交叉淡入淡出(card-enter 错峰入场) - 构建:experimental.cpus 限流防 PG 连接打满;清理死组件链
This commit is contained in:
@@ -108,7 +108,7 @@
|
||||
"items": [
|
||||
{
|
||||
"name": "Sarah Chen",
|
||||
"quote": "Toolso.AI helped me find the perfect AI writing assistant. The categorization makes discovery so easy!",
|
||||
"quote": "DevAI.tools helped me find the perfect AI writing assistant. The categorization makes discovery so easy!",
|
||||
"designation": "Content Creator"
|
||||
},
|
||||
{
|
||||
@@ -118,7 +118,7 @@
|
||||
},
|
||||
{
|
||||
"name": "Emily Rodriguez",
|
||||
"quote": "I discover new AI tools every week on Toolso.AI. It's become my go-to resource for AI exploration.",
|
||||
"quote": "I discover new AI tools every week on DevAI.tools. It's become my go-to resource for AI exploration.",
|
||||
"designation": "Startup Founder"
|
||||
},
|
||||
{
|
||||
@@ -667,48 +667,49 @@
|
||||
},
|
||||
"clearFilters": "Clear search & filters",
|
||||
"useCasesTitle": "Use cases",
|
||||
"goodForTitle": "Good for"
|
||||
"goodForTitle": "Good for",
|
||||
"preview": "Website preview"
|
||||
},
|
||||
"seo": {
|
||||
"home": {
|
||||
"title": "DevAI.tools — AI Tools for Developers",
|
||||
"description": "Code assistants, DevOps automation and testing copilots — the AI tools developers actually upvote, ranked daily.",
|
||||
"ogImage": "https://toolso.ai/banner.png"
|
||||
"ogImage": "/banner.png"
|
||||
},
|
||||
"blog": {
|
||||
"title": "Blog - Toolso.AI",
|
||||
"title": "Blog - DevAI.tools",
|
||||
"description": "Latest insights, tutorials and updates about AI tools. Stay informed about the best AI tools and industry trends.",
|
||||
"ogImage": "https://toolso.ai/banner.png"
|
||||
"ogImage": "/banner.png"
|
||||
},
|
||||
"contact": {
|
||||
"title": "Contact Us - Toolso.AI",
|
||||
"title": "Contact Us - DevAI.tools",
|
||||
"description": "Get in touch with us. We'd love to hear your feedback and tool suggestions.",
|
||||
"ogImage": "https://toolso.ai/banner.png"
|
||||
"ogImage": "/banner.png"
|
||||
},
|
||||
"login": {
|
||||
"title": "Login - Toolso.AI",
|
||||
"title": "Login - DevAI.tools",
|
||||
"description": "Sign in to your account to submit tools, save favorites, and contribute to our AI tools directory.",
|
||||
"ogImage": "https://toolso.ai/banner.png"
|
||||
"ogImage": "/banner.png"
|
||||
},
|
||||
"signup": {
|
||||
"title": "Sign Up - Toolso.AI",
|
||||
"title": "Sign Up - DevAI.tools",
|
||||
"description": "Create your account and start contributing to our AI tools directory. Submit tools and join our community.",
|
||||
"ogImage": "https://toolso.ai/banner.png"
|
||||
"ogImage": "/banner.png"
|
||||
},
|
||||
"terms": {
|
||||
"title": "Terms of Service - Toolso.AI",
|
||||
"description": "Read our terms of service to understand the rules and guidelines for using Toolso.AI.",
|
||||
"ogImage": "https://toolso.ai/banner.png"
|
||||
"title": "Terms of Service - DevAI.tools",
|
||||
"description": "Read our terms of service to understand the rules and guidelines for using DevAI.tools.",
|
||||
"ogImage": "/banner.png"
|
||||
},
|
||||
"privacy": {
|
||||
"title": "Privacy Policy - Toolso.AI",
|
||||
"description": "Learn how we collect, use, and protect your personal information and data on Toolso.AI.",
|
||||
"ogImage": "https://toolso.ai/banner.png"
|
||||
"title": "Privacy Policy - DevAI.tools",
|
||||
"description": "Learn how we collect, use, and protect your personal information and data on DevAI.tools.",
|
||||
"ogImage": "/banner.png"
|
||||
},
|
||||
"cookies": {
|
||||
"title": "Cookie Policy - Toolso.AI",
|
||||
"description": "Understand how we use cookies and similar tracking technologies on Toolso.AI.",
|
||||
"ogImage": "https://toolso.ai/banner.png"
|
||||
"title": "Cookie Policy - DevAI.tools",
|
||||
"description": "Understand how we use cookies and similar tracking technologies on DevAI.tools.",
|
||||
"ogImage": "/banner.png"
|
||||
},
|
||||
"tools": {
|
||||
"title": "AI Tools Directory - Discover the Best AI Tools",
|
||||
@@ -1086,4 +1087,4 @@
|
||||
"siteHeader": {
|
||||
"searchPlaceholder": "Search dev tools..."
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -103,11 +103,11 @@
|
||||
},
|
||||
"testimonials": {
|
||||
"title": "用户评价",
|
||||
"subtitle": "来自使用 Toolso.AI 发现优质 AI 工具的真实用户反馈。",
|
||||
"subtitle": "来自使用 DevAI.tools 发现优质 AI 工具的真实用户反馈。",
|
||||
"items": [
|
||||
{
|
||||
"name": "张伟",
|
||||
"quote": "Toolso.AI 帮我找到了完美的 AI 写作助手,分类清晰让发现变得非常简单!",
|
||||
"quote": "DevAI.tools 帮我找到了完美的 AI 写作助手,分类清晰让发现变得非常简单!",
|
||||
"designation": "内容创作者"
|
||||
},
|
||||
{
|
||||
@@ -117,7 +117,7 @@
|
||||
},
|
||||
{
|
||||
"name": "李娜",
|
||||
"quote": "每周都能在 Toolso.AI 上发现新的 AI 工具,已经成为我探索 AI 的首选资源。",
|
||||
"quote": "每周都能在 DevAI.tools 上发现新的 AI 工具,已经成为我探索 AI 的首选资源。",
|
||||
"designation": "创业者"
|
||||
},
|
||||
{
|
||||
@@ -521,7 +521,7 @@
|
||||
"description": "请联系我们,我们会尽快回复。",
|
||||
"testimonial": {
|
||||
"title": "帮助用户发现最佳 AI 工具",
|
||||
"description": "Toolso.AI 致力于为用户提供精选的 AI 工具目录,帮助大家找到最适合的 AI 助手。"
|
||||
"description": "DevAI.tools 致力于为用户提供精选的 AI 工具目录,帮助大家找到最适合的 AI 助手。"
|
||||
},
|
||||
"form": {
|
||||
"nameLabel": "姓名",
|
||||
@@ -674,48 +674,49 @@
|
||||
},
|
||||
"clearFilters": "清除搜索与筛选",
|
||||
"useCasesTitle": "使用场景",
|
||||
"goodForTitle": "适合人群"
|
||||
"goodForTitle": "适合人群",
|
||||
"preview": "网站预览"
|
||||
},
|
||||
"seo": {
|
||||
"home": {
|
||||
"title": "DevAI.tools — 开发者 AI 工具",
|
||||
"description": "面向开发者的 AI 工具目录:代码助手、运维自动化、测试副驾驶,由社区每日排名。",
|
||||
"ogImage": "https://toolso.ai/banner.png"
|
||||
"ogImage": "/banner.png"
|
||||
},
|
||||
"blog": {
|
||||
"title": "博客 - Toolso.AI",
|
||||
"title": "博客 - DevAI.tools",
|
||||
"description": "关于 AI 工具的最新资讯、教程和更新。了解最佳 AI 工具和行业趋势。",
|
||||
"ogImage": "https://toolso.ai/banner.png"
|
||||
"ogImage": "/banner.png"
|
||||
},
|
||||
"contact": {
|
||||
"title": "联系我们 - Toolso.AI",
|
||||
"title": "联系我们 - DevAI.tools",
|
||||
"description": "与我们取得联系。我们期待听到您的反馈和工具推荐建议。",
|
||||
"ogImage": "https://toolso.ai/banner.png"
|
||||
"ogImage": "/banner.png"
|
||||
},
|
||||
"login": {
|
||||
"title": "登录 - Toolso.AI",
|
||||
"title": "登录 - DevAI.tools",
|
||||
"description": "登录您的账户,提交工具、收藏喜爱的工具,为 AI 工具目录做贡献。",
|
||||
"ogImage": "https://toolso.ai/banner.png"
|
||||
"ogImage": "/banner.png"
|
||||
},
|
||||
"signup": {
|
||||
"title": "注册 - Toolso.AI",
|
||||
"title": "注册 - DevAI.tools",
|
||||
"description": "创建您的账户,开始为 AI 工具目录做贡献。提交工具、加入我们的社区。",
|
||||
"ogImage": "https://toolso.ai/banner.png"
|
||||
"ogImage": "/banner.png"
|
||||
},
|
||||
"terms": {
|
||||
"title": "服务条款 - Toolso.AI",
|
||||
"description": "阅读我们的服务条款,了解使用 Toolso.AI 的规则和指南。",
|
||||
"ogImage": "https://toolso.ai/banner.png"
|
||||
"title": "服务条款 - DevAI.tools",
|
||||
"description": "阅读我们的服务条款,了解使用 DevAI.tools 的规则和指南。",
|
||||
"ogImage": "/banner.png"
|
||||
},
|
||||
"privacy": {
|
||||
"title": "隐私政策 - Toolso.AI",
|
||||
"description": "了解我们如何在 Toolso.AI 上收集、使用和保护您的个人信息和数据。",
|
||||
"ogImage": "https://toolso.ai/banner.png"
|
||||
"title": "隐私政策 - DevAI.tools",
|
||||
"description": "了解我们如何在 DevAI.tools 上收集、使用和保护您的个人信息和数据。",
|
||||
"ogImage": "/banner.png"
|
||||
},
|
||||
"cookies": {
|
||||
"title": "Cookie 政策 - Toolso.AI",
|
||||
"description": "了解我们如何在 Toolso.AI 上使用 cookies 和类似的跟踪技术。",
|
||||
"ogImage": "https://toolso.ai/banner.png"
|
||||
"title": "Cookie 政策 - DevAI.tools",
|
||||
"description": "了解我们如何在 DevAI.tools 上使用 cookies 和类似的跟踪技术。",
|
||||
"ogImage": "/banner.png"
|
||||
},
|
||||
"tools": {
|
||||
"title": "AI 工具库 - 发现最好的 AI 工具",
|
||||
@@ -1093,4 +1094,4 @@
|
||||
"siteHeader": {
|
||||
"searchPlaceholder": "搜索开发者工具..."
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -11,24 +11,24 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@aidir/core": "workspace:*",
|
||||
"next": "16.1.1",
|
||||
"react": "^19.2.3",
|
||||
"react-dom": "^19.2.3",
|
||||
"next-intl": "^4.7.0",
|
||||
"next": "^16.3.5",
|
||||
"react": "^19.3.0",
|
||||
"react-dom": "^19.3.0",
|
||||
"next-intl": "^4.14.5",
|
||||
"next-themes": "^0.4.6",
|
||||
"next-view-transitions": "^0.3.5",
|
||||
"sonner": "^2.0.7",
|
||||
"geist": "^1.3.0",
|
||||
"lucide-react": "^0.562.0",
|
||||
"framer-motion": "^12.43.0"
|
||||
"sonner": "^2.0.8",
|
||||
"geist": "^1.7.2",
|
||||
"lucide-react": "^1.46.0",
|
||||
"framer-motion": "^13.3.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/node": "^20",
|
||||
"@types/react": "^19.2.7",
|
||||
"@types/react-dom": "^19.2.3",
|
||||
"@types/mdx": "^2.0.13",
|
||||
"typescript": "^5",
|
||||
"tailwindcss": "^3.4.1",
|
||||
"postcss": "^8"
|
||||
"@types/node": "^26.5.1",
|
||||
"@types/react": "^19.3.0",
|
||||
"@types/react-dom": "^19.3.0",
|
||||
"@types/mdx": "^2.0.14",
|
||||
"typescript": "^7.0.2",
|
||||
"tailwindcss": "^3.4.19",
|
||||
"postcss": "^8.5.28"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,24 +0,0 @@
|
||||
# robots.txt for Toolso.AI - AI Tools Directory
|
||||
# https://toolso.ai
|
||||
|
||||
User-agent: *
|
||||
Allow: /
|
||||
|
||||
# Disallow admin and API pages
|
||||
Disallow: /admin/
|
||||
Disallow: /api/
|
||||
|
||||
# Disallow authentication pages
|
||||
Disallow: /*/signup
|
||||
Disallow: /*/login
|
||||
Disallow: /*/check-email
|
||||
Disallow: /*/verify-email
|
||||
Disallow: /*/forgot-password
|
||||
Disallow: /*/reset-password
|
||||
|
||||
# Disallow protected user pages
|
||||
Disallow: /*/dashboard
|
||||
Disallow: /*/profile
|
||||
|
||||
# Sitemap location
|
||||
Sitemap: https://toolso.ai/sitemap.xml
|
||||
@@ -1,2 +1,2 @@
|
||||
// 自动生成:[locale]/(admin)/layout.tsx 的薄路由
|
||||
export { default } from "@aidir/core/pages/[locale]/(admin)/layout";
|
||||
export { default, metadata } from "@aidir/core/pages/[locale]/(admin)/layout";
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
// 自动生成:[locale]/(auth)/layout.tsx 的薄路由
|
||||
export { default } from "@aidir/core/pages/[locale]/(auth)/layout";
|
||||
export { default, metadata } from "@aidir/core/pages/[locale]/(auth)/layout";
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
// 自动生成:[locale]/(protected)/layout.tsx 的薄路由
|
||||
export { default } from "@aidir/core/pages/[locale]/(protected)/layout";
|
||||
export { default, metadata } from "@aidir/core/pages/[locale]/(protected)/layout";
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
// 自动生成:[locale]/layout.tsx 的薄路由
|
||||
export { default, generateStaticParams } from "@aidir/core/pages/[locale]/layout";
|
||||
export { default, generateMetadata, generateStaticParams } from "@aidir/core/pages/[locale]/layout";
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
// 自动生成:api/screenshots/[slug]/route.ts 的薄路由
|
||||
export { GET } from "@aidir/core/pages/api/screenshots/[slug]/route";
|
||||
@@ -0,0 +1,2 @@
|
||||
// 自动生成:robots.ts 的薄路由
|
||||
export { default } from "@aidir/core/pages/robots";
|
||||
@@ -53,13 +53,13 @@ async function SiteHome({ locale }: { locale: string }) {
|
||||
<div className="min-h-screen bg-background">
|
||||
{/* Terminal 风格 Hero + 绿色系统状态条 */}
|
||||
<div className="border-b border-border bg-background">
|
||||
<div className="mx-auto flex max-w-5xl items-center gap-2 px-4 py-2 font-mono text-[11px] text-muted-foreground sm:px-6">
|
||||
<span className="inline-block h-2 w-2 animate-pulse rounded-full bg-emerald-500" />
|
||||
<div className="site-container flex items-center gap-2 px-4 py-2 font-mono text-[11px] text-muted-foreground sm:px-6">
|
||||
<span className="inline-block h-2 w-2 rounded-full bg-emerald-500" />
|
||||
system: online · 1,000+ tools indexed · updated hourly
|
||||
</div>
|
||||
</div>
|
||||
<section className="border-b border-border bg-[hsl(var(--secondary))]/40">
|
||||
<div className="mx-auto max-w-5xl px-4 py-14 sm:px-6 md:py-20">
|
||||
<div className="site-container px-4 py-14 sm:px-6 md:py-20">
|
||||
<div className="mx-auto max-w-2xl overflow-hidden rounded-xl border border-border bg-background shadow-sm">
|
||||
<div className="flex items-center gap-1.5 border-b border-border bg-secondary/50 px-4 py-2.5">
|
||||
<span className="h-2.5 w-2.5 rounded-full bg-red-400" />
|
||||
@@ -92,7 +92,7 @@ async function SiteHome({ locale }: { locale: string }) {
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<div className="mx-auto max-w-5xl space-y-12 px-4 py-12 sm:px-6">
|
||||
<div className="site-container space-y-12 px-4 py-12 sm:px-6">
|
||||
{/* Use Cases as workflows */}
|
||||
{data.useCases.length > 0 && (
|
||||
<section>
|
||||
|
||||
Reference in New Issue
Block a user