You are browsing as a guest. Sign up (or log in) to start making projects!

wuff

@wuff

Joined June 6th, 2026

  • 11Devlogs
  • 5Projects
  • 1Ships
  • 15Votes
Ship Pending review

What is Global-Chat?
Global-Chat is a lightweight, asynchronous, terminal-based messaging application that allows anyone on Earth to connect and chat in real-time directly from their Command Prompt or Terminal. No heavy web browsers, no bloated Electron apps—just pure, retro-style networking.

Why this project?
I wanted to build a seamless communication tool that avoids the unnecessary complexity of modern chat apps while tackling the hard engineering challenges of backend networking. The goal was to create a rock-solid, secure server capable of handling multiple concurrent connections, preventing spam, and managing users efficiently, all while keeping a minimal, distraction-free aesthetic.

Key Features Inside:
- Global Connectivity – Chat instantly with other users across the globe through a clean CLI.
- Asynchronous UI – Powered by prompt_toolkit, ensuring incoming messages pop up instantly without interrupting what you are currently typing.
- Anti-Spam & Security – Built-in message cooldowns and automatic duplicate nickname validation.
- Robust Moderation – Full server-side control with admin commands to kick, ban users by IP, or send official system announcements via "say".
- Chat History – New users automatically receive the last 10 messages upon joining so they always have context.
- Dockerized Setup – The entire server infrastructure can be spun up locally or on a VPS with a single docker compose up command.

How to test it right now!
You don't need to install Python or mess around with dependencies to try it out.
- Go to the Releases tab on my GitHub Repository.
- Download the pre-built client.exe file.
- Open it, type your username, and start chatting instantly!

