From 63ee4059fd7393e8ef75eba6931c193ec7a7629e Mon Sep 17 00:00:00 2001 From: nsde Date: Sun, 23 Jul 2023 02:07:22 +0200 Subject: [PATCH] Added legal sites, etc. --- .vscode/settings.json | 8 ++- app.py | 38 ++++++++--- static/css/_vars.sass | 6 +- static/css/base.css | 28 ++++++-- static/css/base.css.map | 2 +- static/css/base.sass | 26 ++++++-- static/css/footer.css.map | 2 +- static/css/home.css | 3 + static/css/home.css.map | 2 +- static/css/home.sass | 3 + static/css/input.css | 48 ++++++++++++++ static/css/input.css.map | 1 + static/css/input.sass | 50 ++++++++++++++ static/css/navbar.css | 2 +- static/css/navbar.css.map | 2 +- static/js/menu.js | 14 ++++ templates/index.html | 14 +++- templates/legal/imprint.html | 18 +++++ templates/legal/privacy.html | 72 ++++++++++++++++++++ templates/legal/terms.html | 123 +++++++++++++++++++++++++++++++++++ templates/panel.html | 12 ++++ 21 files changed, 446 insertions(+), 28 deletions(-) create mode 100644 static/css/input.css create mode 100644 static/css/input.css.map create mode 100644 static/css/input.sass create mode 100644 static/js/menu.js create mode 100644 templates/legal/imprint.html create mode 100644 templates/legal/privacy.html create mode 100644 templates/legal/terms.html create mode 100644 templates/panel.html diff --git a/.vscode/settings.json b/.vscode/settings.json index c3d4535..c926943 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -11,11 +11,15 @@ "**/*.map": true, "static/css/base.css": true, "static/css/home.css": true, - "static/css/navbar.css": true + "static/css/navbar.css": true, + "static/css/input.css": true, + "static/css/footer.css": true }, "hide-files.files": [ "static/css/base.css", "static/css/home.css", - "static/css/navbar.css" + "static/css/navbar.css", + "static/css/input.css", + "static/css/footer.css" ] } \ No newline at end of file diff --git a/app.py b/app.py index a6275c1..0ebd65b 100644 --- a/app.py +++ b/app.py @@ -6,19 +6,37 @@ from dotenv import load_dotenv load_dotenv() -app = flask.Flask(__name__) log = logging.getLogger('werkzeug') log.disabled = True -@app.context_processor -def inject_variables(): - return { - 'contact_email': os.getenv('CONTACT_EMAIL') - } +def create_app() -> flask.Flask: + app = flask.Flask(__name__) -@app.route('/') -def index(): - return flask.render_template('index.html') + @app.context_processor + def inject_variables(): + return { + 'contact_email': os.getenv('CONTACT_EMAIL') + } -app.run(debug=True, use_evalex=False, port=2323) + @app.route('/') + def index(): + return flask.render_template('index.html') + + + @app.route('/panel') + def panel(): + return flask.render_template('panel.html') + + @app.route('/favicon.ico') + def favicon(): + return flask.send_file('static/img/fav.ico', mimetype='image/vnd.microsoft.icon') + + @app.route('/legal/') + def legal_site(subpath): + return flask.render_template(f'legal/{subpath}.html') + + return app + +if __name__ == '__main__': + create_app().run(debug=True, use_evalex=False, port=2323, host='0.0.0.0', threaded=True) diff --git a/static/css/_vars.sass b/static/css/_vars.sass index ed0f32f..400ea7c 100644 --- a/static/css/_vars.sass +++ b/static/css/_vars.sass @@ -1,10 +1,12 @@ $text: #f3f3f3 $background: #03060d -$secondary: #253038 +$secondary: #252a38 $border: #161d2bb0 -$primary: #922646 +$primary: #b53d61 $primary-light: #f45a88 +$primary-glow: #f45a8861 +$primary-soft: #f79ab624 $accent: #28aaf0 $edge: 5px diff --git a/static/css/base.css b/static/css/base.css index 1e784a7..16c7c2c 100644 --- a/static/css/base.css +++ b/static/css/base.css @@ -25,17 +25,31 @@ a { h1, h1 *, h2, h2 *, h3, h3 * { font-weight: 700; - line-height: 4.8rem; + line-height: 3rem; font-family: "Syne", sans-serif; } +main a { + text-decoration: underline; + text-decoration-color: #b53d61; + text-underline-offset: 2px; + text-decoration-thickness: 5px; + transition: 0.2s; +} +main a:hover { + background: rgba(247, 154, 182, 0.1411764706); +} + +main p { + opacity: 0.9; +} + img { display: block; max-width: 100%; } -p { - line-height: 18px; +p, p *, main ul { line-height: 32px; } @@ -45,11 +59,17 @@ p { mark { color: #f3f3f3; - background: #f45a88; + background: #b53d61; padding: 5px 7px; border-radius: 5px; } +.special-gradient { + background: linear-gradient(83deg, rgb(244, 90, 136) 7%, rgb(40, 170, 240) 100%); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; +} + @media (max-width: 900px) { body { margin: 0 2rem; diff --git a/static/css/base.css.map b/static/css/base.css.map index 7ad2052..1c8f00f 100644 --- a/static/css/base.css.map +++ b/static/css/base.css.map @@ -1 +1 @@ -{"version":3,"sources":["base.sass","base.css","_vars.sass"],"names":[],"mappings":"AACQ,kFAAA;AAER;EACI,uBAAA;ACDJ;;ADGA;EACI,yBENS;ADMb;;ADEA;EACI,gBECS;EFAT,cAAA;ACCJ;;ADCA;EACI,sBAAA;EACA,YAAA;EACA,cEhBG;EFiBH,gCAAA;ACEJ;;ADAA;EACI,qBAAA;ACGJ;;ADAI;EACI,gBAAA;EACA,mBAAA;EACA,+BAAA;ACGR;;ADDA;EACI,cAAA;EACA,eAAA;ACIJ;;ADFA;EACI,iBAAA;EACA,iBAAA;ACKJ;;ADHA;EACI,aAAA;ACMJ;;ADJA;EACI,cExCG;EFyCH,mBEnCY;EFoCZ,gBAAA;EACA,kBAAA;ACOJ;;ADLA;EACI;IACI,cAAA;ECQN;AACF","file":"base.css","sourcesContent":["@import '_vars'\n@import url('https://fonts.googleapis.com/css2?family=Syne:wght@700&display=swap')\n\nhtml\n scroll-behavior: smooth\n\nbody\n background-color: $background\n\nnav, main, footer\n max-width: $main-width\n margin: 0 auto\n\n*, *::before, *::after\n box-sizing: border-box\n border: none\n color: $text\n font-family: 'Inter', sans-serif\n\na\n text-decoration: none\n\nh1, h2, h3\n &, *\n font-weight: 700\n line-height: 4.8rem\n font-family: 'Syne', sans-serif\n\nimg\n display: block\n max-width: 100%\n\np\n line-height: 18px\n line-height: 32px\n\n:focus:not(:focus-visible)\n outline: none\n\nmark\n color: $text\n background: $primary-light\n padding: 5px 7px\n border-radius: 5px\n\n@media (max-width: 900px)\n body\n margin: 0 2rem\n\n","@import url(\"https://fonts.googleapis.com/css2?family=Syne:wght@700&display=swap\");\nhtml {\n scroll-behavior: smooth;\n}\n\nbody {\n background-color: #03060d;\n}\n\nnav, main, footer {\n max-width: 800px;\n margin: 0 auto;\n}\n\n*, *::before, *::after {\n box-sizing: border-box;\n border: none;\n color: #f3f3f3;\n font-family: \"Inter\", sans-serif;\n}\n\na {\n text-decoration: none;\n}\n\nh1, h1 *, h2, h2 *, h3, h3 * {\n font-weight: 700;\n line-height: 4.8rem;\n font-family: \"Syne\", sans-serif;\n}\n\nimg {\n display: block;\n max-width: 100%;\n}\n\np {\n line-height: 18px;\n line-height: 32px;\n}\n\n:focus:not(:focus-visible) {\n outline: none;\n}\n\nmark {\n color: #f3f3f3;\n background: #f45a88;\n padding: 5px 7px;\n border-radius: 5px;\n}\n\n@media (max-width: 900px) {\n body {\n margin: 0 2rem;\n }\n}","$text: #f3f3f3\n$background: #03060d\n$secondary: #253038\n$border: #161d2bb0\n\n$primary: #922646\n$primary-light: #f45a88\n$accent: #28aaf0\n\n$edge: 5px\n\n$main-width: 800px\n$more-width: 1000px\n"]} \ No newline at end of file +{"version":3,"sources":["base.sass","base.css","_vars.sass"],"names":[],"mappings":"AACQ,kFAAA;AAER;EACI,uBAAA;ACDJ;;ADGA;EACI,yBENS;ADMb;;ADEA;EACI,gBEGS;EFFT,cAAA;ACCJ;;ADCA;EACI,sBAAA;EACA,YAAA;EACA,cEhBG;EFiBH,gCAAA;ACEJ;;ADAA;EACI,qBAAA;ACGJ;;ADAI;EACI,gBAAA;EACA,iBAAA;EACA,+BAAA;ACGR;;ADDA;EACI,0BAAA;EACA,8BEzBM;EF0BN,0BAAA;EACA,8BAAA;EAEA,gBAAA;ACGJ;ADDI;EACI,6CE7BO;ADgCf;;ADDA;EACI,YAAA;ACIJ;;ADFA;EACI,cAAA;EACA,eAAA;ACKJ;;ADHA;EACI,iBAAA;ACMJ;;ADJA;EACI,aAAA;ACOJ;;ADLA;EACI,cErDG;EFsDH,mBEjDM;EFkDN,gBAAA;EACA,kBAAA;ACQJ;;ADNA;EACI,gFAAA;EACA,6BAAA;EACA,oCAAA;ACSJ;;ADPA;EACI;IACI,cAAA;ECUN;AACF","file":"base.css","sourcesContent":["@import '_vars'\n@import url('https://fonts.googleapis.com/css2?family=Syne:wght@700&display=swap')\n\nhtml\n scroll-behavior: smooth\n\nbody\n background-color: $background\n\nnav, main, footer\n max-width: $main-width\n margin: 0 auto\n\n*, *::before, *::after\n box-sizing: border-box\n border: none\n color: $text\n font-family: 'Inter', sans-serif\n\na\n text-decoration: none\n\nh1, h2, h3\n &, *\n font-weight: 700\n line-height: 3rem\n font-family: 'Syne', sans-serif\n\nmain a\n text-decoration: underline\n text-decoration-color: $primary\n text-underline-offset: 2px\n text-decoration-thickness: 5px\n\n transition: 0.2s\n\n &:hover\n background: $primary-soft\n\nmain p\n opacity: 0.9\n\nimg\n display: block\n max-width: 100%\n\np, p *, main ul\n line-height: 32px\n\n:focus:not(:focus-visible)\n outline: none\n\nmark\n color: $text\n background: $primary\n padding: 5px 7px\n border-radius: 5px\n\n.special-gradient\n background: linear-gradient(83deg, rgba(244,90,136,1) 7%, rgba(40,170,240,1) 100%)\n -webkit-background-clip: text\n -webkit-text-fill-color: transparent\n\n@media (max-width: 900px)\n body\n margin: 0 2rem\n\n","@import url(\"https://fonts.googleapis.com/css2?family=Syne:wght@700&display=swap\");\nhtml {\n scroll-behavior: smooth;\n}\n\nbody {\n background-color: #03060d;\n}\n\nnav, main, footer {\n max-width: 800px;\n margin: 0 auto;\n}\n\n*, *::before, *::after {\n box-sizing: border-box;\n border: none;\n color: #f3f3f3;\n font-family: \"Inter\", sans-serif;\n}\n\na {\n text-decoration: none;\n}\n\nh1, h1 *, h2, h2 *, h3, h3 * {\n font-weight: 700;\n line-height: 3rem;\n font-family: \"Syne\", sans-serif;\n}\n\nmain a {\n text-decoration: underline;\n text-decoration-color: #b53d61;\n text-underline-offset: 2px;\n text-decoration-thickness: 5px;\n transition: 0.2s;\n}\nmain a:hover {\n background: rgba(247, 154, 182, 0.1411764706);\n}\n\nmain p {\n opacity: 0.9;\n}\n\nimg {\n display: block;\n max-width: 100%;\n}\n\np, p *, main ul {\n line-height: 32px;\n}\n\n:focus:not(:focus-visible) {\n outline: none;\n}\n\nmark {\n color: #f3f3f3;\n background: #b53d61;\n padding: 5px 7px;\n border-radius: 5px;\n}\n\n.special-gradient {\n background: linear-gradient(83deg, rgb(244, 90, 136) 7%, rgb(40, 170, 240) 100%);\n -webkit-background-clip: text;\n -webkit-text-fill-color: transparent;\n}\n\n@media (max-width: 900px) {\n body {\n margin: 0 2rem;\n }\n}","$text: #f3f3f3\n$background: #03060d\n$secondary: #252a38\n$border: #161d2bb0\n\n$primary: #b53d61\n$primary-light: #f45a88\n$primary-glow: #f45a8861\n$primary-soft: #f79ab624\n$accent: #28aaf0\n\n$edge: 5px\n\n$main-width: 800px\n$more-width: 1000px\n"]} \ No newline at end of file diff --git a/static/css/base.sass b/static/css/base.sass index 1b92906..f06bbf4 100644 --- a/static/css/base.sass +++ b/static/css/base.sass @@ -23,15 +23,28 @@ a h1, h2, h3 &, * font-weight: 700 - line-height: 4.8rem + line-height: 3rem font-family: 'Syne', sans-serif +main a + text-decoration: underline + text-decoration-color: $primary + text-underline-offset: 2px + text-decoration-thickness: 5px + + transition: 0.2s + + &:hover + background: $primary-soft + +main p + opacity: 0.9 + img display: block max-width: 100% -p - line-height: 18px +p, p *, main ul line-height: 32px :focus:not(:focus-visible) @@ -39,10 +52,15 @@ p mark color: $text - background: $primary-light + background: $primary padding: 5px 7px border-radius: 5px +.special-gradient + background: linear-gradient(83deg, rgba(244,90,136,1) 7%, rgba(40,170,240,1) 100%) + -webkit-background-clip: text + -webkit-text-fill-color: transparent + @media (max-width: 900px) body margin: 0 2rem diff --git a/static/css/footer.css.map b/static/css/footer.css.map index 2579417..1dc43d3 100644 --- a/static/css/footer.css.map +++ b/static/css/footer.css.map @@ -1 +1 @@ -{"version":3,"sources":["footer.sass","_vars.sass","footer.css"],"names":[],"mappings":"AAEA;EACI,iBAAA;EACA,iBAAA;EACA,gBCMS;ACPb;AFGI;EACI,iBCIK;ACLb;AFGI;EACI,aAAA;EACA,sBAAA;EAEA,mBAAA;AEFR;AFIQ;EACI,oBAAA;EACA,qBAAA;AEFZ;AFIY;EACI,eAAA;EACA,gBAAA;AEFhB;AFIY;EACI,UAAA;EACA,eAAA;EACA,gBAAA;EACA,cAAA;EACA,mBAAA;AEFhB;AFIY;EACI,uBAAA;EAAA,kBAAA;EACA,eAAA;EACA,YAAA;EACA,cAAA;EACA,qBAAA;EACA,mBAAA;AEFhB;AFIgB;EACI,YAAA;AEFpB;AFII;EACI,YAAA;AEFR;;AFIA;EAEQ;IACI,mBAAA;IACA,qCAAA;EEFV;EFIU;IACI,mBAAA;EEFd;AACF;AFGA;EAEQ;IACI,0BAAA;EEFV;AACF","file":"footer.css","sourcesContent":["@import '_vars'\n\nfooter\n padding-top: 4rem\n margin: 4rem auto\n max-width: $main-width\n\n &.wide\n max-width: $more-width\n\n div.rows\n display: grid\n grid-auto-flow: column\n // justify-content: space-between\n margin-bottom: 2rem\n\n div.row\n margin-right: 1.5rem\n margin-bottom: 0.5rem\n\n &:last-child\n margin-right: 0\n margin-bottom: 0\n\n h2\n opacity: 1\n font-size: 1rem\n font-weight: 500\n margin: 1rem 0\n line-height: normal\n\n a\n width: fit-content\n font-size: 14px\n opacity: 0.6\n display: block\n text-decoration: none\n margin-bottom: 1rem\n\n &:hover\n opacity: 0.8\n\n p\n opacity: 0.7\n\n@media (max-width: 1000px)\n footer\n div.rows\n grid-auto-flow: row\n grid-template-columns: repeat(2, 1fr)\n\n div.row\n margin-bottom: 1rem\n\n@media (max-width: 600px)\n footer\n div.rows\n grid-template-columns: 1fr\n","$text: #f3f3f3\n$background: #03060d\n$secondary: #253038\n$border: #161d2bb0\n\n$primary: #922646\n$primary-light: #f45a88\n$accent: #28aaf0\n\n$edge: 5px\n\n$main-width: 800px\n$more-width: 1000px\n","footer {\n padding-top: 4rem;\n margin: 4rem auto;\n max-width: 800px;\n}\nfooter.wide {\n max-width: 1000px;\n}\nfooter div.rows {\n display: grid;\n grid-auto-flow: column;\n margin-bottom: 2rem;\n}\nfooter div.rows div.row {\n margin-right: 1.5rem;\n margin-bottom: 0.5rem;\n}\nfooter div.rows div.row:last-child {\n margin-right: 0;\n margin-bottom: 0;\n}\nfooter div.rows div.row h2 {\n opacity: 1;\n font-size: 1rem;\n font-weight: 500;\n margin: 1rem 0;\n line-height: normal;\n}\nfooter div.rows div.row a {\n width: fit-content;\n font-size: 14px;\n opacity: 0.6;\n display: block;\n text-decoration: none;\n margin-bottom: 1rem;\n}\nfooter div.rows div.row a:hover {\n opacity: 0.8;\n}\nfooter p {\n opacity: 0.7;\n}\n\n@media (max-width: 1000px) {\n footer div.rows {\n grid-auto-flow: row;\n grid-template-columns: repeat(2, 1fr);\n }\n footer div.rows div.row {\n margin-bottom: 1rem;\n }\n}\n@media (max-width: 600px) {\n footer div.rows {\n grid-template-columns: 1fr;\n }\n}"]} \ No newline at end of file +{"version":3,"sources":["footer.sass","_vars.sass","footer.css"],"names":[],"mappings":"AAEA;EACI,iBAAA;EACA,iBAAA;EACA,gBCQS;ACTb;AFGI;EACI,iBCMK;ACPb;AFGI;EACI,aAAA;EACA,sBAAA;EAEA,mBAAA;AEFR;AFIQ;EACI,oBAAA;EACA,qBAAA;AEFZ;AFIY;EACI,eAAA;EACA,gBAAA;AEFhB;AFIY;EACI,UAAA;EACA,eAAA;EACA,gBAAA;EACA,cAAA;EACA,mBAAA;AEFhB;AFIY;EACI,uBAAA;EAAA,kBAAA;EACA,eAAA;EACA,YAAA;EACA,cAAA;EACA,qBAAA;EACA,mBAAA;AEFhB;AFIgB;EACI,YAAA;AEFpB;AFII;EACI,YAAA;AEFR;;AFIA;EAEQ;IACI,mBAAA;IACA,qCAAA;EEFV;EFIU;IACI,mBAAA;EEFd;AACF;AFGA;EAEQ;IACI,0BAAA;EEFV;AACF","file":"footer.css","sourcesContent":["@import '_vars'\n\nfooter\n padding-top: 4rem\n margin: 4rem auto\n max-width: $main-width\n\n &.wide\n max-width: $more-width\n\n div.rows\n display: grid\n grid-auto-flow: column\n // justify-content: space-between\n margin-bottom: 2rem\n\n div.row\n margin-right: 1.5rem\n margin-bottom: 0.5rem\n\n &:last-child\n margin-right: 0\n margin-bottom: 0\n\n h2\n opacity: 1\n font-size: 1rem\n font-weight: 500\n margin: 1rem 0\n line-height: normal\n\n a\n width: fit-content\n font-size: 14px\n opacity: 0.6\n display: block\n text-decoration: none\n margin-bottom: 1rem\n\n &:hover\n opacity: 0.8\n\n p\n opacity: 0.7\n\n@media (max-width: 1000px)\n footer\n div.rows\n grid-auto-flow: row\n grid-template-columns: repeat(2, 1fr)\n\n div.row\n margin-bottom: 1rem\n\n@media (max-width: 600px)\n footer\n div.rows\n grid-template-columns: 1fr\n","$text: #f3f3f3\n$background: #03060d\n$secondary: #252a38\n$border: #161d2bb0\n\n$primary: #b53d61\n$primary-light: #f45a88\n$primary-glow: #f45a8861\n$primary-soft: #f79ab624\n$accent: #28aaf0\n\n$edge: 5px\n\n$main-width: 800px\n$more-width: 1000px\n","footer {\n padding-top: 4rem;\n margin: 4rem auto;\n max-width: 800px;\n}\nfooter.wide {\n max-width: 1000px;\n}\nfooter div.rows {\n display: grid;\n grid-auto-flow: column;\n margin-bottom: 2rem;\n}\nfooter div.rows div.row {\n margin-right: 1.5rem;\n margin-bottom: 0.5rem;\n}\nfooter div.rows div.row:last-child {\n margin-right: 0;\n margin-bottom: 0;\n}\nfooter div.rows div.row h2 {\n opacity: 1;\n font-size: 1rem;\n font-weight: 500;\n margin: 1rem 0;\n line-height: normal;\n}\nfooter div.rows div.row a {\n width: fit-content;\n font-size: 14px;\n opacity: 0.6;\n display: block;\n text-decoration: none;\n margin-bottom: 1rem;\n}\nfooter div.rows div.row a:hover {\n opacity: 0.8;\n}\nfooter p {\n opacity: 0.7;\n}\n\n@media (max-width: 1000px) {\n footer div.rows {\n grid-auto-flow: row;\n grid-template-columns: repeat(2, 1fr);\n }\n footer div.rows div.row {\n margin-bottom: 1rem;\n }\n}\n@media (max-width: 600px) {\n footer div.rows {\n grid-template-columns: 1fr;\n }\n}"]} \ No newline at end of file diff --git a/static/css/home.css b/static/css/home.css index 9fd6a66..b65e6a3 100644 --- a/static/css/home.css +++ b/static/css/home.css @@ -3,6 +3,9 @@ header { margin: 0 auto; font-size: 40px; } +header h1 { + line-height: 4rem; +} @media (max-width: 800px) { header { diff --git a/static/css/home.css.map b/static/css/home.css.map index d98ac12..f7db555 100644 --- a/static/css/home.css.map +++ b/static/css/home.css.map @@ -1 +1 @@ -{"version":3,"sources":["home.sass","_vars.sass","home.css"],"names":[],"mappings":"AAEA;EACI,gBCQS;EDPT,cAAA;EACA,eAAA;AEDJ;;AFGA;EACI;IACI,eAAA;EEAN;EFEM;IACI,iBAAA;EEAV;AACF","file":"home.css","sourcesContent":["@import '_vars'\n\nheader\n max-width: $main-width\n margin: 0 auto\n font-size: 40px\n\n@media (max-width: 800px)\n header\n font-size: 26px\n \n h1\n line-height: 3rem\n","$text: #f3f3f3\n$background: #03060d\n$secondary: #253038\n$border: #161d2bb0\n\n$primary: #922646\n$primary-light: #f45a88\n$accent: #28aaf0\n\n$edge: 5px\n\n$main-width: 800px\n$more-width: 1000px\n","header {\n max-width: 800px;\n margin: 0 auto;\n font-size: 40px;\n}\n\n@media (max-width: 800px) {\n header {\n font-size: 26px;\n }\n header h1 {\n line-height: 3rem;\n }\n}"]} \ No newline at end of file +{"version":3,"sources":["home.sass","_vars.sass","home.css"],"names":[],"mappings":"AAEA;EACI,gBCUS;EDTT,cAAA;EACA,eAAA;AEDJ;AFGI;EACI,iBAAA;AEDR;;AFGA;EACI;IACI,eAAA;EEAN;EFEM;IACI,iBAAA;EEAV;AACF","file":"home.css","sourcesContent":["@import '_vars'\n\nheader\n max-width: $main-width\n margin: 0 auto\n font-size: 40px\n\n h1\n line-height: 4rem\n\n@media (max-width: 800px)\n header\n font-size: 26px\n \n h1\n line-height: 3rem\n","$text: #f3f3f3\n$background: #03060d\n$secondary: #252a38\n$border: #161d2bb0\n\n$primary: #b53d61\n$primary-light: #f45a88\n$primary-glow: #f45a8861\n$primary-soft: #f79ab624\n$accent: #28aaf0\n\n$edge: 5px\n\n$main-width: 800px\n$more-width: 1000px\n","header {\n max-width: 800px;\n margin: 0 auto;\n font-size: 40px;\n}\nheader h1 {\n line-height: 4rem;\n}\n\n@media (max-width: 800px) {\n header {\n font-size: 26px;\n }\n header h1 {\n line-height: 3rem;\n }\n}"]} \ No newline at end of file diff --git a/static/css/home.sass b/static/css/home.sass index 2ad88fb..77edbee 100644 --- a/static/css/home.sass +++ b/static/css/home.sass @@ -5,6 +5,9 @@ header margin: 0 auto font-size: 40px + h1 + line-height: 4rem + @media (max-width: 800px) header font-size: 26px diff --git a/static/css/input.css b/static/css/input.css new file mode 100644 index 0000000..7bc2404 --- /dev/null +++ b/static/css/input.css @@ -0,0 +1,48 @@ +button { + line-height: 2; + cursor: pointer; + font-size: 16px; + border-radius: 5px; + padding: 0.7rem 1.5rem; + font-weight: 600; + color: #f3f3f3; + background: #b53d61; + transition: box-shadow 0.2s; +} +button:hover { + filter: brightness(1.2); +} +button.special { + box-shadow: 0 0 20px rgba(244, 90, 136, 0.3803921569); +} +button.special:hover { + box-shadow: 0 0 20px #b53d61; +} +button.secondary { + color: #f3f3f3; + background: #252a38; + border: 1px solid rgba(22, 29, 43, 0.6901960784); +} +button svg, button img { + height: 24px; + display: inline-block; + vertical-align: middle; + filter: invert(180); +} + +input:not([type=checkbox]):not([type=radio]) { + width: 100%; + font-size: 18px; + border-radius: 5px; + padding: 0.5rem 1rem; + color: #f3f3f3; + background: #252a38; + border: 1px solid #b53d61; +} +input:not([type=checkbox]):not([type=radio]):focus { + outline: none; +} + +input[type=radio] { + filter: hue-rotate(50deg); +}/*# sourceMappingURL=input.css.map */ \ No newline at end of file diff --git a/static/css/input.css.map b/static/css/input.css.map new file mode 100644 index 0000000..9e4b775 --- /dev/null +++ b/static/css/input.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["input.sass","_vars.sass","input.css"],"names":[],"mappings":"AAEA;EACI,cAAA;EACA,eAAA;EACA,eAAA;EACA,kBCKG;EDJH,sBAAA;EACA,gBAAA;EAEA,cCVG;EDWH,mBCNM;EDQN,2BAAA;AEHJ;AFKI;EACI,uBAAA;AEHR;AFKI;EACI,qDAAA;AEHR;AFKQ;EACI,4BAAA;AEHZ;AFKI;EACI,cCzBD;ED0BC,mBCxBI;EDyBJ,gDAAA;AEHR;AFKI;EACI,YAAA;EACA,qBAAA;EACA,sBAAA;EACA,mBAAA;AEHR;;AFKA;EACI,WAAA;EACA,eAAA;EACA,kBC3BG;ED4BH,oBAAA;EAEA,cCzCG;ED0CH,mBCxCQ;EDyCR,yBAAA;AEHJ;AFKI;EACI,aAAA;AEHR;;AFKA;EACI,yBAAA;AEFJ","file":"input.css","sourcesContent":["@import '_vars'\n\nbutton\n line-height: 2\n cursor: pointer\n font-size: 16px\n border-radius: $edge\n padding: 0.7rem 1.5rem\n font-weight: 600\n\n color: $text\n background: $primary\n\n transition: box-shadow 0.2s\n\n &:hover\n filter: brightness(1.2)\n\n &.special\n box-shadow: 0 0 20px $primary-glow\n\n &:hover\n box-shadow: 0 0 20px $primary\n\n &.secondary\n color: $text\n background: $secondary\n border: 1px solid $border\n\n svg, img\n height: 24px\n display: inline-block\n vertical-align: middle\n filter: invert(180)\n\ninput:not([type=\"checkbox\"]):not([type=\"radio\"])\n width: 100%\n font-size: 18px\n border-radius: $edge\n padding: 0.5rem 1rem\n\n color: $text\n background: $secondary\n border: 1px solid $primary\n\n &:focus\n outline: none\n\ninput[type=\"radio\"]\n filter: hue-rotate(50deg)\n","$text: #f3f3f3\n$background: #03060d\n$secondary: #252a38\n$border: #161d2bb0\n\n$primary: #b53d61\n$primary-light: #f45a88\n$primary-glow: #f45a8861\n$primary-soft: #f79ab624\n$accent: #28aaf0\n\n$edge: 5px\n\n$main-width: 800px\n$more-width: 1000px\n","button {\n line-height: 2;\n cursor: pointer;\n font-size: 16px;\n border-radius: 5px;\n padding: 0.7rem 1.5rem;\n font-weight: 600;\n color: #f3f3f3;\n background: #b53d61;\n transition: box-shadow 0.2s;\n}\nbutton:hover {\n filter: brightness(1.2);\n}\nbutton.special {\n box-shadow: 0 0 20px rgba(244, 90, 136, 0.3803921569);\n}\nbutton.special:hover {\n box-shadow: 0 0 20px #b53d61;\n}\nbutton.secondary {\n color: #f3f3f3;\n background: #252a38;\n border: 1px solid rgba(22, 29, 43, 0.6901960784);\n}\nbutton svg, button img {\n height: 24px;\n display: inline-block;\n vertical-align: middle;\n filter: invert(180);\n}\n\ninput:not([type=checkbox]):not([type=radio]) {\n width: 100%;\n font-size: 18px;\n border-radius: 5px;\n padding: 0.5rem 1rem;\n color: #f3f3f3;\n background: #252a38;\n border: 1px solid #b53d61;\n}\ninput:not([type=checkbox]):not([type=radio]):focus {\n outline: none;\n}\n\ninput[type=radio] {\n filter: hue-rotate(50deg);\n}"]} \ No newline at end of file diff --git a/static/css/input.sass b/static/css/input.sass new file mode 100644 index 0000000..8d78266 --- /dev/null +++ b/static/css/input.sass @@ -0,0 +1,50 @@ +@import '_vars' + +button + line-height: 2 + cursor: pointer + font-size: 16px + border-radius: $edge + padding: 0.7rem 1.5rem + font-weight: 600 + + color: $text + background: $primary + + transition: box-shadow 0.2s + + &:hover + filter: brightness(1.2) + + &.special + box-shadow: 0 0 20px $primary-glow + + &:hover + box-shadow: 0 0 20px $primary + + &.secondary + color: $text + background: $secondary + border: 1px solid $border + + svg, img + height: 24px + display: inline-block + vertical-align: middle + filter: invert(180) + +input:not([type="checkbox"]):not([type="radio"]) + width: 100% + font-size: 18px + border-radius: $edge + padding: 0.5rem 1rem + + color: $text + background: $secondary + border: 1px solid $primary + + &:focus + outline: none + +input[type="radio"] + filter: hue-rotate(50deg) diff --git a/static/css/navbar.css b/static/css/navbar.css index 3f45339..9a98d1c 100644 --- a/static/css/navbar.css +++ b/static/css/navbar.css @@ -53,7 +53,7 @@ nav #menu { position: absolute; top: 5rem; right: 2rem; - background: #253038; + background: #252a38; padding: 1rem 0; border-radius: 5px; -webkit-backdrop-filter: blur(4px); diff --git a/static/css/navbar.css.map b/static/css/navbar.css.map index 68c3653..5714f8d 100644 --- a/static/css/navbar.css.map +++ b/static/css/navbar.css.map @@ -1 +1 @@ -{"version":3,"sources":["navbar.sass","navbar.css","_vars.sass"],"names":[],"mappings":"AAEA;EACI,aAAA;EACA,mBAAA;EACA,kBAAA;ACDJ;ADGI;EACI,qBAAA;EACA,eEHQ;EFIR,gBAAA;EACA,eAAA;EACA,YAAA;EACA,WAAA;EAEA,iBAAA;EACA,uBAAA;ACFR;ADII;EACI,gBAAA;EACA,eAAA;EACA,yBAAA;KAAA,sBAAA;UAAA,iBAAA;ACFR;ADIQ;EACI,eAAA;EACA,kBAAA;EACA,SAAA;ACFZ;ADKI;EACI,YAAA;ACHR;ADMI;EACI,aAAA;EACA,eAAA;ACJR;;ADOI;EACI,eAAA;EACA,gBAAA;EACA,iBAAA;EACA,qBAAA;EACA,sBAAA;ACJR;ADMQ;EACI,cExCI;ADoChB;;ADMA;EACI;IACI,sCAAA;IACA,UAAA;IAEA,YAAA;IACA,YAAA;IACA,kBAAA;IACA,SAAA;IACA,WAAA;IACA,mBExDI;IFyDJ,eAAA;IACA,kBEnDD;IFoDC,kCAAA;YAAA,0BAAA;IACA,gDAAA;IAEA,wCAAA;ECLN;EDOM;IACI,UAAA;IACA,kBAAA;ECLV;EDOM;IACI,eAAA;IACA,cAAA;IACA,iBAAA;ECLV;EDQM;IACI,eEvEI;EDiEd;EDQM;IACI,cAAA;IACA,gBAAA;IACA,eAAA;IACA,YAAA;IACA,WAAA;IACA,eAAA;IACA,gBAAA;ECNV;EDQU;IACI,wBAAA;ECNd;AACF;ADOA;EAEQ;IACI,aAAA;ECNV;AACF","file":"navbar.css","sourcesContent":["@import '_vars'\n\nnav\n display: flex\n align-items: center\n position: relative\n\n >.logo\n display: inline-block\n stroke: $primary-light\n min-height: 40px\n min-width: 40px\n height: 40px\n width: 40px\n\n margin-right: 8px\n transition: stroke 0.2s\n\n >h1\n font-weight: 500\n font-size: 20px\n user-select: none\n\n mark\n font-size: 1rem\n position: relative\n top: -3px\n\n\n >span\n flex-grow: 1\n\n\n #menu\n display: none\n cursor: pointer\n\n.link-menu\n >a\n font-size: 14px\n font-weight: 600\n margin-left: 2rem\n text-decoration: none\n transition: color 0.1s\n\n &:hover\n color: $primary-light\n\n@media (max-width: 800px)\n .link-menu\n transform: scale(0.8) translateX(1rem)\n opacity: 0\n\n z-index: 100\n width: 200px\n position: absolute\n top: 5rem\n right: 2rem\n background: $secondary\n padding: 1rem 0\n border-radius: $edge\n backdrop-filter: blur(4px)\n border: 1px solid $border\n\n transition: transform 0.2s, opacity 0.2s\n\n &.open\n opacity: 1\n transform: inherit\n\n a\n font-size: 20px\n display: block\n line-height: 3rem\n\n nav\n .logo\n stroke: $primary-light\n\n #menu\n display: block\n min-height: 32px\n min-width: 32px\n height: 32px\n width: 32px\n cursor: pointer\n transition: 0.5s\n\n &.active\n transform: rotate(90deg)\n\n@media (max-width: 400px)\n nav\n h1\n display: none","nav {\n display: flex;\n align-items: center;\n position: relative;\n}\nnav > .logo {\n display: inline-block;\n stroke: #f45a88;\n min-height: 40px;\n min-width: 40px;\n height: 40px;\n width: 40px;\n margin-right: 8px;\n transition: stroke 0.2s;\n}\nnav > h1 {\n font-weight: 500;\n font-size: 20px;\n user-select: none;\n}\nnav > h1 mark {\n font-size: 1rem;\n position: relative;\n top: -3px;\n}\nnav > span {\n flex-grow: 1;\n}\nnav #menu {\n display: none;\n cursor: pointer;\n}\n\n.link-menu > a {\n font-size: 14px;\n font-weight: 600;\n margin-left: 2rem;\n text-decoration: none;\n transition: color 0.1s;\n}\n.link-menu > a:hover {\n color: #f45a88;\n}\n\n@media (max-width: 800px) {\n .link-menu {\n transform: scale(0.8) translateX(1rem);\n opacity: 0;\n z-index: 100;\n width: 200px;\n position: absolute;\n top: 5rem;\n right: 2rem;\n background: #253038;\n padding: 1rem 0;\n border-radius: 5px;\n backdrop-filter: blur(4px);\n border: 1px solid rgba(22, 29, 43, 0.6901960784);\n transition: transform 0.2s, opacity 0.2s;\n }\n .link-menu.open {\n opacity: 1;\n transform: inherit;\n }\n .link-menu a {\n font-size: 20px;\n display: block;\n line-height: 3rem;\n }\n nav .logo {\n stroke: #f45a88;\n }\n nav #menu {\n display: block;\n min-height: 32px;\n min-width: 32px;\n height: 32px;\n width: 32px;\n cursor: pointer;\n transition: 0.5s;\n }\n nav #menu.active {\n transform: rotate(90deg);\n }\n}\n@media (max-width: 400px) {\n nav h1 {\n display: none;\n }\n}","$text: #f3f3f3\n$background: #03060d\n$secondary: #253038\n$border: #161d2bb0\n\n$primary: #922646\n$primary-light: #f45a88\n$accent: #28aaf0\n\n$edge: 5px\n\n$main-width: 800px\n$more-width: 1000px\n"]} \ No newline at end of file +{"version":3,"sources":["navbar.sass","navbar.css","_vars.sass"],"names":[],"mappings":"AAEA;EACI,aAAA;EACA,mBAAA;EACA,kBAAA;ACDJ;ADGI;EACI,qBAAA;EACA,eEHQ;EFIR,gBAAA;EACA,eAAA;EACA,YAAA;EACA,WAAA;EAEA,iBAAA;EACA,uBAAA;ACFR;ADII;EACI,gBAAA;EACA,eAAA;EACA,yBAAA;KAAA,sBAAA;UAAA,iBAAA;ACFR;ADIQ;EACI,eAAA;EACA,kBAAA;EACA,SAAA;ACFZ;ADKI;EACI,YAAA;ACHR;ADMI;EACI,aAAA;EACA,eAAA;ACJR;;ADOI;EACI,eAAA;EACA,gBAAA;EACA,iBAAA;EACA,qBAAA;EACA,sBAAA;ACJR;ADMQ;EACI,cExCI;ADoChB;;ADMA;EACI;IACI,sCAAA;IACA,UAAA;IAEA,YAAA;IACA,YAAA;IACA,kBAAA;IACA,SAAA;IACA,WAAA;IACA,mBExDI;IFyDJ,eAAA;IACA,kBEjDD;IFkDC,kCAAA;YAAA,0BAAA;IACA,gDAAA;IAEA,wCAAA;ECLN;EDOM;IACI,UAAA;IACA,kBAAA;ECLV;EDOM;IACI,eAAA;IACA,cAAA;IACA,iBAAA;ECLV;EDQM;IACI,eEvEI;EDiEd;EDQM;IACI,cAAA;IACA,gBAAA;IACA,eAAA;IACA,YAAA;IACA,WAAA;IACA,eAAA;IACA,gBAAA;ECNV;EDQU;IACI,wBAAA;ECNd;AACF;ADOA;EAEQ;IACI,aAAA;ECNV;AACF","file":"navbar.css","sourcesContent":["@import '_vars'\n\nnav\n display: flex\n align-items: center\n position: relative\n\n >.logo\n display: inline-block\n stroke: $primary-light\n min-height: 40px\n min-width: 40px\n height: 40px\n width: 40px\n\n margin-right: 8px\n transition: stroke 0.2s\n\n >h1\n font-weight: 500\n font-size: 20px\n user-select: none\n\n mark\n font-size: 1rem\n position: relative\n top: -3px\n\n\n >span\n flex-grow: 1\n\n\n #menu\n display: none\n cursor: pointer\n\n.link-menu\n >a\n font-size: 14px\n font-weight: 600\n margin-left: 2rem\n text-decoration: none\n transition: color 0.1s\n\n &:hover\n color: $primary-light\n\n@media (max-width: 800px)\n .link-menu\n transform: scale(0.8) translateX(1rem)\n opacity: 0\n\n z-index: 100\n width: 200px\n position: absolute\n top: 5rem\n right: 2rem\n background: $secondary\n padding: 1rem 0\n border-radius: $edge\n backdrop-filter: blur(4px)\n border: 1px solid $border\n\n transition: transform 0.2s, opacity 0.2s\n\n &.open\n opacity: 1\n transform: inherit\n\n a\n font-size: 20px\n display: block\n line-height: 3rem\n\n nav\n .logo\n stroke: $primary-light\n\n #menu\n display: block\n min-height: 32px\n min-width: 32px\n height: 32px\n width: 32px\n cursor: pointer\n transition: 0.5s\n\n &.active\n transform: rotate(90deg)\n\n@media (max-width: 400px)\n nav\n h1\n display: none","nav {\n display: flex;\n align-items: center;\n position: relative;\n}\nnav > .logo {\n display: inline-block;\n stroke: #f45a88;\n min-height: 40px;\n min-width: 40px;\n height: 40px;\n width: 40px;\n margin-right: 8px;\n transition: stroke 0.2s;\n}\nnav > h1 {\n font-weight: 500;\n font-size: 20px;\n user-select: none;\n}\nnav > h1 mark {\n font-size: 1rem;\n position: relative;\n top: -3px;\n}\nnav > span {\n flex-grow: 1;\n}\nnav #menu {\n display: none;\n cursor: pointer;\n}\n\n.link-menu > a {\n font-size: 14px;\n font-weight: 600;\n margin-left: 2rem;\n text-decoration: none;\n transition: color 0.1s;\n}\n.link-menu > a:hover {\n color: #f45a88;\n}\n\n@media (max-width: 800px) {\n .link-menu {\n transform: scale(0.8) translateX(1rem);\n opacity: 0;\n z-index: 100;\n width: 200px;\n position: absolute;\n top: 5rem;\n right: 2rem;\n background: #252a38;\n padding: 1rem 0;\n border-radius: 5px;\n backdrop-filter: blur(4px);\n border: 1px solid rgba(22, 29, 43, 0.6901960784);\n transition: transform 0.2s, opacity 0.2s;\n }\n .link-menu.open {\n opacity: 1;\n transform: inherit;\n }\n .link-menu a {\n font-size: 20px;\n display: block;\n line-height: 3rem;\n }\n nav .logo {\n stroke: #f45a88;\n }\n nav #menu {\n display: block;\n min-height: 32px;\n min-width: 32px;\n height: 32px;\n width: 32px;\n cursor: pointer;\n transition: 0.5s;\n }\n nav #menu.active {\n transform: rotate(90deg);\n }\n}\n@media (max-width: 400px) {\n nav h1 {\n display: none;\n }\n}","$text: #f3f3f3\n$background: #03060d\n$secondary: #252a38\n$border: #161d2bb0\n\n$primary: #b53d61\n$primary-light: #f45a88\n$primary-glow: #f45a8861\n$primary-soft: #f79ab624\n$accent: #28aaf0\n\n$edge: 5px\n\n$main-width: 800px\n$more-width: 1000px\n"]} \ No newline at end of file diff --git a/static/js/menu.js b/static/js/menu.js new file mode 100644 index 0000000..e21552e --- /dev/null +++ b/static/js/menu.js @@ -0,0 +1,14 @@ +window.addEventListener('load', function() { + menu = document.getElementById('menu'); + links = document.getElementById('links'); + + menu.onclick = function() { + menu.classList.toggle('active'); + links.classList.toggle('open'); + } + + links.onclick = function() { + menu.classList.remove('active'); + links.classList.remove('open'); + } +}); diff --git a/templates/index.html b/templates/index.html index d8feb1b..09c5d70 100644 --- a/templates/index.html +++ b/templates/index.html @@ -2,7 +2,19 @@
-

