From 8c564070314252634aa93ef3e9f7da67398aaa95 Mon Sep 17 00:00:00 2001 From: Kailash Nadh Date: Sun, 9 Aug 2020 19:15:44 +0530 Subject: [PATCH] Add rebranded design elements. - New logo and favicon and new splash image + intro text in the README. --- INSTALL.md | 41 ------- README.md | 91 ++++++---------- frontend/public/favicon.png | Bin 1261 -> 3705 bytes frontend/src/assets/favicon.png | Bin 1261 -> 3705 bytes frontend/src/assets/logo.png | Bin 0 -> 2520 bytes frontend/src/assets/logo.svg | 169 ++++++++++++++--------------- frontend/src/assets/style.scss | 14 ++- frontend/src/views/Dashboard.vue | 4 +- static/public/static/favicon.png | Bin 0 -> 3705 bytes static/public/static/logo.png | Bin 2279 -> 2520 bytes static/public/static/logo.svg | 179 ++++++++++++++++--------------- 11 files changed, 218 insertions(+), 280 deletions(-) delete mode 100644 INSTALL.md create mode 100644 frontend/src/assets/logo.png create mode 100644 static/public/static/favicon.png 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 be167d9bbad75457cf7eae463f44417175dec77c..8010001052ac0803b3ed4eb1e34a6b3286942fd9 100644 GIT binary patch delta 3703 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 V^HfC7r_ulb002ovPDHLkV1kUk2{-@% delta 1240 zcmV;}1Sk9X9PJ54iBL{Q4GJ0x0000DNk~Le0000W0000W2nGNE0CReJ^Z)<=1am@3 zR0s$N2z&@+hyVZp32;bRa{vGi!~g&e!~vBn4jYj+Cw~NLNklCu z3lk9=R{c1_laj|ktPmqEc@tX^zPl=N0Hp|vMmlyU8!1LO5HBVP^kT49^5_j8 zh`IvWOfJHw*N7Y-6N~-2A4ft0u-FC6x<=%Ftbb=Y&xSiAW~jgL0LtN5RfaAvqpf)p zJs0vB9$bQJat^aI`pH<(P4;c|tXOlHwDi$f>0OMlQZ_IVPe3h7ak#&)>vq21Uq$=b zhhr57AT@2Af{pKT?_<@Z&l-vhP@a&rd>vJQwljl&7{GSdRfQkFd7Wbi%TOzH$28gu zrhhOyqo1cVyL zbt0tH*zh81s*loox+Gk{eRd;MfR{|WdF-ol&Ngfb1{+=shX+-`zwEWjV0CDd95;f!j3` z5ewf2fybRr?fYK@1On-tVt#Z1;`@N83P%rAfy&g(E%gQqObb;55mCQAG?2xa`safI z2A)^~`T)8*?xCxFUBGQwMzpi$66h2-3tWm6fr#Mt+oz7ajQS=tMgb$y1wacxTYvK= zTcwDv+0P0kA}lnWl4UyOjxwh#_9$7ZyaM#wM5OwEk6g*5=R!WfZz2R%CuBqAPCB%S zi=F2Smj|5zkrN7A%bo0n;PU#h^LOb4-Zoe0hnmK2V6!hB)v4RsdA^XFvQO9B^P)Y) z`v&{7L++Hom>Aq&?vziWk=tQ*$bWE|Q?>w=0BU{Vp5Gqt7yV^LoBnHLPJz#PFnD`)C?vyI8l8f?f0>u9UmEz*oL|)IN`+hS= zmjaKgQXszWX090YsnR6|^`izy-f5AsWb0lx{0A{po_I_rpzQzv00{s|MNUMnLSTXc CXgA9M diff --git a/frontend/src/assets/favicon.png b/frontend/src/assets/favicon.png index be167d9bbad75457cf7eae463f44417175dec77c..8010001052ac0803b3ed4eb1e34a6b3286942fd9 100644 GIT binary patch delta 3703 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 V^HfC7r_ulb002ovPDHLkV1kUk2{-@% delta 1240 zcmV;}1Sk9X9PJ54iBL{Q4GJ0x0000DNk~Le0000W0000W2nGNE0CReJ^Z)<=1am@3 zR0s$N2z&@+hyVZp32;bRa{vGi!~g&e!~vBn4jYj+Cw~NLNklCu z3lk9=R{c1_laj|ktPmqEc@tX^zPl=N0Hp|vMmlyU8!1LO5HBVP^kT49^5_j8 zh`IvWOfJHw*N7Y-6N~-2A4ft0u-FC6x<=%Ftbb=Y&xSiAW~jgL0LtN5RfaAvqpf)p zJs0vB9$bQJat^aI`pH<(P4;c|tXOlHwDi$f>0OMlQZ_IVPe3h7ak#&)>vq21Uq$=b zhhr57AT@2Af{pKT?_<@Z&l-vhP@a&rd>vJQwljl&7{GSdRfQkFd7Wbi%TOzH$28gu zrhhOyqo1cVyL zbt0tH*zh81s*loox+Gk{eRd;MfR{|WdF-ol&Ngfb1{+=shX+-`zwEWjV0CDd95;f!j3` z5ewf2fybRr?fYK@1On-tVt#Z1;`@N83P%rAfy&g(E%gQqObb;55mCQAG?2xa`safI z2A)^~`T)8*?xCxFUBGQwMzpi$66h2-3tWm6fr#Mt+oz7ajQS=tMgb$y1wacxTYvK= zTcwDv+0P0kA}lnWl4UyOjxwh#_9$7ZyaM#wM5OwEk6g*5=R!WfZz2R%CuBqAPCB%S zi=F2Smj|5zkrN7A%bo0n;PU#h^LOb4-Zoe0hnmK2V6!hB)v4RsdA^XFvQO9B^P)Y) z`v&{7L++Hom>Aq&?vziWk=tQ*$bWE|Q?>w=0BU{Vp5Gqt7yV^LoBnHLPJz#PFnD`)C?vyI8l8f?f0>u9UmEz*oL|)IN`+hS= zmjaKgQXszWX090YsnR6|^`izy-f5AsWb0lx{0A{po_I_rpzQzv00{s|MNUMnLSTXc CXgA9M diff --git a/frontend/src/assets/logo.png b/frontend/src/assets/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..a90d9ffac0f2cf7a5f0cf073ee143cb1be4253bf GIT binary patch literal 2520 zcmV;}2`Bc6P)&yxBvhE8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H131vw{ zK~!jg?V5YARaG6wKWpvBIRvS^d;|vK1x+HYNkOy`HF=1S!5YWPNgWeMjUvlpGUaCZ zMv*Wu)YM9wseF_Q8u=(e(R`(4DHk0R#0M80!@6hhz1FWk);`>IHs@S8aIR+homsPg z>-Af|z1Ld5_51zSRy066qC0nc?f?QcRV%f>QhH~U3=mPBh^#f(<=X1SKU%f>L!hJ) zpAYcA301G~jNP6&ER5pWTI(@7&}gNUQrfi^5V2ShvBqGGeL{rU^E*cVu@~gq5%?}J z2)G8gzZb@MU!rE>+b7%?cCH?JQ5fn|f-ocq0u_XTn|Q5IC zZwjMuQW%9Q3by zR9q_O&pgGEilb1+QKX_MR$&w!wQfYmIW2sdn>~6pu)GC4`vD_cz~?;;4RFSYXAg~n zV0svZD#}w_iik_GisSg+K5^-|KK;rcJ!@&X?{?+#uyRy7J}$=(L~%*QrI;voeZnYG zVXV)b(YA72i{zVu+vO(!`v7ll1Fs8!PT*gBU@H)|Bl?YS)%SxiBn$%;hM|h$h&YPU zFbrnQysPvJzr(4wt98Jwz^zwI&Q4C0x(oV9uoxaOm`_#^(MWDnRkWP#!+-u5Js-AGX|9o^w=}n{{G2#=p7=QVe?tw zGdNG6)z~ZN-&Uut4LB4SK?5(zLqA~eoYz?3Lru!@@g~OV5!z^`>Od2O0fE*k2m=-B z;GWG*dKEL5gjYv_UZHiU0~uETB%)>(kQJ^%1wN%f~Krz8^p_;yQffrKz zug0yxG-@aPM&L-`BwzusAuoFvcmP<0+nH7TJ1<)VG}3Hife+)1!f)h#syGd&HRk5@ zI7Mj7mv1_7El_oPhXXe>kmCp-1AYjc3cTdiO~h%wMo_rLQ9b@TfHMI? zlng+DLZK8O%A9s5Z=T)*w<6x!Kxf~`@u&_bsNzm(CH5}lX8>>H^!32GKsAtbW1eoH z+l_k@_YpUTZvt25^uE9sy}Ap5@8$F`U{+4|$7zX9y6uiC&H*mY>8o)b#>_lF0T>TF zSdbybsrzMlKJsKz!0y0b8p!{3pnBw1fMfG9(TG});39GYCS91221(8X z00D(`Hp8PytSRKL0Y-cIPPWbU17|y2>E&PcXba5t@@ory`{d7KyfTB^eLk)&DA69HR^ zTX0576~_R7&C@JkXbZ+DhMtSAsp+AviakBL6L`H)|Bpi7(QJy%$x#nw;FokSio1Y$ zegkdAJZMG4UAnl5Ppz501{KY+H|~ zD%MeZ6ph0flpCS@KR@b0W9(DLR4-eq7cSYn%O@u%^u&Gc6f-@|l1ogMy1vHb3&*bb zamQYd_tdvVcpGQ59fDio=hJN|L#^-rZeX=X55~En6w0Co?Y9*Rs5Sa7!gD`$JIY#{ z%{Ey^mKn*iOwuGJNz*9HvIUn-tlT;8@a*WH94UhU7EY5L=T6OznKLO_nk1FEX_^FS zl9Huv;TV&NNIIL|N71i+1!rYH?Un87(QkWnvk|kcg>RJg!CCn}jwnb1|K-1Jsg*Nc}P*7f#=4P7rJU6r4w zU6t`^Qjw&RkS4B=(-daT{Eod=G$G(y9z6!e44%&6i*=cH)q)94C zl1h>!E_GETsZ^xWRgt99l|S>8q>`kWP101-G?6q-ZyUI31tnY!|%k}r@nojb5& z)JaYLgaPma+=uYd(?oRPLaF`^9t`Z_Pt%(yhZB;M>%`W9ZTA zfT_3`d~aYi&eN%4BrvP)4bP0Wl?Q3Xc{&L8+3Y`e);^{(d+xmF_gGes*A`+VPW2AQ z`R6y|E;9B8M&)fRwLfNrxRB)p+?8vLoA8H#-%@*o_?Ut_TLQQx;DVSjl2W+Phs34z~}RJeQ`mb$8f5+*mfe_mpyB#wH1coB79Zc zi*pr^!d)JL`#tSZuT6vvx@&L}fARKa+Z+C?cDD55$+))-@#E2S3C i?`V7YgTHLwd-yM{O~Q=AU<9!M0000 - - + 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 0000000000000000000000000000000000000000..8010001052ac0803b3ed4eb1e34a6b3286942fd9 GIT binary patch literal 3705 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 XO~Q=AU=9Sa00000NkvXXu0mjfaVoj@ delta 2266 zcmV<02qpK}6Xy{|iBL{Q4GJ0x0000DNk~Le0001Z0000P2nGNE0Q$`8EdT%j1am@3 zR0s$N2z&@+hyVZp32;bRa{vGi!~g&e!~vBn4jYj+Cw~ZJNkluV77XB{WpLDrI)zFd2PlH-ipx@&B`SogSU1KU4-T3UG5Vj*q)d3)24zxrvsVcpj56f=n#Nj;Z zPxrwe2$S3U6oc~1DY$tPLq_aGDV->@LItaf+j#DW&fjCe*BtszV537<0m05M>;D@4 zfPd`{T?TxsHD*6iH3b!K+{*0}*}P^h=T7&HV{VRQ(RiU3Cyx%JY|~T*UbmMCGoPUU zkSdeydR8HJIt?gbxI>#+`We7Ryvpg;lx_#|fZsUuR$x&V<$a#u2ZlKG@wS*P z6cgNrwk+aeZCd~Sq)@lHh-d&R}Ix29LXQ%uVU}Ed*Y=^?c7n60poy& zfO|VJ-$XB9yz?8;MOpvT@B>5L#^zTaVb_M~vBAvji-a3MU;%vqYWIv|$GVx)t2CBn+u_EXIQ(tnhL zKO<}d*tU;1mM!68{TCbt)i?RXR&g!z6_)|eCDC&R5~KeGTmTLNe+0ggz`F%_$!L!^ zQv-Z|&lYk)y1)^HUP4l022z*(RamBfw90y#E33}z~6xW33}e_{AK`m6CXG89Dh9`z#L$i zG1de4HgE?p8c9f7LoV=FV_ge@cP%uBj@6Ff#1YAR6oj=_G2<$zQm|CPk2K6vij_)s z7XY^H3n0l66+p>G7H}V8AUER;0jIP&Nw>Cpq~ZacIX=5B=B{_t>z*Ie3SUEf+>U41 zMqoB#hyw{@A0uBoz>S8C@8P-9jleenw|@K!P>yWMTY$TeFWrPfT>pbc-!|ZNhaTUG z{uZzb@eUwf=Lg=P_N_g2Y-r+*(AKbzo01t9AXKFy3#-+0w#`^2i?-acPmT|6LS3?e zuAt7K=O7DlH{oWW1b_Gy?I;;iU@gR5lx#ETjR|904LaAL%`##so^b)fcqLmRuZiaq z+UtN8hwhVNj{7{UhY=Du5>RicxEPiW^hFe(h%BfASczn)3k<%SQp|6&+)D%A zH|S(%!)D)(G(LA1ayc^%FPzLp5>LQ2a1FbaWQ+j$_J2u!+8*hl+qB*qSeP!&4Lk)z9s0LG zB~oS_#(#Tpb;O@u?Z-=6zKj_E2u8M_X6(f)pK_7x{xFi+uSO17G*Z5Na+!2kj+BT1 zUqVj7e6a2a#HGfYaU#+)8{l+=3YYuz%6l6DYV0`ngzu^0?yWVH+BOd_+OIxngRdK(5mMHUp}{)K&Sr{IOah9PVu03!mBhB~ oSiBM1$0oS+Upl(+`N4ky;1p^I5Z&E~01E&B07*qoM6N<$f=abTi2wiq 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" /> + + + + + + + + + +