feat(help): add help pages to 10 remaining web apps

Add bilingual (DE/EN) help content and help page routes for Clock,
Context, ManaCore, ManaDeck, NutriPhi, Photos, Planta, Presi,
Questions, and SkillTree. Uses shared-help-types and shared-help-ui
packages consistent with already-committed help pages in other apps.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Till JS 2026-03-25 10:36:22 +01:00
parent 422b4f9fc9
commit 7077c0a397
29 changed files with 1937 additions and 0 deletions

View file

@ -45,6 +45,8 @@
"@manacore/shared-feedback-service": "workspace:*",
"@manacore/shared-feedback-ui": "workspace:*",
"@manacore/shared-i18n": "workspace:*",
"@manacore/shared-help-types": "workspace:*",
"@manacore/shared-help-ui": "workspace:*",
"@manacore/shared-icons": "workspace:*",
"@manacore/shared-profile-ui": "workspace:*",
"@manacore/shared-stores": "workspace:*",

View file

@ -0,0 +1,216 @@
/**
* Help content for Clock app
*/
import type { HelpContent } from '@manacore/shared-help-types';
export function getClockHelpContent(locale: string): HelpContent {
const isDE = locale === 'de';
return {
faq: [
{
id: 'faq-create-alarms',
question: isDE ? 'Wie erstelle ich Wecker?' : 'How do I create alarms?',
answer: isDE
? '<p>Du kannst Wecker auf verschiedene Arten erstellen:</p><ul><li><strong>Schnellwecker</strong>: Drücke <kbd>A</kbd> oder klicke auf das + Symbol im Wecker-Tab</li><li><strong>Uhrzeit wählen</strong>: Stelle Stunde und Minute ein und wähle die gewünschten Wochentage</li><li><strong>Label</strong>: Gib deinem Wecker einen Namen, z.B. "Morgenroutine"</li><li><strong>Klingelton</strong>: Wähle aus verschiedenen Tönen oder nutze einen sanften Weckton</li></ul>'
: '<p>You can create alarms in several ways:</p><ul><li><strong>Quick alarm</strong>: Press <kbd>A</kbd> or click the + icon in the Alarms tab</li><li><strong>Set time</strong>: Choose hour and minute and select the desired weekdays</li><li><strong>Label</strong>: Give your alarm a name, e.g. "Morning routine"</li><li><strong>Ringtone</strong>: Choose from various sounds or use a gentle wake-up tone</li></ul>',
category: 'features',
order: 1,
language: isDE ? 'de' : 'en',
tags: isDE ? ['wecker', 'erstellen', 'neu'] : ['alarm', 'create', 'new'],
},
{
id: 'faq-timers',
question: isDE
? 'Wie funktionieren Timer und Stoppuhr?'
: 'How do timers and the stopwatch work?',
answer: isDE
? '<p>Clock bietet zwei Zeitmesser:</p><ul><li><strong>Timer</strong>: Stelle eine Countdown-Zeit ein und starte ihn. Du kannst mehrere Timer gleichzeitig laufen lassen. Drücke <kbd>T</kbd> für einen neuen Timer.</li><li><strong>Stoppuhr</strong>: Messe verstrichene Zeit mit Rundenzeiten. Starte, pausiere und setze zurück.</li></ul><p>Beide laufen auch im Hintergrund weiter und benachrichtigen dich, wenn die Zeit abgelaufen ist.</p>'
: '<p>Clock offers two time measurement tools:</p><ul><li><strong>Timer</strong>: Set a countdown duration and start it. You can run multiple timers simultaneously. Press <kbd>T</kbd> for a new timer.</li><li><strong>Stopwatch</strong>: Measure elapsed time with lap splits. Start, pause, and reset.</li></ul><p>Both continue running in the background and notify you when time is up.</p>',
category: 'features',
order: 2,
language: isDE ? 'de' : 'en',
tags: isDE ? ['timer', 'stoppuhr', 'countdown'] : ['timer', 'stopwatch', 'countdown'],
},
{
id: 'faq-pomodoro',
question: isDE ? 'Was ist die Pomodoro-Technik?' : 'What is the Pomodoro technique?',
answer: isDE
? '<p>Die <strong>Pomodoro-Technik</strong> ist eine Zeitmanagement-Methode:</p><ol><li>Arbeite <strong>25 Minuten</strong> konzentriert (ein "Pomodoro")</li><li>Mache eine <strong>5-Minuten-Pause</strong></li><li>Nach 4 Pomodoros: <strong>15-30 Minuten</strong> längere Pause</li></ol><p>In Clock kannst du die Intervalle anpassen, deinen Fortschritt verfolgen und Statistiken über deine Produktivität einsehen.</p>'
: '<p>The <strong>Pomodoro technique</strong> is a time management method:</p><ol><li>Work for <strong>25 minutes</strong> with focus (one "Pomodoro")</li><li>Take a <strong>5-minute break</strong></li><li>After 4 Pomodoros: take a <strong>15-30 minute</strong> longer break</li></ol><p>In Clock you can customize the intervals, track your progress, and view statistics about your productivity.</p>',
category: 'features',
order: 3,
language: isDE ? 'de' : 'en',
tags: isDE
? ['pomodoro', 'produktivität', 'fokus', 'technik']
: ['pomodoro', 'productivity', 'focus', 'technique'],
},
{
id: 'faq-life-clock',
question: isDE ? 'Was ist die Life Clock?' : 'What is the Life Clock?',
answer: isDE
? '<p>Die <strong>Life Clock</strong> ist eine einzigartige Visualisierung deiner Lebenszeit:</p><ul><li>Gib dein Geburtsdatum und deine geschätzte Lebenserwartung ein</li><li>Sieh, wie viel deiner Zeit bereits vergangen ist und wie viel noch vor dir liegt</li><li>Verschiedene Darstellungen: Wochen, Monate oder Jahre als Raster</li></ul><p>Die Life Clock soll dich motivieren, deine Zeit bewusst zu nutzen — keine Angst, sondern <strong>Inspiration</strong>.</p>'
: '<p>The <strong>Life Clock</strong> is a unique visualization of your lifetime:</p><ul><li>Enter your birth date and estimated life expectancy</li><li>See how much of your time has passed and how much lies ahead</li><li>Various display modes: weeks, months, or years as a grid</li></ul><p>The Life Clock is meant to motivate you to use your time mindfully — not fear, but <strong>inspiration</strong>.</p>',
category: 'features',
order: 4,
language: isDE ? 'de' : 'en',
tags: isDE
? ['life-clock', 'lebenszeit', 'visualisierung']
: ['life-clock', 'lifetime', 'visualization'],
},
{
id: 'faq-privacy',
question: isDE ? 'Wie werden meine Daten geschützt?' : 'How is my data protected?',
answer: isDE
? '<p>Deine Daten sind sicher:</p><ul><li><strong>Lokale Speicherung</strong>: Wecker und Timer werden lokal auf deinem Gerät gespeichert</li><li><strong>Verschlüsselung</strong>: Alle synchronisierten Daten werden bei der Übertragung (TLS) verschlüsselt</li><li><strong>DSGVO-konform</strong>: Wir halten uns an die EU-Datenschutzverordnung</li><li><strong>Kein Tracking</strong>: Deine Nutzungsdaten werden nicht an Dritte weitergegeben</li></ul>'
: '<p>Your data is secure:</p><ul><li><strong>Local storage</strong>: Alarms and timers are stored locally on your device</li><li><strong>Encryption</strong>: All synced data is encrypted in transit (TLS)</li><li><strong>GDPR compliant</strong>: We follow EU data protection regulations</li><li><strong>No tracking</strong>: Your usage data is never shared with third parties</li></ul>',
category: 'privacy',
order: 5,
language: isDE ? 'de' : 'en',
featured: true,
tags: isDE ? ['datenschutz', 'dsgvo', 'sicherheit'] : ['privacy', 'gdpr', 'security'],
},
],
features: [
{
id: 'feature-alarms',
title: isDE ? 'Wecker' : 'Alarms',
description: isDE
? 'Erstelle wiederkehrende und einmalige Wecker mit individuellen Tönen'
: 'Create recurring and one-time alarms with custom sounds',
icon: '⏰',
category: 'core',
highlights: isDE
? ['Wiederkehrende Wecker', 'Individuelle Töne', 'Schlummerfunktion', 'Labels']
: ['Recurring alarms', 'Custom sounds', 'Snooze function', 'Labels'],
content: '',
order: 1,
language: isDE ? 'de' : 'en',
},
{
id: 'feature-timers-stopwatch',
title: isDE ? 'Timer & Stoppuhr' : 'Timers & Stopwatch',
description: isDE
? 'Mehrere gleichzeitige Timer und eine Stoppuhr mit Rundenzeiten'
: 'Multiple simultaneous timers and a stopwatch with lap times',
icon: '⏱️',
category: 'core',
highlights: isDE
? ['Mehrere Timer', 'Rundenzeiten', 'Hintergrund-Benachrichtigung', 'Voreinstellungen']
: ['Multiple timers', 'Lap times', 'Background notifications', 'Presets'],
content: '',
order: 2,
language: isDE ? 'de' : 'en',
},
{
id: 'feature-pomodoro',
title: 'Pomodoro',
description: isDE
? 'Steigere deine Produktivität mit der Pomodoro-Technik und Statistiken'
: 'Boost your productivity with the Pomodoro technique and statistics',
icon: '🍅',
category: 'advanced',
highlights: isDE
? ['Anpassbare Intervalle', 'Sitzungs-Tracking', 'Statistiken', 'Benachrichtigungen']
: ['Customizable intervals', 'Session tracking', 'Statistics', 'Notifications'],
content: '',
order: 3,
language: isDE ? 'de' : 'en',
},
{
id: 'feature-world-clock',
title: isDE ? 'Weltzeituhr' : 'World Clock',
description: isDE
? 'Behalte die Uhrzeit in verschiedenen Zeitzonen im Blick'
: 'Keep track of the time across different time zones',
icon: '🌍',
category: 'core',
highlights: isDE
? ['Alle Zeitzonen', 'Zeitvergleich', 'Favoriten', 'Analoges Zifferblatt']
: ['All time zones', 'Time comparison', 'Favorites', 'Analog clock face'],
content: '',
order: 4,
language: isDE ? 'de' : 'en',
},
],
shortcuts: [
{
id: 'shortcuts-general',
category: 'general',
title: isDE ? 'Allgemein' : 'General',
language: isDE ? 'de' : 'en',
order: 1,
shortcuts: [
{
shortcut: 'Cmd/Ctrl + K',
action: isDE ? 'Kommandoleiste öffnen' : 'Open command bar',
},
{
shortcut: 'A',
action: isDE ? 'Neuer Wecker' : 'New alarm',
},
{
shortcut: 'T',
action: isDE ? 'Neuer Timer' : 'New timer',
},
],
},
{
id: 'shortcuts-navigation',
category: 'navigation',
title: 'Navigation',
language: isDE ? 'de' : 'en',
order: 2,
shortcuts: [
{
shortcut: 'Cmd/Ctrl + 1',
action: isDE ? 'Wecker öffnen' : 'Open Alarms',
},
{
shortcut: 'Cmd/Ctrl + 2',
action: isDE ? 'Timer öffnen' : 'Open Timers',
},
{
shortcut: 'Cmd/Ctrl + 3',
action: isDE ? 'Stoppuhr öffnen' : 'Open Stopwatch',
},
{
shortcut: 'Cmd/Ctrl + 4',
action: isDE ? 'Pomodoro öffnen' : 'Open Pomodoro',
},
{
shortcut: 'Cmd/Ctrl + 5',
action: isDE ? 'Weltzeituhr öffnen' : 'Open World Clock',
},
{
shortcut: 'Cmd/Ctrl + 6',
action: isDE ? 'Life Clock öffnen' : 'Open Life Clock',
},
{
shortcut: 'Cmd/Ctrl + 7',
action: isDE ? 'Statistiken öffnen' : 'Open Statistics',
},
{
shortcut: 'Cmd/Ctrl + 8',
action: isDE ? 'Einstellungen öffnen' : 'Open Settings',
},
],
},
],
gettingStarted: [],
changelog: [],
contact: {
id: 'contact-support',
title: isDE ? 'Support kontaktieren' : 'Contact Support',
content: isDE
? '<p>Unser Support-Team hilft dir bei allen Fragen rund um Clock.</p>'
: '<p>Our support team is here to help you with any questions about Clock.</p>',
language: isDE ? 'de' : 'en',
order: 1,
supportEmail: 'support@mana.how',
documentationUrl: 'https://mana.how/docs',
responseTime: isDE ? 'Normalerweise innerhalb von 24 Stunden' : 'Usually within 24 hours',
},
};
}

View file

@ -0,0 +1,32 @@
<script lang="ts">
import { goto } from '$app/navigation';
import { locale } from 'svelte-i18n';
import { HelpPage, getHelpTranslations } from '@manacore/shared-help-ui';
import { getClockHelpContent } from '$lib/content/help/index.js';
const content = $derived(getClockHelpContent($locale ?? 'de'));
const translations = $derived(
getHelpTranslations($locale ?? 'de', {
subtitle:
$locale === 'de'
? 'Finde Antworten und lerne Clock kennen'
: 'Find answers and learn how to use Clock',
})
);
</script>
<svelte:head>
<title>{translations.title} | Clock</title>
</svelte:head>
<HelpPage
{content}
appName="Clock"
appId="clock"
{translations}
showBackButton
onBack={() => goto('/')}
showGettingStarted={false}
showChangelog={false}
defaultSection="faq"
/>

View file

