{"id":48726814,"url":"https://github.com/mpiorowski/late-sh","last_synced_at":"2026-04-25T21:02:06.061Z","repository":{"id":350748716,"uuid":"1208118914","full_name":"mpiorowski/late-sh","owner":"mpiorowski","description":"A cozy terminal clubhouse for developers. Lofi beats, casual games, chat, and tech news, all via SSH.","archived":false,"fork":false,"pushed_at":"2026-04-22T04:59:15.000Z","size":38225,"stargazers_count":333,"open_issues_count":14,"forks_count":22,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-22T06:40:16.473Z","etag":null,"topics":["cli","irc","ssh","terminal","tui"],"latest_commit_sha":null,"homepage":"https://late.sh","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mpiorowski.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-11T21:01:43.000Z","updated_at":"2026-04-22T06:05:36.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/mpiorowski/late-sh","commit_stats":null,"previous_names":["mpiorowski/late-sh"],"tags_count":44,"template":false,"template_full_name":null,"purl":"pkg:github/mpiorowski/late-sh","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mpiorowski%2Flate-sh","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mpiorowski%2Flate-sh/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mpiorowski%2Flate-sh/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mpiorowski%2Flate-sh/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mpiorowski","download_url":"https://codeload.github.com/mpiorowski/late-sh/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mpiorowski%2Flate-sh/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32276628,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-25T18:29:39.964Z","status":"ssl_error","status_checked_at":"2026-04-25T18:29:32.149Z","response_time":59,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cli","irc","ssh","terminal","tui"],"created_at":"2026-04-11T23:03:16.039Z","updated_at":"2026-04-25T21:02:06.055Z","avatar_url":"https://github.com/mpiorowski.png","language":"Rust","readme":"# late.sh\n\n\u003e A cozy terminal clubhouse for developers. Lofi beats, casual games, chat, and tech news, all via SSH.\n\n```bash\nssh late.sh\n```\n\n`late.sh` is a terminal-first social app: real-time chat, music, games, news, profiles, and a shared always-on space you can enter from any SSH client.\n\n## Status\n\nThis repository is the main codebase for `late.sh`.\n\n- The project is open for source reading, local development, audits, and contributions.\n- The public hosted `late.sh` service remains the canonical deployment.\n- The code is source-available, not OSI open source, during the FSL protection period.\n\nRead the details in [LICENSE](LICENSE), the plain-English policy in [LICENSING.md](LICENSING.md), and contribution rules in [CONTRIBUTING.md](CONTRIBUTING.md).\n\n## What It Includes\n\n- SSH TUI with dashboard, chat, profile, news, and arcade screens\n- Real-time global chat and shared activity feed\n- Audio streaming via Icecast/Liquidsoap with browser and CLI pairing\n- Terminal games including 2048, Sudoku, Nonograms, Minesweeper, and Solitaire\n- Web frontend for landing, connect flow, and paired-client experiences\n- Companion CLI for local audio playback and synced visualizer data\n\n## Workspace\n\nThis is a Rust workspace with four crates:\n\n| Crate | Role |\n|-------|------|\n| `late-cli` | Companion CLI for local audio playback, paired controls, and visualizer sync |\n| `late-core` | Shared domain code, database layer, migrations, and infrastructure helpers |\n| `late-ssh` | SSH server and terminal UI application |\n| `late-web` | Web server, landing page, connect flow, and browser pairing |\n\nThe stack is backed by PostgreSQL, Icecast, and Liquidsoap.\n\n## Quick Start\n\nTry the live service:\n\n```bash\nssh late.sh\n```\n\nRun it yourself (requires Docker):\n\n```bash\ngit clone https://github.com/mpiorowski/late-sh\ncd late-sh\nmake start\n```\n\nThen connect to your local instance:\n\n```bash\nssh localhost -p 2222\n```\n\nThat's it. Postgres, Icecast, and Liquidsoap all come up automatically.\n\n## Companion CLI\n\nInstall the companion CLI for local audio playback and synced visualizer:\n\nmacOS / Linux:\n\n```bash\ncurl -fsSL https://cli.late.sh/install.sh | bash\n```\n\nWindows PowerShell (x64):\n\n```powershell\nirm https://cli.late.sh/install.ps1 | iex\n```\n\nOr build it from source:\n\n```bash\nmise install        # optional — sets up the expected Rust toolchain\ncargo build --release --bin late\n```\n\n## Local Development\n\nFor development without Docker wrapping the Rust builds, you can run the\ninfrastructure in Docker and the apps natively:\n\n```bash\ndocker compose up -d postgres icecast liquidsoap\ncargo run -p late-ssh\ncargo run -p late-web\n```\n\nLocal host development can use Cargo's normal defaults, including the standard\nrepo-local `target/` directory. The `/app/target` path is only for Docker/dev\ncontainers.\n\n```bash\nexport CARGO_HOME=$HOME/.cargo\n```\n\nUse `mise install` to get the expected Rust toolchain, `mold` linker, and\n`cargo-nextest`.\n\n## Verification\n\nRun before opening a PR:\n\n```bash\nmake check\n```\n\nThis runs `cargo fmt --check`, `cargo clippy`, and `cargo nextest`.\nSome integration tests require Docker via testcontainers.\n\n## Contributing\n\nContributions are welcome, but read the project policy first:\n\n- [CONTRIBUTING.md](CONTRIBUTING.md)\n- [LICENSING.md](LICENSING.md)\n- [LICENSE](LICENSE)\n\nThis repository uses DCO sign-off for commits:\n\n```bash\ngit commit -s\n```\n\nIf you distribute a fork, do not present it as the official `late.sh` service or use the project branding as your own.\n\n## More Context\n\n- [CONTEXT.md](CONTEXT.md) — architecture, invariants, and working context. Written for LLMs — feed this to your AI editor for best results.\n- [CONTRIBUTING.md](CONTRIBUTING.md) — workflow, test rules, module patterns, and AI-assisted development tips.\n- [THEME.md](THEME.md) — how to contribute a new built-in SSH theme via PR.\n- [late-cli/README.md](late-cli/README.md) — CLI-specific usage and behavior.\n","funding_links":[],"categories":["Rust"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmpiorowski%2Flate-sh","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmpiorowski%2Flate-sh","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmpiorowski%2Flate-sh/lists"}