Commit graph

123 commits

Author SHA1 Message Date
Till JS
45ebfea59d refactor(docker): standardize all web Dockerfiles to use sveltekit-base
Migrate 17 app Dockerfiles from standalone builds (each copying 20+
packages individually) to use the shared sveltekit-base:local image.

Benefits:
- No more missing package COPY errors
- Single base image to maintain
- Consistent build pattern across all apps
- Faster builds (shared deps pre-installed)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 21:56:44 +01:00
Till JS
fb25900bff fix(docker): fix broken COPY line concatenation in all web Dockerfiles
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 21:47:12 +01:00
Till JS
5477e6eb74 fix(docker): add eslint-config + remove stale patches from all web Dockerfiles 2026-03-28 21:42:06 +01:00
Till JS
9643c9bb3d fix(docker): regenerate Dockerfiles for consolidated packages
The package consolidation (feedback, help, subscription, credits)
renamed packages but Dockerfiles still referenced old names.
Ran scripts/generate-dockerfiles.mjs to update all 16 web app
Dockerfiles with correct COPY statements.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 21:09:44 +01:00
Till JS
4aa8d870a6 chore: commit remaining changes from recent sessions
- Mana page updates across 12 apps (credit display improvements)
- Todo board view editor + view selector components
- Docker Hono server base Dockerfile
- Matrix web vite config update
- Docker compose updates
- Feedback types.ts (recovered)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 17:54:51 +01:00
Till JS
d70ab97a66 refactor(packages): consolidate 4 help packages into @manacore/help
Merged shared-help-types + shared-help-content + shared-help-ui into
@manacore/help. Deleted shared-help-mobile (0 consumers).

Updated imports in all 20 web apps.

Package count: 53 → 49

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 17:36:32 +01:00
Till JS
1aeb987cb6 refactor(packages): consolidate 3 feedback packages into @manacore/feedback
Merged shared-feedback-types + shared-feedback-service + shared-feedback-ui
into a single @manacore/feedback package. Updated imports in all 21 apps.

Before: 3 packages (types, service, ui) with cross-dependencies
After:  1 package with direct imports, no circular refs

Note: ESLint warnings from pre-existing unused vars in chat/mukke
servers are unrelated to this change.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 16:27:11 +01:00
Till JS
91116bf0f1 feat(apps): integrate shared TagStrip into all 15 remaining apps
Migrated apps with existing local tags (photos, storage, picture):
- Replace local tag stores with createTagStore wrapper
- Add shared TagStrip to layouts with tag filtering support
- Storage: new tag store, /tags management page
- Picture: migrated from Svelte 4 writables to createTagStore

New TagStrip added to 12 apps without prior tag system:
- chat, citycorners, clock, context, manadeck, manacore, matrix,
  mukke, planta, presi, questions, zitare
- Each gets: tag store, Tags toggle pill in PillNav, TagStrip overlay,
  /tags management page, fetchTags on auth ready
- All backed by central mana-core-auth Tags API

All 18 apps now have:
- Tags pill in PillNav (toggles TagStrip overlay)
- Shared TagStrip component from @manacore/shared-ui
- Tag store using createTagStore from @manacore/shared-stores
- /tags management page
- Cross-app tags via central mana-core-auth

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 21:41:14 +01:00
Till JS
cf9cbebd34 feat(apps): add missing help, feedback, profile, themes, auth pages for cross-app consistency
New pages created:
- Help: citycorners, matrix (with i18n help content)
- Feedback: citycorners, matrix, photos, planta, questions
- Profile: citycorners, mukke, photos, planta, questions, todo, zitare
- Themes: citycorners, photos, planta, questions, zitare
- Forgot-password: citycorners
- Reset-password: citycorners, picture, storage

PillNavigation updated in all 18 layouts:
- helpHref, profileHref, themesHref, feedbackHref consistently set
- Dependencies added (shared-profile-ui, shared-theme-ui, shared-feedback-ui)