@ -41,6 +41,8 @@
"@manacore/shared-feedback-service": "workspace:*",
"@manacore/shared-feedback-ui": "workspace:*",
"@manacore/shared-i18n": "workspace:*",
"@manacore/shared-help-types": "workspace:*",
"@manacore/shared-help-ui": "workspace:*",
"@manacore/shared-icons": "workspace:*",
"@manacore/shared-profile-ui": "workspace:*",
"@manacore/shared-stores": "workspace:*",

View file

@ -0,0 +1,163 @@
/**
* Help content for Context app
*/
import type { HelpContent } from '@manacore/shared-help-types';
export function getContextHelpContent(locale: string): HelpContent {
const isDE = locale === 'de';
return {
faq: [
{
id: 'faq-spaces',
question: isDE ? 'Was sind Spaces?' : 'What are Spaces?',
answer: isDE
? '<p><strong>Spaces</strong> sind Arbeitsbereiche, in denen du Dokumente organisierst:</p><ul><li>Erstelle separate Spaces für verschiedene Projekte oder Themen</li><li>Jeder Space hat eigene Dokumente, Einstellungen und Zugriffsrechte</li><li>Wechsle schnell zwischen Spaces über die Seitenleiste</li><li>Teile Spaces mit Teammitgliedern für gemeinsames Arbeiten</li></ul>'
: '<p><strong>Spaces</strong> are workspaces where you organize your documents:</p><ul><li>Create separate Spaces for different projects or topics</li><li>Each Space has its own documents, settings, and access rights</li><li>Quickly switch between Spaces via the sidebar</li><li>Share Spaces with team members for collaboration</li></ul>',
category: 'features',
order: 1,
language: isDE ? 'de' : 'en',
tags: isDE
? ['spaces', 'arbeitsbereiche', 'organisation']
: ['spaces', 'workspaces', 'organization'],
},
{
id: 'faq-ai-generation',
question: isDE ? 'Wie funktioniert die KI-Generierung?' : 'How does AI generation work?',
answer: isDE
? '<p>Context nutzt <strong>mehrere KI-Modelle</strong> für die Dokumentenerstellung:</p><ol><li>Wähle ein Dokument oder erstelle ein neues</li><li>Beschreibe, was du generieren möchtest, oder markiere Text für Überarbeitung</li><li>Wähle das gewünschte KI-Modell (z.B. GPT-4, Claude, Gemini)</li><li>Die KI generiert den Inhalt direkt in deinem Dokument</li></ol><p>Du kannst auch bestehende Texte umschreiben, zusammenfassen oder erweitern lassen.</p>'
: '<p>Context uses <strong>multiple AI models</strong> for document creation:</p><ol><li>Select a document or create a new one</li><li>Describe what you want to generate, or highlight text for revision</li><li>Choose the desired AI model (e.g. GPT-4, Claude, Gemini)</li><li>The AI generates content directly in your document</li></ol><p>You can also have existing text rewritten, summarized, or expanded.</p>',
category: 'features',
order: 2,
language: isDE ? 'de' : 'en',
tags: isDE ? ['ki', 'generierung', 'dokument'] : ['ai', 'generation', 'document'],
},
{
id: 'faq-models',
question: isDE ? 'Welche KI-Modelle sind verfügbar?' : 'What AI models are available?',
answer: isDE
? '<p>Context unterstützt <strong>mehrere führende KI-Modelle</strong>:</p><ul><li><strong>OpenAI GPT-4</strong>: Vielseitig und leistungsstark für komplexe Aufgaben</li><li><strong>Anthropic Claude</strong>: Besonders gut bei langen Dokumenten und Analysen</li><li><strong>Google Gemini</strong>: Schnell und effizient für alltägliche Aufgaben</li></ul><p>Jedes Modell hat unterschiedliche Stärken. Du kannst das Modell pro Generierung wechseln, um die besten Ergebnisse zu erzielen.</p>'
: '<p>Context supports <strong>multiple leading AI models</strong>:</p><ul><li><strong>OpenAI GPT-4</strong>: Versatile and powerful for complex tasks</li><li><strong>Anthropic Claude</strong>: Especially good with long documents and analysis</li><li><strong>Google Gemini</strong>: Fast and efficient for everyday tasks</li></ul><p>Each model has different strengths. You can switch models per generation to achieve the best results.</p>',
category: 'technical',
order: 3,
language: isDE ? 'de' : 'en',
tags: isDE ? ['modelle', 'gpt', 'claude', 'gemini'] : ['models', 'gpt', 'claude', 'gemini'],
},
{
id: 'faq-versioning',
question: isDE
? 'Wie funktioniert die Dokumentenversionierung?'
: 'How does document versioning work?',
answer: isDE
? '<p>Context speichert automatisch <strong>Versionen</strong> deiner Dokumente:</p><ul><li>Jede Änderung wird als neue Version gespeichert</li><li>Vergleiche zwei Versionen nebeneinander mit Diff-Ansicht</li><li>Stelle jede frühere Version mit einem Klick wieder her</li><li>KI-Generierungen werden als separate Versionen markiert</li></ul><p>So kannst du jederzeit zu einem früheren Stand zurückkehren, ohne Arbeit zu verlieren.</p>'
: '<p>Context automatically saves <strong>versions</strong> of your documents:</p><ul><li>Every change is saved as a new version</li><li>Compare two versions side by side with diff view</li><li>Restore any previous version with one click</li><li>AI generations are marked as separate versions</li></ul><p>This way you can always go back to a previous state without losing work.</p>',
category: 'features',
order: 4,
language: isDE ? 'de' : 'en',
tags: isDE
? ['versionierung', 'historie', 'wiederherstellen']
: ['versioning', 'history', 'restore'],
},
{
id: 'faq-privacy',
question: isDE ? 'Wie werden meine Daten geschützt?' : 'How is my data protected?',
answer: isDE
? '<p>Deine Daten sind sicher:</p><ul><li><strong>Verschlüsselung</strong>: Alle Daten werden bei der Übertragung (TLS) und im Ruhezustand verschlüsselt</li><li><strong>DSGVO-konform</strong>: Wir halten uns an die EU-Datenschutzverordnung</li><li><strong>KI-Datenschutz</strong>: Deine Dokumente werden nicht zum Trainieren von KI-Modellen verwendet</li><li><strong>Datenexport</strong>: Du kannst jederzeit alle Dokumente exportieren</li></ul>'
: '<p>Your data is secure:</p><ul><li><strong>Encryption</strong>: All data is encrypted in transit (TLS) and at rest</li><li><strong>GDPR compliant</strong>: We follow EU data protection regulations</li><li><strong>AI privacy</strong>: Your documents are not used to train AI models</li><li><strong>Data export</strong>: You can export all documents at any time</li></ul>',
category: 'privacy',
order: 5,
language: isDE ? 'de' : 'en',
featured: true,
tags: isDE ? ['datenschutz', 'dsgvo', 'sicherheit'] : ['privacy', 'gdpr', 'security'],
},
],
features: [
{
id: 'feature-ai-generation',
title: isDE ? 'KI-Dokumentengenerierung' : 'AI Document Generation',
description: isDE
? 'Erstelle und überarbeite Dokumente mit mehreren KI-Modellen'
: 'Create and revise documents with multiple AI models',
icon: '🤖',
category: 'core',
highlights: isDE
? [
'Multi-Modell-Unterstützung',
'Inline-Generierung',
'Umschreiben & Zusammenfassen',
'Kontextbewusst',
]
: ['Multi-model support', 'Inline generation', 'Rewrite & summarize', 'Context-aware'],
content: '',
order: 1,
language: isDE ? 'de' : 'en',
},
{
id: 'feature-spaces',
title: 'Spaces',
description: isDE
? 'Organisiere Dokumente in thematischen Arbeitsbereichen'
: 'Organize documents in thematic workspaces',
icon: '📂',
category: 'core',
highlights: isDE
? ['Projekt-Organisation', 'Zugriffsrechte', 'Team-Zusammenarbeit', 'Schneller Wechsel']
: ['Project organization', 'Access rights', 'Team collaboration', 'Quick switching'],
content: '',
order: 2,
language: isDE ? 'de' : 'en',
},
{
id: 'feature-versioning',
title: isDE ? 'Dokumentenversionierung' : 'Document Versioning',
description: isDE
? 'Automatische Versionierung mit Diff-Ansicht und Wiederherstellung'
: 'Automatic versioning with diff view and restoration',
icon: '📋',
category: 'advanced',
highlights: isDE
? [
'Automatische Versionen',
'Diff-Vergleich',
'Ein-Klick-Wiederherstellung',
'KI-Versionsmarker',
]
: ['Automatic versions', 'Diff comparison', 'One-click restore', 'AI version markers'],
content: '',
order: 3,
language: isDE ? 'de' : 'en',
},
{
id: 'feature-multi-model',
title: isDE ? 'Multi-Modell-Unterstützung' : 'Multi-Model Support',
description: isDE
? 'Wähle aus GPT-4, Claude, Gemini und weiteren KI-Modellen'
: 'Choose from GPT-4, Claude, Gemini, and more AI models',
icon: '🧠',
category: 'advanced',
highlights: isDE
? ['GPT-4', 'Claude', 'Gemini', 'Modellvergleich']
: ['GPT-4', 'Claude', 'Gemini', 'Model comparison'],
content: '',
order: 4,
language: isDE ? 'de' : 'en',
},
],
shortcuts: [],
gettingStarted: [],
changelog: [],
contact: {
id: 'contact-support',
title: isDE ? 'Support kontaktieren' : 'Contact Support',
content: isDE
? '<p>Unser Support-Team hilft dir bei allen Fragen rund um Context.</p>'
: '<p>Our support team is here to help you with any questions about Context.</p>',
language: isDE ? 'de' : 'en',
order: 1,
supportEmail: 'support@mana.how',
documentationUrl: 'https://mana.how/docs',
responseTime: isDE ? 'Normalerweise innerhalb von 24 Stunden' : 'Usually within 24 hours',
},
};
}

View file

@ -0,0 +1,32 @@
<script lang="ts">
import { goto } from '$app/navigation';
import { locale } from 'svelte-i18n';
import { HelpPage, getHelpTranslations } from '@manacore/shared-help-ui';
import { getContextHelpContent } from '$lib/content/help/index.js';
const content = $derived(getContextHelpContent($locale ?? 'de'));
const translations = $derived(
getHelpTranslations($locale ?? 'de', {
subtitle:
$locale === 'de'
? 'Finde Antworten und lerne Context kennen'
: 'Find answers and learn how to use Context',
})
);
</script>
<svelte:head>
<title>{translations.title} | Context</title>
</svelte:head>
<HelpPage
{content}
appName="Context"
appId="context"
{translations}
showBackButton
onBack={() => goto('/')}
showGettingStarted={false}
showChangelog={false}
defaultSection="faq"
/>

View file

@ -52,6 +52,8 @@
"@manacore/shared-feedback-service": "workspace:*",
"@manacore/shared-feedback-ui": "workspace:*",
"@manacore/shared-i18n": "workspace:*",
"@manacore/shared-help-types": "workspace:*",
"@manacore/shared-help-ui": "workspace:*",
"@manacore/shared-icons": "workspace:*",
"@manacore/shared-profile-ui": "workspace:*",
"@manacore/shared-stores": "workspace:*",

View file

