diff --git a/docs/legal-log-retention.md b/docs/legal-log-retention.md new file mode 100644 index 00000000..ab0ced39 --- /dev/null +++ b/docs/legal-log-retention.md @@ -0,0 +1,48 @@ +# Evidence for the technical-log retention disclosure + +Checked read-only on 2026-10-17. No production configuration was changed. + +## Application code + +In lanis_api (`~/projects/lanis`), `api/queue/task_queue.py` configures Python +logging with `logging.basicConfig(level=logging.INFO)` and no file handler. +The API and queue log application events and exceptions, including usernames, +school identifiers, and task names. Uvicorn's default access log records the +client address, HTTP method, requested path (including query string), protocol, +and response status. Do not claim these logs are anonymous or contain only IPs. +No application-owned backup or retention job for these logs was found. + +## Actual standard-backend service and host + +`systemctl --user show lanis-api.service` identifies the running service as +working in `~/production/lanis`, launched with `python -m uvicorn api.api:app` +without `--no-access-log`, and `StandardOutput=journal` / `StandardError=inherit`. +The active user service, rather than the repository's optional Docker deployment +or the fallback shell launcher in `deploy.sh`, determines the published wording. + +`systemd-analyze cat-config systemd/journald.conf` shows: + +- `/usr/lib/systemd/journald.conf.d/40-rpi-volatile-storage.conf` sets + `Storage=volatile` (journal in `/run/log/journal`). +- No explicit `MaxRetentionSec`, `RuntimeMaxUse`, or `RuntimeKeepFree` override. + Thus there is no configured day-based expiry; the journal's runtime space + limits govern removal of older archived entries. +- The default `MaxFileSec=1month` is a file-rotation setting, not a promise that + entries are deleted after one month. +- `ForwardToSyslog=yes`, but rsyslog is inactive and no rsyslog configuration is + installed. No separate syslog file retention was identified. + +A host reboot loses the volatile journal; restarting just the API does not. +The application's account-deletion endpoint does not delete journal entries. +No dedicated journal backup was found in the inspected user/system timers, +user crontab, or application code. The public text deliberately describes the +absence of **application-created** backups rather than making a claim about +all possible infrastructure snapshots or external providers' storage. + +The separate `lanis-usage.service` samples CPU/RAM and aggregate data-directory +size with a 90-day file cleanup. It does not capture individual requests or +account identities and is not the account-linked usage statistics store. + +Recheck this disclosure if service logging, journal persistence/limits, +forwarding, or backups change. This record does not establish retention of +independent hosting/CDN providers' own logs. diff --git a/index.html b/index.html index c5513736..e5897bf5 100644 --- a/index.html +++ b/index.html @@ -113,10 +113,8 @@ } - - - - + + diff --git a/public/fonts/README.md b/public/fonts/README.md new file mode 100644 index 00000000..1775ad23 --- /dev/null +++ b/public/fonts/README.md @@ -0,0 +1,19 @@ +# Self-hosted fonts + +Outfit (300–700), JetBrains Mono (400–500), Syne (400–800), and Fraunces +(normal 300–700, italic 300) are served from this origin. The WOFF2 files retain +all subsets returned by the Google Fonts CSS API, including Latin extended +characters. CSS retains `font-display: swap` and the original Unicode ranges. +Fraunces retains its optical-size range of 9–144. + +Downloaded on 2026-10-17 from: + +``` +https://fonts.googleapis.com/css2?family=Outfit:wght@300..700&family=JetBrains+Mono:wght@400..500&family=Syne:wght@400..800&family=Fraunces:ital,opsz,wght@0,9..144,300..700;1,9..144,300&display=swap +``` + +This URL is provenance only; the browser loads `/fonts/fonts.css` and local +WOFF2 files. Original download URLs are recorded in `sources.json`. +Each family is distributed under the SIL Open Font License 1.1; its copyright +notice and license are included in the corresponding `*-OFL.txt` file, sourced +from `https://github.com/google/fonts/tree/main/ofl/`. diff --git a/public/fonts/fonts.css b/public/fonts/fonts.css new file mode 100644 index 00000000..f38808e7 --- /dev/null +++ b/public/fonts/fonts.css @@ -0,0 +1,154 @@ +/* Self-hosted Google Fonts. Sources and licenses: README.md. */ +/* vietnamese */ +@font-face { + font-family: 'Fraunces'; + font-style: italic; + font-weight: 300; + font-display: swap; + src: url(/fonts/fraunces-italic-vietnamese-53af843e.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Fraunces'; + font-style: italic; + font-weight: 300; + font-display: swap; + src: url(/fonts/fraunces-italic-latin-ext-0bead994.woff2) format('woff2'); + unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Fraunces'; + font-style: italic; + font-weight: 300; + font-display: swap; + src: url(/fonts/fraunces-italic-latin-c63fd26c.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +/* vietnamese */ +@font-face { + font-family: 'Fraunces'; + font-style: normal; + font-weight: 300 700; + font-display: swap; + src: url(/fonts/fraunces-normal-vietnamese-a4c5fe4f.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Fraunces'; + font-style: normal; + font-weight: 300 700; + font-display: swap; + src: url(/fonts/fraunces-normal-latin-ext-7cdca5ec.woff2) format('woff2'); + unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Fraunces'; + font-style: normal; + font-weight: 300 700; + font-display: swap; + src: url(/fonts/fraunces-normal-latin-6a837066.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +/* cyrillic-ext */ +@font-face { + font-family: 'JetBrains Mono'; + font-style: normal; + font-weight: 400 500; + font-display: swap; + src: url(/fonts/jetbrains-mono-normal-cyrillic-ext-6b5e37b5.woff2) format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} +/* cyrillic */ +@font-face { + font-family: 'JetBrains Mono'; + font-style: normal; + font-weight: 400 500; + font-display: swap; + src: url(/fonts/jetbrains-mono-normal-cyrillic-eb83d8d4.woff2) format('woff2'); + unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* greek */ +@font-face { + font-family: 'JetBrains Mono'; + font-style: normal; + font-weight: 400 500; + font-display: swap; + src: url(/fonts/jetbrains-mono-normal-greek-99e40033.woff2) format('woff2'); + unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF; +} +/* vietnamese */ +@font-face { + font-family: 'JetBrains Mono'; + font-style: normal; + font-weight: 400 500; + font-display: swap; + src: url(/fonts/jetbrains-mono-normal-vietnamese-c4064400.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'JetBrains Mono'; + font-style: normal; + font-weight: 400 500; + font-display: swap; + src: url(/fonts/jetbrains-mono-normal-latin-ext-b19c2080.woff2) format('woff2'); + unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'JetBrains Mono'; + font-style: normal; + font-weight: 400 500; + font-display: swap; + src: url(/fonts/jetbrains-mono-normal-latin-cc27b304.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +/* latin-ext */ +@font-face { + font-family: 'Outfit'; + font-style: normal; + font-weight: 300 700; + font-display: swap; + src: url(/fonts/outfit-normal-latin-ext-a98bd924.woff2) format('woff2'); + unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Outfit'; + font-style: normal; + font-weight: 300 700; + font-display: swap; + src: url(/fonts/outfit-normal-latin-836b5877.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +/* greek */ +@font-face { + font-family: 'Syne'; + font-style: normal; + font-weight: 400 800; + font-display: swap; + src: url(/fonts/syne-normal-greek-420d2e34.woff2) format('woff2'); + unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF; +} +/* latin-ext */ +@font-face { + font-family: 'Syne'; + font-style: normal; + font-weight: 400 800; + font-display: swap; + src: url(/fonts/syne-normal-latin-ext-6de212dd.woff2) format('woff2'); + unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Syne'; + font-style: normal; + font-weight: 400 800; + font-display: swap; + src: url(/fonts/syne-normal-latin-0b86590d.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} diff --git a/public/fonts/fraunces-OFL.txt b/public/fonts/fraunces-OFL.txt new file mode 100644 index 00000000..22fa7ce5 --- /dev/null +++ b/public/fonts/fraunces-OFL.txt @@ -0,0 +1,93 @@ +Copyright 2018 The Fraunces Project Authors (https://github.com/undercasetype/Fraunces) + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/public/fonts/fraunces-italic-latin-c63fd26c.woff2 b/public/fonts/fraunces-italic-latin-c63fd26c.woff2 new file mode 100644 index 00000000..9de84728 Binary files /dev/null and b/public/fonts/fraunces-italic-latin-c63fd26c.woff2 differ diff --git a/public/fonts/fraunces-italic-latin-ext-0bead994.woff2 b/public/fonts/fraunces-italic-latin-ext-0bead994.woff2 new file mode 100644 index 00000000..f77c8460 Binary files /dev/null and b/public/fonts/fraunces-italic-latin-ext-0bead994.woff2 differ diff --git a/public/fonts/fraunces-italic-vietnamese-53af843e.woff2 b/public/fonts/fraunces-italic-vietnamese-53af843e.woff2 new file mode 100644 index 00000000..e2710961 Binary files /dev/null and b/public/fonts/fraunces-italic-vietnamese-53af843e.woff2 differ diff --git a/public/fonts/fraunces-normal-latin-6a837066.woff2 b/public/fonts/fraunces-normal-latin-6a837066.woff2 new file mode 100644 index 00000000..cb295bf0 Binary files /dev/null and b/public/fonts/fraunces-normal-latin-6a837066.woff2 differ diff --git a/public/fonts/fraunces-normal-latin-ext-7cdca5ec.woff2 b/public/fonts/fraunces-normal-latin-ext-7cdca5ec.woff2 new file mode 100644 index 00000000..b6e3e3a5 Binary files /dev/null and b/public/fonts/fraunces-normal-latin-ext-7cdca5ec.woff2 differ diff --git a/public/fonts/fraunces-normal-vietnamese-a4c5fe4f.woff2 b/public/fonts/fraunces-normal-vietnamese-a4c5fe4f.woff2 new file mode 100644 index 00000000..43126c27 Binary files /dev/null and b/public/fonts/fraunces-normal-vietnamese-a4c5fe4f.woff2 differ diff --git a/public/fonts/jetbrains-mono-normal-cyrillic-eb83d8d4.woff2 b/public/fonts/jetbrains-mono-normal-cyrillic-eb83d8d4.woff2 new file mode 100644 index 00000000..de39acbc Binary files /dev/null and b/public/fonts/jetbrains-mono-normal-cyrillic-eb83d8d4.woff2 differ diff --git a/public/fonts/jetbrains-mono-normal-cyrillic-ext-6b5e37b5.woff2 b/public/fonts/jetbrains-mono-normal-cyrillic-ext-6b5e37b5.woff2 new file mode 100644 index 00000000..289de931 Binary files /dev/null and b/public/fonts/jetbrains-mono-normal-cyrillic-ext-6b5e37b5.woff2 differ diff --git a/public/fonts/jetbrains-mono-normal-greek-99e40033.woff2 b/public/fonts/jetbrains-mono-normal-greek-99e40033.woff2 new file mode 100644 index 00000000..a53d52d6 Binary files /dev/null and b/public/fonts/jetbrains-mono-normal-greek-99e40033.woff2 differ diff --git a/public/fonts/jetbrains-mono-normal-latin-cc27b304.woff2 b/public/fonts/jetbrains-mono-normal-latin-cc27b304.woff2 new file mode 100644 index 00000000..4d09cda4 Binary files /dev/null and b/public/fonts/jetbrains-mono-normal-latin-cc27b304.woff2 differ diff --git a/public/fonts/jetbrains-mono-normal-latin-ext-b19c2080.woff2 b/public/fonts/jetbrains-mono-normal-latin-ext-b19c2080.woff2 new file mode 100644 index 00000000..82f96681 Binary files /dev/null and b/public/fonts/jetbrains-mono-normal-latin-ext-b19c2080.woff2 differ diff --git a/public/fonts/jetbrains-mono-normal-vietnamese-c4064400.woff2 b/public/fonts/jetbrains-mono-normal-vietnamese-c4064400.woff2 new file mode 100644 index 00000000..e38f5538 Binary files /dev/null and b/public/fonts/jetbrains-mono-normal-vietnamese-c4064400.woff2 differ diff --git a/public/fonts/jetbrainsmono-OFL.txt b/public/fonts/jetbrainsmono-OFL.txt new file mode 100644 index 00000000..821a3dac --- /dev/null +++ b/public/fonts/jetbrainsmono-OFL.txt @@ -0,0 +1,93 @@ +Copyright 2020 The JetBrains Mono Project Authors (https://github.com/JetBrains/JetBrainsMono) + +This Font Software is licensed under the SIL Open Font License, Version 1.1. + +This license is copied below, and is also available with a FAQ at: https://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/public/fonts/outfit-OFL.txt b/public/fonts/outfit-OFL.txt new file mode 100644 index 00000000..723cd447 --- /dev/null +++ b/public/fonts/outfit-OFL.txt @@ -0,0 +1,93 @@ +Copyright 2021 The Outfit Project Authors (https://github.com/Outfitio/Outfit-Fonts) + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +https://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/public/fonts/outfit-normal-latin-836b5877.woff2 b/public/fonts/outfit-normal-latin-836b5877.woff2 new file mode 100644 index 00000000..85e3332e Binary files /dev/null and b/public/fonts/outfit-normal-latin-836b5877.woff2 differ diff --git a/public/fonts/outfit-normal-latin-ext-a98bd924.woff2 b/public/fonts/outfit-normal-latin-ext-a98bd924.woff2 new file mode 100644 index 00000000..c54ceec8 Binary files /dev/null and b/public/fonts/outfit-normal-latin-ext-a98bd924.woff2 differ diff --git a/public/fonts/sources.json b/public/fonts/sources.json new file mode 100644 index 00000000..b7e2dd30 --- /dev/null +++ b/public/fonts/sources.json @@ -0,0 +1,87 @@ +[ + { + "file": "fraunces-italic-vietnamese-53af843e.woff2", + "source": "https://fonts.gstatic.com/s/fraunces/v38/6NUs8FyLNQOQZAnv9ZwNjucMHVn85Ni7emAe9lKqZTnbB-gzTK0K1ChJdt9hFwpX9W37lgF_mvIiQvTm.woff2", + "sha256": "1d618dae029a112a771fe7f8e73ea046ec1ce781c2fd1c8a4a0997085056bd9a" + }, + { + "file": "fraunces-italic-latin-ext-0bead994.woff2", + "source": "https://fonts.gstatic.com/s/fraunces/v38/6NUs8FyLNQOQZAnv9ZwNjucMHVn85Ni7emAe9lKqZTnbB-gzTK0K1ChJdt9hFwpX9W37lgF_mvMiQvTm.woff2", + "sha256": "a4ea6f549b50fbc4d055a6c9de2b931cf86afe41f504a4e175dd9dee7ed47047" + }, + { + "file": "fraunces-italic-latin-c63fd26c.woff2", + "source": "https://fonts.gstatic.com/s/fraunces/v38/6NUs8FyLNQOQZAnv9ZwNjucMHVn85Ni7emAe9lKqZTnbB-gzTK0K1ChJdt9hFwpX9W37lgF_mv0iQg.woff2", + "sha256": "d6d7a48008994000fc871bd66d98e247fdb41600edf2ddc1851ce2c6f3678de3" + }, + { + "file": "fraunces-normal-vietnamese-a4c5fe4f.woff2", + "source": "https://fonts.gstatic.com/s/fraunces/v38/6NU78FyLNQOQZAnv9bYEvDiIdE9Ea92uemAk_WBq8U_9v0c2Wa0KxCBTeO-U.woff2", + "sha256": "f18853f63a870ebef013e30e789d8d544f102e4acd94988e57c223d9c796ddf4" + }, + { + "file": "fraunces-normal-latin-ext-7cdca5ec.woff2", + "source": "https://fonts.gstatic.com/s/fraunces/v38/6NU78FyLNQOQZAnv9bYEvDiIdE9Ea92uemAk_WBq8U_9v0c2Wa0KxCFTeO-U.woff2", + "sha256": "a2930b27d13a228bd9ab6a49269b5f800237892ad560cb9dd7fab01b1620f88e" + }, + { + "file": "fraunces-normal-latin-6a837066.woff2", + "source": "https://fonts.gstatic.com/s/fraunces/v38/6NU78FyLNQOQZAnv9bYEvDiIdE9Ea92uemAk_WBq8U_9v0c2Wa0KxC9TeA.woff2", + "sha256": "7234ed860a9cc83045413c4faee63c960a8f2d1917adcf728119307d56e0d783" + }, + { + "file": "jetbrains-mono-normal-cyrillic-ext-6b5e37b5.woff2", + "source": "https://fonts.gstatic.com/s/jetbrainsmono/v24/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPx3cwhsk.woff2", + "sha256": "62213be8a78b42f1e29d1452d91e2f8b3e745572a9dd98d3941e39fa00b37d76" + }, + { + "file": "jetbrains-mono-normal-cyrillic-eb83d8d4.woff2", + "source": "https://fonts.gstatic.com/s/jetbrainsmono/v24/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPxTcwhsk.woff2", + "sha256": "e17cfd15fb96909d64095015f958207063a0c07191da3512df7d560a781aebdf" + }, + { + "file": "jetbrains-mono-normal-greek-99e40033.woff2", + "source": "https://fonts.gstatic.com/s/jetbrainsmono/v24/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPxPcwhsk.woff2", + "sha256": "0a557721b1f8b36d3f3f84442689a71ca4a744300abcb46a1953f51bfc663b66" + }, + { + "file": "jetbrains-mono-normal-vietnamese-c4064400.woff2", + "source": "https://fonts.gstatic.com/s/jetbrainsmono/v24/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPx_cwhsk.woff2", + "sha256": "c89b9cc0bc6262bd4f8d8494b6961601f3aefa829d08c2e3635f4d501d3a47c2" + }, + { + "file": "jetbrains-mono-normal-latin-ext-b19c2080.woff2", + "source": "https://fonts.gstatic.com/s/jetbrainsmono/v24/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPx7cwhsk.woff2", + "sha256": "db5ff4db83e580426280e9337a58dc57d3a83784a1b03ad80914651594441d52" + }, + { + "file": "jetbrains-mono-normal-latin-cc27b304.woff2", + "source": "https://fonts.gstatic.com/s/jetbrainsmono/v24/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPxDcwg.woff2", + "sha256": "83c005d49d8a6a50474c73a5a36ac0468076e9c4a29da7bdb14995d80560a5be" + }, + { + "file": "outfit-normal-latin-ext-a98bd924.woff2", + "source": "https://fonts.gstatic.com/s/outfit/v15/QGYvz_MVcBeNP4NJuktqQ4E.woff2", + "sha256": "0f53d1c03b3918d744a843b5039001ee31695ca1e255e3914188df81beb461e9" + }, + { + "file": "outfit-normal-latin-836b5877.woff2", + "source": "https://fonts.gstatic.com/s/outfit/v15/QGYvz_MVcBeNP4NJtEtq.woff2", + "sha256": "6c18d579fd87c3776be068b762cbc83fde3acb543d49eabd3ade842eb987e887" + }, + { + "file": "syne-normal-greek-420d2e34.woff2", + "source": "https://fonts.gstatic.com/s/syne/v24/8vIH7w4qzmVxm2NL9Hz_.woff2", + "sha256": "b9ade823e28b34c3a9c038ae698e659f64b66dabeed6c979e0bc347bfcc891a7" + }, + { + "file": "syne-normal-latin-ext-6de212dd.woff2", + "source": "https://fonts.gstatic.com/s/syne/v24/8vIH7w4qzmVxm25L9Hz_.woff2", + "sha256": "83885b130cf2a67bc2fd6175d6f3c2875833552c1762b5943b51335038ae01f2" + }, + { + "file": "syne-normal-latin-0b86590d.woff2", + "source": "https://fonts.gstatic.com/s/syne/v24/8vIH7w4qzmVxm2BL9A.woff2", + "sha256": "68b623f0e45b905041b2edb9b2e4f563a505f13db1cd06b5f1946eb2e1f47048" + } +] diff --git a/public/fonts/syne-OFL.txt b/public/fonts/syne-OFL.txt new file mode 100644 index 00000000..f410e51c --- /dev/null +++ b/public/fonts/syne-OFL.txt @@ -0,0 +1,93 @@ +Copyright 2017 The Syne Project Authors (https://gitlab.com/bonjour-monde/fonderie/syne-typeface) + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +https://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/public/fonts/syne-normal-greek-420d2e34.woff2 b/public/fonts/syne-normal-greek-420d2e34.woff2 new file mode 100644 index 00000000..961d505c Binary files /dev/null and b/public/fonts/syne-normal-greek-420d2e34.woff2 differ diff --git a/public/fonts/syne-normal-latin-0b86590d.woff2 b/public/fonts/syne-normal-latin-0b86590d.woff2 new file mode 100644 index 00000000..e311600b Binary files /dev/null and b/public/fonts/syne-normal-latin-0b86590d.woff2 differ diff --git a/public/fonts/syne-normal-latin-ext-6de212dd.woff2 b/public/fonts/syne-normal-latin-ext-6de212dd.woff2 new file mode 100644 index 00000000..ff515073 Binary files /dev/null and b/public/fonts/syne-normal-latin-ext-6de212dd.woff2 differ diff --git a/src/components/legal/Impressum.tsx b/src/components/legal/Impressum.tsx index 03b4b3e0..ec17fb78 100644 --- a/src/components/legal/Impressum.tsx +++ b/src/components/legal/Impressum.tsx @@ -21,13 +21,13 @@ const Impressum: React.FC = () => {

