diff --git a/INSTALL.md b/INSTALL.md deleted file mode 100644 index b6aca80..0000000 --- a/INSTALL.md +++ /dev/null @@ -1,41 +0,0 @@ -# Install and run - -- Run `./listmonk --new-config` to generate a sample `config.toml` and add your configuration (SMTP and Postgres DB credentials primarily). -- `./listmonk --install` to setup the DB. -- Run `./listmonk` and visit `http://localhost:9000`. - -## Running on Docker - -You can checkout the [docker-compose.yml](docker-compose.yml) to get an idea of how to run `listmonk` with `PostgreSQL` together using Docker. - -- **Run the services**: `docker-compose up -d app db` to run all the services together. If this is a first time setup, you will see some errors related to DB which occur because migrations haven't been applied yet. Don't worry, follow the next step. -- **Apply DB migrations**: `docker-compose run --rm app ./listmonk --install`. -- Ensure that both the containers are in running state before proceeding. If the app container is not `up`, you might need to restart the app container once: `docker-compose restart app`. -- Visit `http://localhost:9000`. - -### Mounting a custom config file - -You are expected to tweak [config.toml.sample](config.toml.sample) for actual use with your custom settings. To mount the `config.toml` file, -you can add the following section to `docker-compose.yml`: - -``` - app: - <<: *app-defaults - depends_on: - - db - volume: - - ./path/on/host/config.toml/:/listmonk/config.toml -``` - -This will `mount` your local `config.toml` inside the container at `listmonk/config.toml`. - -_NOTE_: This `docker-compose` file works with Docker Engine 18.06.0+ and `docker-compose` which supports file format 3.7. - -### Demo Setup - -`docker-compose.yml` includes a demo setup to quickly try out `listmonk`. It spins up PostgreSQL and listmonk app containers without any persistent data. - -- Run `docker-compose up -d demo-db demo-app`. -- Visit `http://localhost:9000`. - -_NOTE_: This setup will delete the data once you kill and remove the containers. This setup is NOT intended for production use. diff --git a/README.md b/README.md index db55e59..67c1150 100644 --- a/README.md +++ b/README.md @@ -1,81 +1,54 @@ -![listmonk](https://user-images.githubusercontent.com/547147/60170989-41681f00-9827-11e9-93a8-a871a40be913.png) - -> listmonk is **alpha** software and may change and break. Use with caution. That said, it has been in active use at [zerodha.com](https://zerodha.com) for several months where it has processed hundreds of campaigns and tens of millions of e-mails. +![listmonk](https://user-images.githubusercontent.com/547147/89733021-43fbf700-da70-11ea-82e4-e98cb5010257.png) 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 database as its data store. -[![listmonk-splash](https://user-images.githubusercontent.com/547147/60884802-8189c180-a26b-11e9-85ee-622e5dee8869.png)](https://listmonk.app) +[![listmonk-dashboard](https://user-images.githubusercontent.com/547147/89733057-87566580-da70-11ea-8160-855f6f046a55.png)](https://listmonk.app) +Visit [listmonk.app](https://listmonk.app) -### Installation and use +> listmonk is **alpha** software and may change and break. Use with caution. That said, it has been in active use at [zerodha.com](https://zerodha.com) where it has processed hundreds of campaigns and tens of millions of e-mails. -- Download the [latest release](https://github.com/knadh/listmonk/releases) for your platform and extract the listmonk binary. For example: `tar -C $HOME/listmonk -xzf listmonk_$VERSION_$OS_$ARCH.tar.gz` -- Navigate to the directory containing the binary (`cd $HOME/listmonk`) and run `./listmonk --new-config` to generate a sample `config.toml` and add the DB configuration. -- `./listmonk --install` to setup the DB. +## Installation + +### Docker + +The latest image is available on DockerHub at `listmonk/listmonk:latest`. Use the sample [docker-compose.yml](https://github.com/knadh/listmonk/blob/master/docker-compose.yml) to run listmonk and Postgres DB with docker-compose as follows: + +#### Demo +`docker-compose up -d demo-db demo-app` + +The demo does not persist Postgres after the containers are removed. DO NOT use this demo setup in production. + +#### Production +- `docker-compose up db` to run the Postgres DB. +- `docker-compose run --rm app ./listmonk --install` to setup the DB (or `--upgrade` to upgrade an existing DB) +- Run `docker-compose up app` and visit `http://localhost:9000`. + +More information on [docs](https://listmonk.app/docs). + +__________________ + +### Binary +- Download the [latest release](https://github.com/knadh/listmonk/releases) 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`. -- Visit the `Settings` page to configure your instance. -- Since there is no user auth yet, it's best to put listmonk behind a proxy like Nginx and setup basicauth on all endpoints except for the few endpoints that need to be public. Here is a [sample nginx config](https://github.com/knadh/listmonk/wiki/Production-Nginx-config) for production use. -### Configuration and customization -See the [configuration Wiki page](https://github.com/knadh/listmonk/wiki/Configuration). +__________________ -### Running on Docker - -You can pull the official Docker Image from [Docker Hub](https://hub.docker.com/r/listmonk/listmonk). - -You can checkout the [docker-compose.yml](docker-compose.yml) to get an idea of how to run `listmonk` with `PostgreSQL` together using Docker (also see [configuring with environment variables](https://github.com/knadh/listmonk/wiki/Configuration)). Please visit [INSTALL.md](INSTALL.md) for detailed instructions on how to setup Listmonk with Docker. - -**Alternatively**, to run a demo of listmonk, you can quickly spin up a local setup with: - -`docker-compose up -d demo-db demo-app`. - -**NOTE:** This doesn't persist Postgres data after you stop and remove the container, this setup is intended only for demo. _DO NOT_ use the demo setup in production. - -### Other deployments - -#### Heroku +### Heroku Using the [Nginx buildpack](https://github.com/heroku/heroku-buildpack-nginx) can be used to deploy listmonk on Heroku and use Nginx as a proxy to setup basicauth. This one-click [Heroku deploy button](https://github.com/bumi/listmonk-heroku) provides an automated default deployment. [![Deploy](https://www.herokucdn.com/deploy/button.svg)](https://heroku.com/deploy?template=https://github.com/bumi/listmonk-heroku) -Please note that [configuration options](https://github.com/knadh/listmonk/wiki/Configuration) must be set using [environment configruation variables](https://devcenter.heroku.com/articles/config-vars). +Please note that [configuration options](https://listmonk.app/docs/configuration) must be set using [environment configruation variables](https://devcenter.heroku.com/articles/config-vars). -### Help and docs -[Help and documentation](https://listmonk.app/docs) (work in progress). - -### Current features - -- Admin dashboard -- Public, private, single and double optin lists (with optin campaigns) -- Fast bulk subscriber import -- Custom subscriber attributes -- Subscriber querying and segmentation with ad-hoc SQL expressions -- Subscriber data wipe / export privacy features -- Rich programmable Go HTML templates and WYSIWYG editor -- Media gallery (disk and S3 storage) -- Multi-threaded multi-SMTP e-mail queues for fast campaign delivery -- HTTP/JSON APIs for everything -- Clicks and view tracking -- and more ... - -### Todo - -- DB migrations -- Bounce tracking -- User auth, management, permissions -- Ability to write raw campaign logs to a target -- Analytics views and reports -- Better widgets on dashboard -- Tests! ## Developers +listmonk is a free and open source software licensed under AGPLv3. If you are interested in contributing, refer to the [developer setup](https://listmonk.app/docs/developer-setup). The backend is written in Go and the frontend is Vue with Buefy for UI. -listmonk is free, open source software licensed under AGPLv3. There are several essential features such as user auth/management and bounce tracking that are currently missing. Contributions are welcome. - -The backend is written in Go and the frontend is in React with Ant Design for UI. See [developer setup](https://github.com/knadh/listmonk/wiki/Developer-setup) to get started. ## License - listmonk is licensed under the AGPL v3 license. diff --git a/frontend/public/favicon.png b/frontend/public/favicon.png index be167d9..8010001 100644 Binary files a/frontend/public/favicon.png and b/frontend/public/favicon.png differ diff --git a/frontend/src/assets/favicon.png b/frontend/src/assets/favicon.png index be167d9..8010001 100644 Binary files a/frontend/src/assets/favicon.png and b/frontend/src/assets/favicon.png differ diff --git a/frontend/src/assets/logo.png b/frontend/src/assets/logo.png new file mode 100644 index 0000000..a90d9ff Binary files /dev/null and b/frontend/src/assets/logo.png differ diff --git a/frontend/src/assets/logo.svg b/frontend/src/assets/logo.svg index 0a36806..4038002 100644 --- a/frontend/src/assets/logo.svg +++ b/frontend/src/assets/logo.svg @@ -1,23 +1,49 @@ - - + sodipodi:docname="logo.svg" + inkscape:version="1.0 (9f2f71dc58, 2020-08-02)"> + id="defs2"> + + + + + + + + fit-margin-bottom="0" + inkscape:document-rotation="0" /> @@ -56,79 +83,49 @@ inkscape:label="Layer 1" inkscape:groupmode="layer" id="layer1" - transform="translate(-12.438455,-21.535559)"> - - - - - - - - - - - + transform="translate(-18.151723,-27.116654)"> - + style="fill:none;fill-opacity:1;stroke:url(#radialGradient966);stroke-width:1.74;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="circle1737" + cx="22.170593" + cy="31.135525" + r="3.1489604" /> + + + + + + + + + + diff --git a/frontend/src/assets/style.scss b/frontend/src/assets/style.scss index b9da536..1750c9e 100644 --- a/frontend/src/assets/style.scss +++ b/frontend/src/assets/style.scss @@ -117,11 +117,12 @@ section { display: none; } .full { - max-height: 20px; - margin-top: 12px; + max-height: 17px; + margin-top: 15px; } .favicon { - margin-top: 8px; + margin-top: 12px; + max-height: 24px; } } @@ -394,6 +395,10 @@ section.dashboard { .charts { min-height: 200px; } + + .notification { + border-width: 0; + } } /* Lists page */ @@ -740,4 +745,7 @@ section.campaign { section.dashboard label { min-width: auto; } + .table-mobile-sort { + margin-top: 15px; + } } diff --git a/frontend/src/views/Dashboard.vue b/frontend/src/views/Dashboard.vue index d382f76..391ca44 100644 --- a/frontend/src/views/Dashboard.vue +++ b/frontend/src/views/Dashboard.vue @@ -92,12 +92,12 @@
-