All 17 standard apps now have: help, feedback, profile, themes, settings,
forgot-password, reset-password, offline pages. Matrix excluded for profile/themes/auth
(uses own Matrix protocol auth).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 14:33:34 +01:00
Till JS
40ace53867 feat(help): improve help content across all 18 apps, add shared Mana & Privacy FAQs
- Expand FAQ entries from ~5 to 8-14 per app with app-specific feature documentation
- Add comprehensive features, shortcuts, and keyboard shortcut sections
- Integrate shared getManaFAQs() in 10 apps with /mana page
- Integrate shared getPrivacyFAQs() in all 18 apps with app-specific data types
- Add unit tests for help content in all 18 apps (72 tests total)
- Tests verify: DE/EN content, matching FAQ/feature counts, unique IDs, contact info

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 14:32:23 +01:00
Till JS
1edbc190a6 feat(manalink): optimize mobile layout with bottom sheets, compact header, and touch interactions
- Add long-press on messages to open action bottom sheet (reply, forward, edit, delete, reactions)
- Compact mobile chat list header into single row (title + status + unread inline)
- Convert emoji picker and attachment menu to bottom sheets on mobile
- Shrink room avatar in header on mobile (h-8 instead of h-10)
- Hide PillNavigation and spacer in mobile room view for more chat space
- Use compact time format in room list (Min., Std., T., Wo.)
- Replace hover translate with active:scale tap feedback on room items
- Widen swipe-back edge zone (50px) and lower threshold (80px)
- Hide keyboard hint text on mobile
- Hide duplicate "Neu" button in room list on mobile
- Add slide-up animation for bottom sheets

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 18:48:49 +01:00
Till JS
3500ac5e23 fix(citycorners): replace @const with direct function calls in templates
Svelte 5 restricts {@const} to block contexts only. Use direct
isOpenNow() calls in {#if} conditions instead.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 16:05:37 +01:00
Till JS
06bf150218 refactor(manalink): improve chat layout with message grouping, hover actions, and command palette
- Group consecutive messages from same sender with tighter spacing and connected bubble corners
- Highlight error messages with red tint for better visibility
- Move action buttons (reply, emoji, forward) above message bubble, only on hover
- Replace sidebar search and permanent bottom QuickInputBar with Cmd+K command palette
- Move "Neuer Chat" button from sidebar bottom into compact header button

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 13:02:35 +01:00
Till JS
90c438e267 feat(infra): auto-generate Dockerfile COPY statements from package.json
New script generates COPY blocks between marker comments, eliminating
manual maintenance. All 17 web Dockerfiles updated with markers.
Supports --check flag for CI validation.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 22:33:07 +01:00
Till JS
61c23d5e79 fix(manacore): improve dashboard layout polish
- Remove unnecessary wrapper div in WidgetContainer
- Increase grid gap from gap-4 to gap-5 for breathing room
- Add auto-rows-fr for equal row heights
- Add min-h on widget content so empty widgets aren't tiny
- Change default layout to 3 equal columns (small)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 12:21:51 +01:00
Till JS
ff419f069a feat: add QuickInputBar to 6 more apps (mukke, matrix, manadeck, planta, photos, presi)
- Mukke: search songs by title/artist/album via libraryStore
- Matrix: search rooms/contacts, select navigates to chat
- ManaDeck: search decks by title/description
- Planta: search plants by name/species via plantsApi
- Photos: search albums and tags
- Presi: search presentation decks

All with locale-aware syntax highlighting.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 21:25:51 +01:00
Till JS
79207bf43f fix(matrix): strip react-native patches in Dockerfile before pnpm install
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 12:33:36 +01:00
Till JS
34adf50a8e fix(matrix): add eslint-config to Dockerfile, revert to explicit package copies
Copying all packages pulled in Astro deps that need git. Back to
explicit copies with eslint-config added.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 12:32:38 +01:00
Till JS
e0f7e325e0 fix(matrix): copy all packages dir in Dockerfile to fix workspace resolution
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 12:31:42 +01:00
Till JS
c1d390b7ec fix(matrix): add patches dir to Dockerfile for pnpm install
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 12:27:23 +01:00
Till JS
416e031f69 feat(matrix): add tests, E2EE warning, and dynamic homeserver config
- Make SSO loginToken homeserver configurable via VITE_MATRIX_HOMESERVER
- Add vitest setup with 14 unit tests for Matrix client functions
  (discoverHomeserver, checkHomeserver, loginWithToken)
- Show amber warning banner when E2EE is not available

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 12:18:07 +01:00
Till JS
c6d5d4840e fix(matrix): prod-readiness fixes for Manalink web app
Add error/404 page, security headers (hooks.server.ts), fix SSO to use
dynamic homeserver, make auth URL configurable via env var, remove all
console.log statements, and disable PWA devOptions in production.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 12:01:22 +01:00
Till JS
073c216652 fix(docker): add shared-error-tracking package to all 15 web Dockerfiles
The browser error tracking hooks.client.ts added earlier requires the
shared-error-tracking package to be copied and built in the Docker image.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 09:08:33 +01:00
Till JS
7cad4073d4 feat(error-tracking): add browser error tracking to all 19 SvelteKit web apps
Add @sentry/browser integration via shared-error-tracking/browser export
and hooks.client.ts in every web app for client-side error reporting to GlitchTip.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-22 19:16:21 +01:00
Till JS
9bdb997394 refactor(pwa): replace custom service workers with Vite PWA plugin and centralize offline page
Remove hand-written sw.js, offline.html, and manifest.json from todo/skilltree/zitare web apps
in favor of the Workbox-based service worker generated by @vite-pwa/sveltekit. This fixes an
issue where the custom SW could get stuck serving the offline fallback page even when the server
was reachable. Also extracts the duplicated offline page (~80 lines each across 19 apps) into a
shared OfflinePage component in @manacore/shared-ui with 3 props (appName, offlineMessage,
accentColor), reducing each app's offline route to an 8-line wrapper.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-22 18:16:43 +01:00
Till JS
fc5dfe2f0f feat: show build date/time on login screen across all apps
- Add BUILD_TIME and BUILD_HASH exports to all version.ts files
- Add getBuildDefines() to all vite.config.ts for compile-time injection
- Add buildTime prop to shared LoginPage component
- Display formatted date/time next to version number (e.g. "v1.0.0 · 21.03.2026 10:30")
- Add app.d.ts type declarations for __BUILD_TIME__ and __BUILD_HASH__

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-21 12:40:57 +01:00
Till JS
d9ccb5e31b feat(games): add whopixels hosting at whopxl.mana.how
Dockerfile, docker-compose service (port 5100), Caddy and cloudflared
routing for the WhoPixels game. PORT is now configurable via env var.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 19:57:50 +01:00
Till JS
e848fa5342 feat(mukke): display album cover art in library, playlists, and song lists
Add batch cover-url endpoint (POST /library/cover-urls) to efficiently
resolve multiple cover art presigned URLs in a single request. Integrate
cover art display across all UI surfaces: album grid, album detail header,
song list thumbnails, playlist grid, and playlist detail song list.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 20:59:45 +01:00
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