From 9323cba4c9c3c8f6d07a1028fb77c6c271a70fe4 Mon Sep 17 00:00:00 2001 From: DrMxrcy Date: Sun, 12 Mar 2023 13:05:19 -0400 Subject: [PATCH] Add DailyTXT --- README.md | 1 + apps/dailytxt/config.json | 31 +++++++++++++++++++++++++ apps/dailytxt/docker-compose.yml | 28 ++++++++++++++++++++++ apps/dailytxt/metadata/description.md | 32 ++++++++++++++++++++++++++ apps/dailytxt/metadata/logo.jpg | Bin 0 -> 15197 bytes 5 files changed, 92 insertions(+) create mode 100644 apps/dailytxt/config.json create mode 100644 apps/dailytxt/docker-compose.yml create mode 100644 apps/dailytxt/metadata/description.md create mode 100644 apps/dailytxt/metadata/logo.jpg diff --git a/README.md b/README.md index 4bc43a42..f57a9b4f 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,7 @@ This is the official repository for the Tipi App Store. It contains all the apps - [Calibre-Web](https://github.com/janeczku/calibre-web) - Web Ebook Reader - [Code-Server](https://github.com/coder/code-server) - Web VS Code - [Codex.Docs](https://github.com/codex-team/codex.docst) - Free Docs app powered by Editor.js ecosystem. +- [DailyTXT](https://github.com/PhiTux/DailyTxT) - Encrypted Diary Web-App - [Deluge](https://github.com/linuxserver/docker-deluge) - Deluge is a lightweight, Free Software, cross-platform BitTorrent client - [DokuWiki](https://github.com/dokuwiki/dokuwiki) - DokuWiki is a simple to use and highly versatile Open Source wiki software - [Filebrowser](https://github.com/filebrowser/filebrowser) - Web File Browser diff --git a/apps/dailytxt/config.json b/apps/dailytxt/config.json new file mode 100644 index 00000000..139eac4b --- /dev/null +++ b/apps/dailytxt/config.json @@ -0,0 +1,31 @@ +{ + "$schema": "../schema.json", + "name": "DailyTxT", + "port": 8156, + "available": true, + "exposable": true, + "id": "dailytxt", + "tipi_version": 1, + "version": "1.0.12", + "categories": ["development"], + "description": "DailyTxT is an encrypted Diary Web-App to write down your stories of the day and to find them again easily.", + "short_desc": "Encrypted Diary Web-App", + "author": "PhiTux", + "source": "https://github.com/PhiTux/DailyTxT", + "form_fields": [ + { + "type": "random", + "label": "DailyTXT Secret Key", + "min": 32, + "env_variable": "DAILYTXT_SECRET_KEY" + }, + { + "type": "text", + "label": "Allow User Registrastion", + "hint": "Set it to False to disallow registration of new users.", + "placeholder": "True", + "required": true, + "env_variable": "DAILYTXT_ALLOW_REGISTRATION" + } + ] +} diff --git a/apps/dailytxt/docker-compose.yml b/apps/dailytxt/docker-compose.yml new file mode 100644 index 00000000..8be83eae --- /dev/null +++ b/apps/dailytxt/docker-compose.yml @@ -0,0 +1,28 @@ +version: "3" + +services: + dailytxt: + image: phitux/dailytxt:1.0.12 + container_name: dailytxt + restart: + environment: + - PORT=8765 + - SECRET_KEY=${DAILYTXT_SECRET_KEY} + - ALLOW_REGISTRATION=${DAILYTXT_ALLOW_REGISTRATION} + - DATA_INDENT=2 + - JWT_EXP_DAYS=60 + - ENABLE_UPDATE_CHECK=True + ports: + - ${APP_PORT}:8765" + volumes: + - "${APP_DATA_DIR}/data/dailytxt:/app/data/" + networks: + - tipi_main_network + labels: + traefik.enable: ${APP_EXPOSED} + traefik.http.routers.dailytxt.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.dailytxt.entrypoints: websecure + traefik.http.routers.dailytxt.service: dailytxt + traefik.http.routers.dailytxt.tls.certresolver: myresolver + traefik.http.services.dailytxt.loadbalancer.server.port: 8765 + diff --git a/apps/dailytxt/metadata/description.md b/apps/dailytxt/metadata/description.md new file mode 100644 index 00000000..a7111c19 --- /dev/null +++ b/apps/dailytxt/metadata/description.md @@ -0,0 +1,32 @@ +# You probably want to allow the registration on the first run, generate the necessary accounts, and then restart the container with disallowed registration! + +# DailyTxT + +DailyTxT is an encrypted Diary Web-App to write down your stories of the day and to find them again easily. It is written in [Python Flask](https://flask.palletsprojects.com/) (Backend) and [Vue.JS](https://vuejs.org/) (Frontend) and meant to be run by **[Docker](https://hub.docker.com/r/phitux/dailytxt/)**. + +You should definitely take a quick look at [How to Use](#features) to see all the hidden features. + +## [](#features)Features + +- **Encryption:** Everything you write is encrypted before it's written to the server's storage. Even the admin can't read your private stuff! +- **File-Upload:** You can upload arbitrary files for each day (128 MB max each). They are **stored encrypted** on the server as well. +- **Search:** Support your memory by easily scanning your notes for any keyword and rediscovering details you may have almost forgotten. +- **Multi-Language-Support:** The Web-App is currently available in **German**, **English** and **Spanish** translation. The language gets detected and selected automatically based on your browser's settings. More languages are easy to add - [iff](https://en.wikipedia.org/wiki/If_and_only_if) **you** provide me with the language-files! See `client/src/lang/translations` +- **Mobile:** Responsive design for easy use on mobile screen. Additionally: allows installation "A2HS" (Add 2 Home Screen) +- **Multi-User-Spport:** You can create multiple User Accounts. Each account uses its own encryption key - so there is no risk for a data breach. +- **Backup & Restore:** You can export all data (decrypted) for backup-reasons in a zip-file and reimport the data later by uploading the zip. +- **Templates:** Create templates, which you can reuse every day. +- If you came from [journey.cloud](https://journey.cloud), you could try [this script](https://github.com/PhiTux/DailyTxT/issues/13#issue-1327951670) to **import** your text to DailyTxT. + +## [](https://github.com/PhiTux/DailyTxT#how-to-use)How to Use + +There are two cool Shortcuts you should know: + +- Move back/forth one day: Alt + ← / Alt + → +- Select the search field: Ctrl + F + +[![DailyTxT Description](https://github.com/PhiTux/DailyTxT/raw/master/readme/DailyTxT_Description.jpg)](https://github.com/PhiTux/DailyTxT/blob/master/readme/DailyTxT_Description.jpg) + +### [](https://github.com/PhiTux/DailyTxT#note-on-backup--restore)Note on backup & restore: + +You can only reimport/restore **all** data at once, that was exported before, it's not selective! The restored data is then the most recent data for each day and any previous data for that day was moved to the day's history. \ No newline at end of file diff --git a/apps/dailytxt/metadata/logo.jpg b/apps/dailytxt/metadata/logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e32ee0ddd80cd865c86b2d53e0fcd097ff91d133 GIT binary patch literal 15197 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 O7JH8Q1JVN?X8#W=jch{z literal 0 HcmV?d00001