Campaign views

+

Campaign views


-

Link clicks

+

Link clicks


diff --git a/static/public/static/favicon.png b/static/public/static/favicon.png new file mode 100644 index 0000000..8010001 Binary files /dev/null and b/static/public/static/favicon.png differ diff --git a/static/public/static/logo.png b/static/public/static/logo.png index fd22a67..a90d9ff 100644 Binary files a/static/public/static/logo.png and b/static/public/static/logo.png differ diff --git a/static/public/static/logo.svg b/static/public/static/logo.svg index 62942df..e0be10f 100644 --- a/static/public/static/logo.svg +++ b/static/public/static/logo.svg @@ -1,23 +1,49 @@ - - + inkscape:version="1.0 (9f2f71dc58, 2020-08-02)"> + id="defs2"> + + + + + + + + fit-margin-bottom="0" + inkscape:document-rotation="0" /> @@ -48,7 +75,7 @@ image/svg+xml - + @@ -56,79 +83,53 @@ inkscape:label="Layer 1" inkscape:groupmode="layer" id="layer1" - transform="translate(-12.438455,-21.535559)"> - - - - - - - - - - - + transform="translate(-18.151723,-27.116654)"> - + style="fill:none;fill-opacity:1;stroke:url(#radialGradient966);stroke-width:1.74;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="circle1737" + cx="22.170593" + cy="31.135525" + r="3.1489604" + inkscape:export-xdpi="72.680481" + inkscape:export-ydpi="72.680481" /> + + + + + + + + + +