TE
科技回声
首页24小时热榜最新最佳问答展示工作
GitHubTwitter
首页

科技回声

基于 Next.js 构建的科技新闻平台,提供全球科技新闻和讨论内容。

GitHubTwitter

首页

首页最新最佳问答展示工作

资源链接

HackerNews API原版 HackerNewsNext.js

© 2025 科技回声. 版权所有。

Show HN: I made a cookie free, zero tracking embeddable live chat widget

3 点作者 benja123超过 4 年前

1 comment

benja123超过 4 年前
Maker here. Over the past few years I have become more and more interested in how we can replace some traditional SaaS offerings with versions that don’t use cookies or track customers. I don’t view myself as someone who is massively anti-third party cookies, but as someone who is always running side projects, third party cookies just add overhead to my work - as once I use them I need to display a cookie banner and any GDPR requests now require me to reach out to every third party provider that is embedded on my site, or to become more deeply integrated into their service which increases dev time.<p>Tinylivechat is meant to answer that when it comes to embeddable live chats. It doesn’t use cookies, it doesn’t track users and we anonymize their IPs in our logs. Moreover site visitors can delete the chats from inside the widget, giving them some control as well. It is written in elixir and uses phoenix liveview<p>This project didn’t come without its challenges. I had never written anything like this before and one of the more interesting parts for me to figure out was how can I avoid spamming my users with notifications when a site visitor starts sending them messages on their site.<p>I used Phoenix presence and a supervised genserver (process) for this. Each chat session has its own supervised process that is destroyed when the site visitor leaves the site. This process stores if an email notification has been sent to the site owner and if the site visitor has been sent an away message. The process is killed only after a site visitor leaves the site (there was some challenges around this as well - it can’t be killed it right away, and instead only after a few minutes to make sure they are really gone). It maybe better to use a database for this part - but so far it has worked quite well.