Free Generative AI for everyone

+

Free Generative AI for Everyone

+ + + + + +
diff --git a/templates/legal/imprint.html b/templates/legal/imprint.html new file mode 100644 index 0000000..9a5b1d8 --- /dev/null +++ b/templates/legal/imprint.html @@ -0,0 +1,18 @@ +{% include 'parts/begin.html' %} + +
+

Impressum (Imprint)

+

+ My name is Walter Hartwell White. I live at 308 Negra Arroyo Lane, Albuquerque, New Mexico, 87104. +

+ +

+ Hierbei handelt es sich gemäß § 5 TMG um eine private Internetseite für Freunde und Bekannte ohne kommerzielle Interessen. + Entsprechend entfällt die + Notwendigkeit + + eines Impressums. +

+
+ +{% include 'parts/end.html' %} diff --git a/templates/legal/privacy.html b/templates/legal/privacy.html new file mode 100644 index 0000000..a0860f4 --- /dev/null +++ b/templates/legal/privacy.html @@ -0,0 +1,72 @@ +{% include 'parts/begin.html' %} + +
+

Privacy

+

+ We can gurantee that the following information is completely up-to-date. We don't have lawyers, + but write this pricacy policy to the best of our knowledge and belief. +

+ +

Data we collect

+

+

    +
  • + IP address, browser user agent, which sites you visited when using which HTTP method +
      +
    • + We use + Cloudflare + to protect against botnets, DDoS and other attacks. +
    • +
    • + The data is kept as long as I don't have a girlfriend. +
    • +
    +
  • +
