Commit graph

216 commits

Author SHA1 Message Date
Till-JS
39b8a5682f 🔧 chore: extend CORS origins and update todo theme
- Add ports 5187-5190 to CORS origins for future apps
- Change todo app default theme from amethyst to ocean

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-03 16:27:18 +01:00
Till-JS
cda300440d 🔧 chore: misc updates across contacts, mail, and shared-ui
- Contacts app improvements and fixes
- Mail IMAP sync provider updates
- Shared UI package updates
- Updated pnpm-lock.yaml

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-03 16:13:50 +01:00
Till-JS
043acf33bd 🐛 fix(clock): fix Svelte class directive syntax errors
Replace class: directives containing slashes with inline conditionals
Svelte's class: directive doesn't support Tailwind classes with /

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-03 16:12:17 +01:00
Till-JS
8dcf543ed4 🐛 fix(clock): fix i18n initialization and add missing nav icons
- Fix svelte-i18n locale loading error by waiting for locale before render
- Add isLocaleLoading check to prevent rendering before translations ready
- Export waitLocale from i18n module for proper async initialization

- Add missing icons to PillNavigation component:
  - bell, timer, stopwatch, target, globe for Clock app
  - inbox, check, checkCircle, plus for Todo app

- Update Clock navItems to use proper icons:
  - Timer: clock → timer
  - Stoppuhr: activity → stopwatch

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-03 16:11:01 +01:00
Till-JS
2126cd5d3c feat(clock): redesign timer page with better UX
- Quick timer presets now work without authentication (local timers)
- Added "Recently Used" section with localStorage persistence
- Improved visual design with gradient backgrounds and icons
- Timer cards show progress as background fill
- Better spacing and visual hierarchy
- Quick preset buttons in create modal
- Status badges for running/paused/finished timers
- Notification support when timer finishes

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-03 16:09:58 +01:00
Till-JS
604727c8f9 feat(mail): add complete Mail app with backend, web, mobile, and landing
- Backend (NestJS): Complete API with accounts, folders, emails, labels, compose, attachments, sync providers (IMAP, Gmail, Outlook), AI features (summarize, smart replies, categorization), and OAuth support
- Web (SvelteKit): Full email client UI with Svelte 5 runes, sidebar navigation, email list/detail views, compose modal, and theme support
- Mobile (Expo): React Native app with drawer navigation, email list/detail, compose screen, account management, and theme provider
- Landing (Astro): Marketing page with features, pricing, FAQ sections using shared-landing-ui components
- Storage: Added mail bucket and createMailStorage to shared-storage package
- Branding: Added MailLogo component

Note: Run `pnpm install` to install new dependencies (mailparser)

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-03 16:06:32 +01:00
Till-JS
79dd56403e 🐛 fix(clock): use 'lume' as default theme variant instead of 'amber'
'amber' doesn't exist in THEME_VARIANTS - available themes are:
lume, nature, stone, ocean

Also added proper SSR fallbacks for theme store

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-03 15:58:34 +01:00
Till-JS
180eced0d0 feat(contacts): add import/export with Google Contacts integration
- Add vCard/CSV file import with duplicate detection and merge options
- Add Google Contacts OAuth2 integration for importing from Google
- Add vCard/CSV export with format selection and filtering options
- Add connected_accounts table for OAuth token storage
- Add FileUploader, ImportPreview, GoogleImport, ExportModal components
- Add i18n translations for import/export (DE/EN)
2025-12-03 15:55:04 +01:00
Till-JS
79b629b820 feat(contacts): add import/export with Google Contacts integration
- Add vCard/CSV file import with duplicate detection and merge options
- Add Google Contacts OAuth2 integration for importing from Google
- Add vCard/CSV export with format selection and filtering options
- Add connected_accounts table for OAuth token storage
- Add FileUploader, ImportPreview, GoogleImport components
- Add ExportModal with format selection (vCard/CSV)
- Add i18n translations for import/export (DE/EN)
2025-12-03 15:54:31 +01:00
Till-JS
32eef4005d 🐛 fix(clock): update theme.svelte imports
Update import paths to use explicit .svelte extension

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-03 15:49:08 +01:00
Till-JS
eca8ca6faa 🐛 fix(clock): rename theme.ts to theme.svelte.ts for Svelte 5 runes
$state rune requires .svelte.ts extension

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-03 15:46:48 +01:00
Till-JS
2ef457ea23 feat(clock): add complete Clock app with backend, web, and landing
Features:
- World clock with timezone support and drag & drop sorting
- Alarms with repeat days, snooze, and custom sounds
- Multiple timers with start/pause/reset controls
- Stopwatch with lap times (local only)
- Pomodoro timer with customizable intervals
- Analog and digital clock widgets
- i18n support (DE, EN, FR, ES, IT)

