Commit graph

131 commits

Author SHA1 Message Date
Till JS
a1836407b1 refactor(docker): switch calendar-web to local build
Stale GHCR image didn't include cross-app URL injection for todo/contacts
backends, causing all task/birthday requests to hit calendar-api instead.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 16:38:05 +01:00
Till JS
4104bf1a82 refactor(docker): switch nutriphi and skilltree to local builds
Replace GHCR images with local Docker builds for consistency.
All 13 deployed backends now use the same build pattern:
  build: context: . / dockerfile: apps/*/apps/backend/Dockerfile

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 22:29:59 +01:00
Till JS
2d22d14c58 feat(error-tracking): complete GlitchTip integration for all backends
- Add import './instrument' to 15 remaining backend main.ts files
- Add GLITCHTIP_DSN to 10 additional backends in docker-compose.macmini.yml
- Total: 13/13 deployed backends have DSNs configured
- Total: 18/18 backends have instrument.ts + import

Backends with live error tracking after next rebuild:
chat, todo, calendar, clock, contacts, storage, presi, nutriphi,
skilltree, photos, zitare, mukke, planta

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 21:47:27 +01:00
Till JS
bb69f78e1e fix(auth): add missing trusted origins for cross-app SSO
Several apps (mukke, photos, planta, questions, todo, traces, context,
docs, manadeck, zitare) were missing from Better Auth's trustedOrigins,
causing SSO session cookie exchange to fail for those apps. Also synced
CORS_ORIGINS in docker-compose.macmini.yml.

Added 47 SSO contract tests to prevent regressions.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 21:17:34 +01:00
Till JS
789ce0a435 feat(glitchtip): enable open user registration
GlitchTip is publicly accessible like other monitoring tools (Grafana, Umami).
No login restriction needed for internal dev tooling.

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