@mdguggenbichler/slugbase-core 0.0.4 → 0.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (120) hide show
  1. package/frontend/index.tsx +3 -3
  2. package/frontend/public/favicon.svg +1 -0
  3. package/frontend/public/slugbase_icon_blue.svg +1 -0
  4. package/frontend/public/slugbase_icon_white.png +0 -0
  5. package/frontend/public/slugbase_icon_white.svg +1 -0
  6. package/frontend/src/App.tsx +179 -0
  7. package/frontend/src/api/client.ts +134 -0
  8. package/frontend/src/components/AppSidebar.tsx +214 -0
  9. package/frontend/src/components/EmptyState.tsx +33 -0
  10. package/frontend/src/components/Favicon.tsx +76 -0
  11. package/frontend/src/components/FilterChips.tsx +60 -0
  12. package/frontend/src/components/FolderIcon.tsx +207 -0
  13. package/frontend/src/components/GlobalSearch.tsx +275 -0
  14. package/frontend/src/components/Layout.tsx +60 -0
  15. package/frontend/src/components/PageHeader.tsx +31 -0
  16. package/frontend/src/components/ScopeSegmentedControl.tsx +42 -0
  17. package/frontend/src/components/SentryDebug.tsx +32 -0
  18. package/frontend/src/components/StatCard.tsx +66 -0
  19. package/frontend/src/components/TopBar.tsx +63 -0
  20. package/frontend/src/components/UserDropdown.tsx +86 -0
  21. package/frontend/src/components/admin/AdminAI.tsx +207 -0
  22. package/frontend/src/components/admin/AdminOIDCProviders.tsx +183 -0
  23. package/frontend/src/components/admin/AdminSettings.tsx +413 -0
  24. package/frontend/src/components/admin/AdminTeams.tsx +177 -0
  25. package/frontend/src/components/admin/AdminUsers.tsx +225 -0
  26. package/frontend/src/components/bookmarks/BookmarkCard.tsx +312 -0
  27. package/frontend/src/components/bookmarks/BookmarkListItem.tsx +159 -0
  28. package/frontend/src/components/bookmarks/BookmarkTableView.tsx +419 -0
  29. package/frontend/src/components/bookmarks/BulkActionModals.tsx +162 -0
  30. package/frontend/src/components/bookmarks/FilterChips.tsx +5 -0
  31. package/frontend/src/components/modals/BookmarkModal.tsx +493 -0
  32. package/frontend/src/components/modals/FolderModal.tsx +306 -0
  33. package/frontend/src/components/modals/ImportModal.tsx +232 -0
  34. package/frontend/src/components/modals/OIDCProviderModal.tsx +284 -0
  35. package/frontend/src/components/modals/SharingModal.tsx +96 -0
  36. package/frontend/src/components/modals/TagModal.tsx +101 -0
  37. package/frontend/src/components/modals/TeamAssignmentModal.tsx +354 -0
  38. package/frontend/src/components/modals/TeamModal.tsx +117 -0
  39. package/frontend/src/components/modals/UserModal.tsx +225 -0
  40. package/frontend/src/components/profile/CreateTokenModal.tsx +172 -0
  41. package/frontend/src/components/sharing/ShareResourceDialog.tsx +422 -0
  42. package/frontend/src/components/ui/Autocomplete.tsx +155 -0
  43. package/frontend/src/components/ui/Button.tsx +68 -0
  44. package/frontend/src/components/ui/ConfirmDialog.tsx +79 -0
  45. package/frontend/src/components/ui/FormFieldWrapper.tsx +36 -0
  46. package/frontend/src/components/ui/ModalFooterActions.tsx +49 -0
  47. package/frontend/src/components/ui/ModalSection.tsx +34 -0
  48. package/frontend/src/components/ui/PageLoadingSkeleton.tsx +24 -0
  49. package/frontend/src/components/ui/Select.tsx +61 -0
  50. package/frontend/src/components/ui/SharingField.tsx +298 -0
  51. package/frontend/src/components/ui/Toast.tsx +47 -0
  52. package/frontend/src/components/ui/Tooltip.tsx +21 -0
  53. package/frontend/src/components/ui/alert-dialog.tsx +139 -0
  54. package/frontend/src/components/ui/badge.tsx +36 -0
  55. package/frontend/src/components/ui/button-base.tsx +57 -0
  56. package/frontend/src/components/ui/card.tsx +76 -0
  57. package/frontend/src/components/ui/command.tsx +161 -0
  58. package/frontend/src/components/ui/dialog.tsx +120 -0
  59. package/frontend/src/components/ui/dropdown-menu.tsx +199 -0
  60. package/frontend/src/components/ui/input.tsx +22 -0
  61. package/frontend/src/components/ui/label.tsx +24 -0
  62. package/frontend/src/components/ui/popover.tsx +33 -0
  63. package/frontend/src/components/ui/progress.tsx +26 -0
  64. package/frontend/src/components/ui/scroll-area.tsx +48 -0
  65. package/frontend/src/components/ui/select-base.tsx +159 -0
  66. package/frontend/src/components/ui/separator.tsx +29 -0
  67. package/frontend/src/components/ui/sheet.tsx +140 -0
  68. package/frontend/src/components/ui/sidebar.tsx +783 -0
  69. package/frontend/src/components/ui/skeleton.tsx +15 -0
  70. package/frontend/src/components/ui/sonner.tsx +46 -0
  71. package/frontend/src/components/ui/switch.tsx +28 -0
  72. package/frontend/src/components/ui/table.tsx +120 -0
  73. package/frontend/src/components/ui/tooltip-base.tsx +30 -0
  74. package/frontend/src/config/api.ts +16 -0
  75. package/frontend/src/config/mode.ts +6 -0
  76. package/frontend/src/contexts/AppConfigContext.tsx +39 -0
  77. package/frontend/src/contexts/AuthContext.tsx +137 -0
  78. package/frontend/src/contexts/SearchCommandContext.tsx +28 -0
  79. package/frontend/src/hooks/use-mobile.tsx +19 -0
  80. package/frontend/src/hooks/useConfirmDialog.ts +63 -0
  81. package/frontend/src/hooks/useMarketingTheme.ts +47 -0
  82. package/frontend/src/i18n.ts +39 -0
  83. package/frontend/src/index.css +117 -0
  84. package/frontend/src/instrument.ts +20 -0
  85. package/frontend/src/lib/utils.ts +6 -0
  86. package/frontend/src/locales/de.json +899 -0
  87. package/frontend/src/locales/en.json +937 -0
  88. package/frontend/src/locales/es.json +884 -0
  89. package/frontend/src/locales/fr.json +550 -0
  90. package/frontend/src/locales/it.json +535 -0
  91. package/frontend/src/locales/ja.json +535 -0
  92. package/frontend/src/locales/nl.json +550 -0
  93. package/frontend/src/locales/pl.json +535 -0
  94. package/frontend/src/locales/pt.json +535 -0
  95. package/frontend/src/locales/ru.json +535 -0
  96. package/frontend/src/locales/zh.json +535 -0
  97. package/frontend/src/main.tsx +44 -0
  98. package/frontend/src/pages/Bookmarks.tsx +1004 -0
  99. package/frontend/src/pages/Dashboard.tsx +427 -0
  100. package/frontend/src/pages/Folders.tsx +578 -0
  101. package/frontend/src/pages/GoPreferences.tsx +134 -0
  102. package/frontend/src/pages/Login.tsx +196 -0
  103. package/frontend/src/pages/PasswordReset.tsx +242 -0
  104. package/frontend/src/pages/Profile.tsx +593 -0
  105. package/frontend/src/pages/SearchEngineGuide.tsx +135 -0
  106. package/frontend/src/pages/Setup.tsx +210 -0
  107. package/frontend/src/pages/Signup.tsx +199 -0
  108. package/frontend/src/pages/Tags.tsx +421 -0
  109. package/frontend/src/pages/VerifyEmail.tsx +254 -0
  110. package/frontend/src/pages/admin/AdminAIPage.tsx +5 -0
  111. package/frontend/src/pages/admin/AdminLayout.tsx +40 -0
  112. package/frontend/src/pages/admin/AdminMembersPage.tsx +5 -0
  113. package/frontend/src/pages/admin/AdminOIDCPage.tsx +5 -0
  114. package/frontend/src/pages/admin/AdminSettingsPage.tsx +5 -0
  115. package/frontend/src/pages/admin/AdminTeamsPage.tsx +5 -0
  116. package/frontend/src/utils/favicon.ts +36 -0
  117. package/frontend/src/utils/formatRelativeTime.ts +37 -0
  118. package/frontend/src/utils/safeHref.ts +31 -0
  119. package/frontend/src/vite-env.d.ts +10 -0
  120. package/package.json +9 -1
