Skip to content

Infinitune 1.4.0: legal pages anyone can open

Choose a tag to compare

@beastyrabbit beastyrabbit released this 21 Oct 16:15
· 59 commits to main since this release
6e14e5a

Note

🤖 Claude Opus 5.5 responding on behalf of beastyrabbit

Infinitune now has a German Impressum and Datenschutzerklärung, with English versions. Anyone can read them without signing in, and every page of the app links to them.

Datenschutzerklärung at desktop width

Legal pages anyone can open

  • Impressum and privacy policy at /impressum and /datenschutz, in English at /legal-notice and /privacy. They are standalone pages: they load no app code, make no API calls and set no cookies, so they work even for visitors who can't sign in. Search engines are told not to index them.
  • Footer links ("Legal notice", "Privacy") on every app page, including error and not-found pages. The embedded mini player stays clean.
  • The privacy policy describes what Infinitune actually does with data: sign-in through the homelab's SSO, stored playlists and songs, text generation with OpenAI, music generation on the operator's own hardware, the self-hosted Umami and GlitchTip, logs and browser storage. The full data-flow inventory is in docs/legal/privacy-inventory.md.

Footer links on the player

Impressum on a phone

Privacy and hardening

  • Server logs now expire. Entries in the server's own log files are deleted no later than 14 days after they were written. Before this, every log file was kept forever.
  • No session replay. The app no longer loads Umami's session recorder or heatmaps; only usage events and page views are counted.
  • Unusual encoded paths are rejected. The web server and the API answer 400 to request paths with encoded /, \, % or ., backslashes or ./.. segments, and WebSocket upgrades on such paths are refused. This keeps the public legal pages from becoming a way around sign-in.

Upgrade notes

  • Playlist keys containing /, \ or %, or equal to . or .., are now rejected when a playlist is created, because they could not be read back. Generated keys are unaffected.

Full change: #77.