Lixabeth20/Rule-Weaver

GitHub: Lixabeth20/Rule-Weaver

一款让风控分析师可视化创建欺诈检测规则并实时查看交易拦截/标记/放行结果的前后端一体化应用。

Stars: 0 | Forks: 0

## 概述 本项目使用以下技术栈: - Vite - Typescript - React Router v7(所有导入均来自 `react-router` 而非 `react-router-dom`) - React 19(用于前端组件) - Tailwind v4(用于样式设计) - Shadcn UI(用于 UI 组件库) - Lucide Icons(用于图标) - Convex(用于后端和数据库) - Convex Auth(用于身份验证) - Framer Motion(用于动画) - Three js(用于 3D 模型) 所有相关文件均位于 'src' 目录中。 请使用 bun 作为包管理器。 ## 设置 本项目已完成配置,不仅可以在云端环境中运行,也支持在沙盒中进行 Convex 开发。 ## 环境变量 该项目在客户端配置了项目专属的 `CONVEX_DEPLOYMENT` 和 `VITE_CONVEX_URL` 环境变量。 Convex 服务器拥有一套独立的环境变量,可供 Convex 后端访问。 目前,这些变量包含与身份验证相关的密钥:JWKS、JWT_PRIVATE_KEY 和 SITE_URL。 # 使用身份验证(重要!) 在使用身份验证时,您必须遵循以下约定。 ## 身份验证已设置完毕。 所有 Convex 身份验证功能均已配置完成。目前该身份验证支持邮箱 OTP 和匿名用户,并且可以扩展支持更多方式。 邮箱 OTP 的配置定义在 `src/convex/auth/emailOtp.ts` 中。请勿修改此文件。 此外,请勿修改以下身份验证文件:`src/convex/auth.config.ts` 和 `src/convex/auth.ts`。 ## 在后端使用 Convex Auth 在 `src/convex/users.ts` 文件中,您可以使用 `getCurrentUser` 函数来获取当前用户的数据。 ## 在前端使用 Convex Auth `/auth` 页面已配置为支持身份验证。请导航至 `/auth` 以执行所有登录/注册流程。 您必须使用此 hook 来获取用户数据。切勿在没有此 hook 的情况下自行获取: ``` import { useAuth } from "@/hooks/use-auth"; const { isLoading, isAuthenticated, user, signIn, signOut } = useAuth(); ``` ## 受保护的路由 在保护页面时,请使用身份验证 hook 来检查用户的登录状态,并在需要时重定向到 `/auth`。 ## 认证页面 认证页面定义在 `src/pages/Auth.tsx` 中。请将经过身份验证的页面以及登录/注册流程重定向到 `/auth`。 ## 授权 您可以在前端和后端执行授权检查。 在前端,您可以使用 `useAuth` hook 来获取当前用户的数据和身份验证状态。 您还应该在基础层面对 queries、mutations 和 actions 进行保护,安全地执行授权检查。 ## 在身份验证后添加重定向 在 `src/main.tsx` 中,您必须添加身份验证后的重定向 URL,以便在认证成功后跳转至正确的看板/个人资料/页面。 # 前端开发规范 您将使用结合了 React 19、Tailwind v4 和 Shadcn UI 的 Vite 前端。 通常,页面应放在 `src/pages` 目录中,而组件应放在 `src/components` 目录中。 Shadcn 原生组件位于 `src/components/ui` 目录中,默认情况下应直接使用它们。 ## 页面路由 您的页面组件应当放在 `src/pages` 目录下。 添加新页面时,请务必更新 `src/main.tsx` 中的 React Router 配置,以包含您刚刚新增的路由。 ## Shadcn UI 规范 使用 Shadcn 组件时请遵循以下规范,并且默认情况下您应当优先使用它们。 - 记得使用 "cursor-pointer" 让元素可点击 - 对于标题文本,请使用 "tracking-tight font-bold" 类名以提高可读性 - 务必确保应用程序具备良好的移动端响应式。这一点非常重要 - 避免嵌套卡片。尽量不要嵌套卡片、边框、组件等。嵌套卡片会增加视觉杂乱感,使应用显得混乱。 - 避免使用阴影。请勿为组件添加任何阴影,保持使用不带阴影的细边框即可。 - 避免使用骨架屏;相反,请使用 loader2 组件来在加载数据时展示旋转的加载状态。 ## 落地页 您必须始终为应用程序创建外观精美且达到设计师水准的样式。 - 制作精良的动画并契合特定的“主题”(例如:新粗野主义、复古风、新拟态、玻璃拟态等) 请使用网络上广为人知的图片和 Emoji。 如果用户已经登录,请将“开始使用”按钮修改为显示“控制台”或“个人资料”,以便引导他们进入相应页面。 ## 响应式与排版 确保使用容器包裹页面,以防止宽度在宽屏设备上过度拉伸。务必保证页面居中对齐,避免出现偏移。 务必确保您的设计具备良好的移动端响应式。请检查排版格式,以确保设置了正确的最大/最小宽度,并适配移动端响应。 - 务必为受保护的控制台页面创建侧边栏,并支持在各个页面之间进行导航 - 务必为落地页创建导航栏 - 在这些导航栏上,创建的 Logo 应当是可点击的,并且能重定向到首页(index 页面) ## 使用 Framer Motion 制作动画 您必须使用 Framer Motion 为组件添加动画效果。项目中已经安装并配置好了该库。 要使用它,请从 `framer-motion` 导入 `motion` 组件,并用它包裹您想要添加动画的组件。 ### 其他需要添加动画的元素 - 淡入和淡出 - 滑入和滑出动画 - 渲染动画 - 按钮点击和其他 UI 元素 请为所有组件添加动画效果,包括落地页和应用内部页面。 ## Three JS 图形 您的应用程序默认集成了 Three js。您可以使用它为落地页、游戏等创建 3D 图形。 ## 颜色 您可以在以下文件中覆盖颜色配置:`src/index.css` 这里使用了适用于 Tailwind v4 的 oklch 颜色格式。 请始终使用这些颜色变量名。 确保所有 UI 组件都具备移动端响应式,并同时兼容浅色和深色模式。 请在父级的 className 中使用 `dark` 或 `light` 变量来设置主题。 ## 样式与主题 更改主题时,请务必在 `src/components/ui` 中全局修改 Shadcn 组件的底层主题,并同时更新 `index.css` 文件中的颜色。 除非特定用例需要,否则请避免硬编码颜色,并确保通过底层的 Shadcn UI 组件来正确实现主题。 在进行样式设计时,请确保按钮和可点击元素具备 pointer-click 样式(默认情况下通常没有)。 请始终遵循设定的主题风格,并确保其符合用户的喜好。 ## Toast 提示 您应当始终使用 Toast 提示来向用户展示操作结果,例如确认信息、执行结果、错误提示等。 请使用 Shadcn 的 Sonner 组件作为 Toaster(提示框)。例如: ``` import { toast } from "sonner" import { Button } from "@/components/ui/button" export function SonnerDemo() { return ( ) } ``` 请记得从 "sonner" 导入 `{ toast }`。用法:`toast("Event has been created.")` ## 对话框 请务必确保较大型的 Dialog(对话框)在其内容区域支持滚动,以保证内容能够适应屏幕大小。确保内容不会被屏幕截断。 理想情况下,请尽量使用 Dialog 而不是跳转到一个新页面。 # 使用 Convex 后端 您将负责实现 Convex 后端。请运用您对 Convex 的了解及相关文档来实现后端逻辑。 ## Convex Schema 您必须严格遵循 Convex 的 Schema(模式)实现规范。 Schema 定义在 `src/convex/schema.ts` 文件中。 请勿在您的 queries 中包含 `_id` 和 `_creationTime` 字段(每张表默认已包含这些字段)。 请勿对 `_creationTime` 进行索引,因为它已由系统自动为您建立索引。绝不能出现重复的索引。 ## Convex Actions:使用 CRUD 操作 在执行任何涉及外部连接的操作时,您必须在文件顶部带有 "use node" 声明的 Convex Action 中进行处理。 在声明了 "use node" 的 action 文件中,不能同时包含 queries 或 mutations。因此,您必须调用其他文件中已预构建好的 queries 和 mutations。 您还可以使用预装的内部 CRUD 函数来操作数据库: ``` // in convex/users.ts import { crud } from "convex-helpers/server/crud"; import schema from "./schema.ts"; export const { create, read, update, destroy } = crud(schema, "users"); // in some file, in an action: const user = await ctx.runQuery(internal.users.read, { id: userId }); await ctx.runMutation(internal.users.update, { id: userId, patch: { status: "inactive", }, }); ``` ## 使用 Convex 时需避免的常见错误 使用 Convex 时,请确保: - 文档 ID 使用 `_id` 字段进行引用,而不是 `id`。 - 文档 ID 类型应表示为 `Id<"TableName">`,而不是 `string`。 - 文档对象类型应表示为 `Doc<"TableName">`。 - 在 schema 文件中将 schemaValidation 保持为 false。 - 必须正确地对您的代码进行类型定义,以便通过类型检查器。 - 必须妥善处理前端和后端 Convex queries 中可能出现的 null / undefined 情况,否则系统会抛出数据可能为 null 或 undefined 的错误。 - 始终使用 `@/folder` 路径,并遵循 `@/convex/folder/file.ts` 语法来导入 Convex 文件。 - 这包括导入生成的文件,如 `@/convex/_generated/server` 和 `@/convex/_generated/api`。 - 记得从 `convex/react` 导入 useQuery、useMutation、useAction 等函数。 - 绝对不要使用返回类型验证器。
标签:Convex, React, Syscall, Syscalls, TypeScript, Vite, Web开发, 安全插件, 自动化攻击, 风控规则引擎