Commit graph

732 commits

Author SHA1 Message Date
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
216a868127 🐛 fix(todo): await async importFromPngBytes call 2026-02-17 14:19:31 +01:00
Till-JS
845859cae4 feat(todo): add PNG import functionality to spiral page 2026-02-17 14:11:50 +01:00
Till-JS
212f4992c1 fix(manacore-web): handle contacts API response format
The Contacts API returns { contacts: Contact[], total: number }
but the service was treating it as a direct Contact[] array.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-17 13:56:47 +01:00
Till-JS
9517e1e7a9 🐛 fix(todo): add missing packages to Dockerfile for spiral-db 2026-02-17 13:48:05 +01:00
Till-JS
1d44f918c5 fix(manacore-web): add missing packages to Dockerfile
Add shared-pwa, qr-export, and wallpaper-generator packages
to the Docker build context for manacore-web.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-17 13:43:08 +01:00
Till-JS
03d90f2bda fix(lightwrite): add /api/v1 prefix to backend API calls
The backend uses a global prefix of /api/v1 but the frontend was
calling endpoints without it, causing 404 errors.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-17 13:41:12 +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
e5109da732 feat(wallpaper-generator): add device wallpaper generation package
Add new @manacore/wallpaper-generator package for creating device
wallpapers from QR codes and images.

Features:
- 30 device presets (phones, tablets, desktops)
- 3 layout types (center, corner, pattern)
- 5 gradient presets + solid color backgrounds
- Browser (Canvas) and Node.js (Sharp) renderers
- Svelte WallpaperModal UI component

Integrations:
- @manacore/qr-export: toWallpaper() function
- @manacore/spiral-db: toWallpaper() function
- QRExportModal: "Als Wallpaper" button

Also includes the full @manacore/qr-export package which was
previously untracked.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-17 12:57:43 +01:00
Till-JS
352388bb78 docs(manacore): add comprehensive Mana Values manifest
- Create central MANA_VALUES.md reference document in docs/
- Expand unsere-werte.md with full values manifest for landing page
- Add table and hr styling to mission page for proper rendering

Content includes: Vision, Mission, Three Pillars (Transparency, Fairness,
Innovation), Mana Principle with cost breakdown, Guiding Principles,
Responsibility (Ecological, Social, European Independence), and Future
Perspectives.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-17 11:08:11 +01:00
Till-JS
3b00303e7b fix(planta-backend): correct health check endpoint to /api/v1/health
- Update Dockerfile HEALTHCHECK to use /api/v1/health
- Update docker-compose.macmini.yml health check endpoint
- Increase start_period to 30s

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-17 10:55:40 +01:00
Till-JS
4c3ca3bdf6 feat(todo): integrate spiral-db visualization
Add interactive spiral database visualization to todo app:
- SpiralCanvas component for pixel-based image rendering
- Reactive Svelte 5 store for SpiralDB state management
- Full /spiral page with stats, zoom, grid toggle, emoji view
- Import existing todos into spiral format
- PNG export/download functionality
- Navigation link in app layout
2026-02-17 10:55:29 +01:00
Till-JS
c5c8907758 fix(planta-backend): add shared-drizzle-config to Dockerfile
Required by drizzle.config.ts for schema push in docker-entrypoint.sh

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-17 10:51:16 +01:00
Till-JS
d9c5554189 feat(manacore): add QR code export to my-data page
- Add @manacore/qr-export dependency to web app
- Create qr-export.ts service to collect contacts, events, todos
- Create QRExportModal.svelte with QR preview and download buttons
- Add QR-Code button to my-data settings page

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-17 10:47:24 +01:00
Till-JS
c999999456 feat(planta): add Docker deployment for planta-backend and matrix-planta-bot
- Add Dockerfile and docker-entrypoint.sh for planta-backend
- Add planta-backend service to docker-compose.macmini.yml (port 3022)
- Add matrix-planta-bot service to docker-compose.macmini.yml (port 4022)
- Configure dependencies: mana-auth, minio, redis, synapse, planta-backend

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-17 10:45:35 +01:00
Till-JS
9dc6c111d3 feat(lightwrite): add STT lyrics transcription integration
Integrate mana-stt service for automatic lyrics transcription:

- Add SttService to call mana-stt /transcribe endpoint
- Extend beats schema with transcription status fields
- Add POST /beats/:id/transcribe endpoint
- Add GET /beats/stt/available endpoint
- Update BeatUploader with auto-transcription after upload
- Show transcription progress and retry button on failure
2026-02-16 15:19:14 +01:00
Till-JS
1328d92585 🐛 fix(lightwrite): add LightWriteLogo to shared-branding
- Add lightwrite to AppId type
- Add lightwrite branding config (orange theme, music note icon)
- Create LightWriteLogo.svelte component
- Update login/register pages to use proper logo component
- Fixes type-check errors in @lightwrite/web
2026-02-16 13:56:10 +01:00
Till-JS
2236f83a58 📝 docs: add Mana earning system documentation
Document fraud-resistant mechanisms for users to earn Mana credits:
- Karma/XP system (non-monetary gamification)
- Creator rewards with social proof and fraud detection
- Community bug bounty program with manual review
- Database schemas, API endpoints, and implementation TODOs
2026-02-16 13:52:22 +01:00
Till-JS
711db9ee3e 🐛 fix(lightwrite): add missing shared packages to Dockerfile
Added shared-pwa and shared-api-client to Docker build context.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-16 13:42:32 +01:00
Till-JS
46b986101e 🐛 fix(lightwrite): add missing Tailwind CSS vite plugin
CSS was not loading because @tailwindcss/vite plugin was missing from
the vite config. This caused all Tailwind classes to be ignored.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-16 13:38:04 +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
b92b9bd2b5 feat(onboarding): add app-specific mini-onboarding system
- Create @manacore/shared-app-onboarding package with:
  - createAppOnboardingStore factory function (Svelte 5 runes)
  - MiniOnboardingModal component for select/toggle/info steps
  - TypeScript types for flexible step configuration
