diff --git a/cmd/app_test.go b/cmd/app_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..52eafa7780d8a5e3b28166ff72947d77fa1d30ff
--- /dev/null
+++ b/cmd/app_test.go
@@ -0,0 +1,26 @@
+package cmd
+
+import (
+	"bytes"
+	"github.com/urfave/cli/v2"
+	"io"
+	"log"
+	"os"
+	"testing"
+)
+
+// This only contains helpers so far
+
+func TestMain(m *testing.M) {
+	log.SetOutput(io.Discard)
+	os.Exit(m.Run())
+}
+
+func newTestApp() (*cli.App, *bytes.Buffer, *bytes.Buffer, *bytes.Buffer) {
+	var stdin, stdout, stderr bytes.Buffer
+	app := New()
+	app.Reader = &stdin
+	app.Writer = &stdout
+	app.ErrWriter = &stderr
+	return app, &stdin, &stdout, &stderr
+}
diff --git a/cmd/publish_test.go b/cmd/publish_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..315413b45775d2ab98f0cb91ee7b603af5d08d58
--- /dev/null
+++ b/cmd/publish_test.go
@@ -0,0 +1,18 @@
+package cmd
+
+import (
+	"github.com/stretchr/testify/require"
+	"heckel.io/ntfy/util"
+	"testing"
+)
+
+func TestCLI_Publish_Real_Server(t *testing.T) {
+	testMessage := util.RandomString(10)
+
+	app, _, _, _ := newTestApp()
+	require.Nil(t, app.Run([]string{"ntfy", "publish", "ntfytest", "ntfy unit test " + testMessage}))
+
+	app2, _, stdout, _ := newTestApp()
+	require.Nil(t, app2.Run([]string{"ntfy", "subscribe", "--poll", "ntfytest"}))
+	require.Contains(t, stdout.String(), testMessage)
+}
diff --git a/docs/install.md b/docs/install.md
index 379f8559c084dc0dbf9d8a16767e3365ab07734e..45a6c25bf5b637aa017c4e0bae5a8e261fa8073c 100644
--- a/docs/install.md
+++ b/docs/install.md
@@ -13,7 +13,8 @@ The ntfy server comes as a statically linked binary and is shipped as tarball, d
 We support amd64, armv7 and arm64.
 
 1. Install ntfy using one of the methods described below
-2. Then (optionally) edit `/etc/ntfy/server.yml` (see [configuration](config.md))
+2. Then (optionally) edit `/etc/ntfy/server.yml` for the server (see [configuration](config.md) or [sample server.yml](https://github.com/binwiederhier/ntfy/blob/main/server/server.yml))
+3. Or (optionally) create/edit `~/.config/ntfy/client.yml` (or `/etc/ntfy/client.yml`, see [sample client.yml](https://github.com/binwiederhier/ntfy/blob/main/client/client.yml))
 
 To run the ntfy server, then just run `ntfy serve` (or `systemctl start ntfy` when using the deb/rpm).
 To send messages, use `ntfy publish`. To subscribe to topics, use `ntfy subscribe` (see [subscribing via CLI][subscribe/cli.md]
diff --git a/main.go b/main.go
index f6cdbdce3a313ccf849520693bed67e0cde56a9e..eab90e3afd8455ffd48c8f8d731f86088ecb4f5d 100644
--- a/main.go
+++ b/main.go
@@ -16,7 +16,10 @@ var (
 
 func main() {
 	cli.AppHelpTemplate += fmt.Sprintf(`
-Try 'ntfy COMMAND --help' for more information.
+Try 'ntfy COMMAND --help' or https://ntfy.sh/docs/ for more information.
+
+To report a bug, open an issue on GitHub: https://github.com/binwiederhier/ntfy/issues.
+If you want to chat, simply join the Discord server: https://discord.gg/cT7ECsZj9w.
 
 ntfy %s (%s), runtime %s, built at %s
 Copyright (C) 2021 Philipp C. Heckel, licensed under Apache License 2.0 & GPLv2