🎯 项目概述 - 一个开源的 AI 工具导航站,帮助用户发现和探索优秀的 AI 工具 - 基于 Next.js 16 + React 19 构建的现代化全栈应用 ✨ 核心功能 - AI 工具目录:分类展示、搜索筛选、工具详情页 - 工具提交:用户可提交新工具,社区驱动 - 管理后台:工具审核、用户管理、角色权限控制 - 博客系统:MDX 驱动,AI 资讯和教程 - 国际化支持:中文/英文双语 (next-intl) - 用户认证:Better Auth + Google OAuth - 深色/浅色主题切换 🛠 技术栈 - 前端:Next.js 16 (App Router) + React 19 + TypeScript - 样式:Tailwind CSS + Framer Motion 动画 - UI 组件:自定义组件库 + Radix UI - 表单验证:React Hook Form + Zod - 数据库:PostgreSQL + Drizzle ORM - 认证:Better Auth (邮箱密码 + Google OAuth) - 邮件:Resend (验证邮件 + Newsletter) - 存储:Cloudflare R2 / AWS S3 兼容 📁 项目结构 - src/app/[locale]/(auth) - 认证页面 - src/app/[locale]/(marketing) - 营销页面 (首页、博客、工具目录) - src/app/[locale]/(protected) - 受保护页面 (仪表板、个人资料) - src/app/[locale]/(admin) - 管理后台 - src/features - 功能模块 - src/lib - 核心业务逻辑 - messages - 国际化翻译文件 🗄 数据库 - 包含 user, session, account, verification, passwordResetToken 等核心表 - 支持 Drizzle ORM 迁移管理 📝 文档 - 完整的 CLAUDE.md 项目指南 - 环境变量配置示例 (.env.example) - MIT 开源许可证
112 lines
3.3 KiB
JSON
112 lines
3.3 KiB
JSON
{
|
|
"name": "toolso-ai",
|
|
"version": "1.0.0",
|
|
"description": "An open-source AI tools directory to help you discover the best AI tools across various categories.",
|
|
"private": false,
|
|
"keywords": [
|
|
"ai-tools",
|
|
"ai-directory",
|
|
"ai-tools-directory",
|
|
"artificial-intelligence",
|
|
"machine-learning",
|
|
"nextjs",
|
|
"typescript",
|
|
"tailwindcss",
|
|
"open-source"
|
|
],
|
|
"license": "Apache-2.0",
|
|
"homepage": "https://toolso.ai",
|
|
"repository": {
|
|
"type": "git",
|
|
"url": "https://github.com/coolchange-ai/toolso-ai-open.git"
|
|
},
|
|
"bugs": {
|
|
"url": "https://github.com/coolchange-ai/toolso-ai-open/issues"
|
|
},
|
|
"author": {
|
|
"name": "CoolChange.AI",
|
|
"url": "https://coolchange.ai"
|
|
},
|
|
"scripts": {
|
|
"dev": "node scripts/run-dev.mjs",
|
|
"build": "npm run generate:blog-manifest && next build",
|
|
"start": "next start",
|
|
"lint": "next lint",
|
|
"db:generate": "drizzle-kit generate",
|
|
"db:migrate": "drizzle-kit migrate",
|
|
"db:push": "drizzle-kit push",
|
|
"db:studio": "drizzle-kit studio",
|
|
"admin:setup": "tsx scripts/setup-admin.ts",
|
|
"seed:tools": "tsx scripts/seed-tools.ts",
|
|
"generate:blog-manifest": "node scripts/generate-blog-manifest.mjs"
|
|
},
|
|
"dependencies": {
|
|
"@aws-sdk/client-s3": "^3.958.0",
|
|
"@better-auth/client": "0.0.2-alpha.3",
|
|
"@hookform/resolvers": "^3.4.2",
|
|
"@mapbox/rehype-prism": "^0.9.0",
|
|
"@mdx-js/loader": "^3.0.1",
|
|
"@mdx-js/react": "^3.0.1",
|
|
"@next/mdx": "^14.2.3",
|
|
"@radix-ui/react-label": "^2.0.2",
|
|
"@radix-ui/react-slot": "^1.0.2",
|
|
"@react-email/components": "^0.5.3",
|
|
"@tabler/icons-react": "^3.5.0",
|
|
"@tailwindcss/typography": "^0.5.13",
|
|
"@tanstack/react-store": "^0.7.5",
|
|
"@types/mdx": "^2.0.13",
|
|
"@vercel/analytics": "^1.5.0",
|
|
"@vercel/speed-insights": "^1.2.0",
|
|
"better-auth": "^1.4.10",
|
|
"class-variance-authority": "^0.7.0",
|
|
"clsx": "^2.1.1",
|
|
"cobe": "^0.6.3",
|
|
"date-fns": "^3.6.0",
|
|
"drizzle-kit": "^0.31.4",
|
|
"drizzle-orm": "^0.44.5",
|
|
"fast-glob": "^3.3.2",
|
|
"framer-motion": "^11.2.9",
|
|
"geist": "^1.3.0",
|
|
"lucide-react": "^0.562.0",
|
|
"nanoid": "^5.1.6",
|
|
"next": "16.1.1",
|
|
"next-intl": "^4.7.0",
|
|
"next-themes": "^0.4.6",
|
|
"next-view-transitions": "^0.3.5",
|
|
"postgres": "^3.4.7",
|
|
"prettier": "^3.7.4",
|
|
"prismjs": "^1.29.0",
|
|
"react": "^19.2.3",
|
|
"react-dom": "^19.2.3",
|
|
"react-email": "^4.2.11",
|
|
"react-hook-form": "^7.51.5",
|
|
"react-icons": "^5.2.1",
|
|
"react-markdown": "^10.1.0",
|
|
"react-wrap-balancer": "^1.1.1",
|
|
"reading-time": "^1.5.0",
|
|
"rehype-highlight": "^7.0.2",
|
|
"remark-gfm": "^4.0.0",
|
|
"resend": "^6.1.0",
|
|
"sonner": "^2.0.7",
|
|
"tailwind-merge": "^2.3.0",
|
|
"zod": "^3.23.8"
|
|
},
|
|
"devDependencies": {
|
|
"@types/node": "^20",
|
|
"@types/react": "^19.2.7",
|
|
"@types/react-dom": "^19.2.3",
|
|
"dotenv": "^17.2.2",
|
|
"eslint": "^8",
|
|
"eslint-config-next": "14.2.3",
|
|
"pg": "^8.16.3",
|
|
"playwright": "^1.57.0",
|
|
"png-to-ico": "^3.0.1",
|
|
"postcss": "^8",
|
|
"sharp": "^0.34.5",
|
|
"tailwindcss": "^3.4.1",
|
|
"tsx": "^4.20.5",
|
|
"typescript": "^5"
|
|
},
|
|
"packageManager": "pnpm@10.11.1+sha512.e519b9f7639869dc8d5c3c5dfef73b3f091094b0a006d7317353c72b124e80e1afd429732e28705ad6bfa1ee879c1fce46c128ccebd3192101f43dd67c667912"
|
|
}
|