- Integrate into Calendar app with questions for:
  - Week start (Monday/Sunday)
  - Default view (Day/Week/Month)
  - Timezone preference (Auto/Manual)
  - Welcome tips

The mini-onboarding stores completion state in deviceSettings,
allowing per-device, per-app onboarding experiences.
2026-02-16 12:50:04 +01:00
Till-JS
6e7b671a73 feat(lightwrite): add UX improvements and beat library
Phase 1-5 implementation:
- Keyboard shortcuts (Space, arrows, M, L, +/-)
- Dark/Light mode with theme store
- Loop regions for practice sections
- Mobile responsive view with tabs
- Beat library with preview and use functionality

Backend:
- Add library_beats schema
- Add library beat endpoints (GET list, GET download-url, POST use)

Frontend:
- BeatLibrary component with preview player
- BeatUploader tabs (Upload/Library)
- Theme-aware waveform colors
- Compact mobile playback controls

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-16 12:14:13 +01:00
Till-JS
b5d7524c77 💳 feat(stripe): add SEPA Direct Debit payment option
- Add sepa_debit to payment_method_types for credit purchases
- Add sepa_debit to subscription checkout sessions
- Handle payment_intent.processing webhook for SEPA status tracking
- Add blueprint article analyzing payment options (Stripe vs LSV+/FinTS)

SEPA offers lower fees (0.8% vs 1.5%+€0.25) for DACH customers.
Payments are confirmed 3-14 days after checkout (bank processing).
2026-02-16 12:05:19 +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
bfc2737ce5 ♻️ refactor(credits): simplify credit system by removing free credits and B2B
Remove free credits system (signup bonus, daily credits) and B2B organization
credits to simplify the codebase. Credits now only come from purchases or gifts.

Changes:
- Remove freeCreditsRemaining, dailyFreeCredits, lastDailyResetAt from balances
- Remove organizationBalances and creditAllocations tables from schema
- Simplify transaction types to: purchase, usage, refund, gift
- Remove B2B endpoints from credits controller
- Remove checkDailyReset, allocateCredits, deductCredits from service
- Add redeemPendingGifts method to auto-redeem gifts on registration
- Update frontend to remove free credits display
- Add database migration for the changes
- Update all related tests to match simplified system
2026-02-16 11:54:32 +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
7747ca6a36 📝 docs(devlog): add missing devlogs for Jan 24-27 and Feb 14-15
Add 5 devlogs covering previously undocumented development days:
- 2026-01-24: Guest mode improvements for Clock & Contacts
- 2026-01-25: NutriPhi app, Prometheus monitoring, Watchtower
- 2026-01-27: Matrix self-hosting, Stats/Doc/Ollama bots
- 2026-02-14: Matrix STT bot, gift code UI, onboarding bot
- 2026-02-15: Onboarding modal polish, Calendar ViewsBar
2026-02-16 11:40:37 +01:00
Till-JS
f77edbdedd 🐳 fix(lightwrite): add shared-nestjs-setup to Dockerfile
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-16 11:31:38 +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
78c7383d54 feat(lightwrite): add Beat/Lyrics Editor app
- Add NestJS backend with project, beat, marker, lyrics, export modules
- Add SvelteKit web app with wavesurfer.js waveform visualization
- Add BPM detection using Web Audio API peak detection
- Add marker timeline for parts, hooks, bridges
- Add lyrics editor with timestamp sync
- Add export to LRC, SRT, JSON formats
- Add shared-storage support for lightwrite
- Fix mana-core-auth env loading (add dotenv before validation)
- Add lightwrite to setup-databases.sh
- Fix matrix-onboarding-bot type errors (displayName → fullName)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-16 11:13:08 +01:00
Till-JS
7b2ae94474 💄 fix(onboarding): use correct elevation layer colors for modal 2026-02-16 10:48:01 +01:00
Till-JS
d7ce61565f 💄 style(onboarding): convert fullscreen to compact modal 2026-02-16 10:41:44 +01:00
Till-JS
32f84678f9 feat(calendar): unify view switcher into new ViewsBar component
- Add new ViewsBar component with same design as InputBar
- Position ViewsBar next to InputBar (left on desktop, above on mobile)
- Remove view switcher from PillNavigation prependElements
- Remove PillViewSwitcher from CalendarToolbarContent
- Clean up unused imports and code from layout

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-16 00:07:49 +01:00
Till-JS
5ef04eabb2 🐛 fix(nutriphi-backend): change user_id from uuid to text
Better Auth generates string IDs, not UUIDs. Updated schema to match
other apps like Calendar that use text for user_id.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-14 13:44:05 +01:00
Till-JS
c8ab4bbcbe 🐛 fix(nutriphi-web): fix i18n hydration error
- Don't call $t() before i18n is loaded
- Use loading spinner instead of translated text during load
- Conditionally render title in svelte:head

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-14 13:39:35 +01:00