Stack:
- Backend: NestJS 10, Drizzle ORM, PostgreSQL (port 3017)
- Web: SvelteKit 2.x, Svelte 5 runes, Tailwind CSS 4 (port 5186)
- Landing: Astro 5.x with animated clock hero (port 4323)

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-03 15:37:51 +01:00
Till-JS
110c6779a8 🐛 fix(calendar): shift FAB buttons when PillNav is in sidebar mode
FAB buttons (calendar icon and new event) are now positioned further
right when PillNav is displayed as a sidebar to avoid overlap.
2025-12-03 12:46:34 +01:00
Till-JS
80f8a0338e feat(calendar): add event detail modal and structured location fields
- Fix API response extraction for events and calendars (fixes Invalid Date)
- Convert event detail page to URL-based modal overlay (/?event=<id>)
- Add structured location fields (street, postal code, city, country)
- Add location details toggle in EventForm and QuickEventOverlay
- Add YearView component
- Improve calendar views with URL-based event navigation
- Move calendar settings to settings page
2025-12-03 12:44:39 +01:00
Till-JS
ba746fce04 Merge branch 'main' of https://github.com/Memo-2023/manacore-monorepo 2025-12-03 11:57:30 +01:00
Till-JS
e56485f21e feat(calendar): improve header UI and add quick event overlay
- Compact header styling with smaller buttons and reduced padding
- Add configurable hour filter display in header
- Add QuickEventOverlay component for fast event creation
- Add allDayDisplayMode to event metadata types
- Extend settings store with filter hours configuration

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-03 11:54:17 +01:00
Wuesteon
09477e0aae 🐛 fix(mana-games): clean dist before Astro build
Fixes race condition in CI where stale dist/renderers.mjs causes build failures.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-03 02:38:38 +01:00
Wuesteon
8cdb950cad 🐛 fix(mana-games): use openai package for Azure OpenAI client
Replace @azure/openai with openai package - AzureOpenAI class is
exported from the official openai SDK, not @azure/openai v2.
2025-12-03 02:20:09 +01:00
Wuesteon
86da45a0c8 🔧 chore: add lint-staged for pre-commit formatting
- Install lint-staged to format staged files before commit
- Update pre-commit hook to run lint-staged then type-check
- Auto-format ts, tsx, js, jsx, json, md, svelte, astro files
2025-12-03 02:04:41 +01:00
Wuesteon
ea3582d487 💄 style: apply prettier formatting across codebase
Run prettier --write to fix formatting inconsistencies in 80 files
across calendar, contacts, picture, presi, storage, zitare apps
and shared packages/documentation.
2025-12-03 02:02:09 +01:00
Wuesteon
6c9e8972a7 fix: update docker registry to ghcr.io/memo-2023 2025-12-03 01:46:16 +01:00
Wuesteon
0b539bde6b 📝 docs: add comprehensive Claude Code guidelines
Add detailed documentation for Claude Code in .claude/ directory:
- code-style.md: formatting, naming, linting rules
- database.md: Drizzle ORM patterns and schema conventions
- testing.md: Jest/Vitest patterns with mock factories
- nestjs-backend.md: controller, service, DTO patterns
- error-handling.md: Go-style Result types and error codes
- sveltekit-web.md: Svelte 5 runes and store patterns
- expo-mobile.md: React Native with NativeWind
- authentication.md: Mana Core Auth integration

