yosalama

yosalama

I built a Reddit monitoring tool with Elixir (and avoided a huge GPU bill)

Hey! Just launched https://buzzbear.ai after quite a bit of time working on it on and off. It monitors Reddit and uses semantic matching to find posts related to whatever you want to track… your product, competitors, topics you care about, whatever. And sends you emails when it finds relevant stuff.

I wanted to share how Elixir made this way easier than expected.

The Stack

  • Phoenix LiveView for everything UI
  • Oban for background jobs
  • Bumblebee for ML
  • Libcluster over Tailscale for connecting my local GPU to the cloud

The fun part: Running ML Models on my personal GPU instead of renting cloud GPUs

I needed to run text similarity models to match Reddit posts against user queries. Checked GPU instance pricing and… yeah, no. $700+/month for something that would sit idle most of the time.

Then I remembered: I already have a perfectly good GPU sitting in my closet.

Here’s the setup: The ML model runs on a local server w/ gpu. My Phoenix app runs on Fly.io. They talk via distributed Erlang over a Tailscale VPN. From the code’s perspective, it’s just calling another node in the cluster. Libcluster handles discovery, Tailscale handles the secure connection, and Erlang handles the RPC.

The best part? When I eventually need to scale, I just spin up more GPU nodes and libcluster automatically discovers them. The calling code doesn’t change at all. Right now my janky home server handles everything (~1M comparisons/hour on a single RTX 3080). Later, I can move to proper cloud GPUs without rewriting anything.

What surprised me

Distributed Erlang was easier than expected. I thought clustering would be this complex thing. Nope. Install Tailscale, configure libcluster, done. It just works.

Bumblebee is legit. Running production ML workloads on consumer hardware works great. The EXLA backend with CUDA just works out of the box.

Oban is a cheat code. Retries when Reddit is flaky. Concurrent processing. Cron scheduling. I didn’t have to build any of this. Just define a worker and Oban does the rest.


Anyway, this was a fun build. The Elixir ecosystem made so much of this just work, that I actually enjoyed building it instead of fighting infrastructure.

Happy to answer questions about any of this!

Most Liked

yosalama

yosalama

You mentioned a few use cases both in your post and on the landing page. If you already have paying customers, is there any real use case you can share? I’m curious what people would use it for!

I actually don’t have paying customers yet, all on the free tier currently, as I’ve just launched this a couple days ago. So no complete case studies as of yet. But an example use case off the top of my head:

  • A deployment tool founder monitoring for posts like “our CI pipeline is a nightmare.” When we find a matching post, we’d then email him and he can reply to the post with how he can help.

Are you using Fly’s Postgres?

Nope, using Crunchy Data. Crunchy’s pricing worked better for my needs, plus they integrate well with Tailscale, which fits nicely with the rest of the system.

How do you batch comparison jobs?

  • All comparison jobs are placed in an Oban queue
  • A highly concurrent Oban worker then reads from the queue and then makes RPC calls to the node running Bumblebee
  • Nx.Serving is configured to automatically batch all incoming requests that arrive within about the same time

Are you using hybrid search or vector distance?

It’s mostly vector distance currently, but if a user specifies specific keywords then we use those to find matches regardless of the vector distance.

How are you approaching marketing & sales?

Honestly, still figuring this out… Just posted on a couple subreddits so far. Might run a couple ad campaigns.

You mentioned Elixir made it easier than expected, and several positive surprises. What has be the greatest challenge with building/maintaining the system?

Oban made concurrency and scaling easy, but debugging jobs was a bit hard initially when something went wrong. But adding extensive logging/metrics + the oban web dashboard recently becoming open source, really helped in making it easier to investigate issues and finding patterns in failed jobs.

And Thank you! Appreciate the questions and well wishes, wish you a great 2026 too :folded_hands:

yosalama

yosalama

I’m actually not using LLMs for the initial matching! I’m running embedding models via Bumblebee… which made self-hosting on a 3080 pretty feasible. Cost was definitely a factor, but honestly I also just wanted an excuse to dig into the Bumblebee/EXLA stack… it’s been fun to work with.

For Fly… Just a single instance right now. Traffic is low enough that geo-distribution isn’t necessary yet. :

rhcarvalho

rhcarvalho

Welcome to the forum!

Congratulations on the launch, and thanks for sharing the story :slight_smile:

Here’s a few:

  • You mentioned a few use cases both in your post and on the landing page. If you already have paying customers, is there any real use case you can share? I’m curious what people would use it for!
  • Are you using Fly’s Postgres?
  • How do you batch comparison jobs?
  • Are you using hybrid search or vector distance?
  • How are you approaching marketing & sales?
  • You mentioned Elixir made it easier than expected, and several positive surprises. What has be the greatest challenge with building/maintaining the system?

Wish you and BuzzBear a successful 2026! Cheers!

Where Next?

Popular in Discussions Top

mikl
I wanted to capitalize a string, and tried using String.capitalize(). That generally works well, until you try to capitalize a word like...
New
Nvim
Elixir appears to be a superior language to Python. I don’t see any advantage of Python over Elixir. Are there any?
New
nunobernardes99
Hi there Elixir friends :vulcan_salute: In a recent task I was on, I needed to check in two dates which of them is the maximum and which...
New
AlexMcConnell
The reason that Rails is as popular as it is is because it’s very easy for relatively inexperienced developers to get a lot of work done....
588 19675 166
New
mbenatti
Following https://github.com/tbrand/which_is_the_fastest |> https://raw.githubusercontent.com/tbrand/which_is_the_fastest/master/imgs...
New
jer
I’ve been using umbrellas for a while, and generally started off (on greenfield projects at least) by isolating subapps based on clearly ...
New
hazardfn
I suppose this question is effectively hackney vs. ibrowse but we are at a point in our project where we have to make a choice between th...
New
acrolink
How does the two languages compare when it comes to server side application development? Any experiences or ideas? Thank you.
New
AstonJ
Seen any cool LiveView demos, sample apps or examples? Please post them here! :003:
New
dogweather
I wrote this comment on r/haskell, and it’s not popular there. :wink: But I think I’m on to something… Haskell reminds me of Java, and e...
New

Other popular topics Top

axelson
This post is a wiki (feel free to hit the edit button near the bottom right of this post to add your own changes!) This post collects co...
239 48475 226
New
malloryerik
Hi, this is for people who, like me, have had some friction using .html.heex templates in VSCode. The solution seems to be, in a hyphena...
New
9mm
I am constructing a JSON object (map) and I need to conditionally set a field. I’m trying to write proper elixir-way code… and I’m at a l...
New
New
marius95
Hello everyone, I try to use an Javascript Event Handler in my root.html.leex file. Therefore I created a function in the app.js file: ...
New
Patoshizzle
After calling mix ecto.create I get this error: 17:00:32.162 [error] GenServer #PID<0.412.0> terminating ** (Postgrex.Error) FATAL...
New
dblack
I’ve got an issue with an app and I’ve no idea of how to troubleshoot it. I’m hoping someone here might have seen something similar. I p...
New
Qqwy
Update: How to use the Blogs & Podcasts section You can post links to your blog posts or podcasts either in one of the Official Blog...
3271 127536 1222
New
JakeBecker
TL;DR: I’ve just released an implementation of Microsoft’s IDE-independent Language Server Protocol for Elixir. It adds language support ...
1144 54250 245
New
sergio
Kind of like when jquery came out, it was super necessary. Existing drag and drop libraries have a bunch of baggage to support old browse...
New

We're in Beta

About us Mission Statement