Final cleanup of references missed in previous rename commits: - Dockerfiles: PUBLIC_MANA_CORE_AUTH_URL → PUBLIC_MANA_AUTH_URL - Go modules: github.com/manacore/* → github.com/mana/* (7 go.mod files) - launchd plists: com.manacore.* → com.mana.* (14 files renamed + content) - Image assets: *_Manacore_AI_Credits* → *_Mana_AI_Credits* (11 files) - .env.example files: ManaCore brand strings → Mana - .prettierignore: stale apps/manacore/* paths → apps/mana/* - Markdown docs (CLAUDE.md, /docs/*): mana-core-auth → mana-auth, etc. Excluded from rename: .claude/, devlog/, manascore/ (historical content), client testimonials, blueprints, npm package refs (@mana-core/*). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
9 KiB
Shared Packages Roadmap
This document outlines the plan to unify common code across all web apps in the monorepo.
Current Shared Packages
@mana/shared-icons- Unified Phosphor Icons for all web apps@mana/shared-ui- Unified UI Components (Text, Button, Badge, Toggle, Input, Modal, Card, Navigation, Forms)@mana/shared-auth- Unified Auth Logic (Supabase client, token management)@mana/shared-auth-ui- Unified Auth UI (LoginPage, RegisterPage, OAuth buttons)@mana/shared-tailwind- Unified Tailwind Config (HSL colors, preset, themes.css)@mana/shared-theme- Unified Theme Store (Svelte 5, 4 variants, light/dark/system)@mana/shared-theme-ui- Theme UI Components (ThemeToggle, ThemeSelector)@mana/shared-utils- Unified Utilities (formatting, validation, async, date, keyboard)@mana/shared-types- Unified TypeScript Types@mana/shared-i18n- Unified i18n (languages, locale detection, translations)@mana/shared-config- Unified Config (env validation)@mana/shared-branding- NEW Unified App Branding (logos, colors, app config)@mana/shared-subscription-types- Subscription Type Definitions@mana/shared-subscription-ui- Subscription UI Components
Recently Completed (2025-11-24)
App Migration to Shared Packages
All web apps now use the shared packages consistently:
Logo Components - Migrated to @mana/shared-branding:
memoro/apps/web/src/lib/components/MemoroLogo.svelte→ usesAppLogocards/apps/web/src/lib/components/CardsLogo.svelte→ usesAppLogomana/apps/web/src/lib/components/ManaLogo.svelte→ usesAppLogomaerchenzauber/apps/web/src/lib/components/StorytellerLogo.svelte→ usesAppLogo
Formatter Functions - Migrated to @mana/shared-utils:
memoro/apps/web/src/lib/components/memo/AdditionalRecordings.svelte→ usesformatDurationFromMs,formatFileSizememoro/apps/web/src/lib/components/RecordingButton.svelte→ usesformatDurationmemoro/apps/web/src/lib/components/statistics/OverviewCard.svelte→ usesformatDurationWithUnitsmemoro/apps/web/src/lib/components/statistics/InsightsCard.svelte→ usesformatDurationWithUnitsmemoro/apps/web/src/lib/components/statistics/ProductivityCard.svelte→ usesformatDurationWithUnits
Planned Shared Packages
1. Shared UI Components (@mana/shared-ui)
Status: Done Priority: High Estimated LOC Savings: 500-800 per app
Components to unify:
Button.svelte- Primary, secondary, ghost, danger variantsInput.svelte- Text input with label, error statesText.svelte- Typography component with variantsModal.svelte- Overlay modal with header, body, footer slotsSpinner.svelte- Loading indicatorToast.svelte- Notification toastsBadge.svelte- Status badgesCard.svelte- Content containerDropdown.svelte- Select/dropdown menus
Apps using these:
- Mana Web
- Memoro Web
- Maerchenzauber Web
- Cards Web
2. Shared Auth (@mana/shared-auth)
Status: Done Priority: High Estimated LOC Savings: 800-1200 per app
Modules to unify:
tokenManager.ts- JWT token storage, refresh, validationauthService.ts- Login, logout, register, password resetsupabaseClient.ts- Authenticated Supabase client factoryauthStore.ts- Svelte store for auth stateauthGuard.ts- Route protection utilities
Considerations:
- Each app may have different Supabase projects
- Token storage strategy (localStorage vs cookies)
- OAuth providers per app
3. Shared Tailwind Config (@mana/shared-tailwind)
Status: Done Priority: High Estimated Benefit: Consistent branding, easier theme updates
Config unified:
- Color palette (primary, secondary, accent colors)
- Theme variants (Lume, Nature, Stone, Ocean) with light/dark modes
- Typography scale (font sizes, line heights)
- Border radius tokens
- Shadow tokens
- CSS variable-based theming system
Structure:
packages/shared-tailwind/
├── package.json
├── src/
│ ├── index.js # Main exports
│ ├── preset.js # Tailwind preset with all tokens
│ ├── colors.js # Color definitions (4 themes)
│ ├── theme-variables.css # CSS variables for themes
│ └── components.css # Component utilities
Apps using this:
- Memoro Web (full migration with theme.css + components.css)
- Mana Web (preset only, keeps local colors)
- Cards Web (colors import, HSL-based system)
- Maerchenzauber Web (dependency added)
4. Shared Utilities (@mana/shared-utils)
Status: Done Priority: Medium Estimated LOC Savings: 200-400 per app
Utilities included:
date.ts- formatDate, formatRelativeTime, toISOStringformat.ts- formatDuration, formatFileSize, formatNumber, formatCurrency, formatPercentvalidation.ts- isValidEmail, isValidUrl, isValidPhone, validatePassword, isValidUuidstring.ts- truncate, capitalize, generateId, slugifyasync.ts- sleep, retry, debounce
5. Shared Types (@mana/shared-types)
Status: Planned Priority: Medium Estimated Benefit: Type safety across packages
Types to unify:
User- Common user typeApiResponse<T>- Standard API response wrapperPaginatedResponse<T>- Pagination typesTheme- Theme configuration typesLocale- i18n locale types
Note: App-specific database types (Supabase generated) should remain in each app.
6. Shared i18n (@mana/shared-i18n)
Status: Done Priority: Medium Estimated LOC Savings: 100-300 per app
Modules to unify:
i18n.ts- svelte-i18n setup and initializationdetectLocale.ts- Browser language detection- Common translations:
- Error messages
- UI labels (Save, Cancel, Delete, etc.)
- Date/time formats
- Validation messages
Structure:
packages/shared-i18n/
├── package.json
├── src/
│ ├── index.ts
│ ├── setup.ts
│ ├── detectLocale.ts
│ └── translations/
│ ├── common/
│ │ ├── en.json
│ │ └── de.json
│ └── errors/
│ ├── en.json
│ └── de.json
7. Shared Config (@mana/shared-config)
Status: Planned Priority: Low Estimated Benefit: Consistent env handling
Config to unify:
- Environment variable validation (Zod schemas)
- API endpoint construction
- Feature flag utilities
- App metadata (version, name, etc.)
Implementation Order
-
Phase 1 (Completed)
@mana/shared-icons@mana/shared-ui
-
Phase 2 (Completed)
@mana/shared-auth@mana/shared-auth-ui@mana/shared-tailwind
-
Phase 3 (Completed)
@mana/shared-utils@mana/shared-types
-
Phase 4 (Completed)
@mana/shared-i18n@mana/shared-config
Guidelines for Shared Packages
Package Structure
packages/shared-{name}/
├── package.json
├── tsconfig.json
├── src/
│ ├── index.ts # Public exports
│ └── ...
└── README.md
Package.json Template
{
"name": "@mana/shared-{name}",
"version": "0.1.0",
"private": true,
"type": "module",
"main": "./src/index.ts",
"types": "./src/index.ts",
"exports": {
".": "./src/index.ts"
},
"peerDependencies": {
"svelte": "^5.0.0"
}
}
Best Practices
- Keep it minimal - Only share truly common code
- Document props - Use TypeScript interfaces with JSDoc
- Version carefully - Coordinate updates across apps
- Test thoroughly - Changes affect all apps
- Avoid breaking changes - Use deprecation warnings
Package Details
@mana/shared-branding
Centralized branding configuration for all Mana ecosystem apps.
Exports:
AppLogo- SVG logo component that renders app-specific logoAppLogoWithName- Logo with app name and taglineManaIcon- Generic Mana icon componentAPP_BRANDING- Configuration object with colors, names, taglinesAppIdtype - Union type of all app IDs
Usage:
<script>
import { AppLogo } from '@mana/shared-branding';
</script>
<AppLogo app="memoro" size={32} />
<AppLogo app="mana" size={55} color="#fff" />
@mana/shared-utils/format
Duration and formatting utilities.
Exports:
formatDuration(seconds)- ReturnsMM:SSorHH:MM:SSformatDurationFromMs(ms)- Converts milliseconds firstformatDurationWithUnits(seconds, locale)- Returns2h 30mstyleformatDurationHumanReadable(seconds, locale)- Returns2 Stunden 30 MinutenformatFileSize(bytes)- Returns1.5 MBformatNumber(num, locale)- Locale-aware number formattingformatCurrency(amount, currency, locale)- Currency formattingformatPercent(value, decimals, locale)- Percentage formatting
Notes
- Created: 2025-11-24
- Last Updated: 2025-11-24
- Author: Claude Code