Update root CLAUDE.md to reference new guidelines
2025-12-03 00:44:49 +01:00
Till-JS
482509a574 🐛 fix(theme): add ShadCN-style CSS variable aliases for shared components
- Add aliases without color- prefix (--background, --foreground, --primary, etc.)
- Fix Mana/Subscription page styling across all apps
- Remove conflicting legacy aliases from contacts app.css
- Update contacts mana page to use toast instead of alert

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-03 00:20:49 +01:00
Till-JS
b01153ba87 🐛 fix(calendar): improve drag & drop and resize behavior
- Add hasMoved state to prevent accidental updates on simple clicks
- Only persist changes when actual drag/resize movement occurred
- Add Escape key handler to cancel drag/resize operations
- Improve visual feedback during resize with dashed outline
- Fix click handler to properly ignore clicks after drag/resize

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-03 00:14:47 +01:00
Till-JS
0e5d923faf feat(auth): add centralized user settings synced across all apps
- Add settings module to mana-core-auth with REST API endpoints
- Create user_settings table with globalSettings and appOverrides (JSONB)
- Add createUserSettingsStore() factory in shared-theme package
- Integrate user settings in all app layouts (calendar, chat, contacts, etc.)
- Support for nav position, theme, locale settings with per-app overrides
- Optimistic updates with localStorage caching for offline support
- Add comprehensive documentation in docs/USER_SETTINGS.md

API Endpoints:
- GET /api/v1/settings - Get all user settings
- PATCH /api/v1/settings/global - Update global settings
- PATCH /api/v1/settings/app/:appId - Set app override
- DELETE /api/v1/settings/app/:appId - Remove app override

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-03 00:09:47 +01:00
Wuesteon
2154c3b37a 🔧 chore: add Husky pre-commit hook for type-check
Set up Husky to run pnpm run type-check before every commit,
preventing commits with TypeScript errors.
2025-12-03 00:08:06 +01:00
Wuesteon
2635281fd4 feat(storage): add shared package types and configuration
Add missing tsconfig.json and source files for @storage/shared package
to fix type-check failures. Includes type definitions for StorageFile,
StorageFolder, FileVersion, Share, Tag, and FileTag interfaces.
2025-12-03 00:04:35 +01:00
Till-JS
0f2aae631d feat(calendar): add drag & drop and page-level scrolling
- Add drag & drop for events in all 6 calendar views (Day, Week, Month, 5/10/14-day)
- Add resize handles for adjusting event start/end times
- Remove internal scroll containers for page-level scrolling
- Add 15-minute snap-to-grid for time adjustments
- Add view type selector in CalendarHeader
- Add sidebar collapsed state management
2025-12-02 23:42:03 +01:00
Till-JS
9d8c1849ee feat(calendar): add comprehensive settings and profile pages
- Add settings store with localStorage persistence for user preferences
- Implement language selection (DE, EN, FR, ES, IT) in settings
- Add calendar view settings: default view, week start day, time format
- Add weekday-only filter and week number display options
- Add event defaults: duration and reminder settings
- Integrate settings into WeekView, MonthView, MultiDayView components
- Add profile page to calendar and contacts web apps
- Support drag & drop and resize for events in WeekView

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-02 23:18:49 +01:00
Till-JS
02c82c7547 feat(a11y): add accessibility settings and theme improvements
Add comprehensive accessibility support across shared packages:
- A11y store with contrast, colorblind mode, and reduce motion settings
- A11yQuickToggles and A11ySettings UI components
- PillNavigation and PillDropdown components in shared-ui
- Calendar app updates to integrate new theme/a11y features

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-02 22:56:09 +01:00
Till-JS
6cc9f70a4a feat(contacts): add archive, favorites, groups, and feedback pages
- Add feedback service and route
- Add archive page for deleted contacts
- Add favorites page for starred contacts
- Add groups page for contact organization
- Add mana integration page

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-02 14:42:01 +01:00
Till-JS
fa13f98a65 🔧 fix(auth): skip migrations in Docker entrypoint
- Skip automatic migrations in Docker - tables are managed via 'pnpm db:push' locally
- Simplifies startup and avoids migration conflicts

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-02 14:41:34 +01:00
Till-JS
19500e8467 feat(storage): add Storage app scaffolding and root config
- Add storage app directory structure
- Add storage dev scripts to root package.json
- Add storage backend and web env generation in generate-env.mjs
- Update COMMANDS.md with calendar app reference

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-02 14:41:15 +01:00
Till-JS
1a88dec0a5 🔧 fix(shared-storage): update build configuration for CommonJS
- Change module from ESNext to CommonJS for NestJS compatibility
- Update moduleResolution from bundler to node
- Add build script and dist exports to package.json
- Remove .js extensions from imports for better compatibility

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-02 14:40:55 +01:00
Till-JS
2a040102b6 feat(branding): add Calendar and Storage app branding
- Add calendar and storage SVG icons to app-icons.ts
- Add CalendarLogo.svelte and StorageLogo.svelte components
- Add Calendar and Storage to MANA_APPS with descriptions
- Add APP_URLS entries for calendar and storage
- Update AppId type to include 'calendar'
- Fix Picture port from 5179 to 5185

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-02 14:40:30 +01:00
Till-JS
fb9945c0f7 🔧 fix(chat): update schema for Better Auth nanoid user IDs
- Change userId columns from uuid to text to support Better Auth's nanoid format
- Update conversations, spaces, space_members, templates, usage_logs schemas
- Fix web API endpoint path from /api to /api/v1

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-02 14:40:02 +01:00
Till-JS
3799fe1b54 🎨 style(calendar): improve UI components and integrate shared-auth-ui
- Refactor CSS from @layer to plain CSS for guaranteed inclusion
- Add Svelte 5 runes safety checks in calendars/events stores
- Integrate shared-auth-ui pages with CalendarLogo and translations
- Add AppSlider and LanguageSelector components
- Add feedback service and mana route
- Add auth route detection in layout to skip navigation on auth pages

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-02 14:39:23 +01:00
Till-JS
a00a02a822 🎨 style(contacts): fix CSS variables and add modern contact pages
- Fix CSS variable names to match shared-tailwind themes
  - --primary → --color-primary
  - --background → --color-background
  - --card → --color-surface
  - etc.