@ -0,0 +1,153 @@
/**
* Help content for ManaCore app
*/
import type { HelpContent } from '@manacore/shared-help-types';
export function getManaCoreHelpContent(locale: string): HelpContent {
const isDE = locale === 'de';
return {
faq: [
{
id: 'faq-what-is-manacore',
question: isDE ? 'Was ist ManaCore?' : 'What is ManaCore?',
answer: isDE
? '<p><strong>ManaCore</strong> ist die zentrale Plattform des Mana-Ökosystems:</p><ul><li>Verwalte dein <strong>Konto</strong> und Profil an einem zentralen Ort</li><li>Greife auf alle Mana-Apps zu — Chat, Picture, Zitare, Clock und mehr</li><li>Nutze <strong>Single Sign-On (SSO)</strong>, um dich einmal anzumelden und überall eingeloggt zu sein</li><li>Erstelle und verwalte <strong>Organisationen</strong> für Teamarbeit</li></ul>'
: '<p><strong>ManaCore</strong> is the central platform of the Mana ecosystem:</p><ul><li>Manage your <strong>account</strong> and profile in one central place</li><li>Access all Mana apps — Chat, Picture, Zitare, Clock, and more</li><li>Use <strong>Single Sign-On (SSO)</strong> to log in once and be authenticated everywhere</li><li>Create and manage <strong>organizations</strong> for teamwork</li></ul>',
category: 'general',
order: 1,
language: isDE ? 'de' : 'en',
tags: isDE ? ['manacore', 'plattform', 'ökosystem'] : ['manacore', 'platform', 'ecosystem'],
},
{
id: 'faq-sso',
question: isDE
? 'Wie funktioniert Single Sign-On (SSO)?'
: 'How does Single Sign-On (SSO) work?',
answer: isDE
? '<p><strong>Single Sign-On</strong> ermöglicht dir, dich einmal anzumelden und alle Mana-Apps zu nutzen:</p><ol><li>Melde dich bei einer beliebigen Mana-App an (z.B. ManaCore, Chat, Picture)</li><li>Dein Login wird automatisch auf alle verbundenen Apps übertragen</li><li>Du bleibst eingeloggt, bis du dich explizit abmeldest</li></ol><p>SSO verwendet <strong>sichere JWT-Tokens</strong> mit EdDSA-Verschlüsselung. Dein Passwort wird nur einmal beim Login übertragen.</p>'
: '<p><strong>Single Sign-On</strong> lets you log in once and use all Mana apps:</p><ol><li>Sign in to any Mana app (e.g. ManaCore, Chat, Picture)</li><li>Your login is automatically shared across all connected apps</li><li>You stay logged in until you explicitly sign out</li></ol><p>SSO uses <strong>secure JWT tokens</strong> with EdDSA encryption. Your password is only transmitted once during login.</p>',
category: 'account',
order: 2,
language: isDE ? 'de' : 'en',
tags: isDE
? ['sso', 'anmeldung', 'login', 'authentifizierung']
: ['sso', 'login', 'authentication', 'sign-in'],
},
{
id: 'faq-organizations',
question: isDE ? 'Wie verwalte ich Organisationen?' : 'How do I manage organizations?',
answer: isDE
? '<p><strong>Organisationen</strong> ermöglichen Teamarbeit im Mana-Ökosystem:</p><ul><li><strong>Erstellen</strong>: Gehe zu Einstellungen > Organisationen > Neue Organisation</li><li><strong>Mitglieder einladen</strong>: Lade Teammitglieder per E-Mail ein und weise Rollen zu (Admin, Mitglied)</li><li><strong>Apps verwalten</strong>: Aktiviere oder deaktiviere Apps pro Organisation</li><li><strong>Landing Page</strong>: Erstelle eine eigene Landingpage unter <code>slug.mana.how</code></li></ul>'
: '<p><strong>Organizations</strong> enable teamwork in the Mana ecosystem:</p><ul><li><strong>Create</strong>: Go to Settings > Organizations > New Organization</li><li><strong>Invite members</strong>: Invite team members by email and assign roles (Admin, Member)</li><li><strong>Manage apps</strong>: Enable or disable apps per organization</li><li><strong>Landing page</strong>: Create a custom landing page at <code>slug.mana.how</code></li></ul>',
category: 'features',
order: 3,
language: isDE ? 'de' : 'en',
tags: isDE
? ['organisation', 'team', 'mitglieder', 'verwalten']
: ['organization', 'team', 'members', 'manage'],
},
{
id: 'faq-switch-apps',
question: isDE ? 'Wie wechsle ich zwischen Apps?' : 'How do I switch between apps?',
answer: isDE
? '<p>Du kannst schnell zwischen Mana-Apps wechseln:</p><ul><li><strong>App-Übersicht</strong>: Klicke auf das App-Menü in der Navigation, um alle verfügbaren Apps zu sehen</li><li><strong>Direkt-Links</strong>: Jede App hat ihre eigene URL (z.B. chat.mana.how, picture.mana.how)</li><li><strong>Dashboard</strong>: Das ManaCore-Dashboard zeigt alle deine Apps mit Schnellzugriff</li></ul><p>Dein Login bleibt dank SSO beim Wechsel zwischen Apps erhalten.</p>'
: '<p>You can quickly switch between Mana apps:</p><ul><li><strong>App overview</strong>: Click the app menu in the navigation to see all available apps</li><li><strong>Direct links</strong>: Each app has its own URL (e.g. chat.mana.how, picture.mana.how)</li><li><strong>Dashboard</strong>: The ManaCore dashboard shows all your apps with quick access</li></ul><p>Your login persists when switching between apps thanks to SSO.</p>',
category: 'general',
order: 4,
language: isDE ? 'de' : 'en',
tags: isDE ? ['wechseln', 'apps', 'navigation'] : ['switch', 'apps', 'navigation'],
},
{
id: 'faq-privacy',
question: isDE ? 'Wie werden meine Daten geschützt?' : 'How is my data protected?',
answer: isDE
? '<p>Deine Daten sind sicher:</p><ul><li><strong>Verschlüsselung</strong>: Alle Daten werden bei der Übertragung (TLS) und im Ruhezustand verschlüsselt</li><li><strong>DSGVO-konform</strong>: Wir halten uns an die EU-Datenschutzverordnung</li><li><strong>Datenhoheit</strong>: Deine Daten gehören dir — exportiere oder lösche sie jederzeit</li><li><strong>Kein Datenverkauf</strong>: Deine Daten werden nie an Dritte verkauft</li><li><strong>Self-Hosted</strong>: ManaCore läuft auf unserer eigenen Infrastruktur</li></ul>'
: '<p>Your data is secure:</p><ul><li><strong>Encryption</strong>: All data is encrypted in transit (TLS) and at rest</li><li><strong>GDPR compliant</strong>: We follow EU data protection regulations</li><li><strong>Data sovereignty</strong>: Your data belongs to you — export or delete it anytime</li><li><strong>No data selling</strong>: Your data is never sold to third parties</li><li><strong>Self-hosted</strong>: ManaCore runs on our own infrastructure</li></ul>',
category: 'privacy',
order: 5,
language: isDE ? 'de' : 'en',
featured: true,
tags: isDE ? ['datenschutz', 'dsgvo', 'sicherheit'] : ['privacy', 'gdpr', 'security'],
},
],
features: [
{
id: 'feature-sso',
title: 'Single Sign-On',
description: isDE
? 'Einmal anmelden und alle Mana-Apps nutzen'
: 'Sign in once and use all Mana apps',
icon: '🔐',
category: 'core',
highlights: isDE
? ['Ein Login für alles', 'EdDSA JWT-Tokens', 'Sichere Sitzungen', 'Automatischer Logout']
: ['One login for everything', 'EdDSA JWT tokens', 'Secure sessions', 'Automatic logout'],
content: '',
order: 1,
language: isDE ? 'de' : 'en',
},
{
id: 'feature-app-ecosystem',
title: isDE ? 'App-Ökosystem' : 'App Ecosystem',
description: isDE
? 'Zugang zu allen Mana-Apps über eine zentrale Plattform'
: 'Access all Mana apps from one central platform',
icon: '🌐',
category: 'core',
highlights: isDE
? ['App-Übersicht', 'Schnellzugriff', 'Einheitliches Design', 'Verbundene Daten']
: ['App overview', 'Quick access', 'Unified design', 'Connected data'],
content: '',
order: 2,
language: isDE ? 'de' : 'en',
},
{
id: 'feature-organizations',
title: isDE ? 'Organisationen & Teams' : 'Organizations & Teams',
description: isDE
? 'Erstelle Organisationen und verwalte Teammitglieder und Rollen'
: 'Create organizations and manage team members and roles',
icon: '👥',
category: 'advanced',
highlights: isDE
? ['Rollenbasierter Zugriff', 'Team-Einladungen', 'App-Verwaltung', 'Landing Pages']
: ['Role-based access', 'Team invitations', 'App management', 'Landing pages'],
content: '',
order: 3,
language: isDE ? 'de' : 'en',
},
{
id: 'feature-unified-profile',
title: isDE ? 'Einheitliches Profil' : 'Unified Profile',
description: isDE
? 'Verwalte dein Profil, Einstellungen und Sicherheit an einem Ort'
: 'Manage your profile, settings, and security in one place',
icon: '👤',
category: 'core',
highlights: isDE
? ['Profilbild', 'Sicherheitseinstellungen', 'Sitzungsverwaltung', 'Datenexport']
: ['Profile picture', 'Security settings', 'Session management', 'Data export'],
content: '',
order: 4,
language: isDE ? 'de' : 'en',
},
],
shortcuts: [],
gettingStarted: [],
changelog: [],
contact: {
id: 'contact-support',
title: isDE ? 'Support kontaktieren' : 'Contact Support',
content: isDE
? '<p>Unser Support-Team hilft dir bei allen Fragen rund um ManaCore.</p>'
: '<p>Our support team is here to help you with any questions about ManaCore.</p>',
language: isDE ? 'de' : 'en',
order: 1,
supportEmail: 'support@mana.how',
documentationUrl: 'https://mana.how/docs',
responseTime: isDE ? 'Normalerweise innerhalb von 24 Stunden' : 'Usually within 24 hours',
},
};
}

View file

@ -0,0 +1,32 @@
<script lang="ts">
import { goto } from '$app/navigation';
import { locale } from 'svelte-i18n';
import { HelpPage, getHelpTranslations } from '@manacore/shared-help-ui';
import { getManaCoreHelpContent } from '$lib/content/help/index.js';
const content = $derived(getManaCoreHelpContent($locale ?? 'de'));
const translations = $derived(
getHelpTranslations($locale ?? 'de', {
subtitle:
$locale === 'de'
? 'Finde Antworten und lerne ManaCore kennen'
: 'Find answers and learn how to use ManaCore',
})
);
</script>
<svelte:head>
<title>{translations.title} | ManaCore</title>
</svelte:head>
<HelpPage
{content}
appName="ManaCore"
appId="manacore"
{translations}
showBackButton
onBack={() => goto('/dashboard')}
showGettingStarted={false}
showChangelog={false}
defaultSection="faq"
/>

View file

@ -39,6 +39,8 @@
"@manacore/shared-feedback-service": "workspace:*",
"@manacore/shared-feedback-ui": "workspace:*",
"@manacore/shared-i18n": "workspace:*",
"@manacore/shared-help-types": "workspace:*",
"@manacore/shared-help-ui": "workspace:*",
"@manacore/shared-icons": "workspace:*",
"@manacore/shared-profile-ui": "workspace:*",
"@manacore/shared-stores": "workspace:*",

View file

