Home
Softono
i

i365dev

Professional software vendor delivering innovative solutions on the Softono platform. Specialized in both open-source and proprietary software development.

Total Products
2

Software by i365dev

free4chat
Open Source

free4chat

# free4chat [free4.chat](https://free4.chat/) โ€” real-time voice + text chat. No sign-up, no server to run. Open a room and talk. > โš ๏ธ Personal project / experimental. Use at your own risk. ## Features - ๐ŸŽ™๏ธ Voice chat in rooms - ๐Ÿ’ฌ Text chat with emoji - ๐Ÿ“Ž File & image transfer (inline preview) - ๐Ÿ–ฅ๏ธ Screen sharing - ๐Ÿค– Luna โ€” optional AI assistant (mention `@luna` to invoke) - ๐Ÿ”’ No accounts, no persistent data - โฑ๏ธ Rooms automatically close after 2 hours - ๐Ÿ›ก๏ธ Cloudflare Turnstile bot protection ## Privacy free4chat is built around two principles: **no data outlives the conversation**, and **you don't need to trust any server**. **What we don't store:** - No accounts, no sign-up, no identity - Messages exist only in participants' browser memory โ€” close the tab and they're gone - Files and images are transferred via WebRTC data channels, never written to any database - Voice is relayed through Cloudflare's media nodes but never recorded **What does persist (and why it's fine):** - A `room name โ†’ meeting ID` mapping is kept in Cloudflare KV with a 30-day TTL so rejoining the same room name works. It contains no messages, no users, no content. - When Luna AI is enabled, messages sent to `@luna` are transmitted to an external AI model (Cloudflare AI Gateway โ†’ `@cf/zai-org/glm-4.7-flash`) for processing. The last 20 messages of conversation context are retained in a Durable Object for the lifetime of the room session only. Luna is opt-in and disabled by default. - Your nickname is saved in browser `localStorage` for convenience. Clear it anytime. The Worker's only job is to issue a short-lived auth token โ€” after that, all communication is peer-to-peer or via Cloudflare's media plane with no application-layer logging. ## Tech Stack | Layer | Technology | | -------- | ------------------------------------------------------------------------------------ | | Frontend | Next.js 15, Tailwind CSS, Cloudflare RealtimeKit React SDK | | API | Next.js API routes deployed as Cloudflare Worker via `@opennextjs/cloudflare` | | AI | `BotSession` Durable Object โ†’ Cloudflare AI Gateway โ†’ `@cf/zai-org/glm-4.7-flash` | | Storage | Cloudflare KV (room metadata, rate limiting) + DO KV storage (Luna chat history) | | Media | Cloudflare RealtimeKit (WebRTC, audio, data channels, screen sharing) | | Security | Cloudflare Turnstile (full-page bot challenge) + origin whitelist + KV rate limiting | ## Stack History This project has gone through three stacks, always with the same product goal: | Branch | Stack | Why it changed | | ------------------------------ | -------------------------------- | --------------------------------------------------------------------------------- | | [`golang`](../../tree/golang) | Go + Pion WebRTC + coturn | Self-hosted infra is too much overhead for a personal project | | [`elixir`](../../tree/elixir) | Elixir + Membrane Framework | Maintaining a server cluster is still heavy for something this small | | **`cloudflare`** (this branch) | Cloudflare RealtimeKit + Workers | Fully serverless โ€” no servers to manage, file transfer built-in, free tier works | The product never changed. The ops burden did. The full story โ€” WebRTC internals, why each stack was chosen, where AI voice bots are headed โ€” is written up here: [**ไธ€ไธช WebRTC ่Šๅคฉๅฎค็š„ไธ‰ๆฌกๆผ”่ฟ›**](https://www.bmpi.dev/dev/free4chat/) (Chinese) ## Development See [DEVELOPMENT.md](./DEVELOPMENT.md) for local setup, deployment, and architecture notes. ## License MIT

File Transfer & Upload Team Chat
1.1K Github Stars
LetterDrop
Open Source

LetterDrop

