feat: major update with network graphs, themes, todo extensions, and more

## New Features

### Network Graph Visualization (Contacts, Calendar, Todo)
- D3.js force simulation for physics-based layout
- Zoom & pan with mouse/touchpad
- Keyboard shortcuts: +/- zoom, 0 reset, Esc deselect, / search, F focus
- Filtering by tags, company/location/project, connection strength
- Shared components in @manacore/shared-ui

### Central Tags API (mana-core-auth)
- CRUD endpoints for tags
- Schema: tags table with userId, name, color, app
- Shared tag components in @manacore/shared-ui

### Custom Themes System
- Theme editor with live preview and color picker
- Community theme gallery
- Theme sharing (public, unlisted, private)
- Backend API in mana-core-auth

### Todo App Extensions
- Glass-pill design for task input and items
- Settings page with 20+ preferences
- Task edit modal with inline editing
- Statistics page with visualizations
- PWA support with offline capabilities
- Multiple kanban boards

### Contacts App Features
- Duplicate detection
- Photo upload
- Batch operations
- Enhanced favorites page with multiple view modes
- Alphabet view improvements
- Search modal

### Help System
- @manacore/shared-help-content
- @manacore/shared-help-ui
- @manacore/shared-help-types

### Other Features
- Themes page for all apps
- Referral system frontend
- CommandBar (global search)
- Skeleton loaders
- Settings page improvements

## Bug Fixes
- Network graph simulation initialization
- Database schema TEXT for user_id columns (Better Auth compatibility)
- Various styling fixes

## Documentation
- Daily report for 2025-12-10
- CI/CD deployment guide

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Till-JS 2025-12-10 02:37:46 +01:00
parent e84371aa94
commit ee42b6cc76
381 changed files with 39284 additions and 6275 deletions

View file

@ -65,5 +65,18 @@ export {
getForgotPasswordTranslations,
} from './translations/auth';
// Help translations
export {
en as helpTranslationsEn,
de as helpTranslationsDe,
it as helpTranslationsIt,
fr as helpTranslationsFr,
es as helpTranslationsEs,
type HelpTranslations,
type HelpLocale,
helpTranslations,
getHelpTranslations,
} from './translations/help';
// Components
export { LanguageSelector } from './components';

View file

@ -0,0 +1,65 @@
{
"title": "Hilfe & Support",
"subtitle": "Finde Antworten und lerne die App kennen",
"searchPlaceholder": "Hilfe durchsuchen...",
"sections": {
"faq": "FAQ",
"features": "Features",
"shortcuts": "Tastenkürzel",
"gettingStarted": "Erste Schritte",
"changelog": "Neuigkeiten",
"contact": "Kontakt"
},
"search": {
"noResults": "Keine Ergebnisse für \"{query}\"",
"resultsCount": "{count} Ergebnisse gefunden",
"searching": "Suche..."
},
"faq": {
"noItems": "Keine FAQs verfügbar",
"categories": {
"general": "Allgemein",
"account": "Konto",
"billing": "Abrechnung",
"features": "Funktionen",
"technical": "Technik",
"privacy": "Datenschutz"
}
},
"features": {
"noItems": "Noch keine Features dokumentiert",
"comingSoon": "Demnächst",
"learnMore": "Mehr erfahren"
},
"shortcuts": {
"noItems": "Keine Tastenkürzel verfügbar"
},
"gettingStarted": {
"noItems": "Noch keine Anleitungen verfügbar",
"estimatedTime": "Geschätzte Zeit",
"difficulty": {
"beginner": "Anfänger",
"intermediate": "Fortgeschritten",
"advanced": "Experte"
}
},
"changelog": {
"noItems": "Noch keine Updates",
"types": {
"major": "Haupt-Update",
"minor": "Kleines Update",
"patch": "Fehlerbehebung",
"beta": "Beta"
}
},
"contact": {
"noInfo": "Kontaktinformationen nicht verfügbar",
"email": "E-Mail senden",
"responseTime": "Antwortzeit"
},
"common": {
"back": "Zurück",
"showMore": "Mehr anzeigen",
"showLess": "Weniger anzeigen"
}
}

View file