@ -0,0 +1,151 @@
/**
* Help content for ManaDeck app
*/
import type { HelpContent } from '@manacore/shared-help-types';
export function getManaDeckHelpContent(locale: string): HelpContent {
const isDE = locale === 'de';
return {
faq: [
{
id: 'faq-create-decks',
question: isDE ? 'Wie erstelle ich Decks und Karten?' : 'How do I create decks and cards?',
answer: isDE
? '<p>So erstellst du Decks und Karten in ManaDeck:</p><ol><li>Klicke auf <strong>Neues Deck</strong> und gib einen Namen und eine Beschreibung ein</li><li>Öffne das Deck und klicke auf <strong>Karte hinzufügen</strong></li><li>Gib die <strong>Vorderseite</strong> (Frage) und <strong>Rückseite</strong> (Antwort) ein</li><li>Optional: Füge Bilder, Tags oder Notizen hinzu</li></ol><p>Du kannst auch mehrere Karten auf einmal importieren — siehe Import & Export.</p>'
: '<p>Here is how to create decks and cards in ManaDeck:</p><ol><li>Click <strong>New Deck</strong> and enter a name and description</li><li>Open the deck and click <strong>Add Card</strong></li><li>Enter the <strong>front</strong> (question) and <strong>back</strong> (answer)</li><li>Optional: Add images, tags, or notes</li></ol><p>You can also import multiple cards at once — see Import & Export.</p>',
category: 'features',
order: 1,
language: isDE ? 'de' : 'en',
tags: isDE ? ['deck', 'karten', 'erstellen'] : ['deck', 'cards', 'create'],
},
{
id: 'faq-spaced-repetition',
question: isDE ? 'Wie funktioniert Spaced Repetition?' : 'How does spaced repetition work?',
answer: isDE
? '<p><strong>Spaced Repetition</strong> (verteiltes Wiederholen) ist eine wissenschaftlich fundierte Lernmethode:</p><ul><li>Karten, die du <strong>gut kannst</strong>, werden in größeren Abständen gezeigt</li><li>Karten, die du <strong>noch lernst</strong>, erscheinen häufiger</li><li>Der Algorithmus passt sich automatisch an dein Lerntempo an</li><li>Nach jeder Wiederholung bewertest du dein Wissen: <strong>Nochmal</strong>, <strong>Schwer</strong>, <strong>Gut</strong> oder <strong>Leicht</strong></li></ul><p>So lernst du effizienter und behältst Wissen langfristig.</p>'
: '<p><strong>Spaced repetition</strong> is a scientifically proven learning method:</p><ul><li>Cards you <strong>know well</strong> are shown at increasing intervals</li><li>Cards you are <strong>still learning</strong> appear more frequently</li><li>The algorithm automatically adapts to your learning pace</li><li>After each review, rate your knowledge: <strong>Again</strong>, <strong>Hard</strong>, <strong>Good</strong>, or <strong>Easy</strong></li></ul><p>This way you learn more efficiently and retain knowledge long-term.</p>',
category: 'features',
order: 2,
language: isDE ? 'de' : 'en',
tags: isDE
? ['spaced-repetition', 'lernen', 'algorithmus', 'wiederholen']
: ['spaced-repetition', 'learning', 'algorithm', 'review'],
},
{
id: 'faq-study-sessions',
question: isDE ? 'Wie starte ich eine Lernsitzung?' : 'How do I start a study session?',
answer: isDE
? '<p>So startest du eine Lernsitzung:</p><ol><li>Wähle ein Deck aus deiner Bibliothek</li><li>Klicke auf <strong>Lernen</strong> — die fälligen Karten werden automatisch ausgewählt</li><li>Für jede Karte: Lies die Frage, überlege die Antwort, decke die Rückseite auf</li><li>Bewerte dein Wissen mit den Buttons: Nochmal, Schwer, Gut, Leicht</li></ol><p>ManaDeck zeigt dir an, wie viele Karten <strong>neu</strong>, <strong>fällig</strong> und <strong>zu wiederholen</strong> sind.</p>'
: '<p>Here is how to start a study session:</p><ol><li>Select a deck from your library</li><li>Click <strong>Study</strong> — due cards are automatically selected</li><li>For each card: Read the question, think of the answer, reveal the back</li><li>Rate your knowledge with the buttons: Again, Hard, Good, Easy</li></ol><p>ManaDeck shows you how many cards are <strong>new</strong>, <strong>due</strong>, and <strong>to review</strong>.</p>',
category: 'features',
order: 3,
language: isDE ? 'de' : 'en',
tags: isDE ? ['lernen', 'sitzung', 'wiederholen'] : ['study', 'session', 'review'],
},
{
id: 'faq-import-export',
question: isDE
? 'Kann ich Karten importieren und exportieren?'
: 'Can I import and export cards?',
answer: isDE
? '<p>ManaDeck unterstützt verschiedene Import- und Exportformate:</p><ul><li><strong>CSV</strong>: Importiere Karten aus Tabellenkalkulationen (Vorderseite, Rückseite, Tags)</li><li><strong>Anki-Format</strong>: Importiere bestehende Anki-Decks (.apkg)</li><li><strong>JSON</strong>: Für programmatischen Zugriff und Backup</li><li><strong>Export</strong>: Exportiere einzelne Decks oder deine gesamte Bibliothek</li></ul>'
: '<p>ManaDeck supports various import and export formats:</p><ul><li><strong>CSV</strong>: Import cards from spreadsheets (front, back, tags)</li><li><strong>Anki format</strong>: Import existing Anki decks (.apkg)</li><li><strong>JSON</strong>: For programmatic access and backup</li><li><strong>Export</strong>: Export individual decks or your entire library</li></ul>',
category: 'technical',
order: 4,
language: isDE ? 'de' : 'en',
tags: isDE ? ['import', 'export', 'csv', 'anki'] : ['import', 'export', 'csv', 'anki'],
},
{
id: 'faq-privacy',
question: isDE ? 'Wie werden meine Daten geschützt?' : 'How is my data protected?',
answer: isDE
? '<p>Deine Daten sind sicher:</p><ul><li><strong>Verschlüsselung</strong>: Alle Daten werden bei der Übertragung (TLS) verschlüsselt</li><li><strong>DSGVO-konform</strong>: Wir halten uns an die EU-Datenschutzverordnung</li><li><strong>Kein Datenverkauf</strong>: Deine Lernkarten und Fortschritte werden nie an Dritte verkauft</li><li><strong>Datenexport</strong>: Du kannst jederzeit alle Decks und Karten exportieren</li></ul>'
: '<p>Your data is secure:</p><ul><li><strong>Encryption</strong>: All data is encrypted in transit (TLS)</li><li><strong>GDPR compliant</strong>: We follow EU data protection regulations</li><li><strong>No data selling</strong>: Your flashcards and progress are never sold to third parties</li><li><strong>Data export</strong>: You can export all decks and cards at any time</li></ul>',
category: 'privacy',
order: 5,
language: isDE ? 'de' : 'en',
featured: true,
tags: isDE ? ['datenschutz', 'dsgvo', 'sicherheit'] : ['privacy', 'gdpr', 'security'],
},
],
features: [
{
id: 'feature-deck-management',
title: isDE ? 'Deck-Verwaltung' : 'Deck Management',
description: isDE
? 'Erstelle, organisiere und verwalte deine Karteikarten-Decks'
: 'Create, organize, and manage your flashcard decks',
icon: '🃏',
category: 'core',
highlights: isDE
? ['Decks & Unterdecks', 'Tags & Kategorien', 'Bilder auf Karten', 'Deck-Statistiken']
: ['Decks & sub-decks', 'Tags & categories', 'Images on cards', 'Deck statistics'],
content: '',
order: 1,
language: isDE ? 'de' : 'en',
},
{
id: 'feature-spaced-repetition',
title: 'Spaced Repetition',
description: isDE
? 'Wissenschaftlich fundierter Algorithmus für effizientes Lernen'
: 'Scientifically proven algorithm for efficient learning',
icon: '🧠',
category: 'core',
highlights: isDE
? ['Adaptiver Algorithmus', 'Optimale Intervalle', 'Lernstatistiken', 'Tägliche Ziele']
: ['Adaptive algorithm', 'Optimal intervals', 'Learning statistics', 'Daily goals'],
content: '',
order: 2,
language: isDE ? 'de' : 'en',
},
{
id: 'feature-study-sessions',
title: isDE ? 'Lernsitzungen' : 'Study Sessions',
description: isDE
? 'Starte fokussierte Lernsitzungen mit fälligen Karten'
: 'Start focused study sessions with due cards',
icon: '📖',
category: 'core',
highlights: isDE
? ['Fällige Karten', 'Bewertungssystem', 'Fortschrittsanzeige', 'Sitzungsstatistiken']
: ['Due cards', 'Rating system', 'Progress indicator', 'Session statistics'],
content: '',
order: 3,
language: isDE ? 'de' : 'en',
},
{
id: 'feature-import-export',
title: 'Import & Export',
description: isDE
? 'Importiere aus CSV, Anki und mehr — exportiere jederzeit'
: 'Import from CSV, Anki, and more — export anytime',
icon: '📦',
category: 'advanced',
highlights: isDE
? ['CSV-Import', 'Anki-Kompatibilität', 'JSON-Export', 'Bibliotheks-Backup']
: ['CSV import', 'Anki compatibility', 'JSON export', 'Library backup'],
content: '',
order: 4,
language: isDE ? 'de' : 'en',
},
],
shortcuts: [],
gettingStarted: [],
changelog: [],
contact: {
id: 'contact-support',
title: isDE ? 'Support kontaktieren' : 'Contact Support',
content: isDE
? '<p>Unser Support-Team hilft dir bei allen Fragen rund um ManaDeck.</p>'
: '<p>Our support team is here to help you with any questions about ManaDeck.</p>',
language: isDE ? 'de' : 'en',
order: 1,
supportEmail: 'support@mana.how',
documentationUrl: 'https://mana.how/docs',
responseTime: isDE ? 'Normalerweise innerhalb von 24 Stunden' : 'Usually within 24 hours',
},
};
}

View file

@ -0,0 +1,32 @@
<script lang="ts">
import { goto } from '$app/navigation';
import { locale } from 'svelte-i18n';
import { HelpPage, getHelpTranslations } from '@manacore/shared-help-ui';
import { getManaDeckHelpContent } from '$lib/content/help/index.js';
const content = $derived(getManaDeckHelpContent($locale ?? 'de'));
const translations = $derived(
getHelpTranslations($locale ?? 'de', {
subtitle:
$locale === 'de'
? 'Finde Antworten und lerne ManaDeck kennen'
: 'Find answers and learn how to use ManaDeck',
})
);
</script>
<svelte:head>
<title>{translations.title} | ManaDeck</title>
</svelte:head>
<HelpPage
{content}
appName="ManaDeck"
appId="manadeck"
{translations}
showBackButton
onBack={() => goto('/')}
showGettingStarted={false}
showChangelog={false}
defaultSection="faq"
/>

View file

@ -47,6 +47,8 @@
"@manacore/shared-feedback-service": "workspace:*",
"@manacore/shared-feedback-ui": "workspace:*",
"@manacore/shared-i18n": "workspace:*",
"@manacore/shared-help-types": "workspace:*",
"@manacore/shared-help-ui": "workspace:*",
"@manacore/shared-icons": "workspace:*",
"@manacore/shared-profile-ui": "workspace:*",
"@manacore/shared-subscription-ui": "workspace:*",

View file

@ -0,0 +1,158 @@
/**
* Help content for NutriPhi app
*/
import type { HelpContent } from '@manacore/shared-help-types';
export function getNutriPhiHelpContent(locale: string): HelpContent {
const isDE = locale === 'de';
return {
faq: [
{
id: 'faq-log-meals',
question: isDE ? 'Wie erfasse ich meine Mahlzeiten?' : 'How do I log my meals?',
answer: isDE
? '<p>Du kannst Mahlzeiten auf zwei Arten erfassen:</p><ul><li><strong>Foto-Analyse</strong>: Mache ein Foto deiner Mahlzeit — die KI erkennt automatisch die Lebensmittel und schätzt Nährwerte</li><li><strong>Manuelle Eingabe</strong>: Suche nach Lebensmitteln in der Datenbank und gib Portionsgrößen ein</li></ul><p>Nach der Erfassung kannst du die erkannten Lebensmittel und Mengen anpassen, bevor du speicherst.</p>'
: '<p>You can log meals in two ways:</p><ul><li><strong>Photo analysis</strong>: Take a photo of your meal — the AI automatically recognizes the food items and estimates nutritional values</li><li><strong>Manual entry</strong>: Search for food items in the database and enter portion sizes</li></ul><p>After logging, you can adjust the recognized food items and quantities before saving.</p>',
category: 'features',
order: 1,
language: isDE ? 'de' : 'en',
tags: isDE
? ['mahlzeit', 'erfassen', 'foto', 'eingabe']
: ['meal', 'log', 'photo', 'entry'],
},
{
id: 'faq-nutrients',
question: isDE ? 'Welche Nährwerte werden erfasst?' : 'What nutrients are tracked?',
answer: isDE
? '<p>NutriPhi erfasst umfassende <strong>Makro- und Mikronährstoffe</strong>:</p><ul><li><strong>Makronährstoffe</strong>: Kalorien, Protein, Kohlenhydrate, Fett, Ballaststoffe</li><li><strong>Mikronährstoffe</strong>: Vitamine (A, B, C, D, E, K), Mineralstoffe (Eisen, Kalzium, Zink, Magnesium)</li><li><strong>Weitere</strong>: Zucker, gesättigte Fettsäuren, Natrium, Cholesterin</li></ul><p>Dein Tagesbericht zeigt dir, wie nah du an deinen persönlichen Zielen bist.</p>'
: '<p>NutriPhi tracks comprehensive <strong>macro and micronutrients</strong>:</p><ul><li><strong>Macronutrients</strong>: Calories, protein, carbohydrates, fat, fiber</li><li><strong>Micronutrients</strong>: Vitamins (A, B, C, D, E, K), minerals (iron, calcium, zinc, magnesium)</li><li><strong>Other</strong>: Sugar, saturated fat, sodium, cholesterol</li></ul><p>Your daily report shows how close you are to your personal goals.</p>',
category: 'features',
order: 2,
language: isDE ? 'de' : 'en',
tags: isDE
? ['nährwerte', 'makros', 'mikros', 'kalorien']
: ['nutrients', 'macros', 'micros', 'calories'],
},
{
id: 'faq-ai-analysis',
question: isDE ? 'Wie funktioniert die KI-Analyse?' : 'How does the AI analysis work?',
answer: isDE
? '<p>Die <strong>KI-gestützte Foto-Analyse</strong> funktioniert in drei Schritten:</p><ol><li><strong>Erkennung</strong>: Die KI identifiziert alle sichtbaren Lebensmittel auf dem Foto</li><li><strong>Portionsschätzung</strong>: Anhand der Bildgröße und bekannter Referenzobjekte wird die Menge geschätzt</li><li><strong>Nährwertberechnung</strong>: Die Nährwerte werden aus unserer Datenbank abgerufen und berechnet</li></ol><p>Die Genauigkeit liegt bei ca. <strong>85-90%</strong>. Du kannst die Ergebnisse immer manuell korrigieren.</p>'
: '<p>The <strong>AI-powered photo analysis</strong> works in three steps:</p><ol><li><strong>Recognition</strong>: The AI identifies all visible food items in the photo</li><li><strong>Portion estimation</strong>: Based on image size and known reference objects, quantities are estimated</li><li><strong>Nutrition calculation</strong>: Nutritional values are retrieved from our database and calculated</li></ol><p>Accuracy is approximately <strong>85-90%</strong>. You can always manually correct the results.</p>',
category: 'technical',
order: 3,
language: isDE ? 'de' : 'en',
tags: isDE
? ['ki', 'analyse', 'foto', 'erkennung']
: ['ai', 'analysis', 'photo', 'recognition'],
},
{
id: 'faq-favorites',
question: isDE ? 'Wie nutze ich Favoriten-Mahlzeiten?' : 'How do I use favorite meals?',
answer: isDE
? '<p><strong>Favoriten</strong> beschleunigen die tägliche Erfassung:</p><ul><li>Speichere häufig gegessene Mahlzeiten als Favoriten</li><li>Füge eine Favoriten-Mahlzeit mit einem Klick zu deinem Tageslog hinzu</li><li>Passe die Portionsgröße beim Hinzufügen an</li><li>Erstelle Favoriten aus vergangenen Mahlzeiten in deiner Historie</li></ul>'
: '<p><strong>Favorites</strong> speed up daily logging:</p><ul><li>Save frequently eaten meals as favorites</li><li>Add a favorite meal to your daily log with one click</li><li>Adjust the portion size when adding</li><li>Create favorites from past meals in your history</li></ul>',
category: 'features',
order: 4,
language: isDE ? 'de' : 'en',
tags: isDE ? ['favoriten', 'mahlzeiten', 'schnell'] : ['favorites', 'meals', 'quick'],
},
{
id: 'faq-privacy',
question: isDE ? 'Wie werden meine Daten geschützt?' : 'How is my data protected?',
answer: isDE
? '<p>Deine Daten sind sicher:</p><ul><li><strong>Verschlüsselung</strong>: Alle Daten werden bei der Übertragung (TLS) verschlüsselt</li><li><strong>DSGVO-konform</strong>: Wir halten uns an die EU-Datenschutzverordnung</li><li><strong>Foto-Datenschutz</strong>: Mahlzeitenfotos werden nach der Analyse nur auf deinem Wunsch gespeichert</li><li><strong>Gesundheitsdaten</strong>: Deine Ernährungsdaten werden nie an Dritte verkauft</li><li><strong>Datenexport</strong>: Du kannst jederzeit alle Daten exportieren</li></ul>'
: '<p>Your data is secure:</p><ul><li><strong>Encryption</strong>: All data is encrypted in transit (TLS)</li><li><strong>GDPR compliant</strong>: We follow EU data protection regulations</li><li><strong>Photo privacy</strong>: Meal photos are only stored after analysis upon your request</li><li><strong>Health data</strong>: Your nutrition data is never sold to third parties</li><li><strong>Data export</strong>: You can export all data at any time</li></ul>',
category: 'privacy',
order: 5,
language: isDE ? 'de' : 'en',
featured: true,
tags: isDE ? ['datenschutz', 'dsgvo', 'sicherheit'] : ['privacy', 'gdpr', 'security'],
},
],
features: [
{
id: 'feature-photo-analysis',
title: isDE ? 'Foto-Analyse' : 'Photo Analysis',
description: isDE
? 'Erfasse Mahlzeiten per Foto mit KI-gestützter Erkennung'
: 'Log meals by photo with AI-powered recognition',
icon: '📸',
category: 'core',
highlights: isDE
? ['KI-Erkennung', 'Portionsschätzung', 'Sofort-Analyse', 'Manuelle Korrektur']
: ['AI recognition', 'Portion estimation', 'Instant analysis', 'Manual correction'],
content: '',
order: 1,
language: isDE ? 'de' : 'en',
},
{
id: 'feature-macro-micro',
title: isDE ? 'Makro- & Mikro-Tracking' : 'Macro & Micro Tracking',
description: isDE
? 'Verfolge Kalorien, Makros, Vitamine und Mineralstoffe'
: 'Track calories, macros, vitamins, and minerals',
icon: '📊',
category: 'core',
highlights: isDE
? ['Kalorien & Makros', 'Vitamine & Mineralstoffe', 'Tägliche Ziele', 'Trendanalyse']
: ['Calories & macros', 'Vitamins & minerals', 'Daily goals', 'Trend analysis'],
content: '',
order: 2,
language: isDE ? 'de' : 'en',
},
{
id: 'feature-ai-coaching',
title: isDE ? 'KI-Coaching' : 'AI Coaching',
description: isDE
? 'Erhalte personalisierte Ernährungstipps und Empfehlungen'
: 'Receive personalized nutrition tips and recommendations',
icon: '🤖',
category: 'advanced',
highlights: isDE
? ['Personalisierte Tipps', 'Nährstofflücken', 'Mahlzeitenvorschläge', 'Wochenbericht']
: ['Personalized tips', 'Nutrient gaps', 'Meal suggestions', 'Weekly report'],
content: '',
order: 3,
language: isDE ? 'de' : 'en',
},
{
id: 'feature-favorites',
title: isDE ? 'Favoriten-Mahlzeiten' : 'Favorite Meals',
description: isDE
? 'Speichere häufige Mahlzeiten für schnelle Erfassung'
: 'Save frequent meals for quick logging',
icon: '⭐',
category: 'core',
highlights: isDE
? [
'Ein-Klick-Erfassung',
'Anpassbare Portionen',
'Aus Historie erstellen',
'Schnellzugriff',
]
: ['One-click logging', 'Adjustable portions', 'Create from history', 'Quick access'],
content: '',
order: 4,
language: isDE ? 'de' : 'en',
},
],
shortcuts: [],
gettingStarted: [],
changelog: [],
contact: {
id: 'contact-support',
title: isDE ? 'Support kontaktieren' : 'Contact Support',
content: isDE
? '<p>Unser Support-Team hilft dir bei allen Fragen rund um NutriPhi.</p>'
: '<p>Our support team is here to help you with any questions about NutriPhi.</p>',
language: isDE ? 'de' : 'en',
order: 1,
supportEmail: 'support@mana.how',
documentationUrl: 'https://mana.how/docs',
responseTime: isDE ? 'Normalerweise innerhalb von 24 Stunden' : 'Usually within 24 hours',
},
};
}

