Hammer: The Last Dance
What started as a simple weather forecast over SSH became Hammer, a modern BBS inspired by the old days of dial-up, ANSI art, and terminal culture. Built in Go, it brings together forums, chat, games, and a little nostalgia. The technology has changed, but the feeling hasn't. The line is open.
I feel like the time to open-source Hammer is getting closer. It's grown up remarkably fast. The idea came from my love for the scene and my nostalgia for the old BBS days, though those were far from my only inspirations.
It all started when I stumbled across a project on GitHub. You'd run a simple curl command, and it would give you the weather forecast.
And I just decided to organize things a little.
I'd built something similar before: a complete SSH server for accessing my website, and, at another point, a rather unconventional protocol whose sole purpose was to access and interact with a website. But I'd never actually built a full BBS.
And at first, Hammer wasn't a BBS either. As I said, it was just... an SSH server with a weather forecast built in.
It was also my chance to finally build something fun in Go and get to know the Gliderlabs SSH library.
There was no login system. Requests weren't saved. Users had no identities. There was nothing but the weather.
Things changed dramatically almost immediately. Within a few days, I wanted more accurate city searches, saved locations, multiple languages, better visuals, and emojis.
I felt there was more I could get out of it. But I wanted something different.
One day, while browsing the Unraid apps, I came across something that caught my attention. It was called something like "FFmpeg over SSH." I knew right away I had to investigate. Naturally, it turned out to be more marketing than the strange, almost magical thing I'd imagined in my head.
But I thought, why not?
That became the shortest-lived feature Hammer ever had. It came and went. I considered all the risks, but it was fun while it lasted.
Another feature that came and went was OCR. You could send a PDF or image over SSH and get the extracted text back, with OCRmyPDF and Tesseract quietly doing their work behind the scenes. It worked. But it made the Docker image enormous, opened the door to abuse, and, let's face it, nobody visits a BBS to scan documents. By September, it was gone.
It did leave something behind, though.
To receive those files, I'd built a private file area for each SSH key, accessible through SFTP. And with that came something that's still one of my favorite parts of Hammer: a single port that responds in three different ways.
Connect with a terminal, and you get the menu. Send a command, like:
ssh -p 2323 hammer.pablomurad.com hash input=oi
And you get a JSON response, one line at a time, ready for a script, n8n, or an AI agent. Connect through SFTP, and you find your own private folder.
Hammer had become a toolbox.
Network diagnostics with DNS, TLS, and RDAP. QR codes, hashes, jq, encryption with age, CSV statistics, Base64, ID generation. Everything uses a predefined set of commands with validated arguments. No unrestricted shell access.
Slower tools could run in the background, and you could come back for the results later, even from a different connection.
And yet something was still missing.
People.
When It Became a BBS
On September 24, nicknames arrived, along with a one-liner wall, a who's-online list, and live chat.
Hammer got its own custom ANSI artwork, drawn specifically for the project, and two themes: classic '90s retro and retro-modern. It even got a modem effect. The welcome screen draws itself slowly at 9600 baud, just like it used to over a phone line.
Even the curl output changed. Ask for the weather from your terminal today, and you'll get a little forecast card that looks like it belongs on a BBS.
That was also the day I removed the last remnants of the original project. Footers, credits, pages, and scripts that still spoke in someone else's voice.
Hammer could finally stand on its own.
October brought games.
I found nesdoor, a BBS door by Alex Corris that runs NES games inside a terminal using Sixel, an image format that some terminals can display directly.
I integrated it as a separate program that Hammer launches for each player.
It was Hammer's first proper door, and it opened the way for everything that followed.
I Want It All
Then I came across ANetBBS and read through the list of things a proper BBS should have.
Multiple ways to connect. Forums. Chat that survives a reboot. Last callers. Doors with drop files. Inter-BBS chat. A node monitor.
I wanted all of it.
I split the work into two parts, and by October 8, the first was already live.
Chat messages were now stored in the database. A last-callers screen appeared. Hammer started announcing arrivals and departures, and forums arrived with areas, threads, and unread-message tracking.
Then came the most important change, one nobody actually sees: sessions were no longer tied to SSH.
That made room for Telnet, a browser-based terminal, CP437 support for SyncTERM and other scene clients, and a node monitor for moderators.
The second part was all about the scene:
-
Doors: Native Linux programs, DOS doors running inside DOSBox (completely headless, not even Xvfb), and remote door servers such as A-Net, DoorParty, and BBSLink. All with the classic drop files: DOOR32.SYS, DOOR.SYS, DORINFO1.DEF, and CHAIN.TXT.
-
MRC: The shared chat network used by BBSes around the world. Hammer is already connected.
-
Echomail: Networked forums, with fsxNet over binkp and DOVE-Net through QWK packets. The FidoNet packet handling, binkp with CRAM-MD5, and QWK support were all written from scratch, without ready-made libraries. Now we're just waiting for network approval.
-
More ways to connect: rlogin, a read-only anonymous FTP server with ANSI artwork and freely distributable games, and PETSCII ports for anyone who wants to connect from a Commodore 64 or 128. Yes, an actual C64.
-
Live page: Visit
/:liveto see who's online, updated in real time in your browser. -
Badges: Earned by visiting, posting, chatting, and playing.
-
ANSI postcards: Submit your artwork, have it approved by a moderator, and it'll appear on the BBS, the website, and the FTP server.
And all of this runs on a server I share with dozens of other projects.
From the very beginning, I had one rule: Hammer must never become a burden on the VPS.
Every feature starts disabled, with conservative limits. Network polling is deliberately gentle, and each service uses just one connection.
Sitting idle, with everything enabled, it uses around 15 MB of memory.
I think there's something beautiful about that.
How to Connect
SSH is still the main way in.
With your own key, you get a profile, a nickname, and saved cities. You can post, chat, and play:
ssh -p 2323 hammer.pablomurad.com
Don't have a key? Come in as a guest. You can read everything, but you can't post, and nothing gets saved:
ssh -p 2323 guest@hammer.pablomurad.com
For those in the BBS scene, there's Telnet, preferably through SyncTERM, which gets everything in CP437:
telnet hammer.pablomurad.com 2324
No need to install anything if you'd rather use your browser:
https://hammer.pablomurad.com/:terminal
And there are a few other ways in:
- rlogin: hammer.pablomurad.com, port 513
- Anonymous FTP: hammer.pablomurad.com, port 2121
- Commodore 64 and 128: Port 6400 (40 columns) or 6401 (80 columns), using SyncTERM in C64 mode
- Who's online right now: https://hammer.pablomurad.com/:live
And the weather forecast, the little seed that started all of this, is still there:
curl https://hammer.pablomurad.com/Curitiba
Telnet, rlogin, browser, and Commodore connections are always guest sessions. To post, chat, and play, you'll need an SSH key.
What's Next
Applications to join fsxNet, DOVE-Net, BBSLink, and DoorParty are on their way.
Once approved, Hammer's forums will be able to exchange messages with BBSes all over the world, and the games menu will gain LORD, TradeWars, and over a hundred other classics, running on remote servers that hold the proper licenses.
No piracy, and no extra load on my little server.
And the code will be open-sourced.
Hammer began with me looking at somebody else's code on GitHub. It only seems fair to bring things full circle.
The Last Dance
I don't know if BBSes will ever make a comeback. Probably not.
But Hammer showed me that you can build one in just over a month, with SSH instead of a modem and Go instead of Pascal, and still feel that same little thrill as the screen slowly starts drawing itself, one line at a time.
And well, that's it.
bye