mirror of
https://github.com/Memo-2023/mana-monorepo.git
synced 2026-05-14 20:21:09 +02:00
Move inactive projects out of active workspace: - bauntown (community website) - maerchenzauber (AI story generation) - memoro (voice memo app) - news (news aggregation) - nutriphi (nutrition tracking) - reader (reading app) - uload (URL shortener) - wisekeep (AI wisdom extraction) Update CLAUDE.md documentation: - Add presi to active projects - Document archived projects section - Update workspace configuration Archived apps can be re-activated by moving back to apps/ đ¤ Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
400 lines
15 KiB
TypeScript
400 lines
15 KiB
TypeScript
import React, { useState } from 'react';
|
|
import { View, Text, StyleSheet, ScrollView, TouchableOpacity, Dimensions } from 'react-native';
|
|
import { SafeAreaView } from 'react-native-safe-area-context';
|
|
import { router } from 'expo-router';
|
|
import CommonHeader from '../components/molecules/CommonHeader';
|
|
import { Feather } from '@expo/vector-icons';
|
|
|
|
interface HelpCategory {
|
|
id: string;
|
|
title: string;
|
|
icon: keyof typeof Feather.glyphMap;
|
|
articles: HelpArticle[];
|
|
}
|
|
|
|
interface HelpArticle {
|
|
id: string;
|
|
title: string;
|
|
content: string;
|
|
}
|
|
|
|
const helpData: HelpCategory[] = [
|
|
{
|
|
id: 'getting-started',
|
|
title: 'Erste Schritte',
|
|
icon: 'compass',
|
|
articles: [
|
|
{
|
|
id: 'welcome',
|
|
title: 'Willkommen bei Märchenzauber',
|
|
content:
|
|
'Märchenzauber ist deine App fßr magische, personalisierte Kindergeschichten. Erstelle einzigartige Charaktere und lass KI wunderschÜne illustrierte Geschichten fßr dich schreiben.',
|
|
},
|
|
{
|
|
id: 'how-to-start',
|
|
title: 'Wie starte ich?',
|
|
content:
|
|
'1. Erstelle zunächst einen Charakter - entweder aus einer Beschreibung oder einem Foto\n2. Wähle deinen Charakter aus und beschreibe deine Geschichte\n3. Warte wenige Minuten, während die KI deine Geschichte schreibt und illustriert\n4. GenieĂe deine persĂśnliche Geschichte!',
|
|
},
|
|
],
|
|
},
|
|
{
|
|
id: 'characters',
|
|
title: 'Charaktere',
|
|
icon: 'users',
|
|
articles: [
|
|
{
|
|
id: 'create-character',
|
|
title: 'Charakter erstellen',
|
|
content:
|
|
'Du kannst Charaktere auf zwei Arten erstellen:\n\n⢠Aus einer Beschreibung: Beschreibe einfach, wie dein Charakter aussehen soll\n⢠Aus einem Foto: Lade ein Foto hoch und die KI erstellt einen passenden Charakter',
|
|
},
|
|
{
|
|
id: 'character-consistency',
|
|
title: 'Konstante Charaktere',
|
|
content:
|
|
'Alle Bilder deines Charakters werden konsistent generiert - dein Charakter sieht in jeder Geschichte gleich aus. Das macht es perfekt fĂźr wiederkehrende Geschichten mit demselben Helden.',
|
|
},
|
|
{
|
|
id: 'character-prompts',
|
|
title: 'Gute Charakter-Beschreibungen',
|
|
content:
|
|
'â
Gut - Sei spezifisch:\n"Ein kleiner Drache mit grĂźnen Schuppen, groĂen blauen Augen und kleinen orangenen FlĂźgeln"\n\n"Ein freundliches Einhorn mit rosa Mähne, goldenem Horn und Sternenflecken am KĂśrper"\n\nâ Zu vage:\n"Ein sĂźĂes Tier"\n"Ein Mädchen"\n\nTipps:\n⢠Beschreibe Farben und Merkmale\n⢠Nenne charakteristische Details\n⢠Denke an den Stil (niedlich, realistisch, etc.)',
|
|
},
|
|
],
|
|
},
|
|
{
|
|
id: 'stories',
|
|
title: 'Geschichten',
|
|
icon: 'book-open',
|
|
articles: [
|
|
{
|
|
id: 'create-story',
|
|
title: 'Geschichte erstellen',
|
|
content:
|
|
'So erstellst du eine Geschichte:\n\n1. Wähle einen Charakter\n2. Beschreibe, was in der Geschichte passieren soll (z.B. "Ein Abenteuer im Zauberwald")\n3. Die KI generiert automatisch:\n ⢠10 Seiten Text\n ⢠Passende Illustrationen\n ⢠Deutsche und englische Version',
|
|
},
|
|
{
|
|
id: 'story-prompts',
|
|
title: 'Gute Geschichten-Beschreibungen',
|
|
content:
|
|
'â
Gute Beispiele:\n\n"Mein Charakter findet einen magischen SchlĂźssel und erkundet ein verzaubertes Schloss"\n\n"Ein Abenteuer am Strand, wo mein Charakter sprechende Muscheln entdeckt und eine Meerjungfrau trifft"\n\n"Mein Charakter rettet ein verlorenes Einhorn im dunklen Wald"\n\nâ Zu kurz:\n"Eine Geschichte"\n"Abenteuer"\n\nTipps:\n⢠Nenne einen Ort (Wald, Schloss, Stadt)\n⢠Beschreibe eine Herausforderung oder Aufgabe\n⢠Erwähne andere Charaktere oder Kreaturen\n⢠Halte es einfach - die KI fĂźgt Details hinzu',
|
|
},
|
|
{
|
|
id: 'story-pages',
|
|
title: 'Geschichtenseiten',
|
|
content:
|
|
'Jede Geschichte hat 10 wunderschÜn illustrierte Seiten. Wische nach links/rechts, um durch die Seiten zu blättern. Jede Seite enthält Text und ein passendes Bild.',
|
|
},
|
|
{
|
|
id: 'archive-stories',
|
|
title: 'Geschichten archivieren',
|
|
content:
|
|
'Alte Geschichten kannst du archivieren:\n\n1. Ăffne die Geschichte\n2. Tippe auf das Archiv-Symbol\n3. Die Geschichte wird ins Archiv verschoben\n\nArchivierte Geschichten findest du in den Einstellungen unter "Archiv".',
|
|
},
|
|
],
|
|
},
|
|
{
|
|
id: 'credits',
|
|
title: 'Mana & Credits',
|
|
icon: 'zap',
|
|
articles: [
|
|
{
|
|
id: 'what-is-mana',
|
|
title: 'Was ist Mana?',
|
|
content:
|
|
'Mana ist deine kreative Energiewährung. Du brauchst Mana, um Geschichten zu generieren und Charaktere zu erstellen.\n\n⢠Story Generation: 100 Mana\n⢠Charakter Erstellung: 30 Mana',
|
|
},
|
|
{
|
|
id: 'get-mana',
|
|
title: 'Mana bekommen',
|
|
content:
|
|
'Du kannst Mana auf zwei Arten bekommen:\n\nđ
Abonnements (monatlich):\n⢠Free: 150 Mana/Monat (kostenlos)\n⢠Small: 600 Mana fĂźr 5,99âŹ/Monat\n⢠Medium: 1500 Mana fĂźr 14,99âŹ/Monat\n⢠Large: 3000 Mana fĂźr 29,99âŹ/Monat\n⢠Giant: 5000 Mana fĂźr 49,99âŹ/Monat\n\nđ Einmal-Pakete:\n⢠Small Potion: 350 Mana fĂźr 4,99âŹ\n⢠Medium Potion: 700 Mana fĂźr 9,99âŹ\n⢠Large Potion: 1400 Mana fĂźr 19,99âŹ\n⢠Giant Potion: 2800 Mana fĂźr 39,99âŹ',
|
|
},
|
|
{
|
|
id: 'mana-costs',
|
|
title: 'Was kostet wie viel Mana?',
|
|
content:
|
|
'đ Story Generation: 100 Mana\n⢠10 illustrierte Seiten\n⢠Deutsche und englische Version\n⢠Hochwertige KI-Generierung\n\nđ¤ Charakter Erstellung: 30 Mana\n⢠Mehrere konsistente Bilder\n⢠Aus Beschreibung oder Foto\n\nBeispiel: Mit dem kostenlosen Plan (150 Mana/Monat) kannst du 1 Geschichte + 1 Charakter erstellen oder 5 Charaktere ohne Geschichte.',
|
|
},
|
|
],
|
|
},
|
|
{
|
|
id: 'tips',
|
|
title: 'Tipps & Best Practices',
|
|
icon: 'lightbulb',
|
|
articles: [
|
|
{
|
|
id: 'prompt-basics',
|
|
title: 'Grundlagen guter Prompts',
|
|
content:
|
|
'đŻ Die Formel fĂźr gute Prompts:\n\n1. WER: Dein Charakter (automatisch ausgewählt)\n2. WAS: Die Handlung/das Abenteuer\n3. WO: Der Ort/die Umgebung\n4. WARUM/WIE: Das Ziel oder die Herausforderung\n\nBeispiel:\n"Mein Charakter (WER) sucht einen verlorenen Schatz (WAS) in einer alten Pyramide (WO) und muss Rätsel lĂśsen (WIE)"',
|
|
},
|
|
{
|
|
id: 'prompt-themes',
|
|
title: 'Beliebte Themen',
|
|
content:
|
|
'đ Magische Welten:\n⢠Zauberwald mit sprechenden Tieren\n⢠Unterwasserabenteuer mit Meeresbewohnern\n⢠Wolkenschloss mit fliegenden Kreaturen\n\nđ° Abenteuer:\n⢠Schatzsuche in alten Ruinen\n⢠Rettungsmission fĂźr Freunde\n⢠Zeitreise in die Vergangenheit\n\nđŞ Alltag mit Twist:\n⢠Erster Schultag in einer Zauberschule\n⢠Haustier wird lebendig und kann sprechen\n⢠Geheime TĂźr im Kinderzimmer\n\nđ Lerngeschichten:\n⢠Freundschaft und Zusammenarbeit\n⢠Mut und Selbstvertrauen\n⢠Kreativität und ProblemlĂśsung',
|
|
},
|
|
{
|
|
id: 'prompt-donts',
|
|
title: 'Was du vermeiden solltest',
|
|
content:
|
|
'â Vermeide:\n\n⢠Zu komplexe Handlungen mit vielen Wendungen\n⢠Sehr spezifische Details ("genau 7 rote Blumen")\n⢠Zu dunkle oder gruselige Themen\n⢠Namen von bekannten Marken/Charakteren\n\nâ
Besser:\n\n⢠Einfache, klare Handlung\n⢠Beschreibende Details ("viele bunte Blumen")\n⢠Positive, altersgerechte Themen\n⢠Originale Ideen und Charaktere\n\nDie KI fßgt automatisch passende Details hinzu!',
|
|
},
|
|
{
|
|
id: 'creative-ideas',
|
|
title: 'Kreative Ideen',
|
|
content:
|
|
'đĄ Inspirierende Ausgangspunkte:\n\nđ Klassiker neu interpretiert:\n⢠"Rotkäppchen trifft auf freundliche WĂślfe"\n⢠"Hänsel und Gretel im Weltraum"\n\nđ¨ UngewĂśhnliche Kombinationen:\n⢠"Ein Roboter lernt GefĂźhle durch Musik"\n⢠"Ein Drache, der Angst vor Feuer hat"\n\nđ Verschiedene Settings:\n⢠"Abenteuer in einer Spielzeugstadt"\n⢠"Reise durch ein Gemälde"\n⢠"Safari im Garten (winzig klein)"\n\nđ Charakterentwicklung:\n⢠"SchĂźchterner Charakter wird zum Helden"\n⢠"Lernt eine neue Fähigkeit"\n⢠"Findet einen unerwarteten Freund"',
|
|
},
|
|
{
|
|
id: 'age-appropriate',
|
|
title: 'Altersgerechte Geschichten',
|
|
content:
|
|
'đś 3-5 Jahre:\n⢠Einfache Handlung mit 1-2 Ereignissen\n⢠Bekannte Orte (Garten, Haus, Park)\n⢠Klare Gut-BĂśse-Unterscheidung\n⢠Beispiel: "Mein Charakter hilft einem verlorenen Kätzchen nach Hause zu finden"\n\nđ§ 6-8 Jahre:\n⢠Abenteuer mit kleinen Herausforderungen\n⢠Fantasy-Elemente\n⢠Freundschaftsthemen\n⢠Beispiel: "Mein Charakter entdeckt eine magische TĂźr und findet neue Freunde"\n\nđŚ 9-12 Jahre:\n⢠Komplexere Plots\n⢠Moralische Dilemmata\n⢠Teamwork und Strategie\n⢠Beispiel: "Mein Charakter muss mit Rivalen zusammenarbeiten, um das Dorf zu retten"',
|
|
},
|
|
],
|
|
},
|
|
{
|
|
id: 'settings',
|
|
title: 'Einstellungen',
|
|
icon: 'settings',
|
|
articles: [
|
|
{
|
|
id: 'archive',
|
|
title: 'Archiv',
|
|
content:
|
|
'Im Archiv findest du alle deine archivierten Geschichten. Du kannst sie jederzeit wieder aktivieren oder endgĂźltig lĂśschen.',
|
|
},
|
|
],
|
|
},
|
|
{
|
|
id: 'troubleshooting',
|
|
title: 'Fehlerbehebung',
|
|
icon: 'alert-circle',
|
|
articles: [
|
|
{
|
|
id: 'generation-fails',
|
|
title: 'Generierung schlägt fehl',
|
|
content:
|
|
'Wenn die Generierung fehlschlägt:\n\n1. Prßfe deine Internetverbindung\n2. Stelle sicher, dass du genug Mana hast\n3. Versuche es erneut\n4. Wenn das Problem weiterhin besteht, kontaktiere den Support',
|
|
},
|
|
{
|
|
id: 'images-not-loading',
|
|
title: 'Bilder laden nicht',
|
|
content:
|
|
'Wenn Bilder nicht laden:\n\n1. PrĂźfe deine Internetverbindung\n2. SchlieĂe die App und Ăśffne sie erneut\n3. Warte einen Moment - groĂe Bilder brauchen Zeit\n4. Bei anhaltenden Problemen: App neu installieren',
|
|
},
|
|
{
|
|
id: 'feedback',
|
|
title: 'Problem melden',
|
|
content:
|
|
'Du kannst uns jederzeit Feedback geben:\n\n1. Gehe zu Einstellungen\n2. Tippe auf "Feedback geben"\n3. Beschreibe dein Problem oder deinen Vorschlag\n4. Wir melden uns so schnell wie mĂśglich',
|
|
},
|
|
],
|
|
},
|
|
];
|
|
|
|
export default function Help() {
|
|
const [expandedCategory, setExpandedCategory] = useState<string | null>(null);
|
|
const [expandedArticle, setExpandedArticle] = useState<string | null>(null);
|
|
const { width: screenWidth } = Dimensions.get('window');
|
|
const isWideScreen = screenWidth > 1000;
|
|
|
|
const toggleCategory = (categoryId: string) => {
|
|
setExpandedCategory(expandedCategory === categoryId ? null : categoryId);
|
|
setExpandedArticle(null); // Close any open article when switching categories
|
|
};
|
|
|
|
const toggleArticle = (articleId: string) => {
|
|
setExpandedArticle(expandedArticle === articleId ? null : articleId);
|
|
};
|
|
|
|
const dynamicStyles = {
|
|
container: {
|
|
maxWidth: 600,
|
|
width: '100%',
|
|
alignSelf: 'center' as const,
|
|
paddingHorizontal: isWideScreen ? 0 : 20,
|
|
},
|
|
};
|
|
|
|
return (
|
|
<SafeAreaView style={styles.safeArea} edges={['top']}>
|
|
<CommonHeader title="Hilfe" showBackButton onBack={() => router.back()} />
|
|
<View style={[styles.container, dynamicStyles.container]}>
|
|
<ScrollView
|
|
contentContainerStyle={styles.scrollContent}
|
|
showsVerticalScrollIndicator={false}
|
|
>
|
|
<View style={styles.contentContainer}>
|
|
<Text style={styles.description}>
|
|
Hier findest du Antworten auf die häufigsten Fragen zu Märchenzauber.
|
|
</Text>
|
|
|
|
{helpData.map((category) => (
|
|
<View key={category.id} style={styles.categoryContainer}>
|
|
<TouchableOpacity
|
|
style={styles.categoryHeader}
|
|
onPress={() => toggleCategory(category.id)}
|
|
activeOpacity={0.7}
|
|
>
|
|
<View style={styles.categoryTitleContainer}>
|
|
<Feather
|
|
name={category.icon}
|
|
size={24}
|
|
color="#FFD700"
|
|
style={styles.categoryIcon}
|
|
/>
|
|
<Text style={styles.categoryTitle}>{category.title}</Text>
|
|
</View>
|
|
<Feather
|
|
name={expandedCategory === category.id ? 'chevron-up' : 'chevron-down'}
|
|
size={24}
|
|
color="#FFD700"
|
|
/>
|
|
</TouchableOpacity>
|
|
|
|
{expandedCategory === category.id && (
|
|
<View style={styles.articlesContainer}>
|
|
{category.articles.map((article) => (
|
|
<View key={article.id} style={styles.articleContainer}>
|
|
<TouchableOpacity
|
|
style={styles.articleHeader}
|
|
onPress={() => toggleArticle(article.id)}
|
|
activeOpacity={0.7}
|
|
>
|
|
<Text style={styles.articleTitle}>{article.title}</Text>
|
|
<Feather
|
|
name={expandedArticle === article.id ? 'chevron-up' : 'chevron-down'}
|
|
size={20}
|
|
color="#999"
|
|
/>
|
|
</TouchableOpacity>
|
|
|
|
{expandedArticle === article.id && (
|
|
<Text style={styles.articleContent}>{article.content}</Text>
|
|
)}
|
|
</View>
|
|
))}
|
|
</View>
|
|
)}
|
|
</View>
|
|
))}
|
|
|
|
<View style={styles.footer}>
|
|
<Text style={styles.footerText}>Hast du weitere Fragen?</Text>
|
|
<TouchableOpacity
|
|
style={styles.feedbackButton}
|
|
onPress={() => router.push('/feedback')}
|
|
activeOpacity={0.7}
|
|
>
|
|
<Feather name="message-circle" size={20} color="#FFD700" />
|
|
<Text style={styles.feedbackButtonText}>Feedback geben</Text>
|
|
</TouchableOpacity>
|
|
</View>
|
|
</View>
|
|
</ScrollView>
|
|
</View>
|
|
</SafeAreaView>
|
|
);
|
|
}
|
|
|
|
const styles = StyleSheet.create({
|
|
safeArea: {
|
|
flex: 1,
|
|
backgroundColor: '#181818',
|
|
},
|
|
container: {
|
|
flex: 1,
|
|
},
|
|
contentContainer: {
|
|
paddingTop: 100,
|
|
paddingBottom: 40,
|
|
},
|
|
scrollContent: {
|
|
flexGrow: 1,
|
|
},
|
|
description: {
|
|
fontSize: 16,
|
|
color: '#999',
|
|
marginBottom: 24,
|
|
lineHeight: 24,
|
|
},
|
|
categoryContainer: {
|
|
marginBottom: 16,
|
|
backgroundColor: '#222',
|
|
borderRadius: 12,
|
|
overflow: 'hidden',
|
|
},
|
|
categoryHeader: {
|
|
flexDirection: 'row',
|
|
justifyContent: 'space-between',
|
|
alignItems: 'center',
|
|
padding: 16,
|
|
},
|
|
categoryTitleContainer: {
|
|
flexDirection: 'row',
|
|
alignItems: 'center',
|
|
flex: 1,
|
|
},
|
|
categoryIcon: {
|
|
marginRight: 12,
|
|
},
|
|
categoryTitle: {
|
|
fontSize: 18,
|
|
fontWeight: '600',
|
|
color: '#FFFFFF',
|
|
},
|
|
articlesContainer: {
|
|
borderTopWidth: 1,
|
|
borderTopColor: '#333',
|
|
},
|
|
articleContainer: {
|
|
borderBottomWidth: 1,
|
|
borderBottomColor: '#333',
|
|
},
|
|
articleHeader: {
|
|
flexDirection: 'row',
|
|
justifyContent: 'space-between',
|
|
alignItems: 'center',
|
|
padding: 16,
|
|
paddingLeft: 52, // Indent to align with category title
|
|
},
|
|
articleTitle: {
|
|
fontSize: 16,
|
|
color: '#CCCCCC',
|
|
flex: 1,
|
|
},
|
|
articleContent: {
|
|
fontSize: 15,
|
|
color: '#999',
|
|
lineHeight: 22,
|
|
paddingHorizontal: 52,
|
|
paddingBottom: 16,
|
|
},
|
|
footer: {
|
|
marginTop: 32,
|
|
alignItems: 'center',
|
|
},
|
|
footerText: {
|
|
fontSize: 16,
|
|
color: '#999',
|
|
marginBottom: 16,
|
|
},
|
|
feedbackButton: {
|
|
flexDirection: 'row',
|
|
alignItems: 'center',
|
|
backgroundColor: '#333',
|
|
paddingHorizontal: 24,
|
|
paddingVertical: 12,
|
|
borderRadius: 8,
|
|
gap: 8,
|
|
},
|
|
feedbackButtonText: {
|
|
fontSize: 16,
|
|
color: '#FFD700',
|
|
fontWeight: '600',
|
|
},
|
|
});
|