irc webclient
  • TypeScript 43.4%
  • Elixir 32.5%
  • CSS 12.5%
  • Go 6.9%
  • Shell 3.2%
  • Other 1.5%
Go to file
2026-05-13 01:45:07 -07:00
app chore: publish-ready tree with placeholders and no credential artifacts 2026-05-13 01:44:50 -07:00
gateway chore: publish-ready tree with placeholders and no credential artifacts 2026-05-13 01:44:50 -07:00
infra chore: publish-ready tree with placeholders and no credential artifacts 2026-05-13 01:44:50 -07:00
scripts chore: publish-ready tree with placeholders and no credential artifacts 2026-05-13 01:44:50 -07:00
ui chore: publish-ready tree with placeholders and no credential artifacts 2026-05-13 01:44:50 -07:00
.env.deploy.example chore: publish-ready tree with placeholders and no credential artifacts 2026-05-13 01:44:50 -07:00
.gitignore chore: publish-ready tree with placeholders and no credential artifacts 2026-05-13 01:44:50 -07:00
build-ui.sh chore: publish-ready tree with placeholders and no credential artifacts 2026-05-13 01:44:50 -07:00
CHANGELOG.md chore: publish-ready tree with placeholders and no credential artifacts 2026-05-13 01:44:50 -07:00
deploy-new-features.sh chore: publish-ready tree with placeholders and no credential artifacts 2026-05-13 01:44:50 -07:00
PUBLISHING.md docs: keep publishing note free of local machine paths 2026-05-13 01:45:07 -07:00
README.md chore: publish-ready tree with placeholders and no credential artifacts 2026-05-13 01:44:50 -07:00

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.deploy for deploy-new-features.sh
  • cp app/.env.example app/.env for local Phoenix (never commit real .env files)

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)

  1. Fill infra/nullroute-app.service and infra/nullroute-gateway.service with your DATABASE_URL, PHX_HOST, IRC_HOST, and paths under VPS_APP_DIR (see units: WorkingDirectory must match where you install the repo).
  2. Copy infra/apache/*.conf or infra/apache-nullroute-irc-le-ssl.conf into Apache sites-available, set ServerName and Let Encrypt paths to your hostnames.
  3. Install PostgreSQL, Redis, Apache (proxy + WebSocket + TLS), Go, Elixir, Node on the server.
  4. 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