[Media] ssh late.sh - Clubhouse for Devs. Take a break, chat, chill, listen to music and play some games! :) My first serious, source-available, rust project!
![[Media] ssh late.sh - Clubhouse for Devs. Take a break, chat, chill, listen to music and play some games! :) My first serious, source-available, rust project!](https://i.redd.it/edp98p2ylcvg1.png)
I would like to share with you a project that I've been cooking for some time, a cosy place for devs to hang out :)
https://github.com/mpiorowski/late-sh
Stack: Rust workspace with 4 crates, russh for the SSH server, ratatui for the TUI, axum for the HTTP/WS side, Postgres, testcontainers for integration tests.
License is FSL-1.1-MIT (source-available now, flips to MIT after 2 years), wanted to be upfront about that since it's not classic OSS.
ssh late.sh
That's all, no passwords. no OAuth, no accounts, your ssh key is your identity.
Connect, chat, listen to some vibes and play some GAMES! Right now supporting: 2048, tetris, sudoku, nonograms, minesweeper, solitaire. Leaderboards, badges, streaks, everything with sweet ASCII ;) Multiplayer games coming after! Poker, chess, so much cool stuff :)
Imagine sitting at the blackjack table for a few minutes between your coding sessions, lofi music in the background, chat with people all around the globe, and just throw some chips....
A few things I learned building this in Rust:
- russh render loop backpressure is real, handle.data needs a short timeout (50ms) or a slow client will block your whole render task. Took me a while to figure out why some sessions felt laggy for everyone.
- since the ssh don't allow streaming music, I had to come up with a solution. Paired-client WS state sync (browser/CLI controlling audio from the TUI), a token-keyed registry with mpsc channels into the app, and the TUI sends control events back over the same WS. Keeping the two sides from drifting was harder than I expected.
- ratatui + a 15fps render loop is shockingly comfortable to work with once you stop fighting it. AND I WANTED A VISUALIZER :D
How to listen to music?
Trickier than you would have expected ;p, As I've mentioned, ssh doesn't allow streaming music, so here are your options:
- CLI: recommended, a small companion CLI that connects to the music stream and the app in one go, with a working audio visualizer. Just run:curl -fsSL https://cli.late.sh/install.sh | bash
- WEB: secondary option, a link to open in your browser that will play the music.
(did I mention you can control the music from within the app)
What's more?
- voting system for the next coding music session, everyone decide what will be played in the next 1h (lofi, ambient, classic, jazz)
- fully working chat, create new rooms, dm people. A lot of QOL, multi-line input, up/down navigation, replies, mentions, all the goodies
- news sections! share a link, youtube, twitter, whatever you want app will process it and share with everyone
- BONSAI tree! A cozy ASCII plant on your dashboard that grows while you're connected. If you lose your daily streak, it withers! Water it and watch it grow! Cut to change shape :)
- an actual audio visualizer right in the terminal that syncs up with the beats!
A landing page: https://late.sh
Code (source-available, FSL-1.1-MIT): https://github.com/mpiorowski/late-sh
Looking for contributors! Jump, chill and take a break. Have a good day everyone :)