Commit graph

1398 commits

Author SHA1 Message Date
Till JS
3dc6ec13a4 fix(traces): configure EAS Build for TestFlight and fix bot-services build
Traces:
- Change bundle ID from com.memoro.locations to com.mana.traces
- Update BGTask identifiers to match new bundle ID
- Add react-native-worklets dependency for reanimated compatibility
- Configure eas.json with monorepo-optimized build settings
- Add pnpm patch for reanimated 4.1.x to accept worklets 0.7.x
- Skip auto-fingerprint on EAS (pnpm hoisted mode)
- Disable default cache paths to avoid ENOENT

Bot-services:
- Add types: ["node"] to tsconfig to prevent RN type conflicts in hoisted mode

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 13:16:38 +01:00
Till JS
d4c11920c2 Revert "test: verify pre-commit hook works"
This reverts commit abbe12e7e7.
2026-03-17 13:11:31 +01:00
Till JS
abbe12e7e7 test: verify pre-commit hook works 2026-03-17 13:11:24 +01:00
Till JS
77b82c5ce3 fix(devtools): fix pre-commit hook - add eslint-config dep, remove type-check
- Add @manacore/eslint-config as root devDependency so eslint.config.mjs
  can resolve the shared config
- Remove full monorepo type-check from pre-commit hook (too slow for
  commit-time, belongs in CI). Keep lint-staged (eslint + prettier on
  changed files).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 13:08:51 +01:00
Till JS
6e1af0d889 feat(calendar): add Playwright E2E tests for web app
Add 22 E2E tests across 5 test suites covering auth, calendar views,
settings, event CRUD, and calendar management. Tests that require the
calendar backend gracefully skip when it's not running.