View file

@ -0,0 +1,32 @@
<script lang="ts">
import { goto } from '$app/navigation';
import { locale } from 'svelte-i18n';
import { HelpPage, getHelpTranslations } from '@manacore/shared-help-ui';
import { getNutriPhiHelpContent } from '$lib/content/help/index.js';
const content = $derived(getNutriPhiHelpContent($locale ?? 'de'));
const translations = $derived(
getHelpTranslations($locale ?? 'de', {
subtitle:
$locale === 'de'
? 'Finde Antworten und lerne NutriPhi kennen'
: 'Find answers and learn how to use NutriPhi',
})
);
</script>
<svelte:head>
<title>{translations.title} | NutriPhi</title>
</svelte:head>
<HelpPage
{content}
appName="NutriPhi"
appId="nutriphi"
{translations}
showBackButton
onBack={() => goto('/')}
showGettingStarted={false}
showChangelog={false}
defaultSection="faq"
/>

View file

@ -0,0 +1,146 @@
/**
* Help content for Photos app
*/
import type { HelpContent } from '@manacore/shared-help-types';
export function getPhotosHelpContent(locale: string): HelpContent {
const isDE = locale === 'de';
return {
faq: [
{
id: 'faq-gallery',
question: isDE ? 'Wie funktioniert die Galerie?' : 'How does the gallery work?',
answer: isDE
? '<p>Die Photos-Galerie vereint alle Fotos aus deinen ManaCore-Apps an einem Ort. Bilder aus Chat, Picture, Contacts und anderen Apps werden automatisch gesammelt und chronologisch angezeigt.</p><ul><li>Fotos werden automatisch aus verbundenen Apps importiert</li><li>Du kannst nach Datum, App oder Tags filtern</li><li>Die Galerie aktualisiert sich automatisch, wenn neue Fotos hinzugefügt werden</li></ul>'
: '<p>The Photos gallery unifies all photos from your ManaCore apps in one place. Images from Chat, Picture, Contacts, and other apps are automatically collected and displayed chronologically.</p><ul><li>Photos are automatically imported from connected apps</li><li>You can filter by date, app, or tags</li><li>The gallery updates automatically when new photos are added</li></ul>',
category: 'features',
order: 1,
language: isDE ? 'de' : 'en',
tags: ['gallery', 'photos', 'overview'],
},
{
id: 'faq-albums',
question: isDE ? 'Wie erstelle ich Alben?' : 'How do I create albums?',
answer: isDE
? '<p>Alben helfen dir, deine Fotos zu organisieren:</p><ol><li>Öffne den Bereich <strong>Alben</strong></li><li>Tippe auf <strong>Neues Album</strong></li><li>Gib einen Namen und optional eine Beschreibung ein</li><li>Wähle Fotos aus, die du hinzufügen möchtest</li></ol><p>Du kannst Fotos auch direkt aus der Galerie zu bestehenden Alben hinzufügen.</p>'
: '<p>Albums help you organize your photos:</p><ol><li>Open the <strong>Albums</strong> section</li><li>Tap <strong>New Album</strong></li><li>Enter a name and optional description</li><li>Select photos you want to add</li></ol><p>You can also add photos to existing albums directly from the gallery.</p>',
category: 'features',
order: 2,
language: isDE ? 'de' : 'en',
tags: ['albums', 'organize', 'create'],
},
{
id: 'faq-smart-albums',
question: isDE ? 'Was sind smarte Alben?' : 'What are smart albums?',
answer: isDE
? '<p>Smarte Alben werden automatisch basierend auf Regeln erstellt und aktualisiert:</p><ul><li><strong>Nach App</strong> — Alle Fotos aus einer bestimmten App (z.B. alle Chat-Bilder)</li><li><strong>Nach Datum</strong> — Fotos aus einem bestimmten Zeitraum</li><li><strong>Nach Tags</strong> — Fotos mit bestimmten Tags</li></ul><p>Smarte Alben aktualisieren sich automatisch, wenn neue Fotos den Kriterien entsprechen.</p>'
: '<p>Smart albums are automatically created and updated based on rules:</p><ul><li><strong>By App</strong> — All photos from a specific app (e.g., all Chat images)</li><li><strong>By Date</strong> — Photos from a specific time period</li><li><strong>By Tags</strong> — Photos with specific tags</li></ul><p>Smart albums update automatically when new photos match the criteria.</p>',
category: 'features',
order: 3,
language: isDE ? 'de' : 'en',
tags: ['smart-albums', 'automatic', 'rules'],
},
{
id: 'faq-favorites',
question: isDE ? 'Wie funktionieren Favoriten?' : 'How do favorites work?',
answer: isDE
? '<p>Markiere deine Lieblingsfotos als Favoriten, um sie schnell wiederzufinden:</p><ul><li>Klicke auf das <strong>Herz-Symbol</strong> auf einem Foto, um es als Favorit zu markieren</li><li>Alle Favoriten findest du im Bereich <strong>Favoriten</strong></li><li>Favoriten werden über alle Geräte synchronisiert</li></ul>'
: '<p>Mark your favorite photos to find them quickly:</p><ul><li>Click the <strong>heart icon</strong> on a photo to mark it as a favorite</li><li>Find all favorites in the <strong>Favorites</strong> section</li><li>Favorites are synced across all your devices</li></ul>',
category: 'features',
order: 4,
language: isDE ? 'de' : 'en',
tags: ['favorites', 'heart', 'bookmarks'],
},
{
id: 'faq-privacy',
question: isDE ? 'Wie werden meine Fotos geschützt?' : 'How are my photos protected?',
answer: isDE
? '<p>Deine Fotos sind sicher bei ManaCore:</p><ul><li>Alle Fotos werden verschlüsselt übertragen und gespeichert</li><li>Nur du hast Zugriff auf deine Galerie</li><li>Fotos werden nicht für KI-Training oder andere Zwecke verwendet</li><li>Du kannst jederzeit Fotos löschen — sie werden dann dauerhaft entfernt</li></ul>'
: '<p>Your photos are safe with ManaCore:</p><ul><li>All photos are encrypted in transit and at rest</li><li>Only you have access to your gallery</li><li>Photos are not used for AI training or other purposes</li><li>You can delete photos at any time — they are permanently removed</li></ul>',
category: 'privacy',
order: 5,
language: isDE ? 'de' : 'en',
tags: ['privacy', 'security', 'data'],
},
],
features: [
{
id: 'feature-gallery',
title: isDE ? 'Zentrale Galerie' : 'Central Gallery',
description: isDE
? 'Alle Fotos aus deinen ManaCore-Apps an einem Ort, automatisch organisiert und durchsuchbar.'
: 'All photos from your ManaCore apps in one place, automatically organized and searchable.',
icon: '🖼️',
category: 'core',
highlights: isDE
? ['App-übergreifende Sammlung', 'Chronologische Ansicht', 'Schnelle Suche']
: ['Cross-app collection', 'Chronological view', 'Fast search'],
content: '',
order: 1,
language: isDE ? 'de' : 'en',
},
{
id: 'feature-albums',
title: isDE ? 'Alben' : 'Albums',
description: isDE
? 'Erstelle benutzerdefinierte Alben, um deine Fotos nach Themen, Ereignissen oder Projekten zu organisieren.'
: 'Create custom albums to organize your photos by topics, events, or projects.',
icon: '📁',
category: 'core',
highlights: isDE
? ['Benutzerdefinierte Alben', 'Drag & Drop', 'Geteilte Alben']
: ['Custom albums', 'Drag & drop', 'Shared albums'],
content: '',
order: 2,
language: isDE ? 'de' : 'en',
},
{
id: 'feature-smart-albums',
title: isDE ? 'Smarte Alben' : 'Smart Albums',
description: isDE
? 'Automatisch aktualisierte Alben basierend auf Regeln wie App-Quelle, Datum oder Tags.'
: 'Automatically updated albums based on rules like app source, date, or tags.',
icon: '🧠',
category: 'advanced',
highlights: isDE
? ['Regelbasiert', 'Automatische Updates', 'Flexible Filter']
: ['Rule-based', 'Automatic updates', 'Flexible filters'],
content: '',
order: 3,
language: isDE ? 'de' : 'en',
},
{
id: 'feature-tags-favorites',
title: isDE ? 'Tags & Favoriten' : 'Tags & Favorites',
description: isDE
? 'Tagge und markiere Fotos als Favoriten für schnellen Zugriff und bessere Organisation.'
: 'Tag and mark photos as favorites for quick access and better organization.',
icon: '❤️',
category: 'core',
highlights: isDE
? ['Benutzerdefinierte Tags', 'Favoriten-Sammlung', 'Geräteübergreifende Sync']
: ['Custom tags', 'Favorites collection', 'Cross-device sync'],
content: '',
order: 4,
language: isDE ? 'de' : 'en',
},
],
shortcuts: [],
gettingStarted: [],
changelog: [],
contact: {
id: 'contact-support',
title: isDE ? 'Support kontaktieren' : 'Contact Support',
content: isDE
? '<p>Unser Support-Team hilft dir bei allen Fragen rund um Photos.</p>'
: '<p>Our support team is here to help you with any questions about Photos.</p>',
language: isDE ? 'de' : 'en',
order: 1,
supportEmail: 'support@mana.how',
documentationUrl: 'https://mana.how/docs',
responseTime: isDE ? 'Normalerweise innerhalb von 24 Stunden' : 'Usually within 24 hours',
},
};
}

View file

@ -0,0 +1,32 @@
<script lang="ts">
import { goto } from '$app/navigation';
import { locale } from 'svelte-i18n';
import { HelpPage, getHelpTranslations } from '@manacore/shared-help-ui';
import { getPhotosHelpContent } from '$lib/content/help/index.js';
const content = $derived(getPhotosHelpContent($locale ?? 'de'));
const translations = $derived(
getHelpTranslations($locale ?? 'de', {
subtitle:
$locale === 'de'
? 'Finde Antworten und lerne Photos kennen'
: 'Find answers and learn how to use Photos',
})
);
</script>
<svelte:head>
<title>{translations.title} | Photos</title>
</svelte:head>
<HelpPage
{content}
appName="Photos"
appId="photos"
{translations}
showBackButton
onBack={() => goto('/')}
showGettingStarted={false}
showChangelog={false}
defaultSection="faq"
/>

View file

@ -36,6 +36,8 @@
"@manacore/shared-branding": "workspace:*",
"@manacore/shared-error-tracking": "workspace:*",
"@manacore/shared-i18n": "workspace:*",
"@manacore/shared-help-types": "workspace:*",
"@manacore/shared-help-ui": "workspace:*",
"@manacore/shared-icons": "workspace:*",
"@manacore/shared-tailwind": "workspace:*",
"@manacore/shared-theme": "workspace:*",

