I Built My First Self-Hosted App

I Built My First Self-Hosted App

From Selenium to Playwright, here’s how I rebuilt and upgraded my TradingView Alerts bot into a self-hosted app.

4 min
Published August 25, 2025
Telegram API
FastAPI
Self-Hosted
Playwright
Proxmox

Last year, I wrote about building TradingView Telegram Alerts - a small project that sent TradingView alerts straight to Telegram with optional chart snapshots. It solved a real problem for traders (including my client back then) who couldn’t sit in front of charts all day and is always on the go.

That version worked, but it had limits. It relied on Selenium, ran on a hosted setup, and wasn’t easy to maintain or extend support. Over the past months, I decided to rebuild it from the ground up. This turned into my first proper self-hosted application, running happily inside my Proxmox homelab. And now I’m open-sourcing it for others to use and improve.

What’s New and Improved

The core idea is the same: TradingView alerts get sent to Telegram instantly, complete with a chart snapshot for context. But almost every part of the system has been reworked and improved.

  • Selenium → Playwright
    Screenshots are now captured using Playwright with headless Chromium. It’s faster, lighter, and far more reliable than Selenium.

  • Synchronous → Async Worker Queue
    In the old version, if multiple alerts came in at the same time, some would get lost and chart snapshots would fail. Now, alerts are queued and processed in parallel with an async worker system. Every alert is captured and delivered reliably, even under heavy load.

  • Static Alerts → Telegram Commands
    The bot now responds to commands directly in Telegram. You can set chart intervals, switch between light/dark themes, and even map symbols to exchanges - no need to redeploy.

  • Cloud → Self-Hosted
    Instead of Fly.io, it now runs as a systemd service inside an LXC on my Proxmox server. It’s lean, dependable, and feels great to run my own production service at home.

  • Developer Experience
    Deployment is smoother with a deploy.sh script, systemd integration, and simple environment variables. No more manual juggling.

Features (2025 Edition)

  • Instant alerts - delivered from TradingView to Telegram.
  • Chart screenshots - captured with Playwright for real context.
  • Async worker queue - to handle multiple responses fast.
  • Telegram commands - for intervals, themes, and symbol-exchange mapping.
  • Homelab ready - lightweight and runs perfectly inside a Proxmox LXC.

And yes - you can even manage different exchange symbol mappings with /map and /unmap without re-deploying.

Lessons Learnt

This upgrade wasn’t just about making the tool better - it was a personal milestone.

  • I learned how to properly self-host applications in a Linux environment using systemd, containers, and automation.
  • I learned why async matters for webhooks and how to prevent one slow task from blocking everything.
  • I discovered that Playwright is far superior to Selenium for this kind of project.

Most importantly, I went from hacking together a useful script to building something that’s production-ready, reliable, and shareable.

Giving Back

This project started as a quick solution for one trader, but now it’s something anyone can use. That’s why I’ve open-sourced it:

👉 GitHub - TradingView Telegram Alerts

It includes full installation steps, deployment scripts, and troubleshooting notes. Contributions are welcome - fork it, improve it, or just use it in your own trading setup.

What’s Next

I’m planning to:

  • Build a simple web UI for managing settings.
  • Add proper alert history tracking.
  • Expand support for multi-user setups.

This has been one of my most rewarding projects so far. From its humble beginnings with Selenium to now running as my first self-hosted app, it’s been a big step forward in my developer journey.

If you try it out, let me know how it works for you. Feedback and contributions are always welcome!

-- Ted