(Note: Since there is no login system yet, please verify your friends' identities via Slack/Discord if you suspect someone is impersonating them!)

  • 8 devlogs
  • 10h
Try project → See source code →
Open comments for this post

1h 25m 36s logged

Day 5

Today I finished preparing the project files, including the README.md and Dockerfile, and fixed all the bugs I was aware of.

I also updated the project page with a new description, a screenshot, and a demo URL.

The list I had in front of me is now completely finished, which means I can finally ship the project.

Of course, after shipping it, I’ll still continue updating the global chat, but before that I need to take a short break.

See you in my other projects — or in this one again sometime in the near future!!!

Day 5

Today I finished preparing the project files, including the README.md and Dockerfile, and fixed all the bugs I was aware of.

I also updated the project page with a new description, a screenshot, and a demo URL.

The list I had in front of me is now completely finished, which means I can finally ship the project.

Of course, after shipping it, I’ll still continue updating the global chat, but before that I need to take a short break.

See you in my other projects — or in this one again sometime in the near future!!!

Replying to @wuff

0
3
Open comments for this post

2h 4m logged

Day 4

Today I worked on adding chat history (when someone joins, the last 10 messages are displayed), as well as notifications for users joining/leaving the chat and error messages.

The biggest issue today was that exit messages were not being displayed. The fix turned out to be quite simple — I was using a double lock, which caused the code to freeze.

My plans for tomorrow are to check if everything works as intended, update the README file, update the Docker files, look into py2exe, and upload everything to GitHub and ship the project!!!

Yes, we are finally getting to my first ship, but don’t worry, updates will still continue after that.

See you tomorrow!!!

Day 4

Today I worked on adding chat history (when someone joins, the last 10 messages are displayed), as well as notifications for users joining/leaving the chat and error messages.

The biggest issue today was that exit messages were not being displayed. The fix turned out to be quite simple — I was using a double lock, which caused the code to freeze.

My plans for tomorrow are to check if everything works as intended, update the README file, update the Docker files, look into py2exe, and upload everything to GitHub and ship the project!!!

Yes, we are finally getting to my first ship, but don’t worry, updates will still continue after that.

See you tomorrow!!!

Replying to @wuff

0
2
Open comments for this post

2h 3m 34s logged

Day 3

Today I added the ability to execute commands directly from the server, such as ban and kick, giving the server moderation control over the chat.

I also fixed an issue where receiving a message while typing would interrupt the input. After searching the entire internet, I finally found the holy grail: prompt_toolkit. Because of that, I can put GUI development on hold for now.

The biggest challenge today was figuring out why I was getting a CMD-related error when starting the server with prompt_toolkit. It turns out that prompt_toolkit doesn’t work properly with PyCharm’s default console, so I had to enable the “Emulate terminal in output console” option.

My plans for tomorrow are:

Finish the command system (if I can think of any more useful commands).

Take a look at py2exe so I can generate an .exe file from the Python client.

Try to fix a bug where the client doesn’t properly stop after being banned, kicked, or disconnected.

See you tomorrow!!!

Day 3

Today I added the ability to execute commands directly from the server, such as ban and kick, giving the server moderation control over the chat.

I also fixed an issue where receiving a message while typing would interrupt the input. After searching the entire internet, I finally found the holy grail: prompt_toolkit. Because of that, I can put GUI development on hold for now.

The biggest challenge today was figuring out why I was getting a CMD-related error when starting the server with prompt_toolkit. It turns out that prompt_toolkit doesn’t work properly with PyCharm’s default console, so I had to enable the “Emulate terminal in output console” option.

My plans for tomorrow are:

Finish the command system (if I can think of any more useful commands).

Take a look at py2exe so I can generate an .exe file from the Python client.

Try to fix a bug where the client doesn’t properly stop after being banned, kicked, or disconnected.

See you tomorrow!!!

Replying to @wuff

0
3
Open comments for this post

1h 28m 2s logged

Day 2*

Today, I added nickname checking to the server to make sure that no two users can join the chat with the same nickname. I also implemented a message cooldown to help protect against spammers.

I also tried experimenting with the GUI a little, but it’s not the right time yet — the to-do list I have in front of me is still huge.

The problem of the day was that I hadn’t worked with Python dictionaries before, so I had to quickly learn how to use them xd.

My plans for tomorrow are to add a banning system as a command that can be executed directly from the server, along with other custom commands that the server will be able to perform.

I’m shutting down the VPS server until I ship the project.

See you tomorrow!!!

  • Technically it’s Day 3 because I didn’t work on it yesterday, but that’s a different story.

Day 2*

Today, I added nickname checking to the server to make sure that no two users can join the chat with the same nickname. I also implemented a message cooldown to help protect against spammers.

I also tried experimenting with the GUI a little, but it’s not the right time yet — the to-do list I have in front of me is still huge.

The problem of the day was that I hadn’t worked with Python dictionaries before, so I had to quickly learn how to use them xd.

My plans for tomorrow are to add a banning system as a command that can be executed directly from the server, along with other custom commands that the server will be able to perform.

I’m shutting down the VPS server until I ship the project.

See you tomorrow!!!

  • Technically it’s Day 3 because I didn’t work on it yesterday, but that’s a different story.

Replying to @wuff

0
8
Open comments for this post

1h 19m 41s logged

Devlog 2

Just like the tutorial suggested, I added a desktop background (I had no better idea, so I used the Windows XP wallpaper) and a top bar.

I think it’s starting to look pretty decent so far.

Next time, I plan to spend a bit more time working on it (a few hours) before posting another devlog, so I can polish everything up a little more.

See you in the next devlog!

Devlog 2

Just like the tutorial suggested, I added a desktop background (I had no better idea, so I used the Windows XP wallpaper) and a top bar.

I think it’s starting to look pretty decent so far.

Next time, I plan to spend a bit more time working on it (a few hours) before posting another devlog, so I can polish everything up a little more.

See you in the next devlog!

Replying to @wuff

0
2
Open comments for this post

50m logged

Devlog 1

Today, after spending the whole day messing around in KiCad, I decided I needed to code something. But since I didn’t have enough time to open Python and continue working on the Global Chat, I decided to switch to a new project.

Let me introduce you to NetraOS!!!

During the last hour, I programmed a loading screen that will be shown while the desktop is starting up. I’ll probably change it later to make it look a bit nicer, but for now I’m pretty happy with how it looks.

See you in the next devlog!

P.S. Since this is not my main project, I’m not sure how often new devlogs will appear.

Devlog 1

Today, after spending the whole day messing around in KiCad, I decided I needed to code something. But since I didn’t have enough time to open Python and continue working on the Global Chat, I decided to switch to a new project.

Let me introduce you to NetraOS!!!

During the last hour, I programmed a loading screen that will be shown while the desktop is starting up. I’ll probably change it later to make it look a bit nicer, but for now I’m pretty happy with how it looks.

See you in the next devlog!

P.S. Since this is not my main project, I’m not sure how often new devlogs will appear.

Replying to @wuff

0
11
Open comments for this post

1h 54m 54s logged

Devlog 1:

Hi, today for the first time in a while I decided to do something not related to networking, so I found the perfect project: Hackpad.

In this devlog I’ll show a picture of my progress so far while creating the schematic, which I honestly don’t even know if it works yet (if you have any feedback, feel free to leave a comment).

I wanted to build a macropad with 9 buttons, which in my future firmware will be used to open programs and automate certain actions on my computer.

As for the OLED display, I’m not really sure yet what it will show, but I might use it to display CPU, GPU, and RAM usage. The rotary encoder also doesn’t have a defined function yet.

It’s starting to look interesting.

See you next time!!!

P.S. This is not my main project, so I’m not sure how often new devlogs will appear.

Devlog 1:

Hi, today for the first time in a while I decided to do something not related to networking, so I found the perfect project: Hackpad.

In this devlog I’ll show a picture of my progress so far while creating the schematic, which I honestly don’t even know if it works yet (if you have any feedback, feel free to leave a comment).

I wanted to build a macropad with 9 buttons, which in my future firmware will be used to open programs and automate certain actions on my computer.

As for the OLED display, I’m not really sure yet what it will show, but I might use it to display CPU, GPU, and RAM usage. The rotary encoder also doesn’t have a defined function yet.

It’s starting to look interesting.

See you next time!!!

P.S. This is not my main project, so I’m not sure how often new devlogs will appear.

Replying to @wuff

0
24
Open comments for this post

20m 4s logged

Day 1 (Part 2)

Before going to sleep (it was already night in Poland), I improved the security a bit and added a system message in chat when someone joins.

I’ll try to dedicate a full day soon to security, so it’s not easy to create malicious clients.

See you tomorrow for real!!!

Day 1 (Part 2)

Before going to sleep (it was already night in Poland), I improved the security a bit and added a system message in chat when someone joins.

I’ll try to dedicate a full day soon to security, so it’s not easy to create malicious clients.

See you tomorrow for real!!!

Replying to @wuff

0
6
Open comments for this post

1h 30m 24s logged

Day 1

Today I rewrote the whole code to prepare it for a global chat system. I deployed everything on a VPS, so now by downloading client.py you can already chat with other people, but only through the terminal for now.

I also added client version checking, so if someone is using an outdated version, they won’t be able to connect to the server.

Usernames were also introduced, replacing IDs from the echo server, so now every user can set whatever nickname they want.

The main bug of the day was related to broadcasting messages to all users — sometimes messages were sent only to one person or not sent at all. I fixed it somehow… honestly not even sure how xd.

Tomorrow’s plan is to try implementing a graphical interface so it doesn’t rely on the terminal anymore.

At night (in Poland), I also updated part of the README file.

If you want to test the global chat yourself, you can download the client here:
https://github.com/wuffgame/Global-Chat/blob/main/global-chat/client.py

There are no bans for spam or offensive usernames yet, but I trust you won’t spam the server or use inappropriate nicknames.

See you tomorrow!!!

Day 1

Today I rewrote the whole code to prepare it for a global chat system. I deployed everything on a VPS, so now by downloading client.py you can already chat with other people, but only through the terminal for now.

I also added client version checking, so if someone is using an outdated version, they won’t be able to connect to the server.

Usernames were also introduced, replacing IDs from the echo server, so now every user can set whatever nickname they want.

The main bug of the day was related to broadcasting messages to all users — sometimes messages were sent only to one person or not sent at all. I fixed it somehow… honestly not even sure how xd.

Tomorrow’s plan is to try implementing a graphical interface so it doesn’t rely on the terminal anymore.

At night (in Poland), I also updated part of the README file.

If you want to test the global chat yourself, you can download the client here:
https://github.com/wuffgame/Global-Chat/blob/main/global-chat/client.py

There are no bans for spam or offensive usernames yet, but I trust you won’t spam the server or use inappropriate nicknames.

See you tomorrow!!!

Replying to @wuff

0
43
Open comments for this post

1h 6m 55s logged

Day 0 (Part 2)

Today I decided to finish the echo server so that it can support multiple clients (currently up to 5). Each client also gets its own ID to keep the server logs cleaner and easier to read.

I also added a Dockerfile and a docker-compose.yml, so the server can be launched on a VPS without any extra setup or hassle.

As always, a few issues appeared along the way. At first, I’m not even sure what I messed up, but when I deployed the server to my VPS, Docker didn’t expose the container ports correctly, so the client couldn’t connect. After some debugging, I managed to fix it.

Another challenge was handling a dynamic number of client IDs. However, since I’m planning to switch to nicknames instead of IDs later, I decided not to spend too much time on it for now.

Tomorrow’s plan is to finally start Day 1, refactor everything and prepare the project for turning it into a proper global chat system. I also want to start working on a terminal-based global chat version either tomorrow or the day after. I already know some things will be problematic there, but I’ll probably solve them in Day 3 or later when I start working on a full GUI.

For now, I also plan to write a README later today or tomorrow.

See you in the next devlog!!!

P.S. Devlogs might not appear daily until the summer holidays in Poland start.

Day 0 (Part 2)

Today I decided to finish the echo server so that it can support multiple clients (currently up to 5). Each client also gets its own ID to keep the server logs cleaner and easier to read.

I also added a Dockerfile and a docker-compose.yml, so the server can be launched on a VPS without any extra setup or hassle.

As always, a few issues appeared along the way. At first, I’m not even sure what I messed up, but when I deployed the server to my VPS, Docker didn’t expose the container ports correctly, so the client couldn’t connect. After some debugging, I managed to fix it.

Another challenge was handling a dynamic number of client IDs. However, since I’m planning to switch to nicknames instead of IDs later, I decided not to spend too much time on it for now.

Tomorrow’s plan is to finally start Day 1, refactor everything and prepare the project for turning it into a proper global chat system. I also want to start working on a terminal-based global chat version either tomorrow or the day after. I already know some things will be problematic there, but I’ll probably solve them in Day 3 or later when I start working on a full GUI.

For now, I also plan to write a README later today or tomorrow.

See you in the next devlog!!!

P.S. Devlogs might not appear daily until the summer holidays in Poland start.

Replying to @wuff

0
39
Open comments for this post

25m 15s logged

Day 0

Since yesterday, I decided to start working on a global chat application in Python. Everyone will be able to log in and chat, while I, as the amazing moderation team, will be able to ban people who break the rules.

Yesterday, I spent some time talking with AI and watching videos to understand how sockets and threading work in Python.

Today, since I got back late from a trip, I decided to practice what I learned yesterday instead of rushing into the full project. I built a local echo server that currently supports one client (but I’ll probably add multi-client support tomorrow).

I also added a primitive client verification system, so if a client is not compatible with the server, the connection gets rejected. Right now it works by sending a specific string.

The only issue I had was that after disconnecting the client, the server started infinitely sending “”. Luckily, I quickly realized I could stop it using if not.

See you tomorrow in the next devlog!

Day 0

Since yesterday, I decided to start working on a global chat application in Python. Everyone will be able to log in and chat, while I, as the amazing moderation team, will be able to ban people who break the rules.

Yesterday, I spent some time talking with AI and watching videos to understand how sockets and threading work in Python.

Today, since I got back late from a trip, I decided to practice what I learned yesterday instead of rushing into the full project. I built a local echo server that currently supports one client (but I’ll probably add multi-client support tomorrow).

I also added a primitive client verification system, so if a client is not compatible with the server, the connection gets rejected. Right now it works by sending a specific string.

The only issue I had was that after disconnecting the client, the server started infinitely sending “”. Luckily, I quickly realized I could stop it using if not.

See you tomorrow in the next devlog!

Replying to @wuff

0
5

Followers

Loading…