Commit graph

95 commits

Author SHA1 Message Date
Till JS
97d5b13a38 feat(versioning): add semantic versioning and changesets to all apps
Assign version numbers based on app maturity: Calendar/Contacts/Todo (1.0.0),
Chat/Picture (0.3.0), 11 beta apps (0.2.0), Context/Planta/Questions (0.1.0),
Traces (0.0.1). Set up @changesets/cli for future version management.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-19 16:20:18 +01:00
Till JS
6c91805b2f feat(mukke): add offline-first iOS music player app
Mukke is a local, offline-first music player for iOS. Songs are imported
from iCloud/local files via document picker, stored on device, and played
with expo-audio including background playback and lock screen controls.

Stack: Expo SDK 55, expo-audio, expo-sqlite, expo-document-picker,
@missingcore/audio-metadata, Zustand, NativeWind, Expo Router with NativeTabs.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 13:23:58 +01:00
Till JS
402e135179 fix(matrix-mobile): add EAS Build pre-install hook for pnpm hoisted mode
pnpm's strict isolated dependency resolution prevents @babel/core from
finding babel-preset-expo and @babel/plugin-transform-react-jsx during
Metro bundling. The pre-install hook creates .npmrc with node-linker=hoisted
at the monorepo root so pnpm uses a flat node_modules on EAS Build.

Also simplified metro.config.js by removing manual monorepo watchFolders
config (handled automatically by expo/metro-config since SDK 52).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 19:08:52 +01:00
Till JS
713f4f7c33 fix(matrix-mobile): add babel-preset-expo as explicit dependency for EAS Build
pnpm strict module resolution prevents @babel/core from finding
babel-preset-expo as a transitive dependency during Metro bundling.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 11:16:38 +01:00
Till JS
50b1a07669 fix(matrix-mobile): use sdk-55 build image instead of deprecated default
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 10:49:03 +01:00
Till JS
2491440fd8 fix(matrix-mobile): migrate from expo-av to expo-audio for SDK 55 compatibility
expo-av was removed in Expo SDK 55, causing 'EXEventEmitter.h' not found
build errors. Migrated VoiceRecorder and VoiceMessage to use expo-audio.
Also changed EAS build image from "latest" (Xcode 26.2 beta) to "default".

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 10:48:20 +01:00
Till JS
b35b9fd76e fix(matrix-mobile): align dependency versions with Expo SDK 55
Downgrade react-native from 0.84.1 to 0.83.2 and fix all other
dependency version mismatches that caused iOS build failures
(bundleConfiguration, RCTDevMenuConfiguration errors).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 10:26:12 +01:00
Till JS
67843b6d72 fix(matrix-web): add missing shared-pwa package to Dockerfile
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 11:58:51 +01:00
Till JS
f784612f83 fix(matrix-web): prevent chat input bar from being hidden behind PillNavigation
Replace padding-bottom on .main-content with a flex spacer element to
properly reserve space for the fixed PillNavigation, and remove redundant
lg:pb-20 from MessageInput.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 10:30:53 +01:00
Till JS
b840a21af6 fix(matrix-mobile): block matrix-sdk-crypto-wasm in Metro resolver
The WASM crypto module uses import.meta which Hermes doesn't support.
Since E2EE is not implemented, resolve it as empty module.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 10:24:08 +01:00
Till JS
d9b3775fcc fix(matrix-mobile): add react-native-css-interop as explicit dependency
Required by NativeWind but not hoisted properly by pnpm on EAS builds.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 10:01:19 +01:00
Till JS
538833a5b9 fix(matrix-mobile): add react-native-worklets for Reanimated 4.2 compatibility
Reanimated 4.2.2 requires react-native-worklets >= 0.7.0.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 08:55:42 +01:00
Till JS
10b880b6a1 feat(matrix-mobile): upgrade to Expo SDK 55
- Upgrade all expo packages to SDK 55 (expo 55.0.5, react-native 0.84.1, react 19.2.4)
- Migrate expo-file-system to new File/Paths API (cacheDirectory removed)
- Import SharedValue directly from react-native-reanimated (Animated namespace change)
- Simplify polyfills to use globalThis instead of global
- Remove events import (no longer needed)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 08:23:56 +01:00
Till JS
a7acffd3e8 fix(matrix-mobile): use string format for pnpm version in eas.json
EAS CLI requires pnpm to be a version string, not an object.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 19:50:54 +01:00
Till JS
bc3a527bf4 chore(matrix-mobile): configure EAS Build for TestFlight and fix type errors
- Update to Expo SDK 53 compatible dependencies (from speculative SDK 55)
- Add EAS Build config (eas.json) with dev/preview/production profiles
- Generate app icons and splash screen assets
- Add NativeWind type augmentation for Pressable className callbacks
- Fix matrix-js-sdk NotificationCountType enum usage in store
- Fix Swipeable render actions type mismatch with Reanimated v3
- Exclude svelte dirs from wallpaper-generator and qr-export tsconfigs
- Remove duplicate scripts in root package.json
- Update pnpm-lock.yaml with @matrix/mobile dependencies

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 19:36:39 +01:00
Till JS
a9c05ca46b feat(matrix-mobile): add reactions, read receipts, forward & fix DM encryption
Quick wins for the mobile Matrix client:
- Populate reactions from m.reaction timeline events in store
- Display read receipt avatars next to message timestamps
- Add reaction details modal (long-press reaction to see who reacted)
- Add message forwarding with room picker modal
- Add Forward option to message long-press context menu
- Listen for Room.receipt events to update read receipts live
- Remove misleading E2EE encryption state from DM creation
  (crypto not yet implemented, was giving false sense of security)
