mirror of
https://github.com/Memo-2023/mana-monorepo.git
synced 2026-05-14 19:01:08 +02:00
feat(brain): add 4 Companion Brain workbench pages
Registers Mein Tag, Event Stream, Companion Chat, and Ziele as workbench apps so they can be added to scenes alongside existing modules like Todo, Calendar, etc. New workbench pages: - Mein Tag (myday): DaySnapshot overview — tasks, events, water progress, nutrition, streaks at a glance - Events (eventstream): live domain event feed with icons, labels, and timestamps — shows the system "pulse" in real-time - Companion (companion): embedded chat interface that auto-creates a conversation on first use - Ziele (goals): goal cards with progress bars, template picker for quick goal creation, pause/resume/delete Each page registered in both app-registry (workbench views) and shared-branding (app metadata, icons, descriptions, tier=guest). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
e1884cfbd1
commit
4211ce68da
7 changed files with 820 additions and 0 deletions
|
|
@ -191,6 +191,19 @@ export const APP_ICONS = {
|
|||
// Indigo→purple gradient for the nighttime/rest theme.
|
||||
`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><defs><linearGradient id="sl" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:#6366f1"/><stop offset="100%" style="stop-color:#7c3aed"/></linearGradient></defs><rect width="100" height="100" rx="22" fill="url(#sl)"/><path d="M62 24c-18 2-32 17-32 35 0 19 16 35 35 35 12 0 22-6 28-14-4 2-9 3-14 3-19 0-35-16-35-35 0-10 4-18 10-24z" fill="white" fill-opacity="0.9"/><circle cx="68" cy="28" r="2.5" fill="white" fill-opacity="0.7"/><circle cx="78" cy="38" r="1.5" fill="white" fill-opacity="0.5"/><circle cx="58" cy="18" r="1.5" fill="white" fill-opacity="0.5"/><circle cx="82" cy="24" r="2" fill="white" fill-opacity="0.6"/></svg>`
|
||||
),
|
||||
// ── Companion Brain ─────────────────────────────────
|
||||
myday: svgToDataUrl(
|
||||
`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><defs><linearGradient id="md" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:#F59E0B"/><stop offset="100%" style="stop-color:#F97316"/></linearGradient></defs><rect width="100" height="100" rx="22" fill="url(#md)"/><circle cx="50" cy="44" r="16" fill="white" fill-opacity="0.9"/><line x1="50" y1="20" x2="50" y2="26" stroke="white" stroke-width="3" stroke-linecap="round" opacity="0.7"/><line x1="50" y1="62" x2="50" y2="68" stroke="white" stroke-width="3" stroke-linecap="round" opacity="0.7"/><line x1="26" y1="44" x2="32" y2="44" stroke="white" stroke-width="3" stroke-linecap="round" opacity="0.7"/><line x1="68" y1="44" x2="74" y2="44" stroke="white" stroke-width="3" stroke-linecap="round" opacity="0.7"/><rect x="24" y="74" width="52" height="4" rx="2" fill="white" fill-opacity="0.5"/><rect x="30" y="82" width="40" height="3" rx="1.5" fill="white" fill-opacity="0.3"/></svg>`
|
||||
),
|
||||
eventstream: svgToDataUrl(
|
||||
`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><defs><linearGradient id="es" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:#6366F1"/><stop offset="100%" style="stop-color:#8B5CF6"/></linearGradient></defs><rect width="100" height="100" rx="22" fill="url(#es)"/><polyline points="20,55 35,40 50,50 65,30 80,45" fill="none" stroke="white" stroke-width="3.5" stroke-linecap="round" stroke-linejoin="round" opacity="0.9"/><circle cx="35" cy="40" r="3" fill="white"/><circle cx="50" cy="50" r="3" fill="white"/><circle cx="65" cy="30" r="3" fill="white"/><circle cx="80" cy="45" r="3" fill="white"/><rect x="24" y="66" width="52" height="3" rx="1.5" fill="white" fill-opacity="0.4"/><rect x="24" y="74" width="36" height="3" rx="1.5" fill="white" fill-opacity="0.3"/></svg>`
|
||||
),
|
||||
companion: svgToDataUrl(
|
||||
`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><defs><linearGradient id="cp" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:#8B5CF6"/><stop offset="100%" style="stop-color:#A78BFA"/></linearGradient></defs><rect width="100" height="100" rx="22" fill="url(#cp)"/><rect x="25" y="28" width="50" height="36" rx="8" fill="white" fill-opacity="0.9"/><circle cx="40" cy="44" r="4" fill="#8B5CF6"/><circle cx="60" cy="44" r="4" fill="#8B5CF6"/><rect x="40" y="52" width="20" height="3" rx="1.5" fill="#8B5CF6" opacity="0.5"/><polygon points="35,64 45,64 38,76" fill="white" fill-opacity="0.9"/></svg>`
|
||||
),
|
||||
goals: svgToDataUrl(
|
||||
`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><defs><linearGradient id="gl" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:#10B981"/><stop offset="100%" style="stop-color:#059669"/></linearGradient></defs><rect width="100" height="100" rx="22" fill="url(#gl)"/><circle cx="50" cy="46" r="24" fill="none" stroke="white" stroke-width="3.5" opacity="0.4"/><circle cx="50" cy="46" r="16" fill="none" stroke="white" stroke-width="3" opacity="0.6"/><circle cx="50" cy="46" r="8" fill="none" stroke="white" stroke-width="2.5" opacity="0.8"/><circle cx="50" cy="46" r="3" fill="white"/><rect x="28" y="78" width="44" height="4" rx="2" fill="white" fill-opacity="0.4"/></svg>`
|
||||
),
|
||||
} as const;
|
||||
|
||||
export type AppIconId = keyof typeof APP_ICONS;
|
||||
|
|
|
|||
|
|
@ -858,6 +858,65 @@ export const MANA_APPS: ManaApp[] = [
|
|||
status: 'development',
|
||||
requiredTier: 'guest',
|
||||
},
|
||||
|
||||
// ── Companion Brain ─────────────────────────────────
|
||||
|
||||
{
|
||||
id: 'myday',
|
||||
name: 'Mein Tag',
|
||||
description: { de: 'Tagesueberblick', en: 'Daily Overview' },
|
||||
longDescription: {
|
||||
de: 'Alle wichtigen Daten auf einen Blick: Tasks, Termine, Wasser, Ernaehrung, Streaks.',
|
||||
en: 'All key data at a glance: tasks, events, water, nutrition, streaks.',
|
||||
},
|
||||
icon: APP_ICONS.myday ?? '☀️',
|
||||
color: '#F59E0B',
|
||||
comingSoon: false,
|
||||
status: 'development',
|
||||
requiredTier: 'guest',
|
||||
},
|
||||
{
|
||||
id: 'eventstream',
|
||||
name: 'Events',
|
||||
description: { de: 'Live Event-Stream', en: 'Live Event Stream' },
|
||||
longDescription: {
|
||||
de: 'Echtzeit-Feed aller Aktionen ueber alle Module: Tasks, Drinks, Termine, Mahlzeiten.',
|
||||
en: 'Real-time feed of all actions across modules: tasks, drinks, events, meals.',
|
||||
},
|
||||
icon: APP_ICONS.eventstream ?? '⚡',
|
||||
color: '#6366F1',
|
||||
comingSoon: false,
|
||||
status: 'development',
|
||||
requiredTier: 'guest',
|
||||
},
|
||||
{
|
||||
id: 'companion',
|
||||
name: 'Companion',
|
||||
description: { de: 'AI Assistent', en: 'AI Assistant' },
|
||||
longDescription: {
|
||||
de: 'Dein persoenlicher AI-Begleiter. Fragt nach deinem Tag, erstellt Tasks, loggt Getraenke — alles per Chat.',
|
||||
en: 'Your personal AI companion. Ask about your day, create tasks, log drinks — all via chat.',
|
||||
},
|
||||
icon: APP_ICONS.companion ?? '🤖',
|
||||
color: '#8B5CF6',
|
||||
comingSoon: false,
|
||||
status: 'development',
|
||||
requiredTier: 'guest',
|
||||
},
|
||||
{
|
||||
id: 'goals',
|
||||
name: 'Ziele',
|
||||
description: { de: 'Ziele & Fortschritt', en: 'Goals & Progress' },
|
||||
longDescription: {
|
||||
de: 'Setze moduluebergreifende Ziele (Wasser, Tasks, Kalorien) und tracke deinen Fortschritt automatisch.',
|
||||
en: 'Set cross-module goals (water, tasks, calories) and track progress automatically.',
|
||||
},
|
||||
icon: APP_ICONS.goals ?? '🎯',
|
||||
color: '#10B981',
|
||||
comingSoon: false,
|
||||
status: 'development',
|
||||
requiredTier: 'guest',
|
||||
},
|
||||
];
|
||||
|
||||
/**
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue