← Back to list

I built a Retro ICQ Messenger (for WhatsApp & Telegram) — and Suddenly Chatting is Fun Again

Hi, I’m Felix Helleckes. A few weeks ago, I was sitting at my laptop, feeling nostalgic and slightly annoyed. Modern messengers often feel…

Felix Florian Helleckes · 2026-05-12 08:11 · 0 claps · 4.4 min read
#icq #whatsapp #telegram #messenger #react
Open on Medium ↗
Wiki topics: 🌐 · Web Development

I built a Retro ICQ Messenger (for WhatsApp & Telegram) — and Suddenly Chatting is Fun Again

Hi, I’m **Felix Helleckes**. A few weeks ago, I was sitting at my laptop, feeling nostalgic and slightly annoyed. Modern messengers often feel like bloated data farms: a single, monolithic tabbed app where everything is squeezed together, leaving you with zero overview. One ping from the wrong group is all it takes to completely destroy your focus.

I wanted something different — a small experiment to combine old-school comfort with modern tech.

The result? A desktop messenger with a classic ICQ 5 look, built using Electron + React. It features multi-window support, QR login for WhatsApp, and native Telegram integration. And yes, I actually use it every single day.

Why a Retro Design?

Because it’s incredibly practical. ICQ 5 had a beautifully clean feel: every conversation opened in its own window, so you always knew exactly who you were talking to. I brought that concept back — no tabs, no lost chats.

In daily use, this brings a surprising amount of focus. You can drag separate windows onto different monitors, focus on a single person, and keep your workspace perfectly organized.

The Tech Stack (Quick & Concrete)

  • Electron + React as the foundation — cross-platform, fast to develop.
  • Multi-Window Architecture: Every chat opens its own BrowserWindow. These windows are managed in a Map and reused when reopened to prevent duplicates.
  • Broadcast Pattern: All open windows stay synchronized via WebContents, ensuring updates land exactly where they belong.
  • WhatsApp via whatsapp-web.js: Runs a headless Puppeteer instance to handle QR logins and persistent sessions (which are strictly gitignored).
  • Telegram via GramJS: A real MTProto connection featuring native 2FA support.
  • The UI: A dark-teal ICQ skin, custom title bars, stickers, images, an emoji picker, and font scaling (all styled using rem units).
  • Windows Builds: Packaged as both an NSIS installer and a portable .exe for hassle-free distribution.

Small, Practical Decisions That Make a Difference

I kept the features intentionally simple:

  • Font scaling via quick A- / A+ buttons.
  • Contact windows running as independent BrowserWindow instances.
  • Self-contained session folders kept out of the repository.

These tiny details ensure the tool stays stable in real-world use, rather than just looking good in a demo.

Security & Limitations (Keeping it Real)

Let’s be transparent:

  • WhatsApp is connected via a web API, which is unofficial. It works flawlessly, but there is always a minor risk that WhatsApp might flag or temporarily block sessions if automated rules are violated.
  • Telegram runs through the official MTProto layer using individual API keys, making it highly reliable.
  • Session files and .env configs are fully gitignored. You should never commit your session files or API keys to a public repository.

A Real-World Example: Partial Sells, Phantom Positions, and Balance Displays

During a test run, a trading bot running on my machine executed a few automated partial exits. On my stream overlay (yes, I stream the bot’s stats live), the numbers in the top-right corner lagged for a moment. This happened because the balance-fetching script aggressively limits requests to every 2 minutes to prevent hitting API limits.

The trade went through perfectly and the orders were correct, but the UI was out of sync for a few seconds — a classic case of async data lagging behind the interface.

The Fix: The overlay now fetches the latest trades separately via a lightweight local script. This updates the display instantly without stressing the exchange APIs.

The SmartScreen Hurdle on Windows

When you launch the portable .exe for the first time, Windows SmartScreen will likely show a warning. This is completely normal since the build isn't digitally signed (which costs a fortune for indie developers).

To run it, simply click “More info” ➔ “Run anyway”, or right-click the file, go to Properties, and check “Unblock”. It’s not pretty, but it’s entirely safe.

Why This Project Makes Sense in the Era of Signal & Threads

This tool isn’t meant to replace major platforms. Instead, it’s a productivity tool for creators, community managers, and power users who handle multiple accounts and contexts simultaneously.

The multi-window philosophy supports productive multitasking far better than an endless stack of browser tabs. Plus, nostalgia is a powerful UX tool — it doesn’t just look cool, it actually makes the software more enjoyable to use.

Key Takeaways (And What You Can Apply Today)

  • Small UX choices matter: Giving each contact its own window and adding quick font scaling gives the user an immense sense of control.
  • Session persistence is a game-changer: It makes for a seamless UX, but you must secure it properly via your .gitignore.
  • Unofficial APIs are powerful but volatile: Always build fallback mechanisms in case an API structure changes.
  • Decouple your data: If you are streaming or utilizing overlays, separate your data-fetching logic (like trades or balances) from your rendering engine to prevent UI freezes.

Give It a Spin — and Let Me Know What You Think!

The source code, the installer, and a short demo video are all available in the repository (link in the README).

If you want to try it out, grab the portable .exe, test the multi-window setup, and see how it fits into your workflow. I’m incredibly curious to hear your feedback—should we add better multi-device sync? Darker themes? Automatic window snapping for multi-monitor setups?

If you’re hesitant about the Windows SmartScreen warning, I’ve uploaded a quick walkthrough video on YouTube showing exactly how to safely unblock and run the app. Check it out, give it a try, and if you like the project, leaving a star on GitHub helps more than you think!

P.S. I didn’t build this purely for nostalgia. I built it to solve a real issue: How do I manage my chats without losing my mind in a sea of tabs? The result is more focus, less noise, and a nice touch of retro charm. Even if it sounds unusual at first, give it a try. Sometimes the simplest ideas bring the most joy.

Link to Repository: https://github.com/Felix-Helleckes/ICQ

[embed]


메타데이터
post_id
ad01fc6df8b7
slug
i-built-a-retro-icq-messenger-for-whatsapp-telegram-and-suddenly-chatting-is-fun-again-ad01fc6df8b7
url
https://medium.com/@felix-helleckes/i-built-a-retro-icq-messenger-for-whatsapp-telegram-and-suddenly-chatting-is-fun-again-ad01fc6df8b7
canonical_url
https://medium.com/@felix-helleckes/i-built-a-retro-icq-messenger-for-whatsapp-telegram-and-suddenly-chatting-is-fun-again-ad01fc6df8b7
author_url
https://medium.com/@felix-helleckes
status
ok
fetched_at
2026-06-14 11:28:49