Also fixes: hooks.server.ts env fallbacks, ThrottlerGuard DI error,
and auth metrics service TypeScript error.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-17 13:08:09 +01:00
Till JS
f922d2c4a1 fix(auth): return proper 403 for unverified email on login
Better Auth throws APIError("FORBIDDEN") when email is not verified,
but the signIn catch block didn't handle this case, causing a 500.
Now returns ForbiddenException with EMAIL_NOT_VERIFIED code so the
client can show the resend verification link.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 12:33:27 +01:00
Till JS
14ca0ae0b5 fix(auth): align reset-password min length to 8 characters
The ResetPasswordDto required 12 characters while registration and
change-password only required 8, causing a mismatch with frontend UI.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 12:22:56 +01:00
Till JS
7f5c70c7cd feat(calendar): production hardening - cleanup, tests, a11y, error handling
- Remove unused components (DayView, YearView, MultiDayView, context menus, swipe nav, NLP parser)
- Narrow CalendarViewType to week/month/agenda (was 14 types)
- Add global HttpExceptionFilter with structured error responses
- Add LIKE pattern injection prevention in search queries
- Add GET request deduplication in API client
- Add 48 web app tests (events API, events store, view store)
- Improve accessibility (ARIA roles, labels, live regions, grid semantics)
- Add i18n keys for a11y labels across all 5 languages

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 12:43:36 +01:00
Till JS
7bb4b1dd5b fix(ci): auto-generate CALENDAR_ENCRYPTION_KEY in prod env
Adds a step to the CD pipeline that ensures CALENDAR_ENCRYPTION_KEY
exists in .env.macmini, generating one if missing.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 09:07:52 +01:00
Till JS
2ac05ef4aa fix(picture-mobile): make patch-package non-fatal in postinstall
patch-package fails when packages are hoisted to monorepo root
(node-linker=hoisted). Making it non-fatal prevents EAS Build
failures for other apps in the workspace.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 09:01:21 +01:00
Till JS
d72dfa26b9 fix(calendar): add @nestjs/throttler as explicit dependency
The package was imported but not listed in package.json, causing
Docker builds to fail since hoisted node_modules aren't available.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 08:55:32 +01:00
Till JS
a2569eb14e fix(monorepo): add .npmrc with node-linker=hoisted for EAS Build compatibility
pnpm's default isolated dependency resolution prevents Metro/Babel from
finding transitive dependencies like babel-preset-expo and
@babel/plugin-transform-react-jsx during EAS Build. Using hoisted mode
creates a flat node_modules structure compatible with React Native tooling.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 08:50:18 +01:00
Till JS
a39e4ca7f7 fix(calendar): fix Dockerfile healthcheck ports and add ENCRYPTION_KEY to prod
- Backend/Web Dockerfiles: use PORT env var in healthcheck (was hardcoded)
- Web Dockerfile: align default port to 5012 (matching docker-compose)
- docker-compose.macmini.yml: add ENCRYPTION_KEY env var for calendar-backend

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 08:41:04 +01:00
Till JS
32c6f099b1 feat(calendar): add critical production security and performance fixes
- Add AES-256-GCM encryption for CalDAV/Apple passwords in sync service
- Add rate limiting (100 req/min) via @nestjs/throttler
- Add pagination (limit/offset) to events API with metadata response
- Add security headers (CSP, X-Frame-Options, etc.) to web app

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 08:36:45 +01:00
Till JS
bd1178edf8 feat(traces): integrate traces app into monorepo with NestJS backend and AI city guides
Restructure standalone traces app into monorepo pattern with mobile + backend + shared types.
Add NestJS backend with Drizzle ORM schema for locations, cities, places, POIs, and AI guides.
Add mobile sync layer, cities tab, and guide generation UI. Fix pre-existing type errors across
mobile codebase, matrix-mana-bot (sendDirectMessage), llm-playground, and all web auth stores
(signUp call signature).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 08:12:42 +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
37fe02e9fc fix(ci): add PATH env to CD workflow for docker access on Mac Mini runner
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 12:13:25 +01:00
Till JS
3308a78f3a docs: update Mac Mini docs with active runner status and correct SSH config
- Update runner setup guide to reflect completed installation status
- Simplify docs: runner is active, show maintenance commands instead of install steps
- Fix SSH config in server docs (user mana, local IP, add CI/CD section)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 12:10:43 +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
3096378748 fix(ci): correct Mac Mini username from till to mana
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 11:57:56 +01:00
Till JS
2059411d64 docs: add SSH setup instructions to Mac Mini runner guide
Adds Part A covering SSH key setup, SSH config for local and remote
access, and useful SSH commands for manual server management.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 11:44:39 +01:00
Till JS
e926a39818 feat(ci): add CD pipeline with self-hosted runner for Mac Mini auto-deploy
Adds a GitHub Actions workflow that detects changed services on push to
main and automatically rebuilds/restarts only the affected Docker containers
on the Mac Mini. Includes setup guide for the self-hosted runner.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 11:36:23 +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
1976c26f19 fix(monorepo): add sharp to neverBuiltDependencies for EAS builds
sharp native compilation fails on EAS build servers. It's not needed
for mobile app builds, so skip its postinstall build step.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 19:54:43 +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
a4a7032515 chore: add matrix dev scripts to root package.json
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 12:29:35 +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
a336cc2381 fix(nutriphi-bot): make I18nService optional to fix DI error
Same fix as planta-bot - I18nService injection was failing because
the service couldn't be resolved in the BotModule context despite
I18nModule having global: true.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-17 14:14:07 +01:00
Till-JS
845859cae4 feat(todo): add PNG import functionality to spiral page 2026-02-17 14:11:50 +01:00
Till-JS
5c630c3fa4 feat(nutriphi-bot): add smart meal feedback with positive aspects and improvement suggestions
- Generate automatic feedback based on nutritional values
- Show positive aspects (fiber, protein, whole grains, nuts, fruits/vegetables)
- Suggest improvements (portion size, fat content, missing nutrients)
- Detect multiple oils and suggest simplification

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-17 14:09:33 +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
bf5df284ff 🔧 chore(todo): switch todo-web to local build for spiral-db 2026-02-17 13:49:29 +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
c480231128 fix(planta-bot): make I18nService optional to diagnose DI issue
Also restore @Global() decorator to I18nModule while keeping
global: true in DynamicModule config for consistency with other
modules like CreditModule.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-17 12:51:04 +01:00