+

+ +

How you can protect your privacy

+

+ Privacy is not just a human right, but one of our biggest concerns. + Thus, we provide you some information about how you can avoid tracking. +

+ +

Use the NoScript browser extension

+

+ The drawbacks of using NoScript are that some features may not work and that you have to manually allow certain scripts etc. +

+ We personally don't recommend disabling JavaScript on our website, but if you are really concerned about your privacy, go ahead. +

+ +

Clear your browser history and cookies

+

+ We mainly use cookies to provide functionality, e.g. to store your session token, so you do not have to log in every time you visit our website. + But malware could attack your browser and steal your cookies, which is why you should clear your cookies regularly. + Additionally, malware could decrypt and read your browser password database, which is why you should use a secure password manager instead. + We recommend KeePass and Bitwarden. + You can use the built-in incognito mode of your browser or clear your history and cookies manually. + Additionally, you can use a browser extension like + Cookie AutoDelete + to automatically delete cookies. +

+ +

Other attack vectors (browser, OS, ...)

+

+ There are a lot of other different ways your privacy could be compromised, but we cannot list them all here. + You can find more information about how to protect your privacy on the following websites: +

+

+
+ +{% include 'parts/end.html' %} \ No newline at end of file diff --git a/templates/legal/terms.html b/templates/legal/terms.html new file mode 100644 index 0000000..2060d76 --- /dev/null +++ b/templates/legal/terms.html @@ -0,0 +1,123 @@ +{% include 'parts/begin.html' %} + +
+

