Commit graph

1252 commits

Author SHA1 Message Date
Till-JS
e88597cd20 feat(gifts): add gift code creation script and initial codes
- Add create-gift-codes.mjs script for batch gift code generation
- Create 10 gift codes with 1000 Mana each for distribution

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-14 11:23:08 +01:00
Till-JS
4a26926fae 🩹 fix(bot-services): export LOGIN_MESSAGES and auth error helpers
Export the following from @manacore/bot-services:
- LOGIN_MESSAGES: Pre-defined auth error messages for all bot types
- AUTH_ERROR_MESSAGES: Same as LOGIN_MESSAGES (preferred name)
- formatAuthErrorMessage(): Helper to create custom auth error messages

These are used by bots to show consistent error messages when token
refresh fails and the user needs to re-authenticate.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-14 11:19:55 +01:00
Till-JS
ff1affb268 🩹 fix(nutriphi-bot): add automatic token refresh on JWT expiration
When the JWT token expires (15 min), the bot now automatically:
1. Detects the 401 "exp claim" error
2. Clears the expired session
3. Attempts to fetch a new token via Matrix-SSO-Link
4. Retries the failed operation with the new token

This prevents users from getting authentication errors after 15 minutes
of inactivity.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-14 11:18:19 +01:00
Till-JS
c843531595 feat(analytics): update Umami tracking IDs for all web apps
Update all 15 web apps with correct Umami website IDs:
- calendar, chat, clock, contacts, manacore, manadeck, picture, planta, todo: updated IDs
- zitare, storage, nutriphi, skilltree, photos, presi: added tracking

All IDs now match the websites configured in Umami.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-14 11:14:16 +01:00
Till-JS
0f234a0ce6 fix(matrix-tts-bot): use WAV format for better Matrix compatibility
MP3 format was causing "no supported sources" error in Element.
Switch to WAV which has broader browser/client support.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-14 11:09:56 +01:00
Till-JS
aff2db9f9c feat(matrix): add recently used emojis section in emoji picker
- Store recently used emojis in localStorage (max 16 = 2 rows)
- Display "Häufig benutzt" section at top of emoji picker
- Most recently used emoji moves to front of list

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-14 11:08:31 +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
fa7fb3c294 🩹 fix(matrix-bots): use authenticated media download for all bots
The Matrix Media API now requires authentication (spec v1.11+). Updated
all 5 affected bots to use downloadMedia() from BaseMatrixService which
handles authenticated downloads via /_matrix/client/v1/media/download/.

Affected bots:
- matrix-nutriphi-bot (images + audio)
- matrix-zitare-bot (audio)
- matrix-todo-bot (audio)
- matrix-ollama-bot (images)
- matrix-project-doc-bot (images + audio)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-14 11:04:13 +01:00
Till-JS
70e45ed82e fix(matrix-stats-bot): adapt to Umami v2 API response format
The Umami API returns stats in a different format than expected:
- Before: { pageviews: { value, change } }
- After: { pageviews: number, comparison: { pageviews: number } }

Transform the raw API response to the expected format and calculate
percentage change from comparison values.