# LetterDrop LetterDrop is a secure and efficient newsletter management service powered by Cloudflare Workers, enabling easy creation, distribution, and subscription management of newsletters. ## The story I have been using `TinyLetter` to send newsletters to my subscribers, but unfortunately, Mailchimp has now shut down this free service. This isn't the first time I've faced such an issue, whenever this happens, I lose all my subscribers and have to look for a new way to send newsletters. To avoid this recurring problem, I've decided to build my own free newsletter service. It needs to be zero-cost, easy to use, and reliable so it won't get shut down. To achieve this, I'm using Cloudflare Workers to create the service, which I've named LetterDrop. ## How to use? ### Create a newsletter 1. Create a newsletter by sending a POST request to the `/api/newsletter` endpoint like this: ```bash curl --request POST \ --url https://ld.i365.tech/api/newsletter \ --header 'CF-Access-Client-Id: <<CF-Access-Client-Id>>' \ --header 'CF-Access-Client-Secret: <<CF-Access-Client-Secret>>' \ --header 'content-type: application/json' \ --data '{ "title": "BMPI", "description": "BMPI weekly newsletter", "logo": "https://www.bmpi.dev/images/logo.png" }' ``` 2. Offline the newsletter by sending a PUT request to the `/api/newsletter/:id/offline` endpoint like this: ```bash curl --request PUT \ --url https://ld.i365.tech/api/newsletter/9080f810-e0f7-43aa-bac8-8d1cb3ceeff4/offline \ --header 'CF-Access-Client-Id: <<CF-Access-Client-Id>>' \ --header 'CF-Access-Client-Secret: <<CF-Access-Client-Secret>>' ``` __NOTE:__ These APIs should be protected by Cloudflare zero-trust security. That means you need to create a [service-token](https://developers.cloudflare.com/cloudflare-one/identity/service-tokens/) and use it to access these APIs. ### Subscribe or Unsubscribe to a newsletter Just go to the newsletter page and click the subscribe or unsubscribe button. e.g. [BMPI](https://ld.i365.tech/newsletter/e0b379d3-0be0-4ae5-9fe2-cd972a667cdb). Then you will receive an email to confirm your subscription or unsubscription. After that, you will receive the newsletter when it is published. __NOTE:__ The newsletter page link pattern is `https://<<your-domain>>/newsletter/:id`. ### Publish a newsletter The LetterDrop use the Cloudflare Email Worker to send emails. And there is a `ALLOWED_EMAILS` variable to control who can send newsletters. You can use the Cloudflare dashboard to update the variable. After that, you can publish a newsletter by sending your newsletter content to this specific email address. And the Email Worker will send the newsletter to all subscribers. __NOTE:__ - You should config the Email Worker to let it can be triggered by the specific email address. Please refer to the [Cloudflare Email Worker](https://developers.cloudflare.com/email-routing/setup/email-routing-addresses/) to know how to do it. - The newsletter email subject should be `[Newsletter-ID:<<the-newsletter-id>>]<<your-newsletter-title>>`, e.g. `[Newsletter-ID:9080f810-e0f7-43aa-bac8-8d1cb3ceeff4]BMPI Weekly Newsletter - 20240623`. ## How to deploy? To use LetterDrop, you need to create a Cloudflare account and deploy the Worker script. The Worker script is available in the `app` directory. You can deploy the Worker script using the Cloudflare Workers dashboard. __NOTE:__ You need to change the `app/wrangler.toml` file to use your config values. ### The dependencies - [Cloudflare Workers](https://workers.cloudflare.com/) - [Cloudflare Email Workers](https://developers.cloudflare.com/email-routing/email-workers/) - [Cloudflare KV](https://developers.cloudflare.com/kv/) - [Cloudflare R2](https://developers.cloudflare.com/r2/) - [Cloudflare Queues](https://developers.cloudflare.com/queues/#cloudflare-queues/) - [Cloudflare D1](https://developers.cloudflare.com/d1) - Please refer to the [app/db/README.md](app/db/README.md) file to create the database. ### Variables - `ALLOWED_EMAILS`: The list of allowed emails to create newsletters. ### How to setup the notification service? Currently LetterDrop uses [AWS SES](https://aws.amazon.com/ses/) to send emails. You need to create an AWS account and configure SES to send emails. After that, you need to create a Cloudflare Worker as a notification service. The code is very simple, you can use the ChatGPT to generate the code. ### How to handle the failed emails? LetterDrop uses the Cloudflare Queues to handle the failed emails. You can use the Cloudflare dashboard to monitor the failed emails and replay them in the dead-letter queue. ## What is the next step? The next step is to add more features to LetterDrop. - Improvments - [ ] Add the unit tests. - [ ] Add the email template. - [ ] Track the email open rate. - [ ] Support more third-party email services like SendGrid, Mailgun, etc. - [ ] Support the mulit-tenant feature. - [ ] Add the landing page. ## How to contribute? I used the GPT-4o model to generate the code for LetterDrop. That means the code is generated by the AI model, and I only need to provide the prompts to the model. This approach is very efficient and can save a lot of time. I've also recorded a [video](https://www.youtube.com/playlist?list=PL21oMWN6Y7PCqSwbwesD4_wmXEVSeeQ7h) to show how to create the LetterDrop project using the GPT-4o model. That also means you can easily customize the code by changing the prompts. You can find the prompts in the [CDDR](docs/CDDR//app.md) file. Even I use the GPT model to generate the code, I still need to review the code and test it. So if you find any issues or have any suggestions, please feel free to create an issue or pull request. And there is no restriction on the contribution, you can contribute to any part of the project by yourself or with the help of the GPT model. ## Discussion If you have any questions or suggestions, please feel free to create an issue or pull request. I'm happy to discuss with you. Or you can discuss it in this hacker news [thread](https://news.ycombinator.com/item?id=40764579). --- ## About the Author This project is maintained by the creator of **MyInvestPilot** โ€” a systematic investment assistance platform focused on rule-based, long-term investing and transparent strategy research. ๐Ÿ”— https://www.myinvestpilot.com

Email Marketing FaaS & Serverless
334 Github Stars