- Add new contact page with modern design
  - Live avatar preview with initials
  - Section-based form with icons
  - Input fields with inline icons
- Add contact detail page with view/edit modes
  - Quick actions (call, email, message)
  - Detail cards for contact info, work, address, notes
  - Favorite toggle button
- Update central test user credentials (t@t.de)
- Add port 5184 to CORS origins for contacts web app

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-02 13:50:19 +01:00
Till-JS
45d70150f4 feat(contacts): add complete contacts app with backend, web, and landing
- Add NestJS backend with CRUD endpoints for contacts, groups, tags, notes, and activities
- Add SvelteKit web app with auth pages (login, register, forgot-password)
- Add Astro landing page
- Add ContactsLogo to shared-branding package
- Add contacts to MANA_APPS configuration
- Update shared-storage with contacts bucket support
- Update environment scripts and Docker configuration for contacts database
- Integrate mana-core-auth for JWT authentication
- Follow existing app architecture patterns (route groups, PillNavigation)

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-02 13:17:42 +01:00
Till-JS
00176a25e0 feat(calendar): add complete calendar app with backend, web, and landing
- NestJS backend with Drizzle ORM (port 3014)
  - Calendar, Event, Reminder, Share, Sync modules
  - Full CRUD API endpoints
  - PostgreSQL database schema (5 tables)

- SvelteKit web app with Svelte 5 runes (port 5179)
  - Week, Day, Month views
  - Agenda list view
  - Event management (create, edit, delete)
  - Calendar management
  - Auth integration with Mana Core Auth
  - i18n support (DE, EN, FR, ES, IT)

