High performance, self-hosted, newsletter and mailing list manager with a modern dashboard. Single binary app.
Find a file
Kailash Nadh 2614b072f2 Refactor campaign analytics to show unique / non-unique data.
The analytics page showed non-unique counts for views and clicks which
was misleading and source of confusion: #522, #561, #571, #676, #680
This commit changes this behaviour to pull unique views and clicks when
individual subscriber tracking is turned on in settings, and non-unique
counts when it is turned off (as `subscriber_id` in `campaign_views`
and `link_clicks` will be NULL, rendering unique queries dysfunctional).

This commit changes the stats SQL queries to use string interpolation
to either to SELECT `*` or `DISTINCT subscriber_id` on app boot based
on the setting in the DB. This involves significant changes to how
queries are read and prepared on init.

- Refactor `initQueries()` to `readQueries()` and `prepareQueries()`.
- Read queries first before preparing.
- Load settings from the DB using the read settings query.
- Prepare queries next. Use the privacy setting from the DB to apply
  string interpolation to the analytics queries to pull
  unique/non-unique before preparing the queries.

On the UI:
- Show a note on the analytics page about unique/non-unique counts.
- Hide the % donut charts on the analytics page in non-unique mode.

Closes #676, closes #680
2022-02-01 23:40:03 +05:30
.github Remove redundant GitHub issue template. 2021-10-10 17:46:05 +05:30
cmd Refactor campaign analytics to show unique / non-unique data. 2022-02-01 23:40:03 +05:30
dev Provide a default configuration file for containerized development 2022-01-19 09:30:23 -05:00
frontend Refactor campaign analytics to show unique / non-unique data. 2022-02-01 23:40:03 +05:30
i18n Refactor campaign analytics to show unique / non-unique data. 2022-02-01 23:40:03 +05:30
internal Add support for custom public S3 URLs. Closes #505. 2022-01-15 21:20:32 +05:30
models Fix TrackLink template code to accept Go template variables. Closes #667. 2022-01-30 22:41:45 +05:30
scripts Add script to merge and normalize i18n files 2021-04-14 13:52:13 +05:30
static Add 'View in browser' link to the default email template. Closes #540. 2022-01-15 17:25:45 +05:30
.dockerignore feat: Add blobstore package 2019-10-31 11:25:31 +05:30
.gitattributes Added end of line config for git 2022-01-26 09:50:06 +01:00
.gitignore feat: Add separate config for demo setup, tweak docs 2020-07-08 22:38:31 +05:30
.goreleaser.yml fix: remove deprecated syntax in goreleaser 2021-03-19 12:21:35 +05:30
config-demo.toml Don't indent TOML keys deeper than their sections 2021-05-06 18:28:04 +03:00
config.toml.sample Document tidbits about listening addresses for non-sysadmin types 2021-05-07 14:44:17 +03:00
CONTRIBUTING.md Fix typo 2021-10-30 16:50:41 +05:30
docker-compose.yml feat: Add timezone config in app container 2021-12-29 11:42:04 +05:30
Dockerfile feat: Add timezone config in app container 2021-12-29 11:42:04 +05:30
go.mod Fix media upload S3 IAM init blocking outside non-AWS environments. 2022-01-15 20:45:17 +05:30
go.sum Fix media upload S3 IAM init blocking outside non-AWS environments. 2022-01-15 20:45:17 +05:30
install-demo.sh Fix whitespace inconsistency in install scripts 2021-08-28 19:13:51 +05:30
install-prod.sh fix(install-prod.sh): Make tr work with macOS 2021-12-15 14:44:00 +05:30
LICENSE Refactor and add new build routines 2019-07-09 15:57:04 +05:30
listmonk@.service add systemd service unit 2021-07-07 14:15:16 +02:00
Makefile Use --idempotent and --yes flags when bootstrapping the dev db 2022-01-19 09:29:47 -05:00
queries.sql Refactor campaign analytics to show unique / non-unique data. 2022-02-01 23:40:03 +05:30
README.md Change Heroku button repo. 2022-01-21 09:25:23 +05:30
schema.sql Add support for custom public S3 URLs. Closes #505. 2022-01-15 21:20:32 +05:30
stats.sql Add support for campaign view tracking with {{ TrackView }} pixel tag 2018-11-02 13:20:32 +05:30
TODO.md Remove completed items 2020-05-25 11:55:02 +05:30
VERSION Add a VERSION file for git-archive export 2021-08-14 13:41:19 +05:30

listmonk-logo

listmonk is a standalone, self-hosted, newsletter and mailing list manager. It is fast, feature-rich, and packed into a single binary. It uses a PostgreSQL (⩾ v9.4) database as its data store.

listmonk-dashboard

Visit listmonk.app for more info. Check out the live demo.

Installation

Docker

The latest image is available on DockerHub at listmonk/listmonk:latest. Use the sample docker-compose.yml to run manually or use the helper script.

Demo

mkdir listmonk-demo && cd listmonk-demo
sh -c "$(curl -fsSL https://raw.githubusercontent.com/knadh/listmonk/master/install-demo.sh)"

DO NOT use this demo setup in production.

Production

mkdir listmonk && cd listmonk
sh -c "$(curl -fsSL https://raw.githubusercontent.com/knadh/listmonk/master/install-prod.sh)"

Visit http://localhost:9000.

NOTE: Always examine the contents of shell scripts before executing them.

See installation docs.


Binary

  • Download the latest release and extract the listmonk binary.
  • ./listmonk --new-config to generate config.toml. Then, edit the file.
  • ./listmonk --install to setup the Postgres DB (or --upgrade to upgrade an existing DB. Upgrades are idempotent and running them multiple times have no side effects).
  • Run ./listmonk and visit http://localhost:9000.

See installation docs.


Heroku

Deploy

Developers

listmonk is a free and open source software licensed under AGPLv3. If you are interested in contributing, refer to the developer setup. The backend is written in Go and the frontend is Vue with Buefy for UI.

License

listmonk is licensed under the AGPL v3 license.