irc webclient
- TypeScript 43.4%
- Elixir 32.5%
- CSS 12.5%
- Go 6.9%
- Shell 3.2%
- Other 1.5%
| app | ||
| gateway | ||
| infra | ||
| scripts | ||
| ui | ||
| .env.deploy.example | ||
| .gitignore | ||
| build-ui.sh | ||
| CHANGELOG.md | ||
| deploy-new-features.sh | ||
| PUBLISHING.md | ||
| README.md | ||
NullRoute IRC
Web IRC client: Phoenix (Elixir) API and WebSockets, React UI, Go gateway to IRC. You host it; you point it at your own IRC network.
Architecture
- Phoenix: HTTP API, WebSocket channels, accounts, persistence.
- React: Browser UI (Vite in development).
- Go gateway: One IRC connection per logged-in user, Redis pub/sub to Phoenix.
- Redis: Pub/sub between Phoenix and the gateway.
Configuration placeholders
Defaults in the repo use generic hostnames such as irc.example.com and install paths such as /var/www/your-app. Replace them with your domain, TLS paths, and PostgreSQL URL before production deploy.
Copy examples, then edit:
cp .env.deploy.example .env.deployfordeploy-new-features.shcp app/.env.example app/.envfor local Phoenix (never commit real.envfiles)
Quick start (development)
# Prerequisites: Elixir, Node.js, Go, PostgreSQL, Redis
cd app && mix deps.get && mix ecto.setup && mix phx.server
Separate terminals:
cd ui && npm install && npm run dev
cd gateway && go build -o gateway ./cmd/gateway && ./gateway
Open http://localhost:5173 (Vite proxies /socket and /api to Phoenix).
Deployment (outline)
- Fill
infra/nullroute-app.serviceandinfra/nullroute-gateway.servicewith yourDATABASE_URL,PHX_HOST,IRC_HOST, and paths underVPS_APP_DIR(see units:WorkingDirectorymust match where you install the repo). - Copy
infra/apache/*.conforinfra/apache-nullroute-irc-le-ssl.confinto Apachesites-available, setServerNameand Let Encrypt paths to your hostnames. - Install PostgreSQL, Redis, Apache (proxy + WebSocket + TLS), Go, Elixir, Node on the server.
- From a machine that can SSH to the server:
cp .env.deploy.example .env.deploy, edit it, then run./deploy-new-features.sh.
See comments inside deploy-new-features.sh for remote steps (extract tarball, migrate, optional UI build on server).
Environment variables (reference)
| Variable | Purpose |
|---|---|
IRC_HOST |
IRC server hostname (example: irc.libera.chat) |
IRC_PORT |
IRC port (often 6697 for TLS) |
IRC_TLS |
true or false |
IRC_INSECURE_SKIP_VERIFY |
true only if you accept hostname mismatch on the IRC TLS cert |
DATABASE_URL |
PostgreSQL URL for Phoenix |
SECRET_KEY_BASE |
Phoenix secret (mix phx.gen.secret) |
PHX_HOST |
Public browser hostname of this web app |
APP_COOKIE_DOMAIN |
Leading-dot cookie domain for your site (production) |
License
MIT