>_ DevTrendszh

语言

首页

语言

板块

前端 后端 移动端 DevOps AI / ML 游戏开发 区块链 嵌入式 安全
TypeScript

用于 Next.js 和 Discord 事件监控的即用型 SaaS 模板

当你启动一个新的副项目或订阅服务时,往往会陷入相同的套路。你不是在处理独特的业务逻辑,而是把时间花在设置身份验证、接入支付系统、构建标准仪表板,以及弄清楚该把关键告警发送到哪里。等到终于发布第一个版本时,你的热情已经消耗了一半,都用在了这些样板工作上。

Project Image

YouTube 频道 Josh Tried Coding 的作者发布了一个名为 PingPanda 的开源项目。这是一个完整的全栈项目,用于实时事件追踪服务,能够即时向 Discord 频道发送通知。你可以将代码作为现成的产品使用,也可用作详细的学习模板,来构建自己的现代技术栈 SaaS 应用。

项目包含什么

PingPanda 解决了一个简单的问题:追踪应用程序内的事件(注册、支付、错误)并向 Discord 发送结构化的通知卡片。

作者没有选择与 Datadog 或 Sentry 等第三方监控工具进行复杂的集成,而是采用了更简单的方案。你创建一个事件分类,生成一个 API 密钥,然后服务向 PingPanda 端点发送 POST 请求。消息会立即出现在你团队的 Discord 频道中,包含正确的参数、徽章和格式。

项目技术栈看起来很简洁:

  • 使用 App Router 和严格 TypeScript 类型检查的 Next.js 框架。
  • 通过 Clerk 服务进行身份验证。
  • PostgreSQL 数据库用于存储用户、事件和分类。
  • 使用 Tailwind CSS 和 shadcn-ui 组件进行样式设计。
  • 通过 Stripe 实现货币化和订阅功能。

监控和告警传递的工作原理

该服务的主要卖点是集成的简便性。在仪表板中,用户可以创建监控分类,例如 user-signupcheckout-completed。对于每个分类,你可以配置 Discord webhook 和可视化显示参数。

发送事件只需一个简单的 HTTP 请求:

await fetch("https://your-pingpanda-domain.com/api/v1/events", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    category: "sale",
    fields: {
      amount: "$49.00",
      plan: "Pro Annual",
      user: "[email protected]",
    },
  }),
})

后端验证请求,将记录保存到 PostgreSQL,检查计划限制,并触发 Discord webhook。聊天中会出现一条带有字段高亮的精美消息。如果你有一个小团队或独自工作,这种方法可以替代手动数据库检查或设置复杂的电子邮件通知。

支付和定价计划

该代码库已经包含了付费订阅逻辑。免费层级每月的事件数量有限制。当达到限制时,服务会停止发送告警并提示升级到 Pro。

Stripe 集成遵循标准流程:

  1. 用户点击仪表板中的升级到 Pro 按钮。
  2. Next.js 生成一个 Stripe Checkout 会话并将客户端重定向到支付页面。
  3. Stripe 发送一个关于成功支付的 webhook 回应用程序。
  4. 服务器在数据库中更新订阅状态并移除限制。

你不需要从头编写这个流程或弄清楚如何正确处理支付 webhook 报告。代码是开源的,结构良好,可以通过 Stripe CLI 在本地进行测试。

架构和界面

该项目的一个很好的细节是设计。有一个带有简洁布局、插图和定价部分的登录页面。仪表板界面基于 shadcn-ui 构建,因此只需在 Tailwind 配置中更改几行代码就可以轻松为你的品牌定制组件。

代码库按照 App Router 标准组织:

  • app/ 文件夹包含服务器和客户端页面、API 路由和 webhook 处理器。
  • components/ 文件夹存储隔离的 UI 元素和仪表板块。
  • 数据库查询是隔离的,传入参数验证依赖 Zod。

由于使用了 Clerk,登录可以通过社交网络或一次性代码立即工作,无需处理会话和密码存储。

如何在本地运行项目

你需要 Node.js 和 Clerk、Stripe 以及数据库服务的账户(例如 Neon 或本地 Postgres 实例)。

克隆仓库:

git clone https://github.com/joschan21/pingpanda.git
cd pingpanda
npm install

复制环境变量文件:

cp .env.example .env

.env 中,你需要添加 Clerk 的密钥、数据库连接 DATABASE_URL、Stripe 密钥和 webhook。填写配置后,应用数据库架构并启动开发服务器:

npm run dev

应用程序将在 http://localhost:3000 启动。

仓库中缺少什么

项目的 README 相当简略。没有详细的分步部署指南或所有环境变量的描述,所以你需要直接研究源代码中的一些配置。

如果你计划部署到高流量的生产环境,请记住:直接同步将 webhook 转发到 Discord 而没有消息队列(Redis/BullMQ)可能会在每分钟数万次请求时达到速率限制。对于小型项目和小型服务,当前的实现已经足够,但对于严肃的企业使用,你需要增强队列架构。

这个项目适合谁

PingPanda 在两种场景下非常适合。

首先,想要学习使用 Next.js 构建现代商业 Web 应用程序的开发者。在这里你可以学到使用 App Router 的实用技术、安全分离服务器和客户端组件,以及集成 Clerk 和 Stripe。

其次,独立黑客和微型 SaaS 创作者。这个项目节省了数十小时的工作。你可以 fork 仓库,用 Telegram 或电子邮件替换 Discord 端点,重新着色主题,然后获得一个用于你自己的监控或通知服务的现成框架。代码采用 MIT 许可证发布,因此对商业使用没有限制。

相关项目