🫰Clickvote: Open-source upvotes, likes, and reviews to any context 🔥 TL;DR

2025-05-27

🫰Clickvote:开源任何语境下的点赞、点赞和评论🔥

TL;DR

TL;DR

我开发了一个开源应用,可以在任何地方添加点赞、点赞和评论。
虽然听起来很简单,但我在它的架构上却绞尽了脑汁。
我们来聊聊吧。

图片描述


你到底在建什么?🤯

在过去的十年中,我有机会在多个地方开发“评论”、“赞同”和“喜欢”,并且我也在许多领域看到它们,例如:

  • Reddit
  • Facebook
  • Instagram
  • Upwork
  • 美食应用
  • 项目管理工具
  • 客户反馈工具
  • 路线图工具

并且这个名单还在继续。

排行:
类型1

喜欢:
类型2

赞同票数:
类型3

到目前为止,我已经意识到在内部构建它非常简单 - 直到它变得不再简单。

您需要注意以下事项:

  • 显示客户之间的点赞、赞成和评论的实时更新
  • 通过深度分析了解您的会员
  • 每秒处理无限量的点击(取决于您的规模)
  • 实际上管理这个

梦想😴

嗯,这并不牵强......
如果您可以放置​​一个超级简单的组件,它可以在 5 分钟内立即(就像字面意思一样)为您添加此功能,那会怎样?

以下是代码片段:

剪辑

您可以用 包装您的应用程序ClickVoteProvider,并提供当前用户的 ID。

然后,ClickVoteComponent使用您想要投票的事物的动态 ID 在您的应用程序周围分发不同的事物。

一旦您与投票(LikeStyle)进行互动,它将使用新值更新所有其他关注同一组件的用户。

因此我们可以在 Novu 中使用简单的仪表板

诺武

然后在一分钟内将其更改为如下内容:

新投票

好了,现在我们都明白了要构建什么了。
让我们看看它到底是什么样子的。


图表!(我添加了颜色)

图形

对于简单来说它看起来有点复杂🤔
但让我尝试解释一下。

分析委员会:

与其他所有系统一样,您也拥有仪表板。
它由 NextJS(用于前端)和 NestJS(用于后端)组成,并包含 MongoDB。

  1. 添加您想要监控的新投票类型。

  2. 观察谁点击了/点击了多少/哪天点击了/哪个区域最好等等的分析。

  3. 为客户提供一种方式来附加他们想要在发生交互时获知的数据源(他们可能想要改变他们的系统)。

用户应用程序:

这就是事情变得棘手的地方。

  1. 我们创建了一个 WebSocket 服务器,所有客户端都可以连接它,以便即时接收新的点赞和点赞更新。(我检查了服务器发送事件 - SSE,但浏览器的硬性限制是 6 个,所以决定不检查。)

  2. WebSocket 服务器需要在处理大量点击时质疑和更新投票数;为此,我们使用 Redis,它为我们提供了WATCH和等选项MULTI来添加交易并防止竞争条件,在这种情况下计数器的数字与您预期的数字不同。

  3. 接下来是 Apache Kafka - 如果你计划每秒获得数千个赞,你不能直接将其插入数据库(它会崩溃)。此外,你还需要一些东西来确保信息进入数据库并且不会发生故障。我选择 Kafka 是因为它很受欢迎,但你也可以轻松选择其他服务,例如 Apache Pulsar。所以我们将所有数据都发送到 Kafka。

  4. NestJS 微服务组消费者将监听 Kafka 主题,提取信息并将其添加到数据库。

  5. 我选择使用 Timescale 作为时间序列数据库。我可以使用 Clickhouse 或 Redshift 之类的工具。我喜欢 Timescale 是因为它是基于 Postgres 的,并且附带一些“插件”。这意味着开源社区可以直接使用 Postgres 来代替时间序列数据库。(适用于规模较小的情况)

  6. 另一个 NestJS 微服务组消费者将根据用户的偏好(API、直接 DB 插入、另一个 Kafka)将信息发送给用户应用程序,无论他们选择什么。


托管这个堆栈要花多少钱?🤣

如果便宜的话:

  • Vercel 前端 (NextJS) $20
  • 时间表 31 美元
  • Upstash 无服务器 Kafka / Redis 约 70 美元
  • Digital Ocean Websockets 服务器 25 美元
  • 数字海洋后端 25 美元
  • Digital Ocean 1 名员工(消费者)25 美元
  • MongoDB Atlas 20 美元

我相信不会少于 216 美元。

它显然可以与 docker-compose 一起位于一台服务器上,但不会持续很长时间。

稍后我相信后端/工作者/websockets 应该被 Dockerized、Kuberneterized 并位于 AWS 上的某个地方。

会到达那里🤞

赚钱


肯定缺少的东西

  • 未经身份验证的用户查看结果的选项。
  • 通过指纹进行匿名投票。
  • 样式按钮的更多变体(我还没有想到)
  • 同步来自不同应用程序的投票(双向)
  • 动力——能帮帮我吗?😅

它的采用方面是什么

到目前为止,它看起来主要适合以下 B2B2C 公司:

  • 社交媒体
  • 求职网站
  • 文档?(如果有匿名功能,很可能与Fingerprint.com之类的网站合作)
  • 评论网站(Glassdoors?)
  • 地图网站

让 B2B 企业采用这种方法需要对市场进行一些教育。(有些企业已经这样做了)


给我看代码👀

嗯,目前还没有文档。
这项工作仍在进行中。
你可以在那里找到:

  • Nx Monorepo 架构。
  • NestJS 后端。
  • NestJS Kafka 微服务。
  • NestJS Websockets。
  • NextJS - 我知道,看起来很糟糕🤣

但请用星星⭐️表示您的支持,
这将帮助我知道是否有需要。

https://github.com/clickvote/clickvote

射击之星

抱歉设计得不太好看😛
(Logo 由 MidJourney 制作)

在 Twitter 上关注我!一起聊聊吧🙇🏻‍♂️

您认为这样的产品还有市场空间吗?

文章来源:https://dev.to/github20k/clickvote-open-source-upvotes-likes-and-reviews-to-any-context-3ef9
PREV
五大 Git 技巧和窍门
NEXT
🦄 使用 NextJS 构建定价页面 🤯 🤯 TL;DR