View file

@ -0,0 +1,150 @@
/**
* Help content for Planta app
*/
import type { HelpContent } from '@manacore/shared-help-types';
export function getPlantaHelpContent(locale: string): HelpContent {
const isDE = locale === 'de';
return {
faq: [
{
id: 'faq-identify',
question: isDE ? 'Wie identifiziere ich eine Pflanze?' : 'How do I identify a plant?',
answer: isDE
? '<p>Die KI-Pflanzenerkennung macht es einfach:</p><ol><li>Tippe auf den <strong>Kamera-Button</strong></li><li>Mache ein Foto der Pflanze (Blätter, Blüten oder die ganze Pflanze)</li><li>Die KI analysiert das Bild und zeigt dir die Ergebnisse</li></ol><p>Für beste Ergebnisse fotografiere die Pflanze bei gutem Licht und aus verschiedenen Winkeln.</p>'
: '<p>AI plant identification makes it easy:</p><ol><li>Tap the <strong>camera button</strong></li><li>Take a photo of the plant (leaves, flowers, or the whole plant)</li><li>The AI analyzes the image and shows you the results</li></ol><p>For best results, photograph the plant in good lighting and from different angles.</p>',
category: 'features',
order: 1,
language: isDE ? 'de' : 'en',
tags: ['identify', 'camera', 'ai', 'recognition'],
},
{
id: 'faq-care',
question: isDE
? 'Wie funktionieren die Pflegeempfehlungen?'
: 'How do care recommendations work?',
answer: isDE
? '<p>Nach der Identifizierung erhältst du individuelle Pflegeempfehlungen:</p><ul><li><strong>Licht</strong> — Optimale Lichtverhältnisse für deine Pflanze</li><li><strong>Wasser</strong> — Gießhäufigkeit und -menge</li><li><strong>Temperatur</strong> — Idealer Temperaturbereich</li><li><strong>Boden</strong> — Empfohlene Erdmischung</li></ul><p>Die Empfehlungen passen sich an die Jahreszeit und deinen Standort an.</p>'
: '<p>After identification, you receive personalized care recommendations:</p><ul><li><strong>Light</strong> — Optimal light conditions for your plant</li><li><strong>Water</strong> — Watering frequency and amount</li><li><strong>Temperature</strong> — Ideal temperature range</li><li><strong>Soil</strong> — Recommended soil mix</li></ul><p>Recommendations adapt to the season and your location.</p>',
category: 'features',
order: 2,
language: isDE ? 'de' : 'en',
tags: ['care', 'recommendations', 'light', 'water'],
},
{
id: 'faq-watering',
question: isDE ? 'Wie funktioniert der Gießplan?' : 'How does the watering schedule work?',
answer: isDE
? '<p>Der Gießplan erinnert dich automatisch daran, deine Pflanzen zu gießen:</p><ul><li>Jede Pflanze erhält einen individuellen Gießrhythmus basierend auf ihrer Art</li><li>Du bekommst <strong>Push-Benachrichtigungen</strong>, wenn eine Pflanze Wasser braucht</li><li>Nach dem Gießen markierst du die Pflanze als gegossen</li><li>Der Plan passt sich automatisch an die Jahreszeit an</li></ul>'
: '<p>The watering schedule automatically reminds you to water your plants:</p><ul><li>Each plant gets an individual watering rhythm based on its species</li><li>You receive <strong>push notifications</strong> when a plant needs water</li><li>After watering, mark the plant as watered</li><li>The schedule automatically adapts to the season</li></ul>',
category: 'features',
order: 3,
language: isDE ? 'de' : 'en',
tags: ['watering', 'schedule', 'notifications', 'reminders'],
},
{
id: 'faq-health',
question: isDE
? 'Wie überwache ich die Pflanzengesundheit?'
: 'How do I monitor plant health?',
answer: isDE
? '<p>Planta hilft dir, Probleme frühzeitig zu erkennen:</p><ul><li>Mache regelmäßig Fotos deiner Pflanzen — die KI erkennt Veränderungen</li><li>Erhalte Warnungen bei Anzeichen von <strong>Krankheiten</strong>, <strong>Schädlingen</strong> oder <strong>Nährstoffmangel</strong></li><li>Sieh dir den Gesundheitsverlauf jeder Pflanze in der Timeline an</li><li>Bekomme Behandlungsvorschläge bei Problemen</li></ul>'
: '<p>Planta helps you detect problems early:</p><ul><li>Take regular photos of your plants — the AI detects changes</li><li>Receive warnings for signs of <strong>diseases</strong>, <strong>pests</strong>, or <strong>nutrient deficiency</strong></li><li>View the health history of each plant in the timeline</li><li>Get treatment suggestions for issues</li></ul>',
category: 'features',
order: 4,
language: isDE ? 'de' : 'en',
tags: ['health', 'diseases', 'pests', 'monitoring'],
},
{
id: 'faq-privacy',
question: isDE ? 'Wie werden meine Daten geschützt?' : 'How is my data protected?',
answer: isDE
? '<p>Deine Pflanzendaten sind sicher bei Planta:</p><ul><li>Fotos werden nur zur Pflanzenidentifizierung verwendet und nicht an Dritte weitergegeben</li><li>Deine Pflanzensammlung ist nur für dich sichtbar</li><li>Standortdaten werden nur lokal für Wetteranpassungen genutzt</li><li>Du kannst jederzeit alle Daten exportieren oder löschen</li></ul>'
: '<p>Your plant data is safe with Planta:</p><ul><li>Photos are only used for plant identification and are not shared with third parties</li><li>Your plant collection is visible only to you</li><li>Location data is only used locally for weather adjustments</li><li>You can export or delete all data at any time</li></ul>',
category: 'privacy',
order: 5,
language: isDE ? 'de' : 'en',
tags: ['privacy', 'security', 'data', 'photos'],
},
],
features: [
{
id: 'feature-identification',
title: isDE ? 'KI-Pflanzenerkennung' : 'AI Plant Identification',
description: isDE
? 'Identifiziere jede Pflanze sofort mit einem Foto — powered by KI.'
: 'Identify any plant instantly with a photo — powered by AI.',
icon: '📸',
category: 'core',
highlights: isDE
? ['Sofortige Erkennung', 'Tausende Pflanzenarten', 'Hohe Genauigkeit']
: ['Instant recognition', 'Thousands of species', 'High accuracy'],
content: '',
order: 1,
language: isDE ? 'de' : 'en',
},
{
id: 'feature-care',
title: isDE ? 'Pflegeempfehlungen' : 'Care Recommendations',
description: isDE
? 'Individuelle Pflegetipps für jede Pflanze, angepasst an Jahreszeit und Standort.'
: 'Personalized care tips for every plant, adapted to season and location.',
icon: '🌱',
category: 'core',
highlights: isDE
? ['Saisonale Anpassung', 'Standortbasiert', 'Expertenbasiert']
: ['Seasonal adaptation', 'Location-based', 'Expert-backed'],
content: '',
order: 2,
language: isDE ? 'de' : 'en',
},
{
id: 'feature-watering',
title: isDE ? 'Gießplan' : 'Watering Schedule',
description: isDE
? 'Automatische Gießerinnerungen mit Push-Benachrichtigungen für jede Pflanze.'
: 'Automatic watering reminders with push notifications for every plant.',
icon: '💧',
category: 'core',
highlights: isDE
? ['Push-Benachrichtigungen', 'Individueller Rhythmus', 'Saisonale Anpassung']
: ['Push notifications', 'Individual rhythm', 'Seasonal adaptation'],
content: '',
order: 3,
language: isDE ? 'de' : 'en',
},
{
id: 'feature-health',
title: isDE ? 'Gesundheits-Tracking' : 'Health Tracking',
description: isDE
? 'Überwache die Gesundheit deiner Pflanzen mit KI-gestützter Problemerkennung.'
: 'Monitor your plant health with AI-powered problem detection.',
icon: '🏥',
category: 'advanced',
highlights: isDE
? ['Krankheitserkennung', 'Schädlingswarnung', 'Behandlungsvorschläge']
: ['Disease detection', 'Pest warnings', 'Treatment suggestions'],
content: '',
order: 4,
language: isDE ? 'de' : 'en',
},
],
shortcuts: [],
gettingStarted: [],
changelog: [],
contact: {
id: 'contact-support',
title: isDE ? 'Support kontaktieren' : 'Contact Support',
content: isDE
? '<p>Unser Support-Team hilft dir bei allen Fragen rund um Planta.</p>'
: '<p>Our support team is here to help you with any questions about Planta.</p>',
language: isDE ? 'de' : 'en',
order: 1,
supportEmail: 'support@mana.how',
documentationUrl: 'https://mana.how/docs',
responseTime: isDE ? 'Normalerweise innerhalb von 24 Stunden' : 'Usually within 24 hours',
},
};
}

View file

@ -0,0 +1,32 @@
<script lang="ts">
import { goto } from '$app/navigation';
import { locale } from 'svelte-i18n';
import { HelpPage, getHelpTranslations } from '@manacore/shared-help-ui';
import { getPlantaHelpContent } from '$lib/content/help/index.js';
const content = $derived(getPlantaHelpContent($locale ?? 'de'));
const translations = $derived(
getHelpTranslations($locale ?? 'de', {
subtitle:
$locale === 'de'
? 'Finde Antworten und lerne Planta kennen'
: 'Find answers and learn how to use Planta',
})
);
</script>
<svelte:head>
<title>{translations.title} | Planta</title>
</svelte:head>
<HelpPage
{content}
appName="Planta"
appId="planta"
{translations}
showBackButton
onBack={() => goto('/dashboard')}
showGettingStarted={false}
showChangelog={false}
defaultSection="faq"
/>

View file

@ -39,6 +39,8 @@
"@manacore/shared-feedback-service": "workspace:*",
"@manacore/shared-feedback-ui": "workspace:*",
"@manacore/shared-i18n": "workspace:*",
"@manacore/shared-help-types": "workspace:*",
"@manacore/shared-help-ui": "workspace:*",
"@manacore/shared-icons": "workspace:*",
"@manacore/shared-profile-ui": "workspace:*",
"@manacore/shared-stores": "workspace:*",

View file

