Merge branch 'dev-1' into dev

This commit is contained in:
Wuesteon 2025-12-05 17:57:26 +01:00
commit d41d060bb3
1770 changed files with 168028 additions and 31031 deletions

View file

@ -54,6 +54,18 @@ const calendarSvg = `<svg width="1024" height="1024" viewBox="0 0 1024 1024" fil
// Storage icon (cloud storage with gradient)
const storageSvg = `<svg width="1024" height="1024" viewBox="0 0 1024 1024" fill="none" xmlns="http://www.w3.org/2000/svg"><rect x="130" y="130" width="764" height="764" rx="382" fill="url(#storageGrad)"/><path d="M720 520C720 448.471 662.529 391 591 391C584.614 391 578.337 391.479 572.195 392.404C546.867 332.088 487.173 290 418 290C328.157 290 256 362.157 256 452C256 461.033 256.748 469.887 258.179 478.5C214.762 497.476 184 540.728 184 591C184 658.32 238.68 713 306 713H680C749.32 713 804 658.32 804 591C804 547.831 779.054 510.325 742.5 491.5C734.321 503.137 728 516.893 728 532V536C728 567.48 755.482 593 789 593" stroke="white" stroke-width="40" stroke-linecap="round" stroke-linejoin="round"/><path d="M512 500V700M512 700L420 608M512 700L604 608" stroke="white" stroke-width="40" stroke-linecap="round" stroke-linejoin="round"/><defs><linearGradient id="storageGrad" x1="130" y1="130" x2="894" y2="894" gradientUnits="userSpaceOnUse"><stop stop-color="#3b82f6"/><stop offset="1" stop-color="#1d4ed8"/></linearGradient></defs></svg>`;
// Clock icon (analog clock with gradient)
const clockSvg = `<svg width="1024" height="1024" viewBox="0 0 1024 1024" fill="none" xmlns="http://www.w3.org/2000/svg"><rect x="130" y="130" width="764" height="764" rx="382" fill="url(#clockGrad)"/><circle cx="512" cy="512" r="280" stroke="white" stroke-width="40"/><circle cx="512" cy="512" r="20" fill="white"/><path d="M512 300V400" stroke="white" stroke-width="24" stroke-linecap="round"/><path d="M512 624V724" stroke="white" stroke-width="24" stroke-linecap="round"/><path d="M300 512H400" stroke="white" stroke-width="24" stroke-linecap="round"/><path d="M624 512H724" stroke="white" stroke-width="24" stroke-linecap="round"/><path d="M512 512V340" stroke="white" stroke-width="32" stroke-linecap="round"/><path d="M512 512L620 580" stroke="white" stroke-width="24" stroke-linecap="round"/><circle cx="662" cy="280" r="40" fill="white" fill-opacity="0.3"/><path d="M662 260V280L678 296" stroke="white" stroke-width="8" stroke-linecap="round"/><defs><linearGradient id="clockGrad" x1="130" y1="130" x2="894" y2="894" gradientUnits="userSpaceOnUse"><stop stop-color="#f59e0b"/><stop offset="1" stop-color="#d97706"/></linearGradient></defs></svg>`;
// Todo icon (checkbox/task list with gradient)
const todoSvg = `<svg width="1024" height="1024" viewBox="0 0 1024 1024" fill="none" xmlns="http://www.w3.org/2000/svg"><rect x="130" y="130" width="764" height="764" rx="382" fill="url(#todoGrad)"/><rect x="280" y="300" width="464" height="424" rx="24" fill="white"/><circle cx="360" cy="400" r="28" stroke="#8b5cf6" stroke-width="8"/><path d="M348 400L356 408L372 392" stroke="#8b5cf6" stroke-width="8" stroke-linecap="round" stroke-linejoin="round"/><rect x="420" y="384" width="280" height="24" rx="6" fill="#8b5cf6" fill-opacity="0.3"/><circle cx="360" cy="512" r="28" stroke="#8b5cf6" stroke-width="8" fill="#8b5cf6"/><path d="M348 512L356 520L372 504" stroke="white" stroke-width="8" stroke-linecap="round" stroke-linejoin="round"/><rect x="420" y="496" width="200" height="24" rx="6" fill="#8b5cf6" fill-opacity="0.5"/><circle cx="360" cy="624" r="28" stroke="#8b5cf6" stroke-width="8"/><rect x="420" y="608" width="240" height="24" rx="6" fill="#8b5cf6" fill-opacity="0.3"/><defs><linearGradient id="todoGrad" x1="130" y1="130" x2="894" y2="894" gradientUnits="userSpaceOnUse"><stop stop-color="#8b5cf6"/><stop offset="1" stop-color="#7c3aed"/></linearGradient></defs></svg>`;
// Mail icon (envelope with gradient)
const mailSvg = `<svg width="1024" height="1024" viewBox="0 0 1024 1024" fill="none" xmlns="http://www.w3.org/2000/svg"><rect x="130" y="130" width="764" height="764" rx="382" fill="url(#mailGrad)"/><rect x="240" y="320" width="544" height="384" rx="24" fill="white"/><path d="M240 380L512 540L784 380" stroke="#6366f1" stroke-width="24" stroke-linecap="round" stroke-linejoin="round"/><rect x="320" y="520" width="200" height="16" rx="4" fill="#6366f1" fill-opacity="0.3"/><rect x="320" y="560" width="160" height="12" rx="3" fill="#6366f1" fill-opacity="0.2"/><rect x="320" y="592" width="240" height="12" rx="3" fill="#6366f1" fill-opacity="0.2"/><defs><linearGradient id="mailGrad" x1="130" y1="130" x2="894" y2="894" gradientUnits="userSpaceOnUse"><stop stop-color="#6366f1"/><stop offset="1" stop-color="#4f46e5"/></linearGradient></defs></svg>`;
// Inventory icon (box/package with gradient)
const inventorySvg = `<svg width="1024" height="1024" viewBox="0 0 1024 1024" fill="none" xmlns="http://www.w3.org/2000/svg"><rect x="130" y="130" width="764" height="764" rx="382" fill="url(#inventoryGrad)"/><path d="M280 380L512 260L744 380V644L512 764L280 644V380Z" fill="white"/><path d="M512 500V764M280 380L512 500L744 380" stroke="#14b8a6" stroke-width="24" stroke-linejoin="round"/><path d="M396 320L628 440" stroke="#14b8a6" stroke-width="16" stroke-linecap="round"/><rect x="460" y="560" width="104" height="80" rx="8" fill="#14b8a6" fill-opacity="0.3"/><defs><linearGradient id="inventoryGrad" x1="130" y1="130" x2="894" y2="894" gradientUnits="userSpaceOnUse"><stop stop-color="#14b8a6"/><stop offset="1" stop-color="#0d9488"/></linearGradient></defs></svg>`;
/**
* App icons as data URLs
* Use these directly in <img src={APP_ICONS.memoro}> or CSS background-image
@ -74,6 +86,10 @@ export const APP_ICONS = {
contacts: svgToDataUrl(contactsSvg),
calendar: svgToDataUrl(calendarSvg),
storage: svgToDataUrl(storageSvg),
clock: svgToDataUrl(clockSvg),
todo: svgToDataUrl(todoSvg),
mail: svgToDataUrl(mailSvg),
inventory: svgToDataUrl(inventorySvg),
} as const;
export type AppIconId = keyof typeof APP_ICONS;

View file

@ -157,6 +157,82 @@ export const APP_BRANDING: Record<AppId, AppBranding> = {
logoStroke: true,
logoStrokeWidth: 1.5,
},
mail: {
id: 'mail',
name: 'Mail',
tagline: 'Smart Email Client',
primaryColor: '#6366f1',
secondaryColor: '#818cf8',
// Envelope icon
logoPath:
'M21.75 6.75v10.5a2.25 2.25 0 01-2.25 2.25h-15a2.25 2.25 0 01-2.25-2.25V6.75m19.5 0A2.25 2.25 0 0019.5 4.5h-15a2.25 2.25 0 00-2.25 2.25m19.5 0v.243a2.25 2.25 0 01-1.07 1.916l-7.5 4.615a2.25 2.25 0 01-2.36 0L3.32 8.91a2.25 2.25 0 01-1.07-1.916V6.75',
logoViewBox: '0 0 24 24',
logoStroke: true,
logoStrokeWidth: 1.5,
},
storage: {
id: 'storage',
name: 'Storage',
tagline: 'Cloud Storage',
primaryColor: '#3b82f6',
secondaryColor: '#60a5fa',
// Cloud/storage icon
logoPath:
'M2.25 15a4.5 4.5 0 004.5 4.5H18a3.75 3.75 0 001.332-7.257 3 3 0 00-3.758-3.848 5.25 5.25 0 00-10.233 2.33A4.502 4.502 0 002.25 15z',
logoViewBox: '0 0 24 24',
logoStroke: true,
logoStrokeWidth: 1.5,
},
clock: {
id: 'clock',
name: 'Clock',
tagline: 'Clocks & Alarms',
primaryColor: '#f59e0b',
secondaryColor: '#fbbf24',
// Clock icon
logoPath: 'M12 6v6h4.5m4.5 0a9 9 0 11-18 0 9 9 0 0118 0z',
logoViewBox: '0 0 24 24',
logoStroke: true,
logoStrokeWidth: 1.5,
},
todo: {
id: 'todo',
name: 'Todo',
tagline: 'Task Management',
primaryColor: '#8b5cf6',
secondaryColor: '#a78bfa',
// Checklist icon
logoPath: 'M9 12.75L11.25 15 15 9.75M21 12a9 9 0 11-18 0 9 9 0 0118 0z',
logoViewBox: '0 0 24 24',
logoStroke: true,
logoStrokeWidth: 1.5,
},
moodlit: {
id: 'moodlit',
name: 'Moodlit',
tagline: 'Ambient Lighting',
primaryColor: '#8b5cf6',
secondaryColor: '#a78bfa',
// Lightbulb/ambient light icon
logoPath:
'M12 18v-5.25m0 0a6.01 6.01 0 001.5-.189m-1.5.189a6.01 6.01 0 01-1.5-.189m3.75 7.478a12.06 12.06 0 01-4.5 0m3.75 2.383a14.406 14.406 0 01-3 0M14.25 18v-.192c0-.983.658-1.823 1.508-2.316a7.5 7.5 0 10-7.517 0c.85.493 1.509 1.333 1.509 2.316V18',
logoViewBox: '0 0 24 24',
logoStroke: true,
logoStrokeWidth: 1.5,
},
inventory: {
id: 'inventory',
name: 'Inventory',
tagline: 'Inventory Management',
primaryColor: '#14b8a6',
secondaryColor: '#2dd4bf',
// Box/package icon
logoPath:
'M21 7.5l-9-5.25L3 7.5m18 0l-9 5.25m9-5.25v9l-9 5.25M3 7.5l9 5.25M3 7.5v9l9 5.25m0-9v9',
logoViewBox: '0 0 24 24',
logoStroke: true,
logoStrokeWidth: 1.5,
},
};
/**

View file

@ -26,6 +26,11 @@ export {
ZitareLogo,
ContactsLogo,
CalendarLogo,
StorageLogo,
TodoLogo,
MailLogo,
MoodlitLogo,
InventoryLogo,
} from './logos';
// Configuration

View file

@ -0,0 +1,13 @@
<script lang="ts">
import AppLogo from '../AppLogo.svelte';
interface Props {
size?: number;
color?: string;
class?: string;
}
let { size = 55, color, class: className = '' }: Props = $props();
</script>
<AppLogo app="inventory" {size} {color} class={className} />

View file

@ -0,0 +1,13 @@
<script lang="ts">
import AppLogo from '../AppLogo.svelte';
interface Props {
size?: number;
color?: string;
class?: string;
}
let { size = 55, color, class: className = '' }: Props = $props();
</script>
<AppLogo app="mail" {size} {color} class={className} />

View file

@ -0,0 +1,13 @@
<script lang="ts">
import AppLogo from '../AppLogo.svelte';
interface Props {
size?: number;
color?: string;
class?: string;
}
let { size = 55, color, class: className = '' }: Props = $props();
</script>
<AppLogo app="moodlit" {size} {color} class={className} />

View file

@ -0,0 +1,13 @@
<script lang="ts">
import AppLogo from '../AppLogo.svelte';
interface Props {
size?: number;
color?: string;
class?: string;
}
let { size = 55, color, class: className = '' }: Props = $props();
</script>
<AppLogo app="todo" {size} {color} class={className} />

View file

@ -14,3 +14,7 @@ export { default as ZitareLogo } from './ZitareLogo.svelte';
export { default as ContactsLogo } from './ContactsLogo.svelte';
export { default as CalendarLogo } from './CalendarLogo.svelte';
export { default as StorageLogo } from './StorageLogo.svelte';
export { default as TodoLogo } from './TodoLogo.svelte';
export { default as MailLogo } from './MailLogo.svelte';
export { default as MoodlitLogo } from './MoodlitLogo.svelte';
export { default as InventoryLogo } from './InventoryLogo.svelte';

View file

@ -229,6 +229,86 @@ export const MANA_APPS: ManaApp[] = [
comingSoon: false,
status: 'development',
},
{
id: 'clock',
name: 'Clock',
description: {
de: 'Uhren & Wecker',
en: 'Clocks & Alarms',
},
longDescription: {
de: 'Weltzeituhr, Wecker, Timer und stilvolle Uhren-Widgets in einer App.',
en: 'World clock, alarms, timers, and stylish clock widgets in one app.',
},
icon: APP_ICONS.clock,
color: '#f59e0b',
comingSoon: false,
status: 'development',
},
{
id: 'todo',
name: 'Todo',
description: {
de: 'Aufgabenverwaltung',
en: 'Task Management',
},
longDescription: {
de: 'Verwalte Aufgaben mit Projekten, Labels, Subtasks und wiederkehrenden Terminen.',
en: 'Manage tasks with projects, labels, subtasks, and recurring schedules.',
},
icon: APP_ICONS.todo,
color: '#8b5cf6',
comingSoon: false,
status: 'development',
},
{
id: 'mail',
name: 'ManaMail',
description: {
de: 'Smart Email Client',
en: 'Smart Email Client',
},
longDescription: {
de: 'Intelligenter E-Mail-Client mit KI-Zusammenfassungen, Smart Reply und Multi-Account-Unterstützung.',
en: 'Intelligent email client with AI summaries, smart reply, and multi-account support.',
},
icon: APP_ICONS.mail,
color: '#6366f1',
comingSoon: false,
status: 'development',
},
{
id: 'moodlit',
name: 'Moodlit',
description: {
de: 'Ambient Lighting & Moods',
en: 'Ambient Lighting & Moods',
},
longDescription: {
de: 'Erstelle beruhigende Lichtstimmungen mit animierten Farbverläufen für entspannte Atmosphäre.',
en: 'Create calming ambient lighting with animated color gradients for a relaxed atmosphere.',
},
icon: APP_ICONS.moodlit,
color: '#8b5cf6',
comingSoon: false,
status: 'development',
},
{
id: 'inventory',
name: 'Inventory',
description: {
de: 'Besitz-Verwaltung',
en: 'Inventory Management',
},
longDescription: {
de: 'Verwalte deinen Besitz mit Fotos, Kaufbelegen, Garantie-Dokumenten, Kategorien und Standorten.',
en: 'Manage your belongings with photos, receipts, warranty documents, categories, and locations.',
},
icon: APP_ICONS.inventory,
color: '#14b8a6',
comingSoon: false,
status: 'development',
},
];
/**
@ -308,10 +388,14 @@ export const APP_URLS: Record<AppIconId, { dev: string; prod: string }> = {
nutriphi: { dev: 'http://localhost:5182', prod: 'https://nutriphi.manacore.app' },
manacore: { dev: 'http://localhost:5173', prod: 'https://manacore.app' },
mana: { dev: 'http://localhost:5173', prod: 'https://manacore.app' },
moodlit: { dev: 'http://localhost:5183', prod: 'https://moodlit.manacore.app' },
moodlit: { dev: 'http://localhost:5182', prod: 'https://moodlit.manacore.app' },
contacts: { dev: 'http://localhost:5184', prod: 'https://contacts.manacore.app' },
calendar: { dev: 'http://localhost:5179', prod: 'https://calendar.manacore.app' },
storage: { dev: 'http://localhost:5185', prod: 'https://storage.manacore.app' },
clock: { dev: 'http://localhost:5187', prod: 'https://clock.manacore.app' },
todo: { dev: 'http://localhost:5189', prod: 'https://todo.manacore.app' },
mail: { dev: 'http://localhost:5186', prod: 'https://mail.manacore.app' },
inventory: { dev: 'http://localhost:5188', prod: 'https://inventory.manacore.app' },
};
/**

View file

@ -13,7 +13,13 @@ export type AppId =
| 'zitare'
| 'picture'
| 'contacts'
| 'calendar';
| 'calendar'
| 'storage'
| 'clock'
| 'todo'
| 'mail'
| 'moodlit'
| 'inventory';
/**
* App branding configuration