Impressum

-

Anbieterinformationen gemäß § 5 DDG

+

Anbieter- und Kontaktinformationen

Diensteanbieter

Bennet Joan Wegener

-

60599 Heusenstamm

+

63150 Heusenstamm

Deutschland

E-Mail:{' '} @@ -46,12 +46,11 @@ const Impressum: React.FC = () => {

Dieses Impressum gilt für Lanis UI sowie für das bereitgestellte Standard-Backend unter{' '} {DEFAULT_API_BASE_URL}. - Benutzeroberfläche und Backend sind eigenständige Softwareprojekte, werden auf getrennter - Infrastruktur betrieben und haben denselben oben genannten Diensteanbieter. + Die Benutzeroberfläche (Lanis UI) und das Backend (lanis_api) sind getrennte + Softwareprojekte des oben genannten Diensteanbieters.

- Wird auf einem Gerät ein eigenes Backend eingestellt, ist dessen jeweiliger Betreiber für - diesen Dienst verantwortlich. Dieses Impressum erstreckt sich nicht auf fremde Backends. + Dieses Impressum gilt nicht für Backends anderer Betreiber.

@@ -73,28 +72,18 @@ const Impressum: React.FC = () => {

Inhalte und Verfügbarkeit

- Eigene Inhalte werden mit angemessener Sorgfalt erstellt und gepflegt. Eine Gewähr für - jederzeitige Verfügbarkeit sowie für die Vollständigkeit, Aktualität oder Fehlerfreiheit - angezeigter Informationen wird nicht übernommen, soweit dies gesetzlich zulässig ist. Dies - gilt insbesondere für Daten und Funktionen, die vom Schulportal Hessen oder anderen externen - Systemen abhängen. -

-

- Die Haftung des Diensteanbieters richtet sich nach den gesetzlichen Vorschriften. Zwingende - gesetzliche Haftung, insbesondere bei Vorsatz, grober Fahrlässigkeit sowie bei Verletzung von - Leben, Körper oder Gesundheit, bleibt unberührt. + Die angezeigten schulischen Inhalte stammen aus dem Schulportal Hessen. Ihre Aktualität + und die Verfügbarkeit der zugehörigen Funktionen hängen auch vom Schulportal und den + angebundenen Diensten ab.

Externe Dienste und Links

- Das Angebot kommuniziert funktionsbedingt mit externen Diensten und kann Links zu Angeboten - Dritter enthalten. Auf deren Inhalte, Verfügbarkeit und Datenverarbeitung hat der - Diensteanbieter keinen unmittelbaren Einfluss. Für externe Inhalte ist der jeweilige - Anbieter verantwortlich. Erlangt der Diensteanbieter Kenntnis von einer konkreten - Rechtsverletzung, werden zumutbare Maßnahmen zur Entfernung oder Sperrung des betreffenden - Verweises ergriffen. + Das Angebot bindet externe Dienste ein und enthält Links zu Angeboten Dritter. + Informationen zu den eingebundenen Diensten und zur Datenverarbeitung stehen in der + unten verlinkten Datenschutzerklärung.

@@ -111,8 +100,8 @@ const Impressum: React.FC = () => {

Datenschutz

- Informationen zur Verarbeitung personenbezogener Daten durch die getrennten UI- und - Backend-Systeme stehen in der{' '} + Informationen zur Verarbeitung personenbezogener Daten, zur Speicherung von Zugangsdaten + und zur Einbindung externer Dienste stehen in der{' '} Datenschutzerklärung . @@ -127,14 +116,13 @@ const Impressum: React.FC = () => { lanis-impressum@joancode.dev {' '} - gesendet werden. Berechtigte Beanstandungen werden geprüft und erforderliche Maßnahmen - zeitnah veranlasst. + gesendet werden.


-

Stand: August 2026

+

Stand: 17. Oktober 2026

diff --git a/src/components/legal/PrivacyPolicy.tsx b/src/components/legal/PrivacyPolicy.tsx index 900e7242..112cbc4c 100644 --- a/src/components/legal/PrivacyPolicy.tsx +++ b/src/components/legal/PrivacyPolicy.tsx @@ -24,13 +24,23 @@ const PrivacyPolicy: React.FC = () => {

Datenschutzerklärung

-

Informationen zur Datenverarbeitung durch Lanis UI

+

Informationen zur Datenverarbeitung durch Lanis UI und lanis_api

+
+

Das Wichtigste vor der Anmeldung

+
    +
  • Lanis UI und das Standard-Backend sind ein privates, inoffizielles Angebot desselben Betreibers. Sie gehören nicht zum Schulportal Hessen oder zum Land Hessen.
  • +
  • Bei Nutzung des Standard-Backends erhält dieses dein Schulportal-Passwort und speichert es verschlüsselt, aber wieder entschlüsselbar, für erneute Anmeldungen beim Schulportal.
  • +
  • Das Standard-Backend speichert auch Profil- und kontobezogene Nutzungsdaten. Der Betreiber kann auf serverseitig verarbeitete Daten zugreifen; die Verschlüsselung schließt diesen Zugriff nicht aus.
  • +
  • Die Schriftarten werden von unseren eigenen Servern geladen. Externe Symbol-Stylesheets werden bereits beim Seitenaufruf geladen; weitere externe Dienste kommen je nach Funktion hinzu.
  • +
+
+

1. Verantwortlicher und Kontakt

Bennet Joan Wegener

-

60599 Heusenstamm

+

63150 Heusenstamm

Deutschland

E-Mail:{' '} @@ -45,9 +55,9 @@ const PrivacyPolicy: React.FC = () => {

Lanis UI ist eine inoffizielle Benutzeroberfläche für das Schulportal Hessen. Sie stellt Inhalte und Funktionen bereit, die über ein gesondertes Backend vom Schulportal abgerufen - werden. Benutzeroberfläche und Backend sind zwei eigenständige Softwareprojekte und werden - auf voneinander getrennter Infrastruktur betrieben. Für die Benutzeroberfläche und das - bereitgestellte Standard-Backend ist die unter Abschnitt 1 genannte Person verantwortlich. + werden. Die Benutzeroberfläche (Lanis UI) und das Backend (lanis_api) sind getrennte + Softwareprojekte. Für beide Dienste, einschließlich der serverseitigen Verarbeitung im + bereitgestellten Standard-Backend, ist die unter Abschnitt 1 genannte Person verantwortlich. Bei einem selbst eingestellten Backend ist dessen jeweiliger Betreiber verantwortlich. Lanis UI ist weder ein Angebot des Landes Hessen noch des Schulportals Hessen.

@@ -63,21 +73,20 @@ const PrivacyPolicy: React.FC = () => { {API_BASE_URL}.

- Aufgrund dieser technischen Trennung hat die im Browser ausgeführte Benutzeroberfläche - keinen Zugriff auf serverseitige Protokolle, Datenbanken oder Speicherfristen des Backends - und kann dessen Verarbeitung weder einsehen noch steuern. Die konkrete serverseitige - Verarbeitung wird durch die Implementierung und Konfiguration des separaten - Backend-Projekts bestimmt. Für das bereitgestellte Standard-Backend unter{' '} - {DEFAULT_API_BASE_URL} ist ebenfalls die in - Abschnitt 1 genannte Person verantwortlich; die dort gespeicherten Daten und Fristen sind - in Abschnitt 9 beschrieben. Bei einem selbst eingestellten Backend ist dessen jeweiliger - Betreiber für die dortige Verarbeitung verantwortlich. + Das Standard-Backend unter{' '} + {DEFAULT_API_BASE_URL} verwendet deine + Zugangsdaten zur Anmeldung beim Schulportal. Es speichert das Passwort serverseitig + verschlüsselt und kann es wieder entschlüsseln, um deine Schulportal-Sitzung erneut + herzustellen. Es handelt sich damit nicht um eine reine Weiterleitung ohne Speicherung + und nicht um eine Ende-zu-Ende-Verschlüsselung gegenüber dem Betreiber. Die + Sitzungsgültigkeit und die weiteren Speicherfristen stehen in Abschnitt 9.

- Mit dem Start der Anmeldung veranlasst du die Übermittlung deiner Eingaben an diese Adresse. - Das Backend verwendet die erforderlichen Angaben, um die von dir angeforderten Funktionen - gegenüber dem Schulportal Hessen auszuführen. Diese Beschreibung ist keine Aussage darüber, - dass UI und Backend auf demselben Server laufen oder Daten gemeinsam speichern. + Das Backend verarbeitet außerdem die von dir abgerufenen schulischen Inhalte, etwa + Nachrichten, Kurse, Aufgaben und Pläne, und hält je nach Funktion Zwischenspeicher vor. + Die technische Trennung von UI und Backend begrenzt nicht die Verantwortung des gemeinsamen + Betreibers. Bei einem selbst eingestellten Backend erhält dessen Betreiber deine + Zugangsdaten und Anfragen; für seine Verarbeitung gelten seine eigenen Angaben.

Unabhängig von einem selbst eingestellten Backend ruft die Startseite beim Öffnen öffentliche, @@ -116,8 +125,20 @@ const PrivacyPolicy: React.FC = () => {

-

5. Schulkarte von OpenStreetMap

+

5. Seitenaufruf und externe Ressourcen

+ Beim Aufruf der Website erhalten die Server, die Benutzeroberfläche und Backend + bereitstellen, technisch erforderliche Verbindungsdaten wie IP-Adresse, Zeitpunkt, + angeforderte Adresse und Browserinformationen. + Die Schriftarten Outfit, JetBrains Mono, Syne und Fraunces werden von unseren eigenen + Servern bereitgestellt. Zum Laden dieser Schriftarten wird keine Verbindung zu Google + hergestellt. Die Website bindet Symbol-Stylesheets von cdnjs (cdnjs.cloudflare.com) ein. + Die Anfragen an cdnjs erfolgen automatisch beim Seitenaufruf, auch ohne Anmeldung und ohne + Aktivierung der Schulkarte. Der Anbieter erhält dabei insbesondere deine IP-Adresse und + die technischen Anfragedaten; die Herkunftsseite wird bei diesen Stylesheet-Anfragen durch + die Einstellung „no-referrer“ unterdrückt. +

+

Die Startseite enthält eine Schulkarte, die erst nach einem Klick auf „Karte laden“ Kartenbilder direkt von OpenStreetMap abruft. Dabei stellt dein Browser eine Verbindung zu Servern der OpenStreetMap Foundation her und übermittelt technisch erforderliche Daten, @@ -157,12 +178,15 @@ const PrivacyPolicy: React.FC = () => {

Nachrichten, die du an den Assistenten sendest, und seine Antworten werden über die - WhatsApp Business Platform von Meta sowie – sofern eingerichtet – den vom Betreiber eingerichteten KI-Anbieter - verarbeitet. Beim bereitgestellten Standard-Backend werden dem KI-Anbieter deine Frage und nur die LANIS-Daten, - die zur Bearbeitung benötigt werden, übermittelt; dein Schulportal-Passwort und deine WhatsApp-Nummer - werden nicht übermittelt. Beim bereitgestellten Standard-Backend wird der begrenzte - Gesprächsverlauf verschlüsselt gespeichert, nach 24 Stunden verworfen und beim Trennen - der Verbindung gelöscht. Bei einem selbst eingestellten Backend richten sich Schutzmaßnahmen + WhatsApp Business Platform von Meta verarbeitet. Wenn ein KI-Anbieter eingerichtet ist, + erhält dieser deine Frage, den zur Verarbeitung verwendeten Gesprächsverlauf und die + Ergebnisse der vom Assistenten abgerufenen LANIS-Funktionen. Darin können personenbezogene + schulische Inhalte enthalten sein. Gespeicherte Schulportal-Zugangsdaten und die + WhatsApp-Nummer werden nicht automatisch als Kontodaten an den KI-Anbieter übergeben. + Angaben, die du selbst in eine Nachricht schreibst, sind jedoch Teil dieser Nachricht. + Beim bereitgestellten Standard-Backend wird der begrenzte Gesprächsverlauf verschlüsselt + gespeichert. Seine Frist läuft 24 Stunden nach der letzten Aktualisierung ab und beginnt + bei weiteren Nachrichten erneut. Beim Trennen der Verbindung wird er gelöscht. Bei einem selbst eingestellten Backend richten sich Schutzmaßnahmen und Speicherfristen nach den Angaben seines Betreibers. Antworten können von dir angeforderte schulische Angaben enthalten, etwa Stundenplan, Vertretungen, Aufgaben, Termine oder – nur @@ -175,10 +199,31 @@ const PrivacyPolicy: React.FC = () => {

8. Zwecke und Rechtsgrundlagen

+ Das Backend erfasst nach der Anmeldung Profildaten aus dem Schulportal, darunter die dort + verfügbaren Angaben zu Name, Login, Schule, E-Mail-Adresse und Klasse. Es protokolliert + außerdem kontobezogen Anmeldungen, letzte Aktivität, Sitzungsanzahl, geschätzte aktive + Nutzungszeit und das Öffnen von Modulen. Diese Daten dienen der Kontoverwaltung, + Betriebsübersicht und der Ermittlung der Größe der Nutzerbasis. Kontobezogene Sitzungs- + und Aktivitätsdaten unterstützen außerdem die Fehleranalyse bei gemeldeten Problemen; + Benutzername und Schulkennung ermöglichen die Zuordnung zum betroffenen Konto. + Die Daten sind dem jeweiligen Konto zugeordnet und + können von berechtigten Administratoren im privaten Verwaltungsportal eingesehen werden. + Öffentlich angezeigte Konto- und Schulzahlen sind dagegen zusammengefasste Angaben. +

+

+ Wenn der Betreiber einen Discord-Webhook für neue Konten konfiguriert hat, übermittelt + das Backend bei der ersten erfassten Anmeldung den Benutzernamen und die Schulkennung + an Discord. Die Benachrichtigungen ermöglichen unter anderem die Überprüfung, ob eine + bestimmte eingeladene Testperson erfolgreich auf LANIS zugreifen konnte. Sie werden für + jedes erstmals erfasste Konto ausgelöst und enthalten personenbezogene Kennungen. +

+

Soweit ein Nutzungsverhältnis besteht, erfolgt die für die angeforderten Funktionen erforderliche Verarbeitung auf Grundlage von Art. 6 Abs. 1 lit. b DSGVO. Im Übrigen stützt sie sich auf Art. 6 Abs. 1 lit. f DSGVO; das berechtigte Interesse liegt in der sicheren und - funktionsfähigen Bereitstellung der Anwendung. Freiwillige Push-Benachrichtigungen und die + funktionsfähigen Bereitstellung der Anwendung, der Ermittlung der Größe der Nutzerbasis, + der Fehleranalyse bei Supportanfragen sowie der Überprüfung des erfolgreichen Zugangs + eingeladener Testpersonen. Freiwillige Push-Benachrichtigungen und die WhatsApp-Verknüpfung werden nur nach deiner ausdrücklichen Aktivierung eingerichtet; soweit eine Einwilligung erforderlich ist, gilt Art. 6 Abs. 1 lit. a DSGVO.

@@ -191,24 +236,41 @@ const PrivacyPolicy: React.FC = () => { ? 'Das oben angezeigte Backend ist ein getrennt betriebenes System des von dir ausgewählten Betreibers.' : 'Das oben angezeigte Backend ist ein getrennt betriebenes System desselben Verantwortlichen.'}{' '} Zur Bereitstellung der angeforderten schulischen Funktionen kommuniziert es mit dem - Schulportal Hessen. Nach dem Laden der Schulkarte empfängt die OpenStreetMap Foundation die + Schulportal Hessen. cdnjs erhält bereits beim Seitenaufruf die in + Abschnitt 5 beschriebenen Anfragedaten. Nach dem Laden der Schulkarte empfängt die OpenStreetMap Foundation die in Abschnitt 5 beschriebenen Verbindungsdaten. Bei Nutzung von Push-Benachrichtigungen wird außerdem der Push-Dienst des Browsers oder Betriebssystems einbezogen. Beim freiwilligen WhatsApp-Assistenten wird - außerdem die WhatsApp Business Platform von Meta einbezogen. Lokal gespeicherte Daten bleiben - grundsätzlich erhalten, bis du dich abmeldest, sie durch die Anwendung ersetzt werden, eine - vorgesehene Cache-Frist abläuft oder du die Website-Daten im Browser löschst. + außerdem die WhatsApp Business Platform von Meta und gegebenenfalls der konfigurierte + KI-Anbieter einbezogen. Bei konfigurierten Betreiberbenachrichtigungen wird Discord wie in + Abschnitt 8 beschrieben einbezogen. Lokal gespeicherte Daten bleiben erhalten, bis sie + durch die Anwendung entfernt oder ersetzt werden oder du die Website-Daten im Browser + löschst. Eine Abmeldung entfernt nicht automatisch sämtliche lokalen Einstellungen und Caches.

Beim bereitgestellten Standard-Backend gelten derzeit folgende Kategorien und Fristen:

    -
  • verschlüsselt gespeicherte Schulportal-Zugangsdaten und LANIS-Aktualisierungssitzungen: bis zu 90 Tage nach der Anmeldung;
  • +
  • Schulportal-Zugangsdaten werden wieder entschlüsselbar gespeichert; LANIS-Aktualisierungssitzungen sind bis zu 90 Tage nach der Anmeldung gültig. Abgelaufene Sitzungen und zugehörige Zugangsdaten werden bei der serverseitigen Bereinigung entfernt;
  • Profil, Einstellungen, eigene Stunden, Klassenverknüpfungen, Push-Abos sowie Login- und Aktivitätsdaten: bis zur Löschung des LANIS-Kontos;
  • gewöhnliche Antwort-Caches: regelmäßig 10 Minuten; Profil-, App- und Moduldaten höchstens 30 Tage;
  • private Ausfall-Snapshots: höchstens 24 Stunden; gemeinsam genutzte heruntergeladene Unterrichtsdateien: höchstens 30 Tage;
  • -
  • WhatsApp-Gesprächsverlauf: höchstens 24 Stunden; Einmalcodes und ausstehende Bestätigungen: 10 Minuten;
  • +
  • WhatsApp-Gesprächsverlauf: 24 Stunden nach der letzten Aktualisierung; Einmalcodes und ausstehende Bestätigungen: 10 Minuten;
  • externe WhatsApp-Nachrichten-IDs zur Verhinderung doppelter Verarbeitung: 7 Tage.
-

Beim Löschen des LANIS-Kontos werden die kontobezogenen Daten und Sitzungen beim Standard-Backend entfernt. Daten im Schulportal Hessen selbst werden dadurch nicht gelöscht. Gemeinsam genutzte Unterrichtsdateien werden nicht einem einzelnen Konto zugeordnet und deshalb erst nach Ablauf ihrer Cache-Frist entfernt.

+

+ Technische Zugriffs- und Betriebsprotokolle des Standard-Backends dienen der + Fehleranalyse und dem sicheren Betrieb. Sie können Verbindungsadressen, Zeitpunkte, + angeforderte Pfade einschließlich Abfrageparametern, HTTP-Statuscodes sowie + Fehlermeldungen und in Anwendungsmeldungen auch Benutzer- und Schulkennungen enthalten. + Diese Protokolle liegen auf dem Backend-Server derzeit in einem flüchtigen + Systemprotokoll im Arbeitsspeicher. Es gibt keine feste Aufbewahrungsfrist in Tagen: + Ältere Einträge werden bei der speicherplatzabhängigen Rotation entfernt; spätestens + mit einem Neustart des Servers gehen die verbleibenden Einträge verloren. Ein Neustart + nur der Backend-Anwendung löscht das Systemprotokoll nicht. Die LANIS-Anwendung legt + keine eigenen Sicherungskopien dieser Systemprotokolle an. Die hier beschriebene + Speicherung ist von den kontobezogenen Login- und Aktivitätsdaten getrennt. +

+

Die Fristen für Caches und kurzlebige Daten beschreiben deren vorgesehene Gültigkeit. Die physische Entfernung erfolgt durch die jeweilige Bereinigung und kann zeitlich nachgelagert sein.

+

Beim Löschen des LANIS-Kontos werden die kontobezogenen Daten und Sitzungen in den aktiven Kontodatenbanken und kontobezogenen Zwischenspeichern beim Standard-Backend entfernt. Daten im Schulportal Hessen selbst werden dadurch nicht gelöscht. Gemeinsam genutzte Unterrichtsdateien werden nicht einem einzelnen Konto zugeordnet und deshalb erst nach Ablauf ihrer Cache-Frist entfernt.

{usesCustomBackend && (

Bei einem selbst eingestellten Backend richten sich Speicherkategorien und Löschfristen nach den Angaben und der Konfiguration seines Betreibers.

@@ -226,7 +288,10 @@ const PrivacyPolicy: React.FC = () => {

Beim bereitgestellten Standard-Backend kannst du in den Einstellungen unter „Datenschutz und Konto“ deine von LANIS gespeicherten Daten als JSON exportieren oder alle kontobezogenen - LANIS-Daten löschen. Sicherheitsgeheimnisse wie Passwörter, Tokens, Cookies und + LANIS-Daten in den aktiven Kontodatenbanken und kontobezogenen Zwischenspeichern löschen. + Diese Funktion löscht keine bereits an externe Anbieter übermittelten Daten und keine + Betriebsprotokolle. Für Auskunft oder Löschanfragen darüber hinaus nutze den Kontakt in + Abschnitt 1. Sicherheitsgeheimnisse wie Passwörter, Tokens, Cookies und kryptografische Schlüssel sind nicht Bestandteil des Exports.

@@ -244,7 +309,7 @@ const PrivacyPolicy: React.FC = () => {

- Stand: September 2026 + Stand: 17. Oktober 2026