- Astro landing page (port 4322)
  - Hero, Features, Pricing sections
  - Responsive dark theme design

- @calendar/shared package
  - TypeScript types for Calendar, Event, Reminder, Share
  - RFC 5545 RRULE support for recurring events

- Full documentation (CLAUDE.md, README.md)
2025-12-02 13:15:04 +01:00
Till-JS
623b1a21b1 feat(landing): add Presi landing page and improve Zitare landing
- Create complete Presi landing page with Astro + Tailwind
- Orange theme (#f97316) matching Presi branding
- Use shared-landing-ui components (HeroSection, FeatureSection, FAQSection, CTASection)
- Add "How it works" section with 4-step guide
- Fix Zitare landing styling with proper Tailwind config
- Add CSS custom properties for consistent theming
- Add deploy:landing:presi script and update deploy:landing:all
- Add dev:presi:landing script

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-02 13:06:38 +01:00
Till-JS
29aaaec4fa ♻️ refactor(storage): unify bucket names and add calendar/contacts
- Rename buckets to consistent {project}-storage pattern
- Add calendar-storage and contacts-storage buckets
- Add createCalendarStorage() and createContactsStorage() factory functions
- Update docker-compose and documentation
2025-12-02 12:59:22 +01:00
Till-JS
ef8fd6a101 feat(landing): add Cloudflare Pages deployment setup
- Add wrangler.toml for all 5 landing pages (chat, picture, manacore, manadeck, zitare)
- Add wrangler CLI as dev dependency
- Add deploy scripts: pnpm deploy:landing:{project} and pnpm deploy:landing:all
- Add Cloudflare helper scripts: cf:login, cf:projects:list, cf:projects:create
- Document Cloudflare Pages setup in CLAUDE.md

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-02 12:35:54 +01:00
Wuesteon
4cc1ad2c92 🔧 chore: fix turbo infinite recursion and update dependencies
- Remove recursive `turbo run type-check` from parent packages (chat, zitare, voxel-lava)
- Increase turbo concurrency from 2 to 5
- Add documentation for turbo anti-pattern in CLAUDE.md
- Skip type-check temporarily for apps with pending migrations
- Update picture mobile stores to use camelCase API response properties
- Add shared-nestjs-auth dependency to chat and picture backends
- Clean up unused design-token files from picture package
- Update shared-landing-ui components and feedback service config
2025-12-02 02:43:47 +01:00
Wuesteon
2cfa09c84d feat(storage): add MinIO local storage and @manacore/shared-storage package
- Add MinIO service to docker-compose.dev.yml with auto-bucket initialization
- Create @manacore/shared-storage package with S3-compatible client
- Add factory functions for each project (Picture, Chat, ManaDeck, etc.)
- Include file utilities (generateFileKey, getContentType, validators)
- Update environment variables for S3/MinIO configuration
- Document storage architecture in CLAUDE.md

Local dev uses MinIO, production will use Hetzner Object Storage.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-02 01:00:42 +01:00
Wuesteon
eb173217c1 fix(ci): remove nested turbo.json from presi
Root turbo.json already handles all tasks

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-02 00:03:31 +01:00
Wuesteon
d916845c98 fix(ci): filter shared packages by directory not package name
Changed from @manacore/* to ./packages/* to avoid matching app packages

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-01 23:54:51 +01:00
Wuesteon
d5af7eb9fe fix(ci): fix YAML syntax error in ci-main.yml
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-01 23:50:39 +01:00
Wuesteon
3f57b842d8 fix(ci): fix test-config and upgrade vitest to v4
- Remove deprecated watchExclude from vitest configs
- Upgrade vitest to 4.x and @vitest/coverage-v8 to match
- Upgrade @vitest/ui to 4.x

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-01 23:37:47 +01:00
Wuesteon
6748da8bbf chore(ci): remove Codecov integration
- Remove codecov-action steps from test.yml and test-coverage.yml
- Update coverage summary to remove Codecov references
- Coverage still generated locally, just not uploaded externally

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-01 23:26:58 +01:00