- Fix FlatList keyExtractor for unread separator items

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 12:37:22 +01:00
Till JS
449605c8f7 chore(matrix): add dev:web and dev:mobile scripts to parent package
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 12:29:24 +01:00
Till JS
fdf44ea0b2 feat(matrix): add Expo React Native mobile client (Manalink)
Full Matrix messaging client for iOS/Android with:
- Matrix SDK integration with Zustand store and SecureStore credentials
- Expo Router file-based navigation with auth guard
- Room list, DMs, invites, and message timeline screens
- Message input with replies, reactions, editing, and redaction
- Image/file/voice message support with media upload
- Room creation, settings, and member management
- Global message search
- Push notifications with badge count
- Typing indicators and read receipts
- NativeWind (Tailwind CSS) styling with dark theme

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 12:28:45 +01:00
Till-JS
497b12c561 ♻️ refactor(shared-ui): simplify PillNavigation - remove sidebar mode
- Remove isSidebarMode and onModeChange props from PillNavigation
- Remove desktopPosition prop (always bottom now)
- Remove toolbarContent snippet support
- Simplify PillTabGroup (remove sidebar mode)
- Update navigation-simple.ts store factory
- Remove navigation position settings from GlobalSettingsSection
- Update all 12 app layouts to use simplified navigation
- Add missing @sqlite.org/sqlite-wasm dependency to calendar

BREAKING CHANGE: PillNavigation no longer supports sidebar mode.
Navigation is now always horizontal at the bottom of the screen.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-17 13:27:23 +01:00
Till-JS
31f3d80fd6 ✈️ feat(pwa): add PWA dependencies to all 18 web apps
Add @vite-pwa/sveltekit and @manacore/shared-pwa devDependencies
to enable unified PWA architecture across all web applications:
- Calendar, Chat, Clock, Contacts, LightWrite
- ManaCore, ManaDeck, Matrix, NutriPhi, Photos
- Picture, Planta, Presi, Questions, Skilltree
- Storage, Todo, Zitare

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-16 13:13:40 +01:00
Till-JS
14da5a28ef 📝 docs(auth): update organization endpoint documentation
- Add all new organization management endpoints to API table
- Add new Invitations section for invitation endpoints
- Update controller JSDoc with complete endpoint list
- Update last updated date
2026-02-16 12:57:29 +01:00
Till-JS
d86e9031bb 🐛 fix(auth): skip body parser for Stripe webhooks
The JSON body parser was consuming the request body before NestJS
could access the rawBody needed for Stripe webhook signature
verification. Now webhooks to /api/v1/webhooks/stripe skip the
body parser middleware.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-16 12:01:24 +01:00
Till-JS
b9669c3ba5 🎨 refactor(matrix): use elevation system for RoomSettingsPanel
Replace glassmorphic styling with semantic elevation classes:
- bg-surface-elevated for elevated overlays
- bg-surface for nested cards/inputs
- border-border for consistent borders
- hover:bg-surface-hover for hover states
- text-error and bg-success for semantic colors

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-16 11:45:39 +01:00
Till-JS
ea0bf67f0d 🎨 style(matrix): fix RoomSettingsPanel styling to match app theme
Replace DaisyUI classes with the custom glassmorphic theme:
- Use bg-white/80 dark:bg-black/80 with backdrop-blur
- Use border-black/10 dark:border-white/10 for borders
- Use text-foreground and text-muted-foreground for text
- Add gradient avatars matching rest of app
- Fix tab styling with proper active states

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-16 11:25:54 +01:00
Till-JS
376ba8279d feat(matrix): add widget support to Manalink client
Add the ability to view and interact with Matrix widgets in the room
settings panel. Widgets are displayed in a new "Widgets" tab with
collapsible iframes.

