Commit graph

126 commits

Author SHA1 Message Date
Till JS
bd7129abd1 fix(glitchtip): use correct DSN format without hyphens in keys
Sentry SDK v9 rejects UUID-formatted keys with hyphens. Use the compact
hex format returned by GlitchTip's get_dsn() method.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 15:51:54 +01:00
Till JS
08d19ab7ac feat(error-tracking): add GLITCHTIP_DSN to calendar, contacts, todo backends
Configures error tracking DSNs in docker-compose.macmini.yml for production:
- Calendar: project 1
- Todo: project 3
- Contacts: project 2

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 15:03:24 +01:00
Till JS
87c61f4363 fix(glitchtip): add REDIS_URL with auth to GlitchTip containers
Redis requires authentication - GlitchTip needs REDIS_URL with password
for cache operations (session, metrics cache clearing).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 14:57:50 +01:00
Till JS
54c1326c14 fix(mukke): lint fixes, rate limiting, DB indexes, and prod config
- Add ThrottlerModule rate limiting to backend
- Add DB indexes on userId, songId, playlistId columns
- Lint/formatter fixes from pre-commit hooks
- Add GlitchTip error tracking to docker-compose.macmini.yml
- Add glitchtip.mana.how to cloudflared tunnel config

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 12:54:49 +01:00
Till JS
7a56699d45 feat(mukke): rename LightWrite to Mukke and add music library, player, playlists
Combines LightWrite (beat/lyrics editor) and Mukke (iOS music player) into
a single web-based music workspace app. Archives the old Mukke mobile app.