@ -0,0 +1,170 @@
/**
* Help content for Presi app
*/
import type { HelpContent } from '@manacore/shared-help-types';
export function getPresiHelpContent(locale: string): HelpContent {
const isDE = locale === 'de';
return {
faq: [
{
id: 'faq-create',
question: isDE ? 'Wie erstelle ich eine Präsentation?' : 'How do I create a presentation?',
answer: isDE
? '<p>Eine neue Präsentation erstellen ist einfach:</p><ol><li>Klicke auf <strong>Neue Präsentation</strong></li><li>Wähle ein Theme oder starte mit einer leeren Vorlage</li><li>Füge Folien hinzu mit dem <strong>+</strong> Button</li><li>Bearbeite Inhalte direkt im Slide-Editor</li></ol><p>Du kannst Text, Bilder, Code-Blöcke und mehr zu jeder Folie hinzufügen.</p>'
: '<p>Creating a new presentation is easy:</p><ol><li>Click <strong>New Presentation</strong></li><li>Choose a theme or start with a blank template</li><li>Add slides with the <strong>+</strong> button</li><li>Edit content directly in the slide editor</li></ol><p>You can add text, images, code blocks, and more to each slide.</p>',
category: 'features',
order: 1,
language: isDE ? 'de' : 'en',
tags: ['create', 'presentation', 'slides', 'new'],
},
{
id: 'faq-present',
question: isDE ? 'Wie halte ich eine Präsentation?' : 'How do I present?',
answer: isDE
? '<p>Starte den Präsentationsmodus:</p><ol><li>Klicke auf <strong>Präsentieren</strong> oder drücke <kbd>F</kbd> für Vollbild</li><li>Navigiere mit <kbd>→</kbd> oder <kbd>Leertaste</kbd> zur nächsten Folie</li><li>Gehe mit <kbd>←</kbd> oder <kbd>A</kbd> zur vorherigen Folie</li><li>Drücke <kbd>ESC</kbd> um den Präsentationsmodus zu verlassen</li></ol><p>Im Präsentationsmodus werden alle Steuerelemente ausgeblendet.</p>'
: '<p>Start the presentation mode:</p><ol><li>Click <strong>Present</strong> or press <kbd>F</kbd> for fullscreen</li><li>Navigate with <kbd>→</kbd> or <kbd>Space</kbd> to the next slide</li><li>Go back with <kbd>←</kbd> or <kbd>A</kbd> to the previous slide</li><li>Press <kbd>ESC</kbd> to exit presentation mode</li></ol><p>In presentation mode, all controls are hidden for a clean view.</p>',
category: 'features',
order: 2,
language: isDE ? 'de' : 'en',
tags: ['present', 'fullscreen', 'navigation', 'keyboard'],
},
{
id: 'faq-sharing',
question: isDE ? 'Wie funktioniert das Teilen?' : 'How does sharing work?',
answer: isDE
? '<p>Teile deine Präsentationen auf verschiedene Arten:</p><ul><li><strong>Link teilen</strong> — Erstelle einen öffentlichen oder privaten Link</li><li><strong>PDF Export</strong> — Exportiere als PDF zum Offline-Anschauen</li><li><strong>Einbetten</strong> — Bette die Präsentation in eine Webseite ein</li></ul><p>Du kannst festlegen, ob Betrachter die Folien herunterladen dürfen.</p>'
: '<p>Share your presentations in different ways:</p><ul><li><strong>Share link</strong> — Create a public or private link</li><li><strong>PDF Export</strong> — Export as PDF for offline viewing</li><li><strong>Embed</strong> — Embed the presentation in a website</li></ul><p>You can control whether viewers are allowed to download the slides.</p>',
category: 'features',
order: 3,
language: isDE ? 'de' : 'en',
tags: ['sharing', 'link', 'pdf', 'export', 'embed'],
},
{
id: 'faq-themes',
question: isDE ? 'Welche Themes gibt es?' : 'What themes are available?',
answer: isDE
? '<p>Presi bietet verschiedene Themes für unterschiedliche Anlässe:</p><ul><li><strong>Professional</strong> — Klar und geschäftlich</li><li><strong>Creative</strong> — Bunt und ausdrucksstark</li><li><strong>Minimal</strong> — Schlicht und elegant</li><li><strong>Dark</strong> — Dunkles Design für Präsentationen in dunklen Räumen</li></ul><p>Jedes Theme kann mit eigenen Farben und Schriftarten angepasst werden.</p>'
: '<p>Presi offers different themes for different occasions:</p><ul><li><strong>Professional</strong> — Clean and business-oriented</li><li><strong>Creative</strong> — Colorful and expressive</li><li><strong>Minimal</strong> — Simple and elegant</li><li><strong>Dark</strong> — Dark design for presentations in dim rooms</li></ul><p>Each theme can be customized with your own colors and fonts.</p>',
category: 'features',
order: 4,
language: isDE ? 'de' : 'en',
tags: ['themes', 'design', 'customization', 'styles'],
},
{
id: 'faq-privacy',
question: isDE ? 'Wie werden meine Daten geschützt?' : 'How is my data protected?',
answer: isDE
? '<p>Deine Präsentationen sind sicher bei Presi:</p><ul><li>Alle Daten werden verschlüsselt übertragen und gespeichert</li><li>Geteilte Links können jederzeit widerrufen werden</li><li>Du bestimmst, wer Zugriff auf deine Präsentationen hat</li><li>Gelöschte Präsentationen werden dauerhaft entfernt</li></ul>'
: '<p>Your presentations are safe with Presi:</p><ul><li>All data is encrypted in transit and at rest</li><li>Shared links can be revoked at any time</li><li>You control who has access to your presentations</li><li>Deleted presentations are permanently removed</li></ul>',
category: 'privacy',
order: 5,
language: isDE ? 'de' : 'en',
tags: ['privacy', 'security', 'data', 'sharing'],
},
],
features: [
{
id: 'feature-editor',
title: isDE ? 'Folien-Editor' : 'Slide Editor',
description: isDE
? 'Ein leistungsstarker Editor zum Erstellen schöner Folien mit Text, Bildern und Code.'
: 'A powerful editor for creating beautiful slides with text, images, and code.',
icon: '✏️',
category: 'core',
highlights: isDE
? ['Rich-Text-Bearbeitung', 'Bilder & Medien', 'Code-Blöcke']
: ['Rich text editing', 'Images & media', 'Code blocks'],
content: '',
order: 1,
language: isDE ? 'de' : 'en',
},
{
id: 'feature-present',
title: isDE ? 'Präsentationsmodus' : 'Presentation Mode',
description: isDE
? 'Halte Präsentationen im Vollbildmodus mit Tastatursteuerung.'
: 'Deliver presentations in fullscreen mode with keyboard navigation.',
icon: '🎬',
category: 'core',
highlights: isDE
? ['Vollbild', 'Tastatursteuerung', 'Saubere Ansicht']
: ['Fullscreen', 'Keyboard controls', 'Clean view'],
content: '',
order: 2,
language: isDE ? 'de' : 'en',
},
{
id: 'feature-sharing',
title: isDE ? 'Teilen' : 'Sharing',
description: isDE
? 'Teile Präsentationen per Link, exportiere als PDF oder bette sie in Webseiten ein.'
: 'Share presentations via link, export as PDF, or embed them in websites.',
icon: '🔗',
category: 'core',
highlights: isDE
? ['Öffentliche Links', 'PDF-Export', 'Einbettung']
: ['Public links', 'PDF export', 'Embedding'],
content: '',
order: 3,
language: isDE ? 'de' : 'en',
},
{
id: 'feature-themes',
title: isDE ? 'Themes' : 'Themes',
description: isDE
? 'Wähle aus verschiedenen professionellen Themes und passe sie an dein Branding an.'
: 'Choose from various professional themes and customize them to match your branding.',
icon: '🎨',
category: 'advanced',
highlights: isDE
? ['Mehrere Themes', 'Anpassbare Farben', 'Eigene Schriftarten']
: ['Multiple themes', 'Customizable colors', 'Custom fonts'],
content: '',
order: 4,
language: isDE ? 'de' : 'en',
},
],
shortcuts: [
{
id: 'shortcuts-navigation',
title: isDE ? 'Navigation' : 'Navigation',
category: 'navigation',
shortcuts: [
{
keys: ['←', 'A'],
label: isDE ? 'Vorherige Folie' : 'Previous slide',
},
{
keys: ['→', 'D', 'Space'],
label: isDE ? 'Nächste Folie' : 'Next slide',
},
{
keys: ['F'],
label: isDE ? 'Vollbild' : 'Fullscreen',
},
{
keys: ['ESC'],
label: isDE ? 'Präsentation beenden' : 'Exit presentation',
},
],
},
],
gettingStarted: [],
changelog: [],
contact: {
id: 'contact-support',
title: isDE ? 'Support kontaktieren' : 'Contact Support',
content: isDE
? '<p>Unser Support-Team hilft dir bei allen Fragen rund um Presi.</p>'
: '<p>Our support team is here to help you with any questions about Presi.</p>',
language: isDE ? 'de' : 'en',
order: 1,
supportEmail: 'support@mana.how',
documentationUrl: 'https://mana.how/docs',
responseTime: isDE ? 'Normalerweise innerhalb von 24 Stunden' : 'Usually within 24 hours',
},
};
}

View file

@ -0,0 +1,32 @@
<script lang="ts">
import { goto } from '$app/navigation';
import { locale } from 'svelte-i18n';
import { HelpPage, getHelpTranslations } from '@manacore/shared-help-ui';
import { getPresiHelpContent } from '$lib/content/help/index.js';
const content = $derived(getPresiHelpContent($locale ?? 'de'));
const translations = $derived(
getHelpTranslations($locale ?? 'de', {
subtitle:
$locale === 'de'
? 'Finde Antworten und lerne Presi kennen'
: 'Find answers and learn how to use Presi',
})
);
</script>
<svelte:head>
<title>{translations.title} | Presi</title>
</svelte:head>
<HelpPage
{content}
appName="Presi"
appId="presi"
{translations}
showBackButton
onBack={() => goto('/')}
showGettingStarted={false}
showChangelog={false}
defaultSection="faq"
/>

View file

@ -40,6 +40,8 @@
"@manacore/shared-branding": "workspace:*",
"@manacore/shared-error-tracking": "workspace:*",
"@manacore/shared-i18n": "workspace:*",
"@manacore/shared-help-types": "workspace:*",
"@manacore/shared-help-ui": "workspace:*",
"@manacore/shared-icons": "workspace:*",
"@manacore/shared-app-onboarding": "workspace:*",
"@manacore/shared-tailwind": "workspace:*",

View file

@ -0,0 +1,146 @@
/**
* Help content for Questions app
*/
import type { HelpContent } from '@manacore/shared-help-types';
export function getQuestionsHelpContent(locale: string): HelpContent {
const isDE = locale === 'de';
return {
faq: [
{
id: 'faq-research',
question: isDE ? 'Wie funktioniert die KI-Recherche?' : 'How does AI research work?',
answer: isDE
? '<p>Questions nutzt KI und Websuche, um deine Fragen gründlich zu beantworten:</p><ol><li>Stelle eine Frage oder gib ein Recherchethema ein</li><li>Die KI durchsucht das Web nach relevanten Quellen</li><li>Informationen werden analysiert, zusammengefasst und mit Quellenangaben versehen</li><li>Du erhältst eine strukturierte Antwort mit verlinkten Quellen</li></ol><p>Je spezifischer deine Frage, desto besser die Ergebnisse.</p>'
: '<p>Questions uses AI and web search to thoroughly answer your questions:</p><ol><li>Ask a question or enter a research topic</li><li>The AI searches the web for relevant sources</li><li>Information is analyzed, summarized, and attributed to sources</li><li>You receive a structured answer with linked sources</li></ol><p>The more specific your question, the better the results.</p>',
category: 'features',
order: 1,
language: isDE ? 'de' : 'en',
tags: ['research', 'ai', 'search', 'questions'],
},
{
id: 'faq-depth',
question: isDE ? 'Was sind Recherchetiefen?' : 'What are research depths?',
answer: isDE
? '<p>Du kannst die Gründlichkeit der Recherche steuern:</p><ul><li><strong>Schnell</strong> — Kurze, direkte Antwort aus wenigen Quellen</li><li><strong>Standard</strong> — Ausgewogene Recherche mit mehreren Quellen</li><li><strong>Tief</strong> — Umfassende Analyse mit vielen Quellen und Details</li><li><strong>Experte</strong> — Maximale Tiefe mit akademischen und spezialisierten Quellen</li></ul><p>Tiefere Recherchen dauern länger, liefern aber detailliertere Ergebnisse.</p>'
: '<p>You can control the thoroughness of the research:</p><ul><li><strong>Quick</strong> — Brief, direct answer from a few sources</li><li><strong>Standard</strong> — Balanced research with multiple sources</li><li><strong>Deep</strong> — Comprehensive analysis with many sources and details</li><li><strong>Expert</strong> — Maximum depth with academic and specialized sources</li></ul><p>Deeper research takes longer but delivers more detailed results.</p>',
category: 'features',
order: 2,
language: isDE ? 'de' : 'en',
tags: ['depth', 'levels', 'quick', 'deep', 'expert'],
},
{
id: 'faq-sources',
question: isDE ? 'Wie funktionieren Quellenangaben?' : 'How do sources work?',
answer: isDE
? '<p>Jede Antwort enthält verifizierbare Quellenangaben:</p><ul><li>Quellen werden als nummerierte Referenzen im Text angezeigt</li><li>Klicke auf eine Quellenangabe, um die Originalseite zu besuchen</li><li>Die Zuverlässigkeit jeder Quelle wird bewertet</li><li>Du kannst die Quellentypen filtern (Nachricht, Akademisch, Blog, etc.)</li></ul><p>So kannst du jede Information selbst überprüfen.</p>'
: '<p>Every answer includes verifiable source attributions:</p><ul><li>Sources are displayed as numbered references in the text</li><li>Click a source reference to visit the original page</li><li>The reliability of each source is evaluated</li><li>You can filter source types (news, academic, blog, etc.)</li></ul><p>This allows you to verify any information yourself.</p>',
category: 'features',
order: 3,
language: isDE ? 'de' : 'en',
tags: ['sources', 'references', 'attribution', 'verification'],
},
{
id: 'faq-collections',
question: isDE ? 'Was sind Sammlungen?' : 'What are collections?',
answer: isDE
? '<p>Sammlungen helfen dir, deine Recherchen zu organisieren:</p><ul><li>Erstelle thematische Sammlungen für verschiedene Projekte</li><li>Speichere Fragen und Antworten in Sammlungen</li><li>Teile Sammlungen mit anderen Nutzern</li><li>Exportiere Sammlungen als Dokument</li></ul><p>Alle deine Recherchen werden automatisch im Verlauf gespeichert.</p>'
: '<p>Collections help you organize your research:</p><ul><li>Create thematic collections for different projects</li><li>Save questions and answers to collections</li><li>Share collections with other users</li><li>Export collections as a document</li></ul><p>All your research is automatically saved in the history.</p>',
category: 'features',
order: 4,
language: isDE ? 'de' : 'en',
tags: ['collections', 'organize', 'save', 'share'],
},
{
id: 'faq-privacy',
question: isDE ? 'Wie werden meine Daten geschützt?' : 'How is my data protected?',
answer: isDE
? '<p>Deine Recherchen sind privat und sicher:</p><ul><li>Suchanfragen werden nicht mit Dritten geteilt</li><li>Dein Rechercheverlauf ist nur für dich sichtbar</li><li>Die Websuche erfolgt über unseren eigenen Suchdienst, nicht über Google</li><li>Du kannst deinen Verlauf jederzeit löschen</li></ul>'
: '<p>Your research is private and secure:</p><ul><li>Search queries are not shared with third parties</li><li>Your research history is visible only to you</li><li>Web search is performed through our own search service, not through Google</li><li>You can delete your history at any time</li></ul>',
category: 'privacy',
order: 5,
language: isDE ? 'de' : 'en',
tags: ['privacy', 'security', 'data', 'history'],
},
],
features: [
{
id: 'feature-research',
title: isDE ? 'KI-Recherche' : 'AI Research',
description: isDE
? 'Stelle Fragen und erhalte gründlich recherchierte Antworten mit Quellenangaben.'
: 'Ask questions and get thoroughly researched answers with source attributions.',
icon: '🔍',
category: 'core',
highlights: isDE
? ['Websuche-Integration', 'Strukturierte Antworten', 'Quellenangaben']
: ['Web search integration', 'Structured answers', 'Source attribution'],
content: '',
order: 1,
language: isDE ? 'de' : 'en',
},
{
id: 'feature-sources',
title: isDE ? 'Quellenangaben' : 'Source Attribution',
description: isDE
? 'Jede Antwort enthält verifizierbare Quellenangaben mit Zuverlässigkeitsbewertung.'
: 'Every answer includes verifiable source attributions with reliability ratings.',
icon: '📚',
category: 'core',
highlights: isDE
? ['Nummerierte Referenzen', 'Direkte Links', 'Zuverlässigkeitsbewertung']
: ['Numbered references', 'Direct links', 'Reliability ratings'],
content: '',
order: 2,
language: isDE ? 'de' : 'en',
},
{
id: 'feature-collections',
title: isDE ? 'Sammlungen' : 'Collections',
description: isDE
? 'Organisiere deine Recherchen in thematischen Sammlungen zum Teilen und Exportieren.'
: 'Organize your research into thematic collections for sharing and exporting.',
icon: '📂',
category: 'core',
highlights: isDE
? ['Thematische Ordnung', 'Teilen & Export', 'Automatischer Verlauf']
: ['Thematic organization', 'Share & export', 'Automatic history'],
content: '',
order: 3,
language: isDE ? 'de' : 'en',
},
{
id: 'feature-depth',
title: isDE ? 'Mehrere Recherchetiefen' : 'Multiple Depth Levels',
description: isDE
? 'Wähle zwischen schnellen Antworten und tiefgehenden Expertenrecherchen.'
: 'Choose between quick answers and in-depth expert research.',
icon: '📊',
category: 'advanced',
highlights: isDE
? ['4 Tiefenstufen', 'Akademische Quellen', 'Anpassbare Gründlichkeit']
: ['4 depth levels', 'Academic sources', 'Adjustable thoroughness'],
content: '',
order: 4,
language: isDE ? 'de' : 'en',
},
],
shortcuts: [],
gettingStarted: [],
changelog: [],
contact: {
id: 'contact-support',
title: isDE ? 'Support kontaktieren' : 'Contact Support',
content: isDE
? '<p>Unser Support-Team hilft dir bei allen Fragen rund um Questions.</p>'
: '<p>Our support team is here to help you with any questions about Questions.</p>',
language: isDE ? 'de' : 'en',
order: 1,
supportEmail: 'support@mana.how',
documentationUrl: 'https://mana.how/docs',
responseTime: isDE ? 'Normalerweise innerhalb von 24 Stunden' : 'Usually within 24 hours',
},
};
}