Terms of Service

+

+ Please contact us if you have any questions regarding our Terms of Service. +

+ +

Definitions

+

+

    +
  • We = the operators of this service, as specified in + the imprint + .
  • +
  • Our services = any platforms, websites, apps, desktop programs, APIs, etc. that we operate.
  • +
+

+ +

Our ethics

+

+ Of course, we can't influence the law, but we think that just because something is legal, it doesn't mean it's ethical. + Same goes the other way around. For this reason, we have a set of ethics that we follow. Please keep in mind that we (and you!) + obviously still have to follow the law and that our ethics are not legally binding. +

+

+ To provide better transparency, we have a list of things that are not allowed on any of our platforms or services. +

+ +

Not allowed

+

+ +

    +
  1. Anything violating the UN constitution of human rights
  2. +
  3. Endorsement, depiction 1 or using our service(s) to perform any kind of violence - including: +
      +
    1. Terrorism 1
    2. +
    3. Organized crime 1
    4. +
    5. Animal abuse 1
    6. +
    7. Verbal violence (hate speech) 1
    8. +
    9. Sexual violence (non-consensual sex)
    10. +
    11. Self-harm and suicide
    12. + ... +
    +
  4. Endorsement, usage of our service(s) to perform any kind of discrimination - including: +
      +
    1. Racism
    2. +
    3. Sexism
    4. +
    5. Homophobia
    6. +
    7. Transphobia
    8. +
    9. Xenophobia
    10. +
    11. Casteism
    12. +
    13. Ableism
    14. + ... +
    +
  5. Endorsement, depiction or using our service(s) to perform any kind of: +
      +
    1. Pedophilia (this includes drawings/animated media and written fantasies!)
    2. +
    3. Necrophilia
    4. +
    5. Gambling
    6. +
    7. Exploitation and black hat hacking
    8. +
    +
  6. + +
  7. Spreading of harassment, agitation
  8. +
  9. "Doxxing"/posting of private chats. You are not allowed to spread content others have created without their permission.
  10. +
  11. Malicious links with IP/PII loggers ("grabbers") etc.
  12. +
  13. (Especially intentional) spreading of fake news/fake information
  14. +
  15. Automation and spam (ask first!)
  16. +
  17. Commercial self-promotion (this does not include linking your social media profile)
  18. +