- Add RoomWidget type to types.ts
- Add getRoomWidgets() and buildWidgetUrl() methods to store
- Add Widgets tab to RoomSettingsPanel with iframe display
- Handle Matrix variable substitution ($matrix_user_id, $matrix_room_id)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-16 11:16:27 +01:00
Till-JS
2521a1ea73 feat(matrix): sync recent emojis across apps via mana-core-auth
- Add recentEmojis field to GlobalSettings in shared-theme
- Create userSettings store for Matrix app with JWT token management
- Exchange session cookie for JWT after SSO login
- Update MessageInput to use userSettings instead of localStorage
- Add recentEmojis support to mana-core-auth settings API

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-14 11:30:17 +01:00
Till-JS
aff2db9f9c feat(matrix): add recently used emojis section in emoji picker
- Store recently used emojis in localStorage (max 16 = 2 rows)
- Display "Häufig benutzt" section at top of emoji picker
- Most recently used emoji moves to front of list

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-14 11:08:31 +01:00
Till-JS
5e01c833ce feat(matrix): improve chat UI with WhatsApp-style input and emoji picker
- Hide empty DM/room sections in sidebar when no messages available
- Redesign message input to WhatsApp style (attachment left, emoji in field, mic right)
- Add emoji picker with native mobile fallback and desktop grid picker
- Use Phosphor icon size prop for consistent rendering

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-14 11:02:36 +01:00
Till-JS
7c0bc735b9 feat(matrix): add drag & drop file upload to chat
- Add DropZoneOverlay component with visual feedback
- Implement drag events on desktop and mobile chat pages
- Support multi-file upload (files uploaded sequentially)
- Show overlay only when a chat room is selected

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-14 10:55:13 +01:00
Till-JS
133615f2b5 feat(matrix): add swipe-back gesture for iOS PWA navigation
- Add touch-based swipe-back handler for edge swipes from left
- Show visual indicator (arrow + progress bar) during swipe
- Use history.back() for proper navigation history handling
- Only activate in 30px left edge zone to avoid scroll conflicts

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-13 19:41:23 +01:00
Till-JS
cdad7f5187 💄 fix(calendar): improve mobile UX - hide tasks by default, integrate mic in input bar
- Change sidebarCollapsed default to true (tasks hidden by default on mobile)
- Add leftAction snippet slot to InputBar component
- Move VoiceRecordButton inside InputBar instead of floating position
- Remove obsolete voice-button-wrapper styles

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-13 19:35:37 +01:00
Till-JS
e06622af30 🩹 fix(matrix): add mobile-web-app-capable meta tag 2026-02-13 12:23:01 +01:00
Till-JS
435d06a756 feat(matrix): implement WhatsApp-style mobile navigation
Mobile users now get a separate room list and chat view:
- /chat shows full-screen room list on mobile
- /chat/[roomId] shows full-screen chat with back button
- Desktop retains side-by-side layout unchanged
- Last room restore only happens on desktop
2026-02-13 12:08:23 +01:00
Till-JS
f5debee867 fix(matrix): increase FAB z-index and bottom position 2026-02-13 11:54:41 +01:00
Till-JS
49e619d68f feat(matrix): add FAB to open sidebar on mobile
Add a floating action button in the bottom-left corner that appears
when the sidebar is closed on mobile/tablet devices. Shows unread
message count badge.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-12 14:35:34 +01:00
Till-JS
8768d6276c debug(matrix): add logging for room restoration 2026-02-12 14:32:46 +01:00
Till-JS
5cd067ae6f fix(matrix): check _rooms array for last room restoration
Use _rooms.some() instead of getRoom() to check if the last selected
room exists, as the client's internal room cache may not be populated
yet at PREPARED state.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-12 14:28:57 +01:00
Till-JS
027d3d2140 feat(matrix): restore last selected chat on app load
Save the last selected room ID to localStorage and automatically
restore it when the app loads and sync is prepared.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-12 14:07:05 +01:00
Till-JS
650f4f6986 fix(matrix): add missing props to Message.svelte interface
Add isSameSender and isLastInGroup props to fix type-check errors
when passing these values from Timeline.svelte.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-12 14:02:09 +01:00
Till-JS
cdb6e25885 fix(admin): storage backend needs api/v1 prefix in controller
Storage backend doesn't use setGlobalPrefix, so controller
needs full path @Controller('api/v1/admin')

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-12 13:59:33 +01:00
Till-JS
5b6f231e1a 🐛 fix(todo,matrix): improve click targets and type safety
- todo: Make task-content button fill full height for better click target
- matrix: Fix TypeScript errors by using Boolean() for template expressions

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-10 14:53:49 +01:00
Till-JS
9d7e6c670e fix(matrix-web): change bots page to single column layout
More readable and cleaner UX with narrower max-width

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 15:46:35 +01:00
Till-JS
23852cf605 feat(matrix-web): add bots page with all 19 Matrix bots
- Add /bots route with bot overview grid
- Create BotCard component with expandable details
- Implement search and category filtering (AI, Productivity, Media, Lifestyle, Tools)
- Add bot data structure with commands, descriptions, and metadata
- Support starting chat with bots (creates DM or navigates to existing room)
- Add German and English translations
- Add robot icon to PillNavigation component

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 15:36:49 +01:00
Till-JS
352070fb2f docs(auth): add SSO documentation and test credentials
- Document cross-domain SSO with COOKIE_DOMAIN configuration
- Add production test credentials for automated testing
- Explain cookie-based SSO flow across *.mana.how subdomains

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 04:09:07 +01:00
Till-JS
dc0d425f61 🐛 fix(matrix-web): handle Matrix SSO loginToken callback
Add loginWithLoginToken function to exchange Matrix SSO loginToken for credentials.
The app layout now detects the loginToken URL parameter and completes the SSO flow.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 15:02:47 +01:00
Till-JS
a50d98c7a1 🐛 fix(matrix-bots): disable arm64 builds for all matrix bots
All matrix bots use matrix-bot-sdk which has native dependencies
(cpu-features, ssh2) that cause QEMU emulation failures during CI
arm64 builds. Build amd64 only - can run on arm64 via Rosetta.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 14:25:05 +01:00
Till-JS
c3044cb38e 🚸 ux: simplify Manalink login - SSO primary, manual login hidden
- Make SSO "Mit Mana Core anmelden" the primary login option
- Hide manual homeserver/username/password behind "Anderen Server nutzen"
- Remove broken /register link (SSO handles registration)
- Add slide-down animation for advanced section
2026-02-01 05:00:03 +01:00
Till-JS
582f7435f1 🐛 fix(matrix-web): fix icon title prop type errors
Wrap Phosphor icon components in span elements with title attribute
since IconComponentProps doesn't support title prop directly.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 04:02:35 +01:00
Till-JS
03abacc854 🐛 fix(web-apps): fix Vite type compatibility and Svelte 5 store issues
- Simplify vite.config.ts files to avoid type incompatibility errors
  caused by different @types/node versions across the monorepo
- Add missing set() method to isSidebarMode store in matrix/web

Affected apps: calendar, chat, clock, contacts, manacore, manadeck,
matrix, nutriphi, picture, planta, presi, questions, storage, todo

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 04:00:29 +01:00
Till-JS
5c8120f437 feat(manalink): add PWA support and rebrand Matrix client
- Rename "Mana Matrix" to "Manalink" (bridge metaphor)
- Add PWA manifest with app icons and shortcuts
- Configure Service Worker with Workbox caching strategies
- Add iOS/Android meta tags for installability
- Create bridge-themed SVG favicon
- Add icon generation script (sharp)

PWA features:
- Installable on iOS/Android homescreen
- Offline caching (NetworkFirst for API, CacheFirst for assets)
- App shortcuts for "New Chat"
- Auto-updating Service Worker

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 03:25:45 +01:00