View file

@ -0,0 +1,32 @@
<script lang="ts">
import { goto } from '$app/navigation';
import { locale } from 'svelte-i18n';
import { HelpPage, getHelpTranslations } from '@manacore/shared-help-ui';
import { getQuestionsHelpContent } from '$lib/content/help/index.js';
const content = $derived(getQuestionsHelpContent($locale ?? 'de'));
const translations = $derived(
getHelpTranslations($locale ?? 'de', {
subtitle:
$locale === 'de'
? 'Finde Antworten und lerne Questions kennen'
: 'Find answers and learn how to use Questions',
})
);
</script>
<svelte:head>
<title>{translations.title} | Questions</title>
</svelte:head>
<HelpPage
{content}
appName="Questions"
appId="questions"
{translations}
showBackButton
onBack={() => goto('/')}
showGettingStarted={false}
showChangelog={false}
defaultSection="faq"
/>

View file

@ -40,6 +40,8 @@
"@manacore/shared-branding": "workspace:*",
"@manacore/shared-error-tracking": "workspace:*",
"@manacore/shared-i18n": "workspace:*",
"@manacore/shared-help-types": "workspace:*",
"@manacore/shared-help-ui": "workspace:*",
"@manacore/shared-icons": "workspace:*",
"@manacore/shared-app-onboarding": "workspace:*",
"@manacore/shared-tailwind": "workspace:*",

View file

@ -0,0 +1,146 @@
/**
* Help content for SkillTree app
*/
import type { HelpContent } from '@manacore/shared-help-types';
export function getSkillTreeHelpContent(locale: string): HelpContent {
const isDE = locale === 'de';
return {
faq: [
{
id: 'faq-xp',
question: isDE ? 'Wie funktioniert das XP-System?' : 'How does the XP system work?',
answer: isDE
? '<p>SkillTree verwendet ein RPG-ähnliches Erfahrungspunkte-System:</p><ul><li>Du sammelst <strong>XP</strong> (Erfahrungspunkte) für jede protokollierte Aktivität</li><li>Die XP-Menge hängt von Dauer und Intensität der Aktivität ab</li><li>Wenn du genug XP gesammelt hast, steigst du ein <strong>Level</strong> auf</li><li>Höhere Level erfordern mehr XP — genau wie in einem RPG</li></ul><p>Dein Gesamtlevel zeigt deinen Fortschritt über alle Skill-Bereiche hinweg.</p>'
: '<p>SkillTree uses an RPG-style experience points system:</p><ul><li>You earn <strong>XP</strong> (experience points) for every logged activity</li><li>The amount of XP depends on the duration and intensity of the activity</li><li>When you collect enough XP, you <strong>level up</strong></li><li>Higher levels require more XP — just like in an RPG</li></ul><p>Your total level shows your progress across all skill branches.</p>',
category: 'features',
order: 1,
language: isDE ? 'de' : 'en',
tags: ['xp', 'experience', 'level', 'rpg', 'points'],
},
{
id: 'faq-branches',
question: isDE ? 'Was sind Skill-Bereiche?' : 'What are skill branches?',
answer: isDE
? '<p>Skill-Bereiche sind die 6 Hauptkategorien deiner persönlichen Entwicklung:</p><ul><li><strong>Wissen</strong> — Lernen, Lesen, Kurse</li><li><strong>Fitness</strong> — Sport, Bewegung, Gesundheit</li><li><strong>Kreativität</strong> — Kunst, Musik, Schreiben</li><li><strong>Sozial</strong> — Kommunikation, Networking, Teamarbeit</li><li><strong>Technik</strong> — Programmieren, Tools, Technologie</li><li><strong>Achtsamkeit</strong> — Meditation, Reflexion, Wohlbefinden</li></ul><p>Jeder Bereich hat seinen eigenen Fortschrittsbaum und Level.</p>'
: '<p>Skill branches are the 6 main categories of your personal development:</p><ul><li><strong>Knowledge</strong> — Learning, reading, courses</li><li><strong>Fitness</strong> — Sports, exercise, health</li><li><strong>Creativity</strong> — Art, music, writing</li><li><strong>Social</strong> — Communication, networking, teamwork</li><li><strong>Tech</strong> — Programming, tools, technology</li><li><strong>Mindfulness</strong> — Meditation, reflection, well-being</li></ul><p>Each branch has its own progress tree and level.</p>',
category: 'features',
order: 2,
language: isDE ? 'de' : 'en',
tags: ['branches', 'categories', 'skills', 'types'],
},
{
id: 'faq-logging',
question: isDE ? 'Wie protokolliere ich Aktivitäten?' : 'How do I log activities?',
answer: isDE
? '<p>Aktivitäten protokollieren ist schnell und einfach:</p><ol><li>Tippe auf <strong>Aktivität loggen</strong></li><li>Wähle den Skill-Bereich aus</li><li>Beschreibe kurz, was du gemacht hast</li><li>Gib die Dauer an</li><li>Die XP werden automatisch berechnet und gutgeschrieben</li></ol><p>Du kannst auch vergangene Aktivitäten nachträglich eintragen.</p>'
: '<p>Logging activities is quick and easy:</p><ol><li>Tap <strong>Log Activity</strong></li><li>Select the skill branch</li><li>Briefly describe what you did</li><li>Enter the duration</li><li>XP is automatically calculated and credited</li></ol><p>You can also log past activities retroactively.</p>',
category: 'features',
order: 3,
language: isDE ? 'de' : 'en',
tags: ['logging', 'activities', 'tracking', 'record'],
},
{
id: 'faq-achievements',
question: isDE ? 'Wie funktionieren Erfolge?' : 'How do achievements work?',
answer: isDE
? '<p>Erfolge sind besondere Meilensteine, die du freischalten kannst:</p><ul><li><strong>Streak-Erfolge</strong> — Protokolliere Aktivitäten an aufeinanderfolgenden Tagen</li><li><strong>Level-Erfolge</strong> — Erreiche bestimmte Level in Skill-Bereichen</li><li><strong>Vielseitigkeit</strong> — Sei in mehreren Bereichen aktiv</li><li><strong>Spezial-Erfolge</strong> — Besondere Herausforderungen und Meilensteine</li></ul><p>Freigeschaltete Erfolge werden in deinem Profil angezeigt.</p>'
: '<p>Achievements are special milestones you can unlock:</p><ul><li><strong>Streak achievements</strong> — Log activities on consecutive days</li><li><strong>Level achievements</strong> — Reach certain levels in skill branches</li><li><strong>Versatility</strong> — Be active across multiple branches</li><li><strong>Special achievements</strong> — Unique challenges and milestones</li></ul><p>Unlocked achievements are displayed on your profile.</p>',
category: 'features',
order: 4,
language: isDE ? 'de' : 'en',
tags: ['achievements', 'milestones', 'badges', 'streaks'],
},
{
id: 'faq-privacy',
question: isDE ? 'Wie werden meine Daten geschützt?' : 'How is my data protected?',
answer: isDE
? '<p>SkillTree ist <strong>offline-first</strong> und speichert deine Daten lokal:</p><ul><li>Alle Daten werden in <strong>IndexedDB</strong> direkt auf deinem Gerät gespeichert</li><li>Es werden keine Daten an Server gesendet</li><li>Die App funktioniert vollständig ohne Internetverbindung</li><li>Deine Fortschritte, Aktivitäten und Erfolge verlassen nie dein Gerät</li></ul><p>Du hast die volle Kontrolle über deine Daten — sie gehören dir allein.</p>'
: '<p>SkillTree is <strong>offline-first</strong> and stores your data locally:</p><ul><li>All data is stored in <strong>IndexedDB</strong> directly on your device</li><li>No data is sent to servers</li><li>The app works completely without an internet connection</li><li>Your progress, activities, and achievements never leave your device</li></ul><p>You have full control over your data — it belongs to you alone.</p>',
category: 'privacy',
order: 5,
language: isDE ? 'de' : 'en',
tags: ['privacy', 'offline', 'indexeddb', 'local', 'data'],
},
],
features: [
{
id: 'feature-branches',
title: isDE ? 'Skill-Bereiche (6 Typen)' : 'Skill Branches (6 Types)',
description: isDE
? 'Verfolge deinen Fortschritt in 6 Lebensbereichen: Wissen, Fitness, Kreativität, Sozial, Technik und Achtsamkeit.'
: 'Track your progress across 6 life areas: Knowledge, Fitness, Creativity, Social, Tech, and Mindfulness.',
icon: '🌳',
category: 'core',
highlights: isDE
? ['6 Lebensbereiche', 'Individueller Fortschritt', 'Visueller Skill-Baum']
: ['6 life areas', 'Individual progress', 'Visual skill tree'],
content: '',
order: 1,
language: isDE ? 'de' : 'en',
},
{
id: 'feature-xp',
title: isDE ? 'XP-Levelsystem' : 'XP Leveling',
description: isDE
? 'Sammle Erfahrungspunkte und steige Level auf — gamifizierte persönliche Entwicklung im RPG-Stil.'
: 'Earn experience points and level up — gamified personal development in RPG style.',
icon: '⭐',
category: 'core',
highlights: isDE
? ['RPG-Levelsystem', 'Automatische XP-Berechnung', 'Gesamtlevel']
: ['RPG level system', 'Automatic XP calculation', 'Total level'],
content: '',
order: 2,
language: isDE ? 'de' : 'en',
},
{
id: 'feature-logging',
title: isDE ? 'Aktivitäten-Protokoll' : 'Activity Logging',
description: isDE
? 'Protokolliere Aktivitäten schnell und einfach, um XP zu sammeln und deinen Fortschritt zu verfolgen.'
: 'Log activities quickly and easily to earn XP and track your progress.',
icon: '📝',
category: 'core',
highlights: isDE
? ['Schnelle Eingabe', 'Rückwirkende Einträge', 'Automatische XP']
: ['Quick entry', 'Retroactive logging', 'Automatic XP'],
content: '',
order: 3,
language: isDE ? 'de' : 'en',
},
{
id: 'feature-achievements',
title: isDE ? 'Erfolge' : 'Achievements',
description: isDE
? 'Schalte Erfolge frei für Streaks, Level-Meilensteine und besondere Herausforderungen.'
: 'Unlock achievements for streaks, level milestones, and special challenges.',
icon: '🏆',
category: 'advanced',
highlights: isDE
? ['Streak-Belohnungen', 'Level-Meilensteine', 'Spezial-Herausforderungen']
: ['Streak rewards', 'Level milestones', 'Special challenges'],
content: '',
order: 4,
language: isDE ? 'de' : 'en',
},
],
shortcuts: [],
gettingStarted: [],
changelog: [],
contact: {
id: 'contact-support',
title: isDE ? 'Support kontaktieren' : 'Contact Support',
content: isDE
? '<p>Unser Support-Team hilft dir bei allen Fragen rund um SkillTree.</p>'
: '<p>Our support team is here to help you with any questions about SkillTree.</p>',
language: isDE ? 'de' : 'en',
order: 1,
supportEmail: 'support@mana.how',
documentationUrl: 'https://mana.how/docs',
responseTime: isDE ? 'Normalerweise innerhalb von 24 Stunden' : 'Usually within 24 hours',
},
};
}

View file

@ -0,0 +1,32 @@
<script lang="ts">
import { goto } from '$app/navigation';
import { locale } from 'svelte-i18n';
import { HelpPage, getHelpTranslations } from '@manacore/shared-help-ui';
import { getSkillTreeHelpContent } from '$lib/content/help/index.js';
const content = $derived(getSkillTreeHelpContent($locale ?? 'de'));
const translations = $derived(
getHelpTranslations($locale ?? 'de', {
subtitle:
$locale === 'de'
? 'Finde Antworten und lerne SkillTree kennen'
: 'Find answers and learn how to use SkillTree',
})
);
</script>
<svelte:head>
<title>{translations.title} | SkillTree</title>
</svelte:head>
<HelpPage
{content}
appName="SkillTree"
appId="skilltree"
{translations}
showBackButton
onBack={() => goto('/')}
showGettingStarted={false}
showChangelog={false}
defaultSection="faq"
/>