+

+ + 1 You are allowed to talk about these topics, but do not endorse them or depict them in any way. +

It goes without saying that illegal content, is forbidden, too! Copyright is a thing, if you like it or not.

+ +

What you can expect from us

+

We're working on getting all of these points. +

    +
  1. You get notified when we're changing our Terms of Service. (How?)
  2. +
  3. We provide a history of our Terms of Service. (Just check our source code)
  4. +
  5. Your account won't be deleted without us stating a clear reason.
  6. +
  7. We won't ever sell your personal data to advertisers.
  8. +
  9. + When asked, we will give the government as little information as possible about you, + unless we genuinely think you have made a strong violation of our ethics. +
  10. +
  11. You maintain ownership of the content you create and upload on our platforms.
  12. +
  13. We only collect logs when necessary to ensure the functionality of our service.
  14. +
  15. You can delete all your data at any time.
  16. +
  17. You can retrieve an archive of your data at any time.
  18. +
  19. We offer a hidden service, which especially comes in handy if you live in a country with a lot of censorship.
  20. +
+

+ +

What we expect from you

+

We ask you to... +

    +
  1. Follow our ethics
  2. +
  3. Follow the German law
  4. +
  5. Use our APIs etc. responsibly and don't spam
  6. +
+

+ +

Please note though, that...

+

+

    +
  1. + We work with third parties to provide some of our Services. + For example, third party providers may provide the login system. + These providers are bound by their Privacy Policies to safeguard that information. + If you use other third-party in connection with our services, + their Terms of Service and Privacy Policies govern your use of those services. +
  2. +
  3. + We collect some data, but only when necessary to ensure the functionality of our service. + You can learn more on our Privacy Policy. +
  4. +
+

+
+ + +{% include 'parts/end.html' %} diff --git a/templates/panel.html b/templates/panel.html new file mode 100644 index 0000000..3acaadd --- /dev/null +++ b/templates/panel.html @@ -0,0 +1,12 @@ +{% include 'parts/begin.html' %} + + +
+

Panel

+

+ Warning + this is a very early prototype of NovaAI. Do not use it in production. + You have been warned. +

+
+{% include 'parts/end.html' %}