- Rename: @lightwrite/* → @mukke/*, all branding, configs, Dockerfiles
- New DB schemas: songs, playlists, playlist_songs + songId FK on projects
- New backend modules: SongModule, PlaylistModule, LibraryModule
- New web: app shell with sidebar, library (songs/albums/artists/genres),
  web player (queue/shuffle/repeat/MediaSession), playlists, search,
  upload, dashboard, album/artist/genre detail pages
- Auth: add forgot-password + reset-password pages, extend auth store
- Tests: 40 backend unit tests (song, playlist, library services)
- Config: env generation, MinIO bucket, docker-compose prod, cloudflare
- Docs: update CLAUDE.md, auth guidelines with SvelteKit checklist

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 09:55:56 +01:00
Till JS
5d86753e47 fix(contacts): add missing PUBLIC_TODO_BACKEND_URL to contacts-web production config
Without this variable, the contacts web app falls back to localhost:3031 for todo integration.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-18 16:55:52 +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
bf5df284ff 🔧 chore(todo): switch todo-web to local build for spiral-db 2026-02-17 13:49:29 +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
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
d6303e4998 feat(storage): add public endpoint support for presigned URLs
When services run in Docker with internal endpoints (e.g., http://minio:9000),
presigned URLs are inaccessible from browsers. This adds S3_PUBLIC_ENDPOINT
support to generate presigned URLs using a publicly accessible endpoint
(e.g., https://minio.mana.how) while keeping internal operations on the
Docker network.

Changes:
- Add publicEndpoint to StorageConfig type
- Create separate S3Client for presigned URL generation
- Add S3_PUBLIC_ENDPOINT to factory configuration
- Configure lightwrite-backend with public MinIO endpoint

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-16 15:35:18 +01:00
Till-JS
f5a6fda0fa 🔧 chore(auth): add missing apps to CORS origins
Add lightwrite, zitare, questions, planta, manadeck, picture to
mana-core-auth CORS_ORIGINS to allow auth requests from these apps.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-16 13:58:07 +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
2e37925cb0 🔧 chore: add STT_API_KEY to all Matrix bots using STT
- Add STT_API_KEY to matrix-mana-bot and matrix-clock-bot
- Fix STT_URL port (3020/3021 → 3026) for consistency

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-16 00:12:09 +01:00
Till-JS
aabc4a6db8 🔧 chore: build matrix-mana-bot locally for quick fixes 2026-02-14 14:31:45 +01:00
Till-JS
c7039356f1 feat(docker): add matrix-stt-bot to Mac Mini deployment
- Add STT bot container config on port 4021
- Uses mana-stt service via host.docker.internal:3026

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-14 14:31:01 +01:00
Till-JS
c13c313886 🐛 fix(gifts): reorder controller routes to fix 'me/*' matching
NestJS matches routes in declaration order. The dynamic :code route was
matching before me/created and me/received, treating 'me' as a gift code.
Moved specific routes before the dynamic parameter route.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-14 12:38:23 +01:00
Till-JS
07ac2e845e 🔧 fix(stats-bot): add Redis and Matrix-SSO-Link for auto-login
- Add REDIS_HOST, REDIS_PASSWORD for session storage
- Add MANA_CORE_AUTH_URL, MANA_CORE_SERVICE_KEY for Matrix-SSO-Link
- Add redis dependency to depends_on
- Use local image build instead of GHCR

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-14 12:31:35 +01:00
Till-JS
4b950b7083 feat(tts): add de_kerstin female German voice and set as default
- Download and configure Kerstin Piper voice (63MB, local)
- Update piper_service.py to support multiple voice models
- Set de_kerstin as default voice for TTS bot
- Update help text with new voice options

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-14 12:16:58 +01:00
Till-JS
acd8d02ec8 🔧 fix(clock-bot): use local build with SSO-Link auth
- Switch from GHCR image to local build
- Add MANA_CORE_AUTH_URL, MANA_CORE_SERVICE_KEY for SSO-Link
- Add Redis config for session storage
- Add dependencies on mana-auth and redis

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-14 11:57:53 +01:00
Till-JS
0099e1eebc chore(matrix-tts-bot): set German (de_thorsten) as default voice
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-14 11:55:47 +01:00
Till-JS
c698318c91 chore(deploy): add PROMETHEUS_URL to stats-bot config
Connect stats-bot to VictoriaMetrics for infrastructure
monitoring commands (!system, !services, !traffic, !db, !growth)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-14 11:25:18 +01:00
Till-JS
e013384d29 chore(docker): build matrix-tts-bot locally instead of from registry
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-14 11:04:44 +01:00
Till-JS
1c9c2301a5 fix(matrix-tts-bot): add API key authentication for mana-tts service
- Add TTS_API_KEY config option to configuration.ts
- Send X-API-Key header in TtsService requests
- Update docker-compose.macmini.yml with TTS_INTERNAL_API_KEY env var
- Update .env.example and CLAUDE.md documentation

The mana-tts service requires authentication, but the TTS bot was not
sending the required X-API-Key header, causing 401 errors.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-14 10:59:08 +01:00
Till-JS
405084b52d 🔧 fix(skilltree): change web port to 5020 (5018 used by zitare) 2026-02-13 23:14:38 +01:00
Till-JS
1e025b7e72 feat(skilltree): enable web deployment
Fix Dockerfile to include all required shared packages and add
health endpoint for Docker healthcheck. Enable skilltree-web
service in docker-compose.macmini.yml.
2026-02-13 23:05:08 +01:00
Till-JS
0015bd0892 🔧 chore(docker): build matrix-todo-bot locally on Mac Mini 2026-02-13 22:14:06 +01:00
Till-JS
bba696e241 chore(docker): use local build for matrix-calendar-bot 2026-02-13 19:52:54 +01:00
Till-JS
ad8d5c3bc0 🔧 chore(zitare): change zitare-web port from 5012 to 5018
Port 5012 is used by calendar-web

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-13 19:40:50 +01:00
Till-JS
b6bd07beca 🐛 fix(docker): correct zitare-backend health check path
Changed /api/health to /health in docker-compose.macmini.yml

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-13 19:39:45 +01:00
Till-JS
533bd90093 🚀 feat(zitare-web): add Docker deployment infrastructure
- Add Dockerfile for production build
- Add docker-entrypoint.sh for runtime config
- Add hooks.server.ts for client-side env injection
- Add zitare-web service to docker-compose.macmini.yml
  - Port 5012
  - Depends on zitare-backend
  - Health check on /health endpoint
2026-02-13 14:49:26 +01:00
Till-JS
c54ff859d6 🚀 feat(zitare): add Docker deployment infrastructure
- Add Dockerfile for zitare-backend (multi-stage build, port 3007)
- Add docker-entrypoint.sh for database setup
- Add zitare-backend service to docker-compose.macmini.yml
- Update matrix-zitare-bot to depend on zitare-backend
- Add zitare-backend to CI workflow (change detection + build job)
2026-02-13 13:49:15 +01:00
Till-JS
7d450aa2a8 feat(bot-services): add Matrix-SSO-Link for persistent login
After successful !login, the bot now stores a persistent link between
the Matrix user ID and the Mana account in mana-core-auth. This allows
the bot to auto-authenticate users in the future without requiring
another !login command.

Changes:
- Add createMatrixUserLink() method to SessionService
- Call link creation after successful login
- Add MANA_CORE_SERVICE_KEY to todo and calendar bot docker config

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-13 13:42:07 +01:00
Till-JS
9924eb545a 🔧 fix(docker): add backend URLs to matrix todo and calendar bots
- Add TODO_BACKEND_URL, CALENDAR_BACKEND_URL environment variables
- Add MANA_CORE_AUTH_URL for authentication
- Add Redis connection (REDIS_HOST, REDIS_PASSWORD)
- Add depends_on for respective backends

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-13 12:23:30 +01:00
Till-JS
210969a67f 🔧 chore(docker): build mana-web locally on Mac Mini
Switch manacore-web from GHCR image to local build for faster
deployment of frontend changes (self-service /settings/my-data).

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-13 12:04:30 +01:00
Till-JS
cb08931330 🔧 chore(docker): build presi-backend locally on Mac Mini
Changed from GHCR image to local build to pick up admin
controller prefix fix.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-12 14:09:46 +01:00
Till-JS
acc8de36ee feat(monitoring): add alerting stack and maintenance scripts
Medium priority stability improvements:

Alerting:
- Add vmalert for evaluating Prometheus alert rules
- Add alertmanager for alert routing and grouping
- Add alert-notifier service for Telegram/ntfy notifications
- Enable cadvisor scraping in prometheus config

Disk Monitoring:
- Add check-disk-space.sh for hourly disk monitoring
- Alert on 80% (warning) and 90% (critical) thresholds
- Auto-cleanup Docker when disk is critical
- Add com.manacore.disk-check.plist for LaunchD

Weekly Reports:
- Add weekly-report.sh for system health summary
- Includes: backup status, disk usage, container health,
  database stats, error log summary
- Runs every Sunday at 10 AM via LaunchD

Health Check Updates:
- Add checks for vmalert, alertmanager, alert-notifier

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-12 13:46:57 +01:00
Till-JS
02a5172c7c feat(admin): add GDPR user-data endpoints to photos, clock, storage backends
- Add admin modules with GET/DELETE /api/v1/admin/user-data/:userId
- Photos: albums, favorites, tags counting and deletion
- Clock: alarms, timers, world clocks, presets counting and deletion
- Storage: files, folders, shares, tags counting and deletion
- Update UserDataService to include photos, clock, storage backends
- Add ADMIN_SERVICE_KEY env var to all backends in docker-compose
- Build storage-backend locally instead of using GHCR image

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-12 13:43:16 +01:00
Till-JS
7d409465b6 fix(docker): add backend URLs to auth service for GDPR data aggregation
Configure mana-auth with internal Docker network URLs to query
project backends for user data (Chat, Todo, Calendar, Contacts,
Picture, Presi).

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-12 13:33:33 +01:00
Till-JS
d5e18c9c27 🔧 fix(mac-mini): update health checks and disable missing services
- Disable api-gateway and skilltree-web (no working images/Dockerfiles)
- Fix mana-search Dockerfile healthcheck port and endpoint
- Update health-check.sh to skip disabled services
- Fix search service health endpoint (/api/v1/health)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-12 13:28:55 +01:00
Till-JS
3e3700338b 🔧 fix(docker): build mana-search and skilltree-web locally
- mana-search: GHCR image is broken (missing node_modules)
- skilltree-web: GHCR image doesn't exist
- api-gateway: disabled (no image, no Dockerfile)

All three now build locally on Mac Mini instead of pulling from GHCR.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-12 13:22:42 +01:00
Till-JS
ba3d2a121a 🔧 chore(docker): build backends locally on Mac Mini
Switch 5 backends from pulling ghcr.io images to building locally:
- chat-backend
- todo-backend
- calendar-backend
- clock-backend
- contacts-backend

This ensures Dockerfiles with shared-drizzle-config are used directly.
2026-02-12 02:23:52 +01:00
Till-JS
10502b5627 fix(photos): re-enable mana-media dependency
mana-media Dockerfile is now fixed, so photos-backend can depend on it again.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-12 02:21:39 +01:00
Till-JS
aa56ec844b 🔧 fix(photos): temporarily disable mana-media dependency
mana-media Dockerfile has a pre-existing bug with pnpm symlinks
that needs to be fixed separately.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-12 01:58:21 +01:00
Till-JS
5ce4e42c20 🚀 feat(photos): add Docker deployment configuration
- Add Dockerfile for photos-backend (port 3039)
- Add Dockerfile for photos-web (port 5019)
- Add docker-entrypoint.sh for database migrations
- Add health endpoint for photos-web
- Add photos services to docker-compose.macmini.yml
- Update CORS_ORIGINS for mana-auth and mana-media
- Update CLAUDE.md with production URLs

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-11 18:21:19 +01:00
Till-JS
b3dd3c51d3 fix(mana-media): fix Dockerfile build and health check paths
- Use --ignore-scripts to skip postinstall builds during install
- Remove unnecessary shared-builder stage
- Fix health check URL to /api/v1/health

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 18:57:50 +01:00
Till-JS
d4663b5643 feat(mana-media): add centralized media storage with NutriPhi integration
- Implement mana-media service with PostgreSQL/Drizzle ORM persistence
- Add content-addressable storage (SHA-256) for automatic deduplication
- Add Matrix MXC URL import endpoint to copy images from Matrix
- Create @manacore/media-client package for service consumption
- Integrate mana-media into NutriPhi bot for persistent image storage
- Update pnpm-workspace.yaml to include nested service packages
- Add mana-media to docker-compose with port 3015

Images sent to NutriPhi bot are now stored in mana-media after analysis,
providing persistent storage with deduplication across all apps.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 17:30:14 +01:00
Till-JS
49c5873af1 chore(docker): build contacts-web locally instead of using GHCR image
GHCR image was outdated (2026-01-29), missing:
- Demo mode removal (2026-01-30)
- SSO implementation (2026-02-02)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 17:06:12 +01:00
Till-JS
5b3c87b245 fix(docker): use monorepo root as build context for mana-auth
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 16:52:09 +01:00
Till-JS
ce5f3b5384 chore(docker): build mana-auth locally instead of using GHCR image
Allows faster iteration on auth fixes without needing to push to GHCR.

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