feat: AI Directory Platform 底座升级 + 五套主题站点

- 数据模型: vote/review/submission/claim/use_case/audience/collection/event (+tool 冗余统计列)
- 社区: 投票(限流+原子toggle+API) / 评论(评分+优缺点+Helpful+聚合回写) / 提交(重复检测+审批发布) / 认领(Owner白名单编辑)
- Ranking Engine: trending/popular/most-voted/most-saved/highest-rated/new/editors-choice (纯函数可测)
- 发现体系: Use Case + Audience + Collection 三维发现 / /ai-tools-for / /best SEO 页
- Programmatic SEO: 页面生成器 / sitemap 270条 / AggregateRating/FAQPage/Breadcrumb/ItemList schema / alternatives + vs 对比页
- Analytics: event 事件流 + 外链跳转埋点 + /admin/analytics CTR 与搜索词分析
- Admin: submissions/claims/reviews/discovery/vote-audit/analytics 六个新后台 + 仪表盘扩展
- 主题系统: themes registry + 五套站点 (classic/product/editorial/niche/minimal) 构建期注入
- 认证: GitHub OAuth (env门控) + 登录回跳 redirect
- i18n: 新增 7 个命名空间中英文案 (546 键一致)
- 测试: bun test 32 用例 (ranking/slug/去重/SEO生成器) + Playwright e2e 脚本
- 种子: 14分类/16用例/9受众/40工具/6用户/投票/评论/6合集/7718事件
This commit is contained in:
AI Directory Platform
2026-09-08 17:38:06 +00:00
parent 41d9fcac06
commit e46b4b52a3
90 changed files with 13642 additions and 7940 deletions
+119 -2
View File
@@ -208,7 +208,8 @@
},
"social": {
"googleSignIn": "Continue with Google",
"or": "Or continue with"
"or": "Or continue with",
"githubSignIn": "Continue with GitHub"
},
"checkEmail": {
"title": "Check Your Email",
@@ -255,7 +256,13 @@
"categories": "Categories",
"tags": "Tags",
"users": "Users",
"backToDashboard": "Back to User Dashboard"
"backToDashboard": "Back to User Dashboard",
"submissions": "Submissions",
"claims": "Claims",
"reviews": "Reviews",
"discovery": "Discovery",
"votes": "Vote Audit",
"analytics": "Analytics"
},
"header": {
"welcome": "Welcome",
@@ -621,6 +628,23 @@
},
"categoryPage": {
"viewAll": "View all {count} tools"
},
"reviewCta": "Ratings and reviews come from verified community members. Voted Helpful counts are shown next to each review.",
"alternatives": "Alternatives",
"seeAllAlternatives": "See all alternatives",
"stats": {
"votes": "Upvotes",
"views": "Views"
},
"share": {
"share": "Share",
"copy": "Copy",
"copyLink": "Copy link",
"copied": "Link copied to clipboard"
},
"sort": {
"latest": "Latest",
"trending": "Trending"
}
},
"seo": {
@@ -675,5 +699,98 @@
"visitWebsite": "Visit website",
"empty": "No tools yet. Add some in the admin panel.",
"viewAll": "View All Tools"
},
"voting": {
"vote": "Upvote",
"voted": "Upvoted",
"unvote": "Remove vote",
"loginRequired": "Please sign in to vote — you'll be brought right back.",
"rateLimited": "Slow down a bit — too many votes in a short time.",
"error": "Vote failed. Please try again."
},
"reviews": {
"title": "Reviews",
"writeReview": "Write a review",
"empty": "No reviews yet — be the first to share your experience.",
"loadMore": "Load more",
"loading": "Loading...",
"helpful": "Helpful",
"verifiedUser": "Verified user",
"pros": "Pros",
"cons": "Cons",
"yourRating": "Your rating",
"ratingRequired": "Please pick a star rating first.",
"titlePlaceholder": "Sum it up in one line (optional)",
"contentPlaceholder": "What did you use it for? How well does it work?",
"prosPlaceholder": "What do you like about it?",
"consPlaceholder": "What could be better?",
"useCasePlaceholder": "Your use case (e.g. social media content)",
"saving": "Saving...",
"submit": "Publish review",
"update": "Update review",
"cancel": "Cancel",
"delete": "Delete my review",
"deleted": "Review deleted",
"tooShort": "Review is a bit short — tell us at least a sentence.",
"error": "Could not save your review. Please try again.",
"basedOn": "Based on {count} reviews"
},
"submission": {
"name": "Tool name",
"websiteUrl": "Website URL",
"tagline": "Tagline",
"taglinePlaceholder": "One-line pitch shown on cards",
"description": "Description",
"descriptionPlaceholder": "What does it do? Who is it for? What makes it different?",
"logoUrl": "Logo URL",
"category": "Category",
"pricingLabel": "Pricing model",
"pricing": {
"free": "Free",
"freemium": "Freemium",
"paid": "Paid",
"freeTrial": "Free Trial",
"openSource": "Open Source",
"contact": "Contact for pricing"
},
"founderName": "Founder / company",
"contactEmail": "Contact email",
"socialLinks": "Social links",
"note": "Notes for the editors",
"notePlaceholder": "Anything that helps us review faster (launch date, metrics...)",
"selectPlaceholder": "Select...",
"submit": "Submit for review",
"submitting": "Submitting...",
"submitted": "Submitted! We'll review it within 48 hours.",
"reviewNote": "Free listing · reviewed within 48h",
"duplicateFound": "Looks like this tool may already be listed:",
"duplicateBlocked": "This tool appears to be already listed. Duplicate submissions are not allowed.",
"error": "Submission failed. Please check your inputs."
},
"claim": {
"claimThisTool": "Claim this tool",
"verifiedOwner": "Verified owner",
"formTitle": "Claim ownership of this listing",
"rolePlaceholder": "Your role (e.g. Founder, Marketing lead)",
"messagePlaceholder": "How should we verify you? (same-domain email, press page...)",
"proofPlaceholder": "Proof URL (optional)",
"submit": "Send claim",
"submitting": "Sending...",
"submitted": "Claim sent! We'll review it shortly.",
"pendingExists": "You already have a pending claim for this tool.",
"cancel": "Cancel",
"error": "Could not send your claim."
},
"rankings": {
"title": "Community Rankings",
"subtitle": "Seven live leaderboards powered by votes, reviews, saves and engagement — not sponsored placement.",
"trending": "Trending",
"popular": "Popular",
"mostVoted": "Most Voted",
"mostSaved": "Most Saved",
"highestRated": "Highest Rated",
"new": "New",
"editorsChoice": "Editor's Choice",
"empty": "No tools on this board yet."
}
}