@@ -0,0 +1,899 @@
1
+ {
2
+ "app": {
3
+ "name": "SlugBase",
4
+ "tagline": "Deine Links. Deine Struktur. Deine Sprache. Deine Regeln."
5
+ },
6
+ "contact": {
7
+ "title": "Kontakt",
8
+ "description": "Haben Sie eine Frage oder Feedback? Wir freuen uns von Ihnen zu hören.",
9
+ "name": "Name",
10
+ "namePlaceholder": "Ihr Name",
11
+ "email": "E-Mail",
12
+ "emailPlaceholder": "ihre@email.com",
13
+ "message": "Nachricht",
14
+ "messagePlaceholder": "Wie können wir Ihnen helfen?",
15
+ "submit": "Nachricht senden",
16
+ "successMessage": "Vielen Dank! Ihre Nachricht wurde gesendet. Wir melden uns bald bei Ihnen.",
17
+ "confirmationNote": "Eine Bestätigungs-E-Mail wurde an Ihre E-Mail-Adresse gesendet.",
18
+ "backToLogin": "Zurück zur Anmeldung",
19
+ "submitError": "Senden fehlgeschlagen. Bitte versuchen Sie es später erneut."
20
+ },
21
+ "auth": {
22
+ "login": "Anmelden",
23
+ "logout": "Abmelden",
24
+ "loginWith": "Anmelden mit {{provider}}",
25
+ "notAuthenticated": "Nicht authentifiziert",
26
+ "authFailed": "Authentifizierung fehlgeschlagen",
27
+ "loginFailed": "Anmeldung fehlgeschlagen",
28
+ "oidcAuthFailed": "OIDC-Authentifizierung fehlgeschlagen. Bitte versuchen Sie es erneut.",
29
+ "oidcAutoCreateDisabled": "Die automatische Benutzererstellung ist für diesen OIDC-Provider deaktiviert. Bitte kontaktieren Sie einen Administrator.",
30
+ "noProviders": "Keine OIDC-Provider konfiguriert",
31
+ "noProvidersDescription": "Einfach in den Admin-Einstellungen einen OIDC-Provider anlegen, dann geht OIDC-Anmeldung.",
32
+ "email": "E-Mail",
33
+ "emailPlaceholder": "ihre@email.com",
34
+ "password": "Passwort",
35
+ "passwordPlaceholder": "Passwort eingeben",
36
+ "forgotPassword": "Passwort vergessen?",
37
+ "or": "Oder fortfahren mit",
38
+ "verifyEmailRequired": "E-Mail zuerst bestätigen – Link steht in deiner Inbox. Dann kannst du dich anmelden.",
39
+ "createAccount": "Konto erstellen",
40
+ "signUp": "Registrieren"
41
+ },
42
+ "invitations": {
43
+ "tokenRequired": "Einladungstoken fehlt",
44
+ "notAvailable": "Organisationseinladungen sind nicht verfügbar",
45
+ "invalidOrExpired": "Diese Einladung ist ungültig oder abgelaufen",
46
+ "verifying": "Einladung wird geprüft…",
47
+ "accepting": "Einladung wird angenommen…",
48
+ "accepted": "Einladung angenommen",
49
+ "redirecting": "Weiterleitung…",
50
+ "error": "Annahme nicht möglich",
51
+ "loginRequired": "Zum Annehmen anmelden",
52
+ "loginRequiredDescription": "Melde dich mit der E-Mail an, an die die Einladung ging, um {{org}} beizutreten."
53
+ },
54
+ "signup": {
55
+ "title": "Konto erstellen",
56
+ "subtitle": "Mit E-Mail und Passwort registrieren.",
57
+ "email": "E-Mail",
58
+ "name": "Name",
59
+ "namePlaceholder": "Ihr Name",
60
+ "password": "Passwort",
61
+ "passwordHint": "Mindestens 8 Zeichen",
62
+ "confirmPassword": "Passwort bestätigen",
63
+ "submit": "Registrieren",
64
+ "successTitle": "E-Mail prüfen",
65
+ "successMessage": "Wir haben dir einen Bestätigungslink geschickt. Klick drauf, dann ist dein Konto aktiv und du kannst dich anmelden.",
66
+ "backToLogin": "Zurück zur Anmeldung",
67
+ "alreadyHaveAccount": "Bereits ein Konto?",
68
+ "logIn": "Anmelden",
69
+ "noAccount": "Noch kein Konto?",
70
+ "acceptTermsPrefix": "Ich habe die ",
71
+ "acceptTermsTerms": "AGB",
72
+ "acceptTermsAnd": " und die ",
73
+ "acceptTermsPrivacy": "Datenschutzerklärung",
74
+ "acceptTermsSuffix": " gelesen und akzeptiert.",
75
+ "acceptTermsRequired": "AGB und Datenschutzerklärung müssen akzeptiert werden."
76
+ },
77
+ "setup": {
78
+ "title": "Ersteinrichtung",
79
+ "description": "Willkommen bei SlugBase! Leg den ersten Admin-Nutzer an, dann geht's los.",
80
+ "email": "E-Mail",
81
+ "emailPlaceholder": "admin@example.com",
82
+ "name": "Name",
83
+ "namePlaceholder": "Administrator",
84
+ "password": "Passwort",
85
+ "passwordPlaceholder": "Mindestens 8 Zeichen",
86
+ "confirmPassword": "Passwort bestätigen",
87
+ "confirmPasswordPlaceholder": "Passwort zur Bestätigung nochmal eingeben",
88
+ "passwordMismatch": "Passwörter stimmen nicht überein",
89
+ "passwordTooShort": "Passwort muss mindestens 8 Zeichen lang sein",
90
+ "adminNote": "Dieser Nutzer wird Admin. OIDC-Provider kannst du später in den Admin-Einstellungen einrichten.",
91
+ "submit": "Administrator erstellen",
92
+ "alreadyInitialized": "System bereits initialisiert",
93
+ "success": "Einrichtung erfolgreich abgeschlossen!",
94
+ "redirecting": "Weiterleitung zur Anmeldung...",
95
+ "redirectingToDashboard": "Weiterleitung zum Dashboard..."
96
+ },
97
+ "bookmarks": {
98
+ "title": "Lesezeichen",
99
+ "create": "Lesezeichen erstellen",
100
+ "edit": "Lesezeichen bearbeiten",
101
+ "delete": "Lesezeichen löschen",
102
+ "deleteBookmark": "Lesezeichen löschen",
103
+ "sharingSummary": "{{teamCount}} {{teams}}, {{userCount}} {{users}}",
104
+ "name": "Titel",
105
+ "url": "URL",
106
+ "slug": "Slug",
107
+ "slugOptionalHint": "Leer lassen, wenn du keinen eigenen Slug brauchst",
108
+ "forwardingEnabled": "Weiterleitung aktivieren",
109
+ "forwardingUrl": "Weiterleitungs-URL",
110
+ "copyUrl": "URL kopieren",
111
+ "copied": "Kopiert!",
112
+ "folder": "Ordner",
113
+ "folders": "Ordner",
114
+ "tags": "Tags",
115
+ "noFolder": "Kein Ordner",
116
+ "noFoldersAvailable": "Noch keine Ordner. Leg welche an, um deine Lesezeichen zu ordnen.",
117
+ "foldersDescription": "Ein oder mehrere Ordner für dieses Lesezeichen wählen",
118
+ "noTags": "Keine Tags",
119
+ "save": "Speichern",
120
+ "cancel": "Abbrechen",
121
+ "deleteConfirm": "Lesezeichen wirklich löschen?",
122
+ "deleteConfirmWithName": "\"{{name}}\" wirklich löschen?",
123
+ "empty": "Noch keine Lesezeichen. Leg das erste an!",
124
+ "emptyDescription": "Erstell dein erstes Lesezeichen oder importier welche.",
125
+ "emptyCreateFirst": "Erstes Lesezeichen anlegen",
126
+ "emptyImport": "Lesezeichen importieren",
127
+ "emptyLearnForwarding": "Erfahren Sie, wie Weiterleitung funktioniert",
128
+ "filterByFolder": "Nach Ordner filtern",
129
+ "filterByTag": "Nach Tag filtern",
130
+ "allFolders": "Alle Ordner",
131
+ "allTags": "Alle Tags",
132
+ "open": "Öffnen",
133
+ "shareWithTeams": "Mit Teams teilen",
134
+ "shareWithTeamsDescription": "Teams wählen, die dieses Lesezeichen sehen sollen. Alle Mitglieder dieser Teams haben Zugriff.",
135
+ "shareAllTeams": "Mit allen meinen Teams teilen",
136
+ "shareAllTeamsDescription": "Mit allen Teams teilen, in denen du bist",
137
+ "shareWithUsers": "Mit Benutzern teilen",
138
+ "shareWithUsersDescription": "Bestimmte Nutzer zum Teilen auswählen",
139
+ "sharedWith": "Geteilt mit:",
140
+ "users": "Benutzer",
141
+ "shared": "Geteilt",
142
+ "sharedWithTeam": "Mit Team geteilt",
143
+ "sharedWithTeams": "Geteilt · {{count}} {{teams}}",
144
+ "teams": "Teams",
145
+ "optional": "Optional",
146
+ "slugRequired": "Slug ist erforderlich, wenn Weiterleitung aktiviert ist",
147
+ "slugAlreadyExists": "Slug existiert bereits. Slugs müssen für alle Lesezeichen eindeutig sein.",
148
+ "aiSuggesting": "KI schlägt vor…",
149
+ "aiSuggestionsLabel": "Vorgeschlagen:",
150
+ "searchEngineNote": "Schnell auf Lesezeichen über die Adresszeile zugreifen?",
151
+ "searchEngineGuideLink": "So richtest du eine Suchmaschine für SlugBase ein",
152
+ "viewMode": "Ansichtsmodus",
153
+ "viewCard": "Kartenansicht",
154
+ "viewList": "Listenansicht",
155
+ "compactMode": "Kompaktmodus",
156
+ "sortBy": "Sortieren nach",
157
+ "sortRecentlyAdded": "Kürzlich hinzugefügt",
158
+ "sortAlphabetical": "Alphabetisch",
159
+ "sortMostUsed": "Am häufigsten verwendet",
160
+ "sortRecentlyAccessed": "Kürzlich aufgerufen",
161
+ "resetFilters": "Filter zurücksetzen",
162
+ "forwardingPreview": "Weiterleitungs-URL",
163
+ "forwardingPreviewDescription": "Diese URL leitet zu deinem Lesezeichen weiter",
164
+ "bulkSelect": "Mehrere auswählen",
165
+ "bulkActions": "Massenaktionen",
166
+ "bulkMoveToFolder": "In Ordner verschieben",
167
+ "bulkAddTags": "Tags hinzufügen",
168
+ "bulkShare": "Mit Teams teilen",
169
+ "bulkDelete": "Ausgewählte löschen",
170
+ "selectedCount": "{{count}} ausgewählt",
171
+ "selectAll": "Alle auswählen",
172
+ "deselectAll": "Alle abwählen",
173
+ "selectAllOnPageAndRemaining": "Alle {{pageCount}} auf dieser Seite ausgewählt. Alle {{total}} Lesezeichen auswählen?",
174
+ "selectAllRemaining": "Alle {{total}} auswählen",
175
+ "allSelected": "Alle {{total}} ausgewählt",
176
+ "paginationShowing": "{{from}}-{{to}} von {{total}}",
177
+ "paginationPrevious": "Zurück",
178
+ "paginationNext": "Weiter",
179
+ "pinned": "Angeheftet",
180
+ "favorites": "Favoriten",
181
+ "import": "Importieren",
182
+ "export": "Exportieren",
183
+ "importBrowser": "Browser-Lesezeichen importieren",
184
+ "importJson": "JSON importieren",
185
+ "importHtml": "HTML importieren",
186
+ "exportJson": "Als JSON exportieren",
187
+ "exportHtml": "Als HTML exportieren",
188
+ "importDescription": "Lesezeichen aus JSON- oder HTML-Datei importieren. JSON: Array mit Objekten, die title und url haben.",
189
+ "selectFile": "Datei auswählen",
190
+ "supportedFormats": "Unterstützte Formate: JSON, HTML (Netscape-Lesezeichenformat)",
191
+ "importSuccess": "{{success}} Lesezeichen importiert, {{failed}} fehlgeschlagen"
192
+ },
193
+ "folders": {
194
+ "title": "Ordner",
195
+ "create": "Ordner erstellen",
196
+ "edit": "Ordner bearbeiten",
197
+ "delete": "Ordner löschen",
198
+ "deleteFolder": "Ordner löschen",
199
+ "name": "Name",
200
+ "folderName": "Ordnername",
201
+ "icon": "Symbol",
202
+ "searchIcons": "Symbole nach Namen suchen...",
203
+ "noIcon": "Kein Symbol",
204
+ "selectedIcon": "Ausgewähltes Symbol",
205
+ "clearIcon": "Symbol löschen",
206
+ "showingPopular": "{{count}} beliebte Symbole anzeigen",
207
+ "showingAllIcons": "Alle {{count}} Symbole anzeigen",
208
+ "showAllIcons": "Alle Symbole anzeigen",
209
+ "showPopularOnly": "Nur beliebte anzeigen",
210
+ "noIconsFound": "Keine Symbole gefunden, die Ihrer Suche entsprechen",
211
+ "useIcon": "Symbol verwenden",
212
+ "typeIconName": "Symbolname eingeben für beliebiges Lucide-Symbol",
213
+ "empty": "Noch keine Ordner",
214
+ "emptyDescription": "Leg Ordner an, um deine Lesezeichen zu bündeln.",
215
+ "deleteConfirm": "Ordner wirklich löschen?",
216
+ "deleteConfirmWithName": "\"{{name}}\" wirklich löschen?",
217
+ "sharedWith": "Geteilt mit:",
218
+ "shareWithTeams": "Mit Teams teilen",
219
+ "shareWithTeamsDescription": "Teams wählen – alle Lesezeichen in diesem Ordner sind dann für sie sichtbar.",
220
+ "shared": "Geteilt",
221
+ "viewCard": "Kartenansicht",
222
+ "viewList": "Listenansicht",
223
+ "compactMode": "Kompaktmodus",
224
+ "sortAlphabetical": "Alphabetisch",
225
+ "sortRecentlyAdded": "Kürzlich hinzugefügt"
226
+ },
227
+ "tags": {
228
+ "title": "Tags",
229
+ "create": "Tag erstellen",
230
+ "edit": "Tag bearbeiten",
231
+ "delete": "Tag löschen",
232
+ "deleteTag": "Tag löschen",
233
+ "name": "Name",
234
+ "tagName": "Tag-Name",
235
+ "empty": "Noch keine Tags",
236
+ "emptyDescription": "Leg Tags an, um Lesezeichen zu ordnen und zu filtern.",
237
+ "deleteConfirm": "Tag wirklich löschen?",
238
+ "deleteConfirmWithName": "\"{{name}}\" wirklich löschen?",
239
+ "viewCard": "Kartenansicht",
240
+ "viewList": "Listenansicht",
241
+ "compactMode": "Kompaktmodus",
242
+ "sortAlphabetical": "Alphabetisch",
243
+ "sortRecentlyAdded": "Kürzlich hinzugefügt"
244
+ },
245
+ "profile": {
246
+ "title": "Profil",
247
+ "description": "Kontoeinstellungen und Präferenzen",
248
+ "accountInformation": "Kontoinformationen",
249
+ "preferences": "Präferenzen",
250
+ "quickAccess": "Schnellzugriff",
251
+ "quickAccessDescription": "Mit /go/<slug> in der Adresszeile schnell zu Lesezeichen. Hier siehst du deine gespeicherten Wahlen, wenn mehrere Lesezeichen denselben Slug haben.",
252
+ "yourOrganizations": "Deine Organisationen",
253
+ "current": "Aktuell",
254
+ "switch": "Wechseln",
255
+ "orgSwitched": "Organisation gewechselt",
256
+ "userKey": "Benutzerschlüssel",
257
+ "userKeyDescription": "Dein eindeutiger Schlüssel für Lesezeichen-Weiterleitung. Gib ihn anderen, damit sie deine geteilten Lesezeichen nutzen können.",
258
+ "email": "E-Mail",
259
+ "emailPlaceholder": "ihre@email.com",
260
+ "name": "Name",
261
+ "namePlaceholder": "Ihr Name",
262
+ "language": "Sprache",
263
+ "theme": "Design",
264
+ "themeAuto": "Automatisch",
265
+ "themeLight": "Hell",
266
+ "themeDark": "Dunkel",
267
+ "save": "Einstellungen speichern",
268
+ "languageEnglish": "Englisch",
269
+ "languageGerman": "Deutsch",
270
+ "languageFrench": "Französisch",
271
+ "languageSpanish": "Spanisch",
272
+ "languageItalian": "Italienisch",
273
+ "languagePortuguese": "Portugiesisch",
274
+ "languageDutch": "Niederländisch",
275
+ "languageRussian": "Russisch",
276
+ "languageJapanese": "Japanisch",
277
+ "languageChinese": "Chinesisch",
278
+ "languagePolish": "Polnisch",
279
+ "emailManagedByOIDC": "E-Mail kommt vom Identitätsanbieter und kann hier nicht geändert werden.",
280
+ "apiAccess": "API-Zugang",
281
+ "apiAccessDescription": "Persönliche API-Tokens für die REST-API anlegen und verwalten.",
282
+ "apiTokenWarning": "API-Tokens geben vollen Zugriff auf dein Konto. Sicher aufbewahren und nicht weitergeben.",
283
+ "createToken": "Token erstellen",
284
+ "tokenName": "Token-Name",
285
+ "tokenNamePlaceholder": "z.B. CLI, CI/CD",
286
+ "tokenCreated": "Token erstellt",
287
+ "tokenRevealWarning": "Dieser Token wird nur einmal angezeigt. Jetzt kopieren!",
288
+ "copyToken": "Token kopieren",
289
+ "revokeToken": "Widerrufen",
290
+ "revokeTokenConfirm": "Token wirklich widerrufen? Er ist danach sofort ungültig.",
291
+ "lastUsed": "Zuletzt verwendet",
292
+ "neverUsed": "Nie verwendet",
293
+ "createdAt": "Erstellt",
294
+ "viewApiDocs": "API-Dokumentation anzeigen",
295
+ "noTokens": "Noch keine API-Tokens",
296
+ "noTokensDescription": "Token anlegen, um dich von Skripten, CLI oder CI/CD bei der REST-API anzumelden.",
297
+ "yourTokens": "Deine Tokens",
298
+ "aiSuggestions": "KI-Vorschläge",
299
+ "aiSuggestionsDescription": "Titel, Tags und Slug beim Anlegen von Lesezeichen vorschlagen"
300
+ },
301
+ "common": {
302
+ "loading": "Lädt...",
303
+ "reload": "Neu laden",
304
+ "error": "Ein Fehler ist aufgetreten",
305
+ "notFoundOrNoAccess": "Nicht gefunden oder kein Zugriff",
306
+ "success": "Erfolg",
307
+ "close": "Schließen",
308
+ "delete": "Löschen",
309
+ "edit": "Bearbeiten",
310
+ "create": "Erstellen",
311
+ "save": "Speichern",
312
+ "cancel": "Abbrechen",
313
+ "clearFilter": "Filter löschen",
314
+ "yes": "Ja",
315
+ "no": "Nein",
316
+ "view": "Ansehen",
317
+ "confirm": "Bestätigen",
318
+ "back": "Zurück",
319
+ "bookmark": "Lesezeichen",
320
+ "bookmarks": "Lesezeichen",
321
+ "tag": "Tag",
322
+ "tags": "Tags",
323
+ "folder": "Ordner",
324
+ "folders": "Ordner",
325
+ "user": "Benutzer",
326
+ "users": "Benutzer",
327
+ "team": "Team",
328
+ "teams": "Teams",
329
+ "setting": "Einstellung",
330
+ "settings": "Einstellungen",
331
+ "provider": "Provider",
332
+ "providers": "Provider",
333
+ "search": "Suchen",
334
+ "searchPlaceholder": "Lesezeichen, Ordner, Tags suchen...",
335
+ "searchShortcut": "Strg+K",
336
+ "searchShortcutHint": "Suchen (Strg+K)",
337
+ "noResults": "Keine Ergebnisse gefunden",
338
+ "copy": "Kopieren",
339
+ "copied": "Kopiert!",
340
+ "goTo": "Gehe zu",
341
+ "open": "Öffnen",
342
+ "remove": "Entfernen",
343
+ "actions": "Aktionen",
344
+ "navigation": "Navigation",
345
+ "quickActions": "Schnellaktionen",
346
+ "collapseSidebar": "Seitenleiste einklappen",
347
+ "expandSidebar": "Seitenleiste erweitern"
348
+ },
349
+ "sharing": {
350
+ "shareBookmark": "Lesezeichen teilen",
351
+ "shareFolder": "Ordner teilen",
352
+ "inviteDescription": "Personen einladen oder mit einem Team teilen.",
353
+ "peopleWithAccess": "Personen mit Zugriff",
354
+ "addAccess": "Zugriff hinzufügen",
355
+ "people": "Personen",
356
+ "teams": "Teams",
357
+ "notSharedYet": "Noch nicht geteilt",
358
+ "emailNotAssociated": "Diese E-Mail ist noch kein SlugBase-Nutzer.",
359
+ "removeAccess": "Zugriff entfernen",
360
+ "add": "Hinzufügen"
361
+ },
362
+ "dashboard": {
363
+ "bookmarksDescription": "Lesezeichen verwalten",
364
+ "foldersDescription": "Mit Ordnern ordnen",
365
+ "tagsDescription": "Lesezeichen mit Tags versehen",
366
+ "overview": "Übersicht",
367
+ "newBookmarkHint": "Link einfügen – speichern und später öffnen",
368
+ "totalBookmarks": "Lesezeichen gesamt",
369
+ "totalFolders": "Ordner gesamt",
370
+ "totalTags": "Tags gesamt",
371
+ "sharedBookmarks": "Geteilte Lesezeichen",
372
+ "sharedFolders": "Geteilte Ordner",
373
+ "recentBookmarks": "Kürzliche Lesezeichen",
374
+ "topTags": "Meistverwendete Tags",
375
+ "noRecentBookmarks": "Noch keine Lesezeichen",
376
+ "noTags": "Noch keine Tags",
377
+ "overviewSubtitle": "Schnellzugriff und aktuelle Aktivität",
378
+ "yourLibrary": "Deine Bibliothek",
379
+ "sharedWithYou": "Mit Ihnen geteilt",
380
+ "noRecentBookmarksHint": "Leg ein Lesezeichen an, dann siehst du es hier.",
381
+ "noTagsHint": "Tags tauchen auf, sobald du Lesezeichen taggst.",
382
+ "goToBookmarks": "Zu Lesezeichen",
383
+ "editBookmark": "Lesezeichen bearbeiten",
384
+ "openBookmark": "Link öffnen",
385
+ "copyUrl": "Link kopieren",
386
+ "deleteBookmark": "Lesezeichen löschen",
387
+ "shareBookmark": "Teilen",
388
+ "lastOpened": "Zuletzt geöffnet {{time}}",
389
+ "filterByTagHint": "Klicken Sie, um Lesezeichen nach diesem Tag zu filtern",
390
+ "tagBookmarkCount": "{{count}} Lesezeichen",
391
+ "denseView": "Kompakte Ansicht",
392
+ "createFolder": "Ordner erstellen",
393
+ "createTag": "Tag erstellen",
394
+ "searchPlaceholder": "Lesezeichen suchen oder durch SlugBase navigieren",
395
+ "quickAccess": "Schnellzugriff",
396
+ "viewAll": "Alle anzeigen",
397
+ "noQuickAccessBookmarks": "Noch keine Lesezeichen mit Shortcuts",
398
+ "noQuickAccessBookmarksHint": "Weise einem Lesezeichen einen Slug zu, um es hier zu sehen und go/slug im Browser zu nutzen.",
399
+ "statsBookmarks": "Lesezeichen",
400
+ "statsFolders": "Ordner",
401
+ "statsTags": "Tags",
402
+ "proTipBody": "Tipp: Richte SlugBase als Suchmaschine im Browser ein und gib „go github“ in die Adresszeile ein, um Lesezeichen so zu öffnen.",
403
+ "proTipLink": "Suchmaschine einrichten",
404
+ "dismiss": "Schließen",
405
+ "onboardingTitle": "Erste Schritte",
406
+ "onboardingImport": "Browser-Lesezeichen importieren",
407
+ "onboardingSearchEngine": "Browser-Suchmaschine einrichten",
408
+ "onboardingFolder": "Ersten Ordner anlegen",
409
+ "onboardingTag": "Ein Lesezeichen taggen",
410
+ "onboardingDismiss": "Checkliste schließen"
411
+ },
412
+ "plan": {
413
+ "limitBookmarks": "Kostenlos-Limit ({{limit}} Lesezeichen) erreicht. Upgrade für mehr.",
414
+ "shareToTeam": "Teilen mit Teams ist im Team-Plan verfügbar.",
415
+ "folderSharing": "Ordner-Freigabe ist im Team-Plan verfügbar.",
416
+ "upgradeCta": "Upgraden",
417
+ "bookmarksUsed": "Lesezeichen: {{count}}/{{limit}}",
418
+ "importLimitWarning": "Noch {{remaining}} Lesezeichen importierbar (Kostenlos-Limit: {{limit}}).",
419
+ "gracePeriodBanner": "{{count}} Lesezeichen (Kostenlos-Limit: {{limit}}). Vor {{date}} löschen oder upgraden.",
420
+ "gracePeriodExpired": "Schonfrist vorbei. Lesezeichen löschen oder upgraden."
421
+ },
422
+ "apiDocs": {
423
+ "title": "API-Dokumentation",
424
+ "description": "Vollständige API-Referenz für SlugBase. Alle Endpunkte erfordern eine Authentifizierung über JWT-Token, außer wo anders angegeben."
425
+ },
426
+ "admin": {
427
+ "title": "Administration",
428
+ "description": "Nutzer, Teams, OIDC-Provider und Systemeinstellungen verwalten",
429
+ "users": "Benutzer",
430
+ "teams": "Teams",
431
+ "userGroups": "Teams",
432
+ "oidcProviders": "OIDC-Provider",
433
+ "settings": "Einstellungen",
434
+ "addUser": "Benutzer hinzufügen",
435
+ "editUser": "Benutzer bearbeiten",
436
+ "addTeam": "Team hinzufügen",
437
+ "editTeam": "Team bearbeiten",
438
+ "addGroup": "Team hinzufügen",
439
+ "editGroup": "Team bearbeiten",
440
+ "addProvider": "Provider hinzufügen",
441
+ "editProvider": "Provider bearbeiten",
442
+ "addSetting": "Einstellung hinzufügen",
443
+ "admin": "Administrator",
444
+ "user": "Benutzer",
445
+ "oidcUser": "OIDC-Benutzer",
446
+ "teamName": "Teamname",
447
+ "groupName": "Teamname",
448
+ "description": "Beschreibung",
449
+ "providerKey": "Provider-Schlüssel",
450
+ "issuerUrl": "Issuer-URL",
451
+ "clientId": "Client-ID",
452
+ "clientSecret": "Client-Geheimnis",
453
+ "scopes": "Berechtigungen",
454
+ "callbackUrl": "Callback-URL",
455
+ "customEndpoints": "Benutzerdefinierte OIDC-Endpunkte",
456
+ "customEndpointsDescription": "Standard-OIDC-Pfade überschreiben. Leer = Standardpfade zur Issuer-URL.",
457
+ "authorizationUrl": "Autorisierungs-URL",
458
+ "tokenUrl": "Token-URL",
459
+ "userinfoUrl": "UserInfo-URL",
460
+ "autoCreate": "Benutzer automatisch erstellen",
461
+ "defaultRole": "Standardrolle",
462
+ "settingKey": "Schlüssel",
463
+ "settingValue": "Wert",
464
+ "leaveBlank": "Leer lassen, um aktuellen Wert beizubehalten",
465
+ "clientIdRequired": "Client-ID ist beim Erstellen eines neuen Providers erforderlich",
466
+ "leaveBlankToKeep": "Leer lassen, um den aktuellen Wert beizubehalten",
467
+ "confirmDeleteUser": "Nutzer wirklich löschen?",
468
+ "confirmDeleteTeam": "Team wirklich löschen?",
469
+ "confirmDeleteGroup": "Team wirklich löschen?",
470
+ "confirmDeleteProvider": "Provider wirklich löschen?",
471
+ "confirmDeleteSetting": "Einstellung wirklich löschen?",
472
+ "manageMembers": "Mitglieder verwalten",
473
+ "currentMembers": "Aktuelle Mitglieder",
474
+ "currentTeams": "Aktuelle Teams",
475
+ "addMembers": "Mitglieder hinzufügen",
476
+ "addTeams": "Teams hinzufügen",
477
+ "noMembers": "Keine Mitglieder in diesem Team",
478
+ "noTeams": "Diesem Benutzer sind keine Teams zugewiesen",
479
+ "noTeamsYet": "Noch keine Teams",
480
+ "add": "Hinzufügen",
481
+ "members": "Mitglieder",
482
+ "manageTeams": "Teams verwalten",
483
+ "searchTeams": "Teams nach Name oder Beschreibung suchen...",
484
+ "createUserWith": "Benutzer anlegen mit",
485
+ "sendInviteEmail": "Einladungs-E-Mail senden",
486
+ "setPassword": "Passwort festlegen",
487
+ "inviteSent": "Einladung gesendet",
488
+ "userCreatedInviteSent": "Benutzer erstellt; Einladung gesendet.",
489
+ "userCreatedInviteNotSent": "Benutzer erstellt; Einladung konnte nicht gesendet werden (SMTP prüfen).",
490
+ "searchUsers": "Benutzer nach Name oder E-Mail suchen...",
491
+ "noTeamsAvailable": "Alle Teams sind bereits zugewiesen",
492
+ "noUsersAvailable": "Alle Benutzer sind bereits Mitglieder",
493
+ "noSearchResults": "Keine Ergebnisse entsprechen Ihrer Suche",
494
+ "apiDocsNote": "API-Dokumentation ist als eigenständige Seite verfügbar",
495
+ "viewApiDocs": "API-Dokumentation anzeigen",
496
+ "noUserEmailAvailable": "Keine Benutzer-E-Mail verfügbar",
497
+ "manageTeamsTitle": "Teams verwalten - {{userName}}",
498
+ "manageMembersTitle": "Mitglieder verwalten - {{teamName}}",
499
+ "billing": "Abrechnung & Tarif",
500
+ "billingCurrentPlan": "Aktueller Tarif",
501
+ "billingUpgrade": "Upgrade",
502
+ "billingManageSubscription": "Abo verwalten",
503
+ "billingOrgMembers": "Organisationsmitglieder",
504
+ "billingSeatsUsed": "{{count}} von {{total}} Plätzen belegt",
505
+ "seatsUsed": "{{used}} von {{total}} Plätzen",
506
+ "billingInviteMember": "Mitglied einladen",
507
+ "billingUpgradeToInvite": "Upgrade auf Team-Tarif, um weitere Mitglieder einzuladen.",
508
+ "billingTeamAtLimit": "5-Mitglieder-Limit erreicht. Zusätzliche Plätze 1 €/Nutzer/Monat.",
509
+ "billingNotConfigured": "Abrechnung nicht eingerichtet. Support für Upgrades kontaktieren.",
510
+ "billingPersonalMonthly": "Personal (monatlich)",
511
+ "billingPersonalYearly": "Personal (jährlich)",
512
+ "billingTeamMonthly": "Team (monatlich)",
513
+ "billingTeamYearly": "Team (jährlich)",
514
+ "billingEarlySupporter": "Early Supporter (einmalig)",
515
+ "billingInvoices": "Rechnungsübersicht",
516
+ "billingInvoicesEmpty": "Noch keine Rechnungen",
517
+ "billingInvoiceDownload": "PDF herunterladen",
518
+ "billingInvoiceView": "Ansehen",
519
+ "billingInvoiceDate": "Datum",
520
+ "billingInvoiceNumber": "Rechnung",
521
+ "billingInvoiceAmount": "Betrag",
522
+ "billingInvoiceStatus": "Status",
523
+ "ai": {
524
+ "nav": "KI-Vorschläge",
525
+ "title": "KI-Lesezeichen-Vorschläge",
526
+ "description": "KI schlägt Titel, Tags und Slug beim Anlegen von Lesezeichen vor. Nutzt OpenAI GPT-4o-mini.",
527
+ "enabled": "KI-Vorschläge aktivieren",
528
+ "provider": "Provider",
529
+ "apiKey": "API-Key",
530
+ "apiKeyPlaceholder": "Neuen Key eingeben zum Ändern",
531
+ "apiKeyHint": "API-Key von platform.openai.com holen",
532
+ "apiKeyChangeHint": "Leer lassen, um den aktuellen Key zu behalten",
533
+ "model": "Modell",
534
+ "orgTitle": "KI-Vorschläge",
535
+ "orgDescription": "KI schlägt Titel, Tags und Slug beim Anlegen von Lesezeichen vor. Nutzer können das in ihrem Profil abschalten.",
536
+ "orgEnabled": "KI-Vorschläge für die Organisation aktivieren"
537
+ }
538
+ },
539
+ "passwordReset": {
540
+ "title": "Passwort zurücksetzen",
541
+ "description": "E-Mail eingeben, dann schicken wir dir einen Link zum Zurücksetzen.",
542
+ "email": "E-Mail",
543
+ "emailPlaceholder": "ihre@email.com",
544
+ "requestReset": "Reset-Link senden",
545
+ "resetToken": "Reset-Token",
546
+ "newPassword": "Neues Passwort",
547
+ "confirmPassword": "Passwort bestätigen",
548
+ "resetPassword": "Passwort zurücksetzen",
549
+ "requestSent": "Wenn ein Konto mit dieser E-Mail existiert, wurde ein Passwort-Reset-Link gesendet.",
550
+ "resetSuccess": "Passwort zurückgesetzt! Du kannst dich jetzt mit dem neuen Passwort anmelden.",
551
+ "invalidToken": "Ungültiger oder abgelaufener Reset-Token",
552
+ "passwordMismatch": "Passwörter stimmen nicht überein",
553
+ "backToLogin": "Zurück zur Anmeldung"
554
+ },
555
+ "emailVerification": {
556
+ "verifying": "E-Mail wird überprüft",
557
+ "verifyingDescription": "E-Mail wird geprüft, einen Moment…",
558
+ "success": "E-Mail bestätigt",
559
+ "successDescription": "E-Mail-Adresse wurde auf {{email}} geändert.",
560
+ "error": "Bestätigung fehlgeschlagen",
561
+ "errorDescription": "Der Bestätigungslink ist ungültig oder abgelaufen.",
562
+ "tokenRequired": "Bestätigungstoken ist erforderlich",
563
+ "invalidToken": "Ungültiger oder abgelaufener Bestätigungstoken",
564
+ "verifyFailed": "Token-Überprüfung fehlgeschlagen",
565
+ "confirmFailed": "E-Mail-Bestätigung fehlgeschlagen",
566
+ "redirecting": "Weiterleitung zum Profil...",
567
+ "backToProfile": "Zurück zum Profil",
568
+ "emailSent": "Bestätigungs-Mail ist raus. Prüf deine neue E-Mail-Adresse.",
569
+ "pendingTitle": "E-Mail-Bestätigung ausstehend",
570
+ "pendingDescription": "Bestätigungs-Mail an {{email}} geschickt. Postfach prüfen und auf den Link klicken.",
571
+ "signupSuccess": "E-Mail bestätigt. Du kannst dich jetzt anmelden.",
572
+ "signupSuccessDescription": "Konto ist bestätigt. Weiterleitung zur Anmeldung…",
573
+ "invalidLink": "Dieser Bestätigungslink ist ungültig oder abgelaufen.",
574
+ "alreadyVerified": "Konto ist schon bestätigt. Einfach anmelden.",
575
+ "resendTitle": "Bestätigungs-E-Mail erneut senden",
576
+ "resendDescription": "Bestätigungslink abgelaufen. E-Mail bei Tippfehlern korrigieren, dann schicken wir einen neuen Link.",
577
+ "resendNoTokenDescription": "E-Mail von der Anmeldung eingeben, wir schicken einen neuen Link.",
578
+ "editEmailLabel": "E-Mail-Adresse",
579
+ "resendButton": "Bestätigungs-E-Mail erneut senden",
580
+ "resendSuccess": "Bestätigungs-E-Mail gesendet",
581
+ "resendSuccessDescription": "Postfach prüfen – der neue Link kann ein paar Minuten brauchen."
582
+ },
583
+ "smtp": {
584
+ "title": "SMTP-E-Mail-Konfiguration",
585
+ "description": "SMTP für E-Mails einrichten (z. B. Passwort-Reset)",
586
+ "enabled": "SMTP aktivieren",
587
+ "host": "SMTP-Host",
588
+ "hostPlaceholder": "smtp.gmail.com",
589
+ "port": "Port",
590
+ "portPlaceholder": "587",
591
+ "secure": "TLS/SSL verwenden",
592
+ "user": "Benutzername/E-Mail",
593
+ "userPlaceholder": "ihre-email@gmail.com",
594
+ "password": "Passwort",
595
+ "passwordPlaceholder": "Passwort eingeben, um es festzulegen oder zu ändern",
596
+ "passwordChangeHint": "Neues Passwort eintragen zum Ändern, leer lassen um das aktuelle zu behalten",
597
+ "from": "Von E-Mail",
598
+ "fromPlaceholder": "noreply@example.com",
599
+ "fromName": "Von Name",
600
+ "fromNamePlaceholder": "SlugBase",
601
+ "testEmail": "Test-E-Mail",
602
+ "testEmailPlaceholder": "test@example.com",
603
+ "sendTest": "Test-E-Mail senden",
604
+ "testSent": "Test-E-Mail erfolgreich gesendet!",
605
+ "testFailed": "Fehler beim Senden der Test-E-Mail",
606
+ "save": "SMTP-Einstellungen speichern"
607
+ },
608
+ "shared": {
609
+ "title": "Geteilt",
610
+ "description": "Mit Ihnen geteilte Lesezeichen und Ordner",
611
+ "bookmarks": "Lesezeichen",
612
+ "folders": "Ordner",
613
+ "noBookmarks": "Noch keine geteilten Lesezeichen",
614
+ "noFolders": "Noch keine geteilten Ordner",
615
+ "unknownUser": "Unbekannter Benutzer",
616
+ "sharedWithYou": "Mit dir geteilt"
617
+ },
618
+ "goPreferences": {
619
+ "title": "Gespeicherte Slug-Wahlen",
620
+ "description": "Verwalte deine gespeicherten Wahlen für /go. Wenn mehrere Lesezeichen denselben Slug haben, entscheidet deine Wahl hier, welches sich öffnet.",
621
+ "empty": "Noch keine gespeicherten Wahlen. Geh zu /go/<slug>, wenn mehrere Lesezeichen passen, und wähle dort eine Option – sie wird hier gespeichert."
622
+ },
623
+ "searchEngineGuide": {
624
+ "title": "Anleitung zur Einrichtung benutzerdefinierter Suchmaschinen",
625
+ "description": "So richtest du eine Suchmaschine im Browser ein und greifst schnell auf deine Lesezeichen zu",
626
+ "howItWorks": "Wie es funktioniert",
627
+ "howItWorksDescription": "Mit einer Suchmaschine tippst du in der Adresszeile z. B. 'go' plus Slug und landest direkt beim Lesezeichen.",
628
+ "yourSearchUrl": "Ihre Such-URL",
629
+ "urlNote": "Diese URL-Vorlage beim Einrichten nutzen. %s wird durch deinen Lesezeichen-Slug ersetzt.",
630
+ "chromiumTitle": "Chromium-basierte Browser (Chrome, Edge, Brave, etc.)",
631
+ "chromiumDescription": "So fügst du SlugBase als Suchmaschine hinzu:",
632
+ "chromiumStep1": "Browser-Einstellungen öffnen",
633
+ "chromiumStep2": "Zu 'Suchmaschine' oder 'Suche' gehen",
634
+ "chromiumStep3": "Auf 'Suchmaschinen verwalten' oder 'Hinzufügen' klicken",
635
+ "chromiumStep4": "Formular ausfüllen:",
636
+ "chromiumStep4a": "Name: SlugBase (oder ein beliebiger Name)",
637
+ "chromiumStep4b": "Schlüsselwort: go (oder ein beliebiges Schlüsselwort)",
638
+ "chromiumStep4c": "URL: Verwenden Sie die oben angezeigte Such-URL",
639
+ "chromiumStep5": "Auf 'Hinzufügen' oder 'Speichern' klicken – fertig.",
640
+ "firefoxTitle": "Firefox",
641
+ "firefoxDescription": "So fügst du SlugBase als Suchmaschine hinzu:",
642
+ "firefoxStep1": "Firefox-Einstellungen öffnen",
643
+ "firefoxStep2": "Zu 'Suche' im Einstellungsmenü gehen",
644
+ "firefoxStep3": "Nach unten scrollen, bei 'Ein-Klick-Suchmaschinen' auf 'Hinzufügen' klicken",
645
+ "firefoxStep4": "Formular ausfüllen:",
646
+ "firefoxStep4a": "Name: SlugBase (oder ein beliebiger Name)",
647
+ "firefoxStep4b": "Schlüsselwort: go (oder ein beliebiges Schlüsselwort)",
648
+ "firefoxStep4c": "URL: Verwenden Sie die oben angezeigte Such-URL",
649
+ "firefoxStep5": "Auf 'Hinzufügen' klicken – fertig.",
650
+ "usageExample": "Verwendungsbeispiel",
651
+ "usageStep1": "Einfach in der Adresszeile eingeben:",
652
+ "usageStep2": "Enter drücken – du landest beim Lesezeichen mit Slug 'test'",
653
+ "usageNote": "Statt 'test' jeden Slug eintragen, den du in SlugBase angelegt hast."
654
+ },
655
+ "landing": {
656
+ "heroHeadline": "Das strukturierte Lesezeichen-System für Power-User und Teams.",
657
+ "heroSubheadline": "Links schnell finden. Chaos reduzieren. Kontrolle behalten. Ordner, Tags und persönliche Shortcuts—ohne Durcheinander.",
658
+ "heroBadges": "Open-Source • Selbst gehostet oder Cloud • Teamfähig • Keine Kreditkarte nötig",
659
+ "ctaStartFree": "Kostenlos starten",
660
+ "ctaSignUp": "Registrieren",
661
+ "ctaLogin": "Anmelden",
662
+ "exampleSnippet": "yourkey/gh yourkey/docs yourkey/vite yourkey/notion yourkey/figma",
663
+ "proofOpenSource": "Open Source",
664
+ "proofApiDocs": "API-Dokumentation verfügbar",
665
+ "trustOpenSource": "Open Source auf GitHub",
666
+ "trustDocs": "Dokumentation",
667
+ "trustActiveDev": "Aktive Entwicklung",
668
+ "trustApiDocs": "API-Dokumentation verfügbar",
669
+ "howItWorksTitle": "So funktioniert's",
670
+ "howItWorksStep1": "Einmal speichern",
671
+ "howItWorksStep1Detail": "Mit Ordnern und Tags organisieren.",
672
+ "howItWorksStep2": "Shortcut erstellen",
673
+ "howItWorksStep2Detail": "Ihr Key/Slug leitet zu Ihrem Lesezeichen weiter.",
674
+ "howItWorksStep3": "Überall nutzen",
675
+ "howItWorksStep3Detail": "Adressleiste, Handy oder mit Teams geteilt.",
676
+ "problemTitle": "Warum Browser-Lesezeichen nicht reichen",
677
+ "problem1": "Schwer zu teilen",
678
+ "problem2": "Keine Struktur über Geräte und Kontexte hinweg",
679
+ "problem3": "Kein Shortcut- oder URL-System",
680
+ "solutionTitle": "SlugBase löst das",
681
+ "solution1": "Mit Teams und Einzelpersonen teilen",
682
+ "solution2": "Dieselbe Struktur überall",
683
+ "solution3": "Persönliche Shortcut-URLs",
684
+ "featuresTitle": "Warum SlugBase?",
685
+ "feature1Title": "Schneller finden",
686
+ "feature1Desc": "Fragen Sie sich nie wieder, wo Sie diesen Link gespeichert haben.",
687
+ "feature2Title": "Zuverlässig teilen",
688
+ "feature2Desc": "Zwei Wörter tippen. Genau das bekommen, was Sie brauchen.",
689
+ "feature3Title": "Kontrolle behalten",
690
+ "feature3Desc": "Ihre Daten und Infrastruktur gehören Ihnen.",
691
+ "featureAiTitle": "KI-gestützte Titel-, Tag- und Slug-Vorschläge",
692
+ "featureAiDesc": "Kostenpflichtige Tarife beinhalten KI-Vorschläge beim Hinzufügen von Lesezeichen—URL einfügen und sofort intelligente Titel-, Tag- und Slug-Vorschläge erhalten.",
693
+ "footerPricing": "Preise",
694
+ "footerContact": "Kontakt",
695
+ "footerDocs": "Dokumentation",
696
+ "footerApp": "App",
697
+ "footerCopyright": "© 2024–2025 SlugBase",
698
+ "pricingTitle": "Einfache Preise",
699
+ "pricingSubtitle": "Kostenlos starten. Später upgraden.",
700
+ "pricingUpgradeHint": "Wann upgraden?",
701
+ "pricingUpgradeBenefits": "Unbegrenzte Lesezeichen, Weiterleitungs-URLs, Backups und E-Mail-Support.",
702
+ "viewAllPlans": "Alle Pläne anzeigen",
703
+ "pricingTeaser": "Kostenlos starten. Upgraden, wenn Struktur wichtig wird.",
704
+ "useCaseTitle": "Gebaut für moderne Workflows",
705
+ "useCaseDevTitle": "Entwickler mit Docs, Dashboards und Repos täglich",
706
+ "useCaseDevDesc": "Sofortiger Zugriff auf Docs, Dashboards und Repos. Persönliches Shortcut-System per Browser-Keyword.",
707
+ "useCaseProductTitle": "Product- und Ops-Teams mit internen Tools",
708
+ "useCaseProductDesc": "Geteilte strukturierte Link-Verzeichnisse. Schluss mit Link-Chaos in Slack.",
709
+ "useCaseFounderTitle": "Gründer organisieren Recherche und Anbieter-Links",
710
+ "useCaseFounderDesc": "Alles einmal organisieren. Von überall zugreifen.",
711
+ "useCaseSelfHostTitle": "Self-Hoster mit Kontrollbedarf",
712
+ "useCaseSelfHostDesc": "Volle Kontrolle über Ihre Daten. Auf Ihrer eigenen Infrastruktur deployen."
713
+ },
714
+ "pricing": {
715
+ "title": "Preise",
716
+ "subtitle": "Einfache Pläne für Einzelpersonen und Teams.",
717
+ "positioning": "Einfache Pläne für Einzelpersonen und Teams.",
718
+ "docsPlans": "Details und Limits der Pläne finden Sie in der Dokumentation.",
719
+ "billingMonthly": "Monatlich",
720
+ "billingYearly": "Jährlich",
721
+ "mostPopular": "Am beliebtesten",
722
+ "free": "Kostenlos",
723
+ "freePrice": "0 €",
724
+ "freeUsers": "1 Nutzer",
725
+ "freeWorkspace": "1 Arbeitsbereich",
726
+ "freeBookmarks": "50 Lesezeichen",
727
+ "freeFeatures": "Kernfunktionen",
728
+ "freeSupport": "Community-Support",
729
+ "freeValue1": "Bis zu 50 Lesezeichen mit Ordnern, Tags und Suche.",
730
+ "freeValue2": "Community-Support",
731
+ "freeValue3": "Kernfunktionen",
732
+ "personal": "Personal",
733
+ "personalPrice": "3 €/Monat",
734
+ "personalYearly": "oder 30 €/Jahr",
735
+ "personalUsers": "1 Nutzer",
736
+ "personalBookmarks": "Unbegrenzte Lesezeichen",
737
+ "personalFeatures": "Backups, E-Mail-Support",
738
+ "personalUpdates": "Prioritäts-Updates",
739
+ "personalValue1": "Unbegrenzte Lesezeichen",
740
+ "personalValue2": "Persönliche Weiterleitungs-URLs",
741
+ "personalValue3": "Backups und Prioritäts-Support",
742
+ "personalValue4": "KI-gestützte Titel-, Tag- und Slug-Vorschläge",
743
+ "team": "Team",
744
+ "teamPrice": "9 €/Monat",
745
+ "teamPriceYearly": "90 €/Jahr",
746
+ "teamUsers": "5 Nutzer inklusive",
747
+ "teamExtraUser": "+1 € pro zusätzlichem Nutzer/Monat",
748
+ "teamExtraUserYearly": "+10 € pro zusätzlichem Nutzer/Jahr",
749
+ "teamFeatures": "Team-Freigabe, Rollen, geteilte Ordner",
750
+ "teamAudit": "Einfaches Prüfprotokoll",
751
+ "teamValue1": "Geteilte Ordner",
752
+ "teamValue2": "Rollen und Berechtigungen",
753
+ "teamValue3": "Einfaches Prüfprotokoll. Für Zusammenarbeit konzipiert.",
754
+ "teamValue4": "KI-gestützte Titel-, Tag- und Slug-Vorschläge",
755
+ "earlySupporter": "Early Supporter",
756
+ "earlySupporterLifetime": "Lebenslang",
757
+ "earlySupporterPrice": "69 € einmalig",
758
+ "earlySupporterSeats": "Begrenzte Plätze",
759
+ "earlySupporterIncludes": "Lebenslang Personal-Plan",
760
+ "earlySupporterValue4": "KI-Autovorschläge inklusive",
761
+ "earlySupporterHelp": "SlugBase mitgestalten",
762
+ "earlySupporterNote": "Kein Team, keine SLA. Abrechnung in Kürze.",
763
+ "ctaSignUp": "Registrieren",
764
+ "ctaStartFree": "Kostenlos starten",
765
+ "ctaChoosePlan": "Plan wählen",
766
+ "ctaContact": "Kontakt",
767
+ "ctaBecomeEarlySupporter": "Early Supporter werden",
768
+ "comparisonTitle": "Was Sie erhalten",
769
+ "comparisonFree": "Kostenlos: Kernfunktionen, 50 Lesezeichen.",
770
+ "comparisonPersonal": "Personal: Unbegrenzte Lesezeichen, Freigabe an Einzelpersonen, Backups, KI-Vorschläge.",
771
+ "comparisonTeam": "Team: 5 Plätze inklusive, + pro zusätzlichem Platz. Team-Freigabe, Rollen, Prüfprotokoll, KI-Vorschläge.",
772
+ "comparisonEarlySupporter": "Early Supporter: Lebenslang Personal, begrenzte Plätze."
773
+ },
774
+ "contact": {
775
+ "title": "Kontakt",
776
+ "subtitle": "Nehmen Sie Kontakt mit uns auf.",
777
+ "trustParagraph": "Fragen zu Selbst-Hosting, Teams oder Abrechnung? Wir antworten in der Regel innerhalb weniger Werktage.",
778
+ "linksDocs": "Dokumentation",
779
+ "linksGitHub": "GitHub",
780
+ "linksPricing": "Preise",
781
+ "linksDemo": "SlugBase testen",
782
+ "name": "Name",
783
+ "email": "E-Mail",
784
+ "message": "Nachricht",
785
+ "send": "Senden",
786
+ "success": "Nachricht gesendet. Wir melden uns in Kürze.",
787
+ "error": "Etwas ist schiefgelaufen. Bitte versuchen Sie es erneut oder schreiben Sie uns direkt.",
788
+ "privacyNotice": "Mit dem Absenden willigen Sie in die Verarbeitung Ihrer Daten für diese Anfrage gemäß unserer Datenschutzerklärung ein."
789
+ },
790
+ "legal": {
791
+ "imprintTitle": "Impressum",
792
+ "imprintProviderTitle": "Diensteanbieter (ECG §5)",
793
+ "imprintChamber": "Mitglied der {{chamber}}",
794
+ "imprintCourtTitle": "Zuständiges Gericht",
795
+ "imprintCourtBody": "Gerichtsstand für Streitigkeiten: Landesgericht Linz, Österreich. Es gilt österreichisches Recht.",
796
+ "imprintOdrTitle": "EU-Streitschlichtung",
797
+ "imprintOdrBody": "Die Europäische Kommission stellt eine Plattform zur außergerichtlichen Beilegung von Streitigkeiten (OS) bereit. Verbraucher können diese unter folgender Adresse nutzen:",
798
+ "imprintAppliesTo": "",
799
+ "uid": "UID",
800
+ "backToHome": "Zurück zur Startseite",
801
+ "termsTitle": "Allgemeine Geschäftsbedingungen",
802
+ "termsScopeTitle": "Geltungsbereich",
803
+ "termsScopeBody": "Diese Allgemeinen Geschäftsbedingungen (\"AGB\") gelten für Ihre Nutzung von SlugBase Cloud (der \"Dienst\") unter slugbase.app, betrieben vom im Impressum angegebenen Anbieter. Mit der Registrierung oder Nutzung des Dienstes akzeptieren Sie diese AGB. Sind Sie Verbraucher, bleiben zwingende gesetzliche Rechte unberührt.",
804
+ "termsScopeB2BBody": "",
805
+ "termsB2BBindingBody": "",
806
+ "termsServiceTitle": "Leistungsbeschreibung",
807
+ "termsServiceBody": "SlugBase Cloud ist ein gehosteter Lesezeichenverwaltungs- und Link-Weiterleitungsdienst. Sie können Lesezeichen speichern, organisieren und teilen; Ordner und Tags anlegen; und optional Lesezeichen als Kurz-URLs (Link-Weiterleitung) bereitstellen. Der Dienst wird als Software-as-a-Service (SaaS) unter https://slugbase.app angeboten.",
808
+ "termsPlansTitle": "Tarife",
809
+ "termsPlansBody": "SlugBase Cloud bietet mehrere Tarife: Free (eingeschränkte Nutzung zum Ausprobieren), Personal (für Einzelnutzer mit mehr Kapazität), Team (für Teams mit geteilten Ordnern und Zusammenarbeit) und Early Supporter Lifetime (Einmalzahlung). Aktuelle Tarifdetails, Limits und Preise finden Sie auf der Pricing-Seite und in der Anwendung.",
810
+ "termsUserContentTitle": "Benutzerinhalte und Urheberrecht",
811
+ "termsUserContentBody": "Sie behalten alle Rechte an Lesezeichen und anderen Inhalten, die Sie im Dienst speichern. SlugBase erhält lediglich eine begrenzte Lizenz zur Verarbeitung, Speicherung und Übertragung Ihrer Inhalte ausschließlich zur Bereitstellung des Dienstes. SlugBase prüft, befürwortet oder kontrolliert nicht den Inhalt gespeicherter URLs. Sie sind dafür verantwortlich, dass die von Ihnen gespeicherten, geteilten oder weitergeleiteten Inhalte rechtmäßig sind.",
812
+ "termsAccountTitle": "Konto und Berechtigung",
813
+ "termsAccountBody": "Sie müssen bei der Kontoerstellung korrekte Angaben machen und diese aktuell halten. Sie sind für die Sicherheit Ihrer Zugangsdaten verantwortlich. Der Dienst ist für die rechtmäßige Nutzung durch Einzelpersonen und Teams bestimmt. Sie müssen mindestens 16 Jahre alt sein.",
814
+ "termsUseTitle": "Zulässige Nutzung",
815
+ "termsUseBody": "Sie dürfen SlugBase zum Speichern, Organisieren und Teilen von Lesezeichen sowie für Kurzlinks (Weiterleitung) nutzen. Sie dürfen den Dienst nicht verwenden für:",
816
+ "termsUseProhibited1": "Phishing, Spam-Kampagnen, irreführende Weiterleitungen oder täuschende Nutzer",
817
+ "termsUseProhibited2": "Verbreitung von Schadsoftware oder schädlichen Programmen",
818
+ "termsUseProhibited3": "Verletzung von Rechten Dritter (Urheberrecht, Markenrecht, Datenschutz usw.)",
819
+ "termsUseProhibited4": "Belästigung, Missbrauch oder illegale Inhalte",
820
+ "termsUseProhibited5": "Versuch, Sicherheitsmaßnahmen oder Ratenlimits zu umgehen",
821
+ "termsUseProhibited6": "Hosting oder Verbreitung illegaler Inhalte über Weiterleitungslinks",
822
+ "termsUseAction": "Wir können vermuteten Missbrauch untersuchen und Maßnahmen ergreifen, einschließlich Sperrung der Weiterleitung, Entfernung bestimmter Redirects oder Kündigung von Konten.",
823
+ "termsShortLinksTitle": "Kurzlinks und Weiterleitung",
824
+ "termsShortLinksBody": "Kurzlinks (z. B. /go/ihr-slug) leiten auf die von Ihnen festgelegte URL weiter. Die Weiterleitung ist optional und benutzergesteuert. SlugBase ist nicht verantwortlich für den Inhalt der Zielseiten; Sie müssen sicherstellen, dass Ziel-URLs rechtmäßig und nicht irreführend sind. Wir können die Weiterleitung deaktivieren, bestimmte Redirects entfernen oder Konten bei Missbrauch sperren. Missbrauch melden Sie an hello@slugbase.app oder über die Kontaktseite.",
825
+ "termsAvailabilityTitle": "Verfügbarkeit und Wartung",
826
+ "termsAvailabilityBody": "Der Dienst kann aufgrund von Wartung, Updates oder Ausfällen nicht verfügbar sein. Es gibt keine garantierte Betriebszeit oder SLA, sofern nicht schriftlich vereinbart. Geplante Wartung kann stattfinden und wird nach Möglichkeit angekündigt. Wir übernehmen keine Haftung für Unterbrechungen, Leistungsgrenzen oder Ausfälle von Drittanbietern (z. B. Hosting, Datenbank, Zahlungsabwicklung).",
827
+ "termsDataLossTitle": "Datenverlust und Backups",
828
+ "termsDataLossBody": "Wir garantieren nicht die dauerhafte Verfügbarkeit gespeicherter Inhalte. Sie sind für eigene Exporte und Backups verantwortlich. Wir bemühen uns um angemessene Backup-Maßnahmen, garantieren jedoch keine Wiederherstellung bei Datenverlust.",
829
+ "termsLifetimeTitle": "Early Supporter Lifetime-Tarif",
830
+ "termsLifetimeBody": "\"Lifetime\" bezieht sich auf die Lebensdauer des SlugBase Cloud-Dienstes, nicht auf Ihre Lebensdauer. Tarifvorteile gelten, solange der Dienst angeboten wird. Bei Einstellung des Dienstes sind wir nicht verpflichtet, ihn fortzuführen; Rückerstattungen erfolgen nicht, soweit nicht gesetzlich vorgeschrieben. Es besteht kein Anspruch auf Feature-Parität mit künftigen Tarifen, keinen Anspruch auf künftige Funktionen, und wir können Tarifstrukturen und Preise für neue Angebote ändern; die bestehenden Lifetime-Vorteile bleiben wie beschrieben erhalten.",
831
+ "termsBillingTitle": "Abrechnung und Zahlung",
832
+ "termsBillingBody": "Kostenpflichtige Tarife werden im Voraus abgerechnet (monatlich oder jährlich). Die Zahlung ist bei Rechnungsstellung fällig. Der Early Supporter Lifetime-Tarif wird einmalig berechnet. Die Zahlungsabwicklung erfolgt über Stripe. Preisanpassungen werden im Voraus mitgeteilt und gelten ab dem nächsten Abrechnungszeitraum.",
833
+ "termsThirdPartyTitle": "Drittanbieter-Dienste",
834
+ "termsThirdPartyBody": "SlugBase Cloud nutzt folgende Drittanbieter-Dienste für den Betrieb: (1) Fly.io: Anwendungshosting (nur EU-Region). (2) Neon: PostgreSQL-Datenbankhosting (EU-Region). (3) Stripe: Zahlungsabwicklung für Abonnements und Einmalzahlungen. (4) All Quiet (EU): Incident- und Alerting-Dienste (falls zutreffend). (5) Sentry: Fehlerverfolgung und Monitoring (geplant). (6) OpenAI: KI-gestützte Vorschläge für Titel, Tags und Slugs bei kostenpflichtigen Tarifen (wenn vom Nutzer aktiviert; URLs werden zur Vorschlagsgenerierung übermittelt). Einige Dienste können außerhalb des EWR ansässig sein.",
835
+ "termsBetaTitle": "Beta- und experimentelle Funktionen",
836
+ "termsBetaBody": "Beta- oder experimentelle Funktionen können sich ändern oder entfallen. Sie werden „wie besehen“ bereitgestellt. Verlassen Sie sich nicht auf sie für kritische Anwendungen.",
837
+ "termsCancellationTitle": "Kündigung und Verlängerung",
838
+ "termsCancellationBody": "Sie können Ihr Abonnement jederzeit kündigen. Die Kündigung wird zum Ende des laufenden Abrechnungszeitraums wirksam. Bis dahin behalten Sie vollen Zugang zum Dienst. Es gibt keine Mindestvertragslaufzeit. Bei automatisch verlängernden Abonnements können Sie vor jedem Verlängerungsdatum kündigen, um die Berechnung für die nächste Periode zu vermeiden. Die Kündigung erfolgt in den Kontoeinstellungen oder per Kontaktaufnahme mit uns.",
839
+ "termsWithdrawalTitle": "Widerrufsrecht (Verbraucher)",
840
+ "termsWithdrawalBody": "Sind Sie Verbraucher im Sinne des österreichischen Rechts, steht Ihnen ein 14-tägiges Widerrufsrecht ohne Angabe von Gründen zu. Die Widerrufsfrist beginnt am Tag des Vertragsschlusses. Um Ihr Recht auszuüben, teilen Sie uns Ihre Entscheidung mit (z. B. per E-Mail an hello@slugbase.app). Haben Sie während der Widerrufsfrist den Beginn der Leistungserbringung verlangt, willigen Sie ausdrücklich ein, dass die Leistung vor Ende der Widerrufsfrist beginnt, und nehmen zur Kenntnis, dass Sie Ihr Widerrufsrecht verlieren, sobald die Dienstleistung vollständig erbracht wurde.",
841
+ "termsWithdrawalB2BNote": "",
842
+ "termsIPTitle": "Geistiges Eigentum",
843
+ "termsIPBody": "Die SlugBase-Software, der Dienst, die Benutzeroberfläche, Marken und Dokumentation sind Eigentum des Anbieters oder Lizenzgeber. Sie erhalten ein begrenztes Recht zur Nutzung des Dienstes während Ihrer Abonnementlaufzeit. Sie dürfen den Dienst nicht kopieren, weiterverkaufen oder über vernünftige Interoperabilitätsbedürfnisse hinaus reverse engineeren.",
844
+ "termsIndemnifyTitle": "Freistellung",
845
+ "termsIndemnifyBody": "Sie stellen den Anbieter von Ansprüchen Dritter frei, die aus Ihren Inhalten, Missbrauch des Dienstes, illegaler Tätigkeit oder Weiterleitungslinks (einschließlich Phishing, Spam oder Rechtsverletzung) entstehen. Dies gilt im gesetzlich zulässigen Umfang.",
846
+ "termsLiabilityTitle": "Haftungsbeschränkung",
847
+ "termsLiabilityBody": "Soweit gesetzlich zulässig wird der Dienst \"wie besehen\" bereitgestellt. Wir haften nicht für indirekte, zufällige oder Folgeschäden, entgangenen Gewinn oder Datenverlust, außer bei Vorsatz oder grober Fahrlässigkeit oder soweit die Haftung gesetzlich zwingend ist (z. B. Produkthaftung, Personenschaden). Die zwingende gesetzliche Haftung für Verbraucher bleibt unberührt. Unsere Haftung ist auf den Betrag der von Ihnen in den vorangegangenen 12 Monaten gezahlten Gebühren begrenzt, soweit dies gesetzlich zulässig ist.",
848
+ "termsLiabilityB2BNote": "",
849
+ "termsTerminationTitle": "Sperrung und Kündigung durch uns",
850
+ "termsTerminationBody": "Wir können Ihr Konto unverzüglich sperren oder kündigen, wenn Sie diese AGB wesentlich verletzen, den Dienst illegal nutzen oder fällige Beträge nicht zahlen. Wir werden Sie wo möglich vorab benachrichtigen. Mit Beendigung erlischt Ihr Recht zur Nutzung des Dienstes. Sie können Ihre Daten vor oder bei Beendigung exportieren. Daten werden gemäß unserer Datenschutzerklärung gelöscht (typisch innerhalb von 30 Tagen). Wir behalten Daten nach Maßgabe gesetzlicher Aufbewahrungspflichten.",
851
+ "termsChangesTitle": "Änderungen der AGB",
852
+ "termsChangesBody": "Wir können diese AGB von Zeit zu Zeit aktualisieren. Wesentliche Änderungen werden über den Dienst oder per E-Mail mitgeteilt. Fortgesetzte Nutzung nach dem Wirksamwerden von Änderungen gilt als Annahme. Bei Ablehnung können Sie Ihr Abonnement kündigen.",
853
+ "termsForceMajeureTitle": "Höhere Gewalt",
854
+ "termsForceMajeureBody": "Wir haften nicht für die Nichterfüllung oder verzögerte Erfüllung unserer Pflichten aufgrund von Ereignissen außerhalb unseres zumutbaren Einflussbereichs (z. B. höhere Gewalt, Naturkatastrophen, Krieg, Pandemie, Streik, Ausfälle von Drittanbietern oder kritischer Infrastruktur).",
855
+ "termsLawTitle": "Anwendbares Recht",
856
+ "termsLawBody": "Soweit gesetzlich zulässig unterliegen diese Bedingungen dem Recht Österreichs. Streitigkeiten unterliegen den zuständigen Gerichten in Österreich.",
857
+ "termsSeverabilityTitle": "Salvatorische Klausel",
858
+ "termsSeverabilityBody": "Sollte eine Bestimmung dieser AGB unwirksam oder undurchführbar sein, bleiben die übrigen Bestimmungen in Kraft.",
859
+ "termsContactTitle": "Kontakt",
860
+ "termsContactBody": "Bei Fragen zu diesen Bedingungen kontaktieren Sie uns unter hello@slugbase.app oder über die Anschrift im Impressum.",
861
+ "privacyTitle": "Datenschutzerklärung",
862
+ "privacyScopeTitle": "Geltungsbereich",
863
+ "privacyScopeBody": "Diese Datenschutzerklärung gilt für SlugBase Cloud unter https://slugbase.app. Sie beschreibt, wie wir Ihre personenbezogenen Daten bei der Nutzung des gehosteten SaaS-Dienstes verarbeiten. Sie gilt nicht, wenn Sie SlugBase selbst hosten; in diesem Fall sind Sie Verantwortlicher. Die Erklärung basiert auf der EU-DSGVO und dem österreichischen Datenschutzgesetz (DSG).",
864
+ "privacyB2BTitle": "",
865
+ "privacyB2BBody": "",
866
+ "privacyControllerTitle": "Verantwortlicher",
867
+ "privacyControllerBody": "Verantwortlicher für die Datenverarbeitung ist Guggernbichler Michael David, Linzer Str. 17, 4100 Ottensheim, Österreich. Kontakt: hello@slugbase.app (siehe Impressum).",
868
+ "privacyDataTitle": "Von uns verarbeitete Daten",
869
+ "privacyDataBody": "Wir verarbeiten: (1) Kontodaten: E-Mail, Name, Passwort (als Hash gespeichert) und bei OIDC-Nutzung die Provider-Kennung. (2) Inhaltsdaten: Lesezeichen (URLs, Titel, Slugs), Ordner, Tags und Freigabeeinstellungen. (3) Nutzungsdaten: Sitzungstoken, IP-Adressen zu Sicherheitszwecken, Zugriffslogs, Zugriffszähler. (4) Kontaktadaten: bei Nutzung des Kontaktformulars Name, E-Mail und Nachricht. Wir verkaufen Ihre Daten nicht und nutzen sie nicht für Werbung.",
870
+ "privacyRecipientsTitle": "Empfänger",
871
+ "privacyRecipientsBody": "Daten werden auf unserer Infrastruktur und durch für den Betrieb erforderliche Dienstleister verarbeitet. Wir geben Ihre Daten nicht an Dritte zu deren eigenen Zwecken weiter.",
872
+ "privacyProcessorsTitle": "Auftragsverarbeiter und Dienstleister",
873
+ "privacyProcessorsBody": "Wir nutzen folgende Auftragsverarbeiter: (1) Fly.io: Anwendungshosting (nur EU-Region). (2) Neon: PostgreSQL-Datenbankhosting (EU-Region). (3) Stripe: Zahlungsabwicklung; Kartendaten werden von Stripe verarbeitet, wir speichern keine Kartendaten. (4) All Quiet (EU): Incident- und Alerting-Dienste (falls zutreffend). (5) Sentry: Fehlerverfolgung und Monitoring (geplant). (6) OpenAI: KI-gestützte Vorschläge für Titel, Tags und Slugs bei kostenpflichtigen Tarifen (siehe Abschnitt „KI-Vorschläge“). Einige Auftragsverarbeiter können außerhalb des EWR ansässig sein. Auftragsverarbeitungsverträge (AVV) sind gesetzlich erforderlich abgeschlossen.",
874
+ "privacyAITitle": "KI-Vorschläge (OpenAI)",
875
+ "privacyAIBody": "Bei aktivierter KI-Funktion werden ausschließlich die von Ihnen eingegebene bereinigte URL sowie optional abgerufene Seitentitel und -beschreibungen (Meta-Tags) zur Vorschlagsgenerierung verwendet. Es erfolgt kein Crawling oder Scraping von Seiteninhalten durch SlugBase. Die KI-Vorschläge sind optional und benutzersteuerbar (Feature-Umschalter); das Speichern von Lesezeichen hängt nicht von den Vorschlägen ab.",
876
+ "privacyTransfersTitle": "Internationale Datenübermittlungen",
877
+ "privacyTransfersBody": "Wir streben EU/EWR-Hosting an. Einige Auftragsverarbeiter können ihren Sitz außerhalb des EWR haben (z. B. USA). Bei Übermittlungen außerhalb des EWR setzen wir soweit erforderlich geeignete Garantien ein (z. B. von der EU-Kommission genehmigte Standardvertragsklauseln oder andere anerkannte Mechanismen).",
878
+ "privacyBasisTitle": "Rechtsgrundlage",
879
+ "privacyBasisBody": "Wir verarbeiten Daten auf Grundlage von: (1) Vertragserfüllung (Art. 6 Abs. 1 lit. b DSGVO): Bereitstellung des Dienstes, Kontoverwaltung, Support. (2) Berechtigten Interessen (Art. 6 Abs. 1 lit. f DSGVO): Sicherheit, Missbrauchsprävention, Logs, Verbesserung. (3) Einwilligung (Art. 6 Abs. 1 lit. a DSGVO): wo Sie zugestimmt haben. (4) Rechtlicher Verpflichtung (Art. 6 Abs. 1 lit. c DSGVO): wo gesetzlich gefordert.",
880
+ "privacyRetentionTitle": "Aufbewahrung",
881
+ "privacyRetentionBody": "Konto- und Inhaltsdaten werden solange gespeichert, wie Ihr Konto besteht. Nach Löschung entfernen oder anonymisieren wir Daten innerhalb einer angemessenen Frist (typisch 30 Tage). Sicherheits- und Zugriffslogs werden so lange wie nötig aufbewahrt, typisch 30–90 Tage. Nach österreichischem Recht können bestimmte Aufzeichnungen bis zu 7 Jahre aufbewahrt werden.",
882
+ "privacySecurityTitle": "Sicherheit",
883
+ "privacySecurityBody": "Wir nutzen TLS für Daten in der Übertragung, hashen Passwörter (bcrypt), wenden Zugriffskontrollen und Ratenlimits an und führen regelmäßige Updates und Backups durch. Wir speichern keine Zahlungskartendaten; Zahlungsdaten werden von unserem Zahlungsanbieter verarbeitet.",
884
+ "privacyRightsTitle": "Ihre Rechte",
885
+ "privacyRightsBody": "Nach DSGVO und österreichischem DSG haben Sie: Auskunft (Art. 15), Berichtigung (Art. 16), Löschung (Art. 17), Einschränkung (Art. 18), Datenübertragbarkeit (Art. 20), Widerspruch (Art. 21) und das Recht auf Entscheidungsfreiheit bei automatisierter Verarbeitung (Art. 22). Sie können Ihre Daten über die integrierten Export-Funktionen (JSON/HTML) im Lesezeichenbereich exportieren oder eine Kopie bei uns anfordern. Sie können Ihre Einwilligung jederzeit widerrufen. Kontakt: hello@slugbase.app. Sie können bei der österreichischen Datenschutzbehörde Beschwerde einlegen (siehe unten).",
886
+ "privacyDPATitle": "Auftragsverarbeitungsvertrag (B2B)",
887
+ "privacyDPABody": "Ein Auftragsverarbeitungsvertrag (AVV) ist auf Anfrage für Team- oder Business-Nutzer verfügbar. In Team-Kontexten kann Ihre Organisation Verantwortlicher und SlugBase Auftragsverarbeiter für gespeicherte Inhalte sein.",
888
+ "privacyAutomatedTitle": "Automatisierte Entscheidungsfindung",
889
+ "privacyAutomatedBody": "Wir nutzen keine automatisierte Entscheidungsfindung mit rechtlichen oder ähnlich schwerwiegenden Auswirkungen (Art. 22 DSGVO).",
890
+ "privacyCookiesTitle": "Cookies und Authentifizierung",
891
+ "privacyCookiesBody": "Wir verwenden Sitzungs- und Authentifizierungs-Cookies, die für den Betrieb erforderlich sind. Wir verwenden keine Marketing- oder Analyse-Tracker.",
892
+ "privacyHostingTitle": "Hosting (CLOUD vs. Selbst gehostet)",
893
+ "privacyHostingBody": "Bei slugbase.app (CLOUD) hosten wir Ihre Daten auf unserer Infrastruktur in der EU/EWR. Bei Selbsthosting von SlugBase sind Sie Verantwortlicher und kontrollieren Speicherort und Verarbeitung.",
894
+ "privacySupervisoryTitle": "Aufsichtsbehörde",
895
+ "privacySupervisoryBody": "Sie haben das Recht, bei der Österreichischen Datenschutzbehörde (DSB), Barichgasse 40-42, 1030 Wien (dsb@dsb.gv.at, +43 1 52 152-0) Beschwerde einzulegen. Nach österreichischem DSG müssen Beschwerden in der Regel innerhalb eines Jahres nach Kenntnis eingebracht werden.",
896
+ "privacyChangesTitle": "Änderungen",
897
+ "privacyChangesBody": "Wir können diese Datenschutzerklärung von Zeit zu Zeit aktualisieren. Wesentliche Änderungen werden über den Dienst oder per E-Mail mitgeteilt. Die aktuelle Fassung ist stets auf dieser Seite verfügbar."
898
+ }
899
+ }