@ -0,0 +1,65 @@
{
"title": "Help & Support",
"subtitle": "Find answers and learn how to use the app",
"searchPlaceholder": "Search help articles...",
"sections": {
"faq": "FAQ",
"features": "Features",
"shortcuts": "Keyboard Shortcuts",
"gettingStarted": "Getting Started",
"changelog": "What's New",
"contact": "Contact Us"
},
"search": {
"noResults": "No results found for \"{query}\"",
"resultsCount": "{count} results found",
"searching": "Searching..."
},
"faq": {
"noItems": "No FAQs available",
"categories": {
"general": "General",
"account": "Account",
"billing": "Billing",
"features": "Features",
"technical": "Technical",
"privacy": "Privacy"
}
},
"features": {
"noItems": "No features documented yet",
"comingSoon": "Coming soon",
"learnMore": "Learn more"
},
"shortcuts": {
"noItems": "No keyboard shortcuts available"
},
"gettingStarted": {
"noItems": "No guides available yet",
"estimatedTime": "Estimated time",
"difficulty": {
"beginner": "Beginner",
"intermediate": "Intermediate",
"advanced": "Advanced"
}
},
"changelog": {
"noItems": "No updates yet",
"types": {
"major": "Major",
"minor": "Minor",
"patch": "Patch",
"beta": "Beta"
}
},
"contact": {
"noInfo": "Contact information not available",
"email": "Email us",
"responseTime": "Response time"
},
"common": {
"back": "Back",
"showMore": "Show more",
"showLess": "Show less"
}
}

View file

@ -0,0 +1,65 @@
{
"title": "Ayuda y Soporte",
"subtitle": "Encuentra respuestas y aprende a usar la aplicación",
"searchPlaceholder": "Buscar en la ayuda...",
"sections": {
"faq": "FAQ",
"features": "Características",
"shortcuts": "Atajos de teclado",
"gettingStarted": "Primeros pasos",
"changelog": "Novedades",
"contact": "Contacto"
},
"search": {
"noResults": "Sin resultados para \"{query}\"",
"resultsCount": "{count} resultados encontrados",
"searching": "Buscando..."
},
"faq": {
"noItems": "No hay preguntas frecuentes disponibles",
"categories": {
"general": "General",
"account": "Cuenta",
"billing": "Facturación",
"features": "Características",
"technical": "Técnico",
"privacy": "Privacidad"
}
},
"features": {
"noItems": "No hay características documentadas",
"comingSoon": "Próximamente",
"learnMore": "Saber más"
},
"shortcuts": {
"noItems": "No hay atajos de teclado disponibles"
},
"gettingStarted": {
"noItems": "No hay guías disponibles",
"estimatedTime": "Tiempo estimado",
"difficulty": {
"beginner": "Principiante",
"intermediate": "Intermedio",
"advanced": "Avanzado"
}
},
"changelog": {
"noItems": "Sin actualizaciones",
"types": {
"major": "Principal",
"minor": "Menor",
"patch": "Corrección",
"beta": "Beta"
}
},
"contact": {
"noInfo": "Información de contacto no disponible",
"email": "Envíanos un correo",
"responseTime": "Tiempo de respuesta"
},
"common": {
"back": "Volver",
"showMore": "Ver más",
"showLess": "Ver menos"
}
}

View file

@ -0,0 +1,65 @@
{
"title": "Aide & Support",
"subtitle": "Trouvez des réponses et apprenez à utiliser l'application",
"searchPlaceholder": "Rechercher dans l'aide...",
"sections": {
"faq": "FAQ",
"features": "Fonctionnalités",
"shortcuts": "Raccourcis clavier",
"gettingStarted": "Premiers pas",
"changelog": "Nouveautés",
"contact": "Contact"
},
"search": {
"noResults": "Aucun résultat pour \"{query}\"",
"resultsCount": "{count} résultats trouvés",
"searching": "Recherche..."
},
"faq": {
"noItems": "Aucune FAQ disponible",
"categories": {
"general": "Général",
"account": "Compte",
"billing": "Facturation",
"features": "Fonctionnalités",
"technical": "Technique",
"privacy": "Confidentialité"
}
},
"features": {
"noItems": "Aucune fonctionnalité documentée",
"comingSoon": "Bientôt disponible",
"learnMore": "En savoir plus"
},
"shortcuts": {
"noItems": "Aucun raccourci clavier disponible"
},
"gettingStarted": {
"noItems": "Aucun guide disponible",
"estimatedTime": "Temps estimé",
"difficulty": {
"beginner": "Débutant",
"intermediate": "Intermédiaire",
"advanced": "Avancé"
}
},
"changelog": {
"noItems": "Aucune mise à jour",
"types": {
"major": "Majeure",
"minor": "Mineure",
"patch": "Correctif",
"beta": "Bêta"
}
},
"contact": {
"noInfo": "Informations de contact non disponibles",
"email": "Nous contacter",
"responseTime": "Délai de réponse"
},
"common": {
"back": "Retour",
"showMore": "Voir plus",
"showLess": "Voir moins"
}
}

View file

@ -0,0 +1,108 @@
/**
* Help translations exports
*/
import en from './en.json';
import de from './de.json';
import it from './it.json';
import fr from './fr.json';
import es from './es.json';
export { en, de, it, fr, es };
/**
* Help translations type structure
*/
export interface HelpTranslations {
title: string;
subtitle: string;
searchPlaceholder: string;
sections: {
faq: string;
features: string;
shortcuts: string;
gettingStarted: string;
changelog: string;
contact: string;
};
search: {
noResults: string;
resultsCount: string;
searching: string;
};
faq: {
noItems: string;
categories: {
general: string;
account: string;
billing: string;
features: string;
technical: string;
privacy: string;
};
};
features: {
noItems: string;
comingSoon: string;
learnMore: string;
};
shortcuts: {
noItems: string;
};
gettingStarted: {
noItems: string;
estimatedTime: string;
difficulty: {
beginner: string;
intermediate: string;
advanced: string;
};
};
changelog: {
noItems: string;
types: {
major: string;
minor: string;
patch: string;
beta: string;
};
};
contact: {
noInfo: string;
email: string;
responseTime: string;
};
common: {
back: string;
showMore: string;
showLess: string;
};
}
/**
* Supported help locales
*/
export type HelpLocale = 'en' | 'de' | 'it' | 'fr' | 'es';
/**
* All help translations by locale
*/
export const helpTranslations: Record<HelpLocale, HelpTranslations> = {
en,
de,
it,
fr,
es,
};
/**
* Get help translations by locale
*/
export function getHelpTranslations(locale: string): HelpTranslations {
const supportedLocale = locale as HelpLocale;
if (supportedLocale in helpTranslations) {
return helpTranslations[supportedLocale];
}
// Default to English
return helpTranslations.en;
}

View file

@ -0,0 +1,65 @@
{
"title": "Aiuto & Supporto",
"subtitle": "Trova risposte e impara a usare l'app",
"searchPlaceholder": "Cerca nell'aiuto...",
"sections": {
"faq": "FAQ",
"features": "Funzionalità",
"shortcuts": "Scorciatoie",
"gettingStarted": "Primi passi",
"changelog": "Novità",
"contact": "Contatti"
},
"search": {
"noResults": "Nessun risultato per \"{query}\"",
"resultsCount": "{count} risultati trovati",
"searching": "Ricerca..."
},
"faq": {
"noItems": "Nessuna FAQ disponibile",
"categories": {
"general": "Generale",
"account": "Account",
"billing": "Fatturazione",
"features": "Funzionalità",
"technical": "Tecnico",
"privacy": "Privacy"
}
},
"features": {
"noItems": "Nessuna funzionalità documentata",
"comingSoon": "Prossimamente",
"learnMore": "Scopri di più"
},
"shortcuts": {
"noItems": "Nessuna scorciatoia disponibile"
},
"gettingStarted": {
"noItems": "Nessuna guida disponibile",
"estimatedTime": "Tempo stimato",
"difficulty": {
"beginner": "Principiante",
"intermediate": "Intermedio",
"advanced": "Avanzato"
}
},
"changelog": {
"noItems": "Nessun aggiornamento",
"types": {
"major": "Principale",
"minor": "Secondario",
"patch": "Correzione",
"beta": "Beta"
}
},
"contact": {
"noInfo": "Informazioni di contatto non disponibili",
"email": "Inviaci un'email",
"responseTime": "Tempo di risposta"
},
"common": {
"back": "Indietro",
"showMore": "Mostra di più",
"showLess": "Mostra meno"
}
}