Also update URL_SCHEMA.md with complete list of all mana.how services.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-14 11:03:03 +01:00
Till-JS
5e01c833ce feat(matrix): improve chat UI with WhatsApp-style input and emoji picker
- Hide empty DM/room sections in sidebar when no messages available
- Redesign message input to WhatsApp style (attachment left, emoji in field, mic right)
- Add emoji picker with native mobile fallback and desktop grid picker
- Use Phosphor icon size prop for consistent rendering

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-14 11:02:36 +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
7c0bc735b9 feat(matrix): add drag & drop file upload to chat
- Add DropZoneOverlay component with visual feedback
- Implement drag events on desktop and mobile chat pages
- Support multi-file upload (files uploaded sequentially)
- Show overlay only when a chat room is selected

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-14 10:55:13 +01:00
Till-JS
40a3c89852 📝 docs(devlog): add devlogs for Feb 12 and Feb 13
- Feb 12: GDPR Self-Service, Matrix Mobile UX, Mac Mini Stability
- Feb 13: Gift Codes, Stripe Integration, Zitare Deployment

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-14 00:02:53 +01:00
Till-JS
284cd004aa 🩹 fix(auth): fix gift code route prefix and JWT issuer validation
- Remove duplicate route prefix in GiftsController (was /api/v1/api/v1/gifts)
- Fix JwtAuthGuard to use JWT_ISSUER as fallback when BASE_URL is not set
- Add comprehensive GIFT_CODES.md documentation

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-13 23:54:36 +01:00
Till-JS
0485ce4b07 🩹 fix(auth): correct healthcheck endpoint path
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-13 23:48:45 +01:00
Till-JS
9d7768495d 🔧 fix(auth): add build tools for bcrypt native module 2026-02-13 23:41:35 +01:00
Till-JS
0701635edb 🔧 fix(auth): update Dockerfile for workspace dependencies
Add shared-storage package to Docker build context to resolve
workspace dependency.
2026-02-13 23:36:56 +01:00
Till-JS
9bfc20b8d5 🎨 refactor(shared-ui): improve LoginPage and InputBar components 2026-02-13 23:29:56 +01:00
Till-JS
ceebb5dda6 feat(zitare): add settings store and i18n updates 2026-02-13 23:29:50 +01:00
Till-JS
702a30b699 feat(todo): add settings store and improve layout 2026-02-13 23:29:45 +01:00
Till-JS
72ee715300 feat(manacore): enhance API keys management UI 2026-02-13 23:29:41 +01:00
Till-JS
087d34c552 feat(matrix-bots): enhance stats and todo bots
- Add credit commands to todo-bot
- Enhance stats-bot with improved metrics
- Add Umami analytics improvements
2026-02-13 23:29:36 +01:00
Till-JS
e8c3b97f8f feat(auth): add gift codes and enhanced credit system
- Add gift code creation, redemption, and refund endpoints
- Add Stripe payment link generation for credits
- Add gifts database schema
- Enhance credits controller with new operations
2026-02-13 23:29:30 +01:00
Till-JS
962b942e2a feat(bot-services): add credit and gift services for Matrix bots
- Add CreditService with balance checking and consumption
- Add GiftService for gift code creation and redemption
- Add i18n support for credit/gift messages (DE/EN)
- Add Matrix bot mixins for credit and gift commands
2026-02-13 23:29:21 +01:00
Till-JS
92c6dc83ee fix(nutriphi-bot): remove missing media-client dependency 2026-02-13 23:22:29 +01:00
Till-JS
5118235e0b feat(manacore): add avatar upload frontend and onboarding wizard
- Add avatar upload to EditProfileModal with presigned URL flow
- Create onboarding wizard with 5 steps: Welcome, Profile, Apps, Credits, Complete
- Add onboarding store with localStorage persistence
- Integrate wizard into app layout (shows for new users)
- Update MANACORE-TODOS.md to mark completed tasks
2026-02-13 23:18:10 +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
d49d147257 🔧 chore(caddy): add skilltree reverse proxy config 2026-02-13 23:11:12 +01:00
Till-JS
c2842e2546 feat(auth): add avatar upload with S3/MinIO and subscription plans seed
- Add StorageModule for avatar uploads via S3/MinIO
- Create presigned URL endpoint for direct browser uploads
- Create direct upload endpoint (multipart/form-data)
- Add manacore-storage bucket to shared-storage package
- Add manacore-storage bucket to docker-compose.dev.yml
- Create subscription plans seed script (pnpm db:seed:plans)
- Plans: Free (150 credits), Pro (2000/€9.99/mo), Enterprise (10000/€49/mo)
- Update TODO list with completed tasks
2026-02-13 23:06:24 +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
23a1c5e539 feat(calendar): add larger resize handles, live time preview, and drag-to-create
- Increase resize handle height from 8px to 20px with visual grip indicator
- Show live time preview during resize operations
- Add drag-to-create functionality: click and hold on empty cell to drag and create events with custom duration
- Fix zitare TypeScript errors (SearchResultItem -> QuickInputItem, createUserSettingsStore API)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-13 23:03:23 +01:00
Till-JS
d3b0f9f38d feat(manacore): add profile, subscription, and credits frontend
Profile Features:
- EditProfileModal for name changes
- ChangePasswordModal with validation
- DeleteAccountModal with email confirmation

Subscription Features:
- Full subscription page at /subscription
- Plan comparison with monthly/yearly toggle
- Stripe Checkout integration
- Billing portal access
- Invoice history display

Credits Features:
- Stripe Checkout integration for credit purchases
- Loading states and toast notifications
- Success/error handling with URL params

API Services:
- profile.ts: getProfile, updateProfile, changePassword, deleteAccount
- subscriptions.ts: getPlans, getCurrentSubscription, createCheckout, etc.
- credits.ts: added initiatePurchase method

Also includes German/English i18n translations.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-13 22:46:25 +01:00
Till-JS
affcfe4614 feat(calendar): integrate TagStrip into PillNavigation dropdown
- Add PillTagSelector component for tag selection in navigation
- Remove separate TagStrip bar (saves 70px vertical space)
- Add tag-selector support to PillNavigation element rendering
- Remove hasTagStrip prop from DateStrip/DateStripFab components
- Export PillTagSelector and types from shared-ui

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-13 22:42:11 +01:00
Till-JS
7d1b4a40d2 feat(dashboard): add StorageUsageWidget
Add new dashboard widget showing storage usage stats:
- Total storage used and file count
- Recent files list with icons
- Link to open Storage app

Backend changes:
- Add GET /api/v1/files/stats endpoint to storage backend
- Returns totalFiles, totalSize, favoriteCount, recentFiles

Frontend changes:
- Add storageService API client
- Add StorageUsageWidget component
- Add i18n translations (de/en)
- Register widget in dashboard types and container

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-13 22:34:10 +01:00
Till-JS
ce4e982651 feat(auth): add profile management endpoints
Add backend endpoints for user profile management:
- GET /auth/profile - retrieve user profile data
- POST /auth/profile - update name and profile image
- POST /auth/change-password - change password (requires current)
- DELETE /auth/account - soft-delete account (requires password)

Security features:
- Password verification before sensitive actions
- Soft-delete preserves data for retention
- Security events logged for audit trail
- Rate limiting on sensitive endpoints

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-13 22:29:32 +01:00
Till-JS
ae30ce3323 feat(auth): add Stripe credit purchases and subscription management
- Add StripeService for PaymentIntent creation and webhook verification
- Add credit purchase flow (POST /credits/purchase)
- Add stripe_customers table for Stripe customer mapping
- Add subscriptions schema (plans, subscriptions, invoices)
- Add SubscriptionsService with Checkout, Portal, Cancel, Reactivate
- Add subscription plans (Free: 150 Mana, Pro: €9.99, Enterprise: €49.99)
- Handle subscription and invoice webhooks
- Update roadmap with completed tasks

Credit pricing: 1 Mana = 1 Cent (no volume discounts)
2026-02-13 22:21:23 +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
6e7080c8c1 💄 fix(calendar): add padding to calendar views for bottom UI visibility
- Add padding-top (1rem) and padding-bottom (200px) to time-column and day-column
- Ensures content can be scrolled past the bottom UI (PillNav, InputBar, etc.)
- Applied to DayView, WeekView, and MultiDayView
2026-02-13 22:11:49 +01:00
Till-JS
c8b1e92655 💄 style(matrix-todo-bot): clean up task response messages
- Remove credit display from responses (credits still charged)
- Remove "Synchronisiert" text (sync still works)
- Use sendMessage instead of sendReply to avoid quoting user ID
- Simplify status output
- Use cleaner formatting with dots instead of pipes
2026-02-13 22:09:31 +01:00
Till-JS
2200ed64e8 🚸 feat(calendar): auto-scroll to current hour and hide tasks by default
- Hide tasks in calendar by default on app load (not persisted from sessions)
- Auto-scroll to current hour when loading DayView, WeekView, MultiDayView
- Center current hour in viewport for immediate visibility
- Exclude task/sidebar settings from cloud sync to ensure clean initial state
2026-02-13 22:05:35 +01:00
Till-JS
bba696e241 chore(docker): use local build for matrix-calendar-bot 2026-02-13 19:52:54 +01:00
Till-JS
a9942aac91 fix(bot-services): filter events client-side, backend doesn't support date params 2026-02-13 19:46:43 +01:00
Till-JS
133615f2b5 feat(matrix): add swipe-back gesture for iOS PWA navigation
- Add touch-based swipe-back handler for edge swipes from left
- Show visual indicator (arrow + progress bar) during swipe
- Use history.back() for proper navigation history handling
- Only activate in 30px left edge zone to avoid scroll conflicts

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-13 19:41:23 +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
b5dde8e31d 📝 docs(dsgvo): update privacy policy and fix datenschutz link
- Fix datenschutz link to point to manacore-landing.pages.dev
- Update hosting info to reflect own infrastructure in Germany
- Add Cloudflare CDN section
- Update analytics section with Umami details (no cookies)
- Change email domain from mana.ai to mana.how
- Remove archived Memoro app section
- Update date to February 2026

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-13 19:37:04 +01:00
Till-JS
cdad7f5187 💄 fix(calendar): improve mobile UX - hide tasks by default, integrate mic in input bar
- Change sidebarCollapsed default to true (tasks hidden by default on mobile)
- Add leftAction snippet slot to InputBar component
- Move VoiceRecordButton inside InputBar instead of floating position
- Remove obsolete voice-button-wrapper styles

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-13 19:35:37 +01:00
Till-JS
e62782f627 🐛 fix(zitare): correct health check endpoint path in Dockerfile
Changed /api/health to /health to match actual endpoint

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-13 19:35:08 +01:00
Till-JS
09465fe36b 🔧 chore(zitare): add drizzle.config.ts for backend
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-13 19:31:25 +01:00
Till-JS
dfe94190a9 🔧 chore: update pnpm-lock.yaml for zitare-web deployment
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-13 19:27:32 +01:00