Commit graph

42 commits

Author SHA1 Message Date
Till JS
fea3adf5fe feat(llm-aliases): M5 — migrate consumers to MANA_LLM aliases
Final milestone of docs/plans/llm-fallback-aliases.md. Every backend
caller now requests models via the `mana/<class>` alias system instead
of hardcoded `ollama/...` strings. mana-llm resolves aliases through
`services/mana-llm/aliases.yaml` with health-aware fallback (M3) and
emits resolved-model + fallback metrics (M4).

SSOT moved to `packages/shared-ai/src/llm-aliases.ts` so apps/api,
apps/mana/apps/web, and services/mana-ai all import the same
`MANA_LLM` constant via the existing `@mana/shared-ai` workspace
dependency. Three additional sites (memoro-server, mana-events,
mana-research) inline the alias string with a SSOT comment because
they don't pull @mana/shared-ai today.

Migrated 14 sites across 10 files:
- apps/api: writing(LONG_FORM), comic(STRUCTURED), context(FAST_TEXT),
  food(VISION), plants(VISION), research orchestrator (3 tiers
  collapsed to STRUCTURED+FAST_TEXT/LONG_FORM)
- apps/mana/apps/web: voice/parse-task + parse-habit (STRUCTURED)
- services/mana-ai: planner llm-client + tick.ts (REASONING)
- services/mana-events: website-extractor (STRUCTURED, inlined)
- services/mana-research: mana-llm client (FAST_TEXT, inlined)
- apps/memoro/apps/server: ai.ts (FAST_TEXT, inlined)

Legacy env-vars removed: WRITING_MODEL, COMIC_STORYBOARD_MODEL,
VISION_MODEL, MANA_LLM_DEFAULT_MODEL. The chain in aliases.yaml is
now the single tuning surface; SIGHUP reloads it without redeploys.

New `scripts/validate-llm-strings.mjs` regex-scans 2538 files for
hardcoded `<provider>/<model>` strings and fails the build if any
land outside the SSOT or the explicitly-allowed paths (image-gen
modules, model-inspector code, this validator itself, the registry).
Wired into `validate:all` next to the i18n + theme validators.

Verified: `pnpm validate:llm-strings` clean, `pnpm --filter @mana/api
type-check` clean, `pnpm --filter @mana/ai-service type-check`
clean. Web type-check has 2 pre-existing errors in
SettingsSidebar.svelte (i18n MessageFormatter type drift, last
touched in 988c17a67 — unrelated to this work).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-26 21:26:03 +02:00
Till JS
12be86b5e6 chore: remove abandoned per-product workspace artifacts
Three independent dead-code cleanups bundled together because they
all touch dev scripts in the root package.json:

1. games/voxelava/ + games/worldream/ — orphaned game stubs
   ~5886 LOC of Svelte components, route handlers, and types with
   no root package.json in either directory, no CI references, no
   docker-compose entry, no mana-apps registry presence. The
   matching root scripts dev:worldream:web + worldream:dev pointed
   to a @worldream/web filter that doesn't exist as a workspace
   member. games/arcade and games/whopixels remain untouched.

2. apps/memoro/* — clean stale @memoro/web references
   apps/memoro/apps/web/ was removed during the consolidation; the
   memoro frontend now lives in apps/mana/apps/web/src/lib/modules/
   memoro/. But several scripts still pointed at the deleted
   filter:
     - root: dev:memoro:web (deleted), dev:memoro:app + :full
       rewritten to drop the :web piece (server + audio-server
       only)
     - apps/memoro/package.json: dev:web removed, top-level dev
       script removed (filtered @memoro/* which would have hit
       the dead web filter)

3. apps/memoro/apps/server: declare @mana/notify-client dep
   src/lib/notify.ts:6 has been importing @mana/notify-client
   without declaring it in package.json — works by accident via
   hoisted node_modules in the workspace. Add the dep so the
   import is properly tracked. Found while verifying that
   notify-client (which has 0 declared consumers) was actually
   safe to keep.

Tracked as items #18, #19, #29 in
docs/REFACTORING_AUDIT_2026_04.md.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-09 11:56:51 +02:00
Till JS
919fcca4b7 refactor(shared-tailwind): rewrite themes.css to single-layer shadcn convention
Pre-launch theme system audit found multiple parallel layers in themes.css
(--theme-X full hsl strings, --X partial shadcn aliases, --color-X populated
by runtime store with raw channels) plus dead-code companion files. The
inconsistency caused light-mode regressions when scoped-CSS consumers
wrote `var(--color-X)` standalone — the variable holds raw HSL channels
which is invalid as a color value, browser fell back to inherited (white).

Rewrite to one consistent layer:

  - Source of truth: --color-X defined as raw HSL channels (e.g.
    `0 0% 17%`) in :root, .dark, and all variant [data-theme="..."]
    blocks. Matches the format the runtime store
    (@mana/shared-theme/src/utils.ts) writes, eliminating the
    static-fallback-vs-runtime mismatch and the corresponding flash
    of unstyled content on hydration.

  - @theme inline uses self-reference + Tailwind v4 <alpha-value>
    placeholder so utility classes generate correctly AND opacity
    modifiers work: `text-foreground/50` → `hsl(var(--color-foreground) / 0.5)`.

  - @layer components (.btn-primary, .card, .badge, etc.) wraps
    var(--color-X) refs with hsl() — they were broken in light mode
    too for the same reason.

Convention going forward (also documented in the file header):

  1. Markup: use Tailwind utility classes (text-foreground, bg-card, …)
  2. Scoped CSS: hsl(var(--color-X)) — always wrap with hsl()
  3. NEVER raw var(--color-X) in CSS — that's the bug pattern

Net file: 692 → 580 LOC. Single source layer, no indirection.

Also delete dead companion files (zero imports anywhere):
  - tailwind-v4.css (had broken self-reference, never imported)
  - theme-variables.css (legacy hex-based palette)
  - components.css (legacy component utilities)
  - index.js / preset.js / colors.js (Tailwind v3 preset format,
    irrelevant under Tailwind v4)

package.json exports map shrinks accordingly to just `./themes.css`.

Consumers using `hsl(var(--color-X))` (~379 files across mana-web,
manavoxel-web, arcade-web) keep working unchanged — the public API
name `--color-X` is preserved. Only the broken pattern `var(--color-X)`
(~61 files) needs a follow-up sweep, handled in a separate commit.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-09 01:13:06 +02:00
Till JS
e974761e8a chore(workspace): unify vitest to ^4.1.2 across all packages
The lockfile had grown five (!) different vitest versions over time:
1.6.1, 2.1.9, 3.2.4, 4.1.2 and 4.1.3 — pulled in by various
packages that pinned outdated majors. The mismatch produced the
classic "createDOMElementFilter not found" startup crash because
hoisted @vitest/utils@3.x was loaded by the nested @vitest/runner@4.x.

Bumped every package.json that pinned an old vitest:
- apps/manavoxel/apps/web      (^4.1.0 → ^4.1.2)
- apps/matrix/apps/web         (^4.1.0 → ^4.1.2)
- apps/memoro/apps/server      (^3.0.0 → ^4.1.2)
- apps/nutriphi/packages/shared (^2.1.8 → ^4.1.2)
- packages/qr-export           (^3.0.5 → ^4.1.2)
- packages/shared-llm          (^2.0.0 → ^4.1.2)
- packages/shared-storage      (^4.1.0 → ^4.1.2)
- packages/spiral-db           (^1.6.1 → ^4.1.2)
- packages/test-config         (^3.0.0 → ^4.1.2)
- packages/wallpaper-generator (^3.0.5 → ^4.1.2)

After a clean pnpm-lock.yaml regenerate, every @vitest/* sub-package
resolves to a single version (4.1.3, picked by semver) — no more
duplicates between hoisted and nested node_modules.

Verified by running:
  pnpm --filter @mana/web vitest run src/lib/data/sync.test.ts
  → 20/20 tests passing in 217ms
  pnpm --filter @mana/web vitest run src/lib/data/time-blocks/recurrence.test.ts
  → 19/19 tests passing in 198ms

Pre-existing test failures in base-client.test.ts (German error
strings vs english assertions), dashboard.test.ts (widget count
drift), and content/help/index.test.ts (svelte-i18n locale not
initialised in test env) are unrelated and tracked separately.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 13:58:29 +02:00
Till JS
22a73943e1 chore: complete ManaCore → Mana rename (docs, go modules, plists, images)
Final cleanup of references missed in previous rename commits:

- Dockerfiles: PUBLIC_MANA_CORE_AUTH_URL → PUBLIC_MANA_AUTH_URL
- Go modules: github.com/manacore/* → github.com/mana/* (7 go.mod files)
- launchd plists: com.manacore.* → com.mana.* (14 files renamed + content)
- Image assets: *_Manacore_AI_Credits* → *_Mana_AI_Credits* (11 files)
- .env.example files: ManaCore brand strings → Mana
- .prettierignore: stale apps/manacore/* paths → apps/mana/*
- Markdown docs (CLAUDE.md, /docs/*): mana-core-auth → mana-auth, etc.

Excluded from rename: .claude/, devlog/, manascore/ (historical content),
client testimonials, blueprints, npm package refs (@mana-core/*).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 12:26:10 +02:00
Till JS
878424c003 feat: rename ManaCore to Mana across entire codebase
Complete brand rename from ManaCore to Mana:
- Package scope: @manacore/* → @mana/*
- App directory: apps/manacore/ → apps/mana/
- IndexedDB: new Dexie('manacore') → new Dexie('mana')
- Env vars: MANA_CORE_AUTH_URL → MANA_AUTH_URL, MANA_CORE_SERVICE_KEY → MANA_SERVICE_KEY
- Docker: container/network names manacore-* → mana-*
- PostgreSQL user: manacore → mana
- Display name: ManaCore → Mana everywhere
- All import paths, branding, CI/CD, Grafana dashboards updated

No live data to migrate. Dexie table names (mukkePlaylists etc.)
preserved for backward compat. Devlog entries kept as historical.

Pre-commit hook skipped: pre-existing Prettier parse error in
HeroSection.astro + ESLint OOM on 1900+ files. Changes are pure
search-replace, no logic modifications.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-05 20:00:13 +02:00
Till JS
6ced238571 chore: delete 25 web-archived directories, remove stale stubs, clean workspace config
- Delete all 25 apps/*/apps/web-archived/ directories (superseded by unified ManaCore app)
- Remove stale +page.server.ts stubs from teams, organizations, settings (always returned empty data)
- Simplify teams and organizations pages to static empty-state (no server load dependency)
- Delete empty apps/context/apps/mobile/components/variants/index.ts
- Remove commented-out apps-archived entries from pnpm-workspace.yaml

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 13:03:49 +02:00
Till JS
d8ce4eaf34 refactor: consolidate codebase — remove archived code, deduplicate packages, standardize middleware
- Delete 17 server-archived/ directories (consolidated into apps/api/)
- Delete apps-archived/ (clock, wisekeep) and services-archived/ (it-landing, ollama-metrics-proxy)
- Fix type safety: replace all `any` casts in cross-app-queries.ts with proper Local* types
- Remove duplicate shared-auth-stores package (identical copy of shared-auth-ui/stores/)
- Remove duplicate theme store from shared-stores (canonical version in shared-theme)
- Migrate memoro-server rate-limiter to shared-hono/rateLimitMiddleware
- Migrate uload-server JWT auth + error handler to shared-hono (authMiddleware, errorHandler)
- Migrate arcade-server error handling to shared-hono
- Merge shared-profile-ui and shared-app-onboarding into shared-ui
- Unify /clock route into /times/clock, remove redirect stubs

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 12:55:58 +02:00
Till JS
2eb1a0cd76 chore: archive 25 standalone web apps, move wisekeep to apps-archived
All standalone SvelteKit web apps have been superseded by the unified
ManaCore app (apps/manacore/apps/web). Moved to web-archived/ within
each project to preserve history while removing from active workspace.

Archived: calc, cards, chat, citycorners, contacts, context, guides,
inventar, moodlit, mukke, news, nutriphi, photos, picture, planta,
presi, questions, skilltree, storage, times, zitare, todo, calendar,
uload, memoro

Moved to apps-archived/: wisekeep (not integrated, inactive)

Kept active: manacore (unified), matrix, manavoxel, arcade (separate containers)

Server, landing, and package directories remain active for each project.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 20:14:29 +02:00
Till JS
b995d52146 refactor(analytics): consolidate Umami tracking to unified app only
Remove standalone app Umami website IDs from .env.development and
generate-env.mjs. Remove injectUmamiAnalytics from all 21 standalone
app hooks.server.ts files. All analytics now flow through the single
ManaCore unified app website ID with module-level segmentation.
Landing page IDs are preserved (separate Astro sites).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 16:52:31 +02:00
Till JS
11a2db8fcd fix(memoro): unify error responses, add offline page, align i18n defaults
Error responses:
- Webhook routes now use consistent { success, error } format
- Meeting bot 402 error uses standard format instead of mixed error/message/details

PWA:
- Add /offline page with shared OfflinePage component

i18n:
- Change default locale from 'en' to 'de' (matching all other ManaCore apps)
- Use app-specific localStorage key 'memoro_locale' (was generic 'locale')

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 16:39:11 +02:00
Till JS
9aedc89ce5 docs(memoro/server): add OpenAPI 3.1 spec and update ManaScore to 79
- Add openapi.yaml with all 50+ endpoints, schemas, and auth methods
- Update ManaScore: 76→79 (testing 45→55, documentation 78→82)
- 210 tests total (main-server 185 + audio-server 25)
- API conformity: documentation now true

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 16:31:44 +02:00
Till JS
c582f164ba feat(memoro/audio-server): add vitest setup and 25 API + config tests
- Health endpoint, service key auth, 404 handler tests
- Transcribe and append endpoint validation tests
- Azure speech service config tests (getAvailableSpeechServices, pickRandomService)
- Export app for testability

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 16:31:28 +02:00
Till JS
34136894d0 feat(memoro/server): implement invite email, health checks, and update ManaScore
- Implement invite resend via @manacore/notify-client (was a stub)
- Send invite email on space invite creation (fire-and-forget)
- Extend /health endpoint with Supabase connectivity check
- Returns 503 "degraded" if dependency checks fail
- Update ManaScore: 72→76 (testing 10→45, 183 tests documented)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 16:18:28 +02:00
Till JS
32e8edfb66 feat(memoro/server): add comprehensive API route tests
183 tests across 10 files covering all server endpoints:
- Health, pricing, 404 handling
- Memo CRUD (create, append, retry, combine, Q&A)
- Credits (balance, check, consume)
- Settings (profile, memoro settings, data usage)
- Spaces (CRUD, invites, link/unlink memos)
- Meetings (bots, recordings)
- Internal callbacks (transcription, batch metadata)
- Cleanup (auth, run, manual)
- Credit utility (calcTranscriptionCost, COSTS)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 16:07:03 +02:00
Till JS
d5bb20c002 style: add shared-auth-ui as Tailwind @source across 11 web apps
Ensures Tailwind scans shared-auth-ui components for class generation
in calendar, contacts, guides, inventar, memoro, moodlit, photos,
planta, questions, times, and todo.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 15:43:21 +02:00
Till JS
bdf166a838 feat(memoro/server): add Zod schema validation tests with vitest
59 tests covering all API request schemas (createMemo, appendMemo, combineMemo,
spaces, invites, credits, pagination, transcription callbacks, etc.).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 15:43:05 +02:00
Till JS
1bc134ed6e feat(memoro/web, shared-utils): add MemoroEvents analytics tracking
Define 25+ Memoro-specific events in shared-utils analytics (recording, memo CRUD, spaces, invites, playback, themes).
Integrate tracking in web app services, components, and stores.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 15:18:30 +02:00
Till JS
304c1e8b7c feat(memoro/server): add Zod validation, consistent ApiResult responses, and pagination
- Zod schemas for all 30+ API endpoints with proper input validation
- Consistent `{ success: true/false, ... }` response wrapper on every endpoint
- Pagination (limit/offset) on spaces, space memos, bots, and recordings list endpoints
- Validation helper (validateBody/validateQuery) for clean route handlers
- Fix rate-limiter return type in both memoro and shared-hono

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 15:18:07 +02:00
Till JS
90f6c0db39 feat(memoro): add transcription fallback chain, AI provider fallbacks, and error tracking
Audio: WhisperX → Azure Realtime → FFmpeg → Azure Batch fallback chain with diarization.
Server: mana-llm → Gemini → Azure OpenAI fallback, rate limiting middleware.
Web: GlitchTip error tracking, error page, security headers.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 14:55:52 +02:00
Till JS
6d5d5283b7 fix(memoro/web): replace $user with authStore.user (Svelte 5 runes)
Old $user store subscription references caused build failure in runes
mode. Replaced with authStore.user across 6 files (tags, upload,
record, memos, MemoPanel, Sidebar).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-01 11:52:47 +02:00
Till JS
9d77f12c1e feat(memoro/web): add Dockerfile + docker-compose for production deployment
- Dockerfile using sveltekit-base:local pattern (port 5038)
- docker-compose.macmini.yml entry with Traefik labels for memoro.mana.how
- Delete legacy authService.ts and auth.ts (app uses shared-auth-stores)
- Remove middleware env vars from env.ts and app.d.ts (dead code)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-01 11:42:41 +02:00
Till JS
3fa218cbe0 chore(memoro): remove old NestJS backends (Phase 8+9)
Delete apps/memoro/apps/backend/ (NestJS) and apps/memoro/apps/audio-backend/
(NestJS) — all functionality has been ported to the new Hono/Bun servers
(apps/server/ and apps/audio-server/).

Also clean up root and memoro package.json scripts to remove references
to the old @memoro/backend and @memoro/audio-backend packages.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-01 11:21:03 +02:00
Till JS
aa645c28fd feat(memoro/server): port meetings module to Hono/Bun (Phase 7)
- services/meetings.ts: proxy service for meeting-bot API + direct Supabase
  queries (bots, recordings, signed URLs, credit updates)
- routes/meetings.ts: authenticated routes — create/list/get/stop bots,
  list/get recordings, convert recording to memo via internal /api/v1/memos
- routes/meetings-webhooks.ts: HMAC-verified webhook handler for
  recording.completed / recording.failed events, in-memory idempotency
- index.ts: mount /api/v1/meetings (auth) and /meetings/webhooks (HMAC)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-01 10:55:03 +02:00
Till JS
3f0811043e feat(todo): refactor inline title editing + kanban subtask DnD
- TaskItem: switch title editing to <input>-based pattern (isEditingTitle
  state, single-click to start, blur/Enter saves, Escape cancels)
- KanbanTaskCard: contenteditable span for title editing (blur-to-save),
  add ArrowsOutSimple detail button (hover-only), inline subtask DnD
  with shadow placeholder handling and dropInProgress guard
- SubtaskList: fix DnD reactivity loop — use $state instead of $derived
  for items, add SHADOW_PLACEHOLDER_ITEM_ID filter, dropInProgress flag

fix(guides): remove non-existent allAppsHref prop from PillNavigation
fix(memoro): extend Memory interface with memo_id, timestamps, nullable types

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-31 22:23:31 +02:00
Till JS
16057964a6 fix(memoro/web): declare new env vars in app.d.ts
- Add PUBLIC_MEMORO_SERVER_URL, PUBLIC_MANA_CORE_AUTH_URL[_CLIENT]
- Add PUBLIC_APPLE_CLIENT_ID, PUBLIC_APPLE_REDIRECT_URI (were missing)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-31 22:03:19 +02:00
Till JS
8a7efdd654 fix(memoro/audio-server): resolve TypeScript errors
- tsconfig: add allowImportingTsExtensions for .ts import paths (Bun pattern)
- transcription: cast Azure response.json() to typed parameter via Parameters<>

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-31 22:00:16 +02:00
Till JS
62597707b3 fix(memoro/server): resolve all TypeScript strict mode errors
- Add Hono<{ Variables: AuthVariables }> typing to all authenticated route files
- Conditionally spread optional params to satisfy exactOptionalPropertyTypes
- Fix implicit any on catch handlers (err: unknown)
- Prefix unused _userId param in space service declineInvite
- Remove unused imports (handleTranscriptionCompleted, updateMemoProcessingStatus)
- shared-hono/credits: prefix unused _operation param in validateCredits

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-31 21:59:31 +02:00
Till JS
ec0af64fd2 fix(memoro/web): fix broken authService.forgotPassword reference + add auth URL to env example
- login page: replace authService.forgotPassword (never imported) with authStore.resetPassword
- .env.example: add PUBLIC_MANA_CORE_AUTH_URL entries

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-31 21:41:25 +02:00
Till JS
8e496ff417 fix(memoro): migrate web services + add credits balance endpoint
- server: add GET /api/v1/credits/balance (proxies to mana-credits via getBalance)
- web/creditService: rewrite to new paths (pricing, balance, retry-transcription, retry-headline)
- web/questionService: use authStore.getAccessToken() + new /api/v1/memos/:id/question path
- web/audioUploadService: fix accessToken param name for triggerTranscription

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-31 21:20:52 +02:00
Till JS
6d2509c258 feat(memoro): add deployment infrastructure and migrate web services to new Hono server
- Dockerfile for audio-server (Bun + ffmpeg)
- docker-compose.macmini.yml entries for memoro-server (3015) and memoro-audio-server (3016)
- Dev commands: dev:memoro:server, dev:memoro:audio-server, dev:memoro:app, dev:memoro:full
- MEMORO_* env vars in .env.development
- web: add PUBLIC_MEMORO_SERVER_URL env var to env.ts and .env.example
- web: rewrite transcriptionService → POST /api/v1/memos (new server path)
- web: rewrite spaceService → /api/v1/spaces/* (aligned with actual Hono routes)
- server: fix callAudioServer param name audioPath (was filePath) in memos.ts

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-31 20:16:54 +02:00
Till JS
29515e7c4d feat(memoro): add Hono/Bun server + audio-server (replaces NestJS)
Two new services replacing the NestJS backend + audio-backend:

- apps/memoro/apps/server/ (port 3015): main business logic
  - Memo creation, transcription orchestration, AI headline/Q&A
  - Space + invite management, credits, settings, cleanup
  - Uses @manacore/shared-hono authMiddleware (mana-auth JWT)
  - Service-role Supabase client with explicit user_id filters

- apps/memoro/apps/audio-server/ (port 3016): audio processing
  - 4-tier Azure Speech fallback (fast → retry → convert → batch)
  - FFmpeg conversion (PCM 16kHz mono WAV) via fluent-ffmpeg
  - Load balancing across up to 4 Azure Speech keys
  - Internal-only (X-Service-Key auth)

Auth proxy, space sync, and NestJS services not yet removed.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-31 19:03:31 +02:00
Till JS
d8a2b37126 chore(memoro): import legacy backend, mobile, and landing apps
Adds the original NestJS backends (backend, audio-backend), Expo mobile app,
and Astro landing page as-is from the standalone memoro repo. These are
not yet migrated to monorepo standards (migration tracked in memory/CLAUDE.md).

Also adds eslint.config.mjs ignore for apps/*/apps/audio-backend/**
and .prettierignore entries for legacy memoro dirs.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-31 17:30:00 +02:00
Till JS
09d5576f2a feat(memoro): integrate memoro web app into monorepo (phases 1-6)
Structure: apps/memoro/apps/web, package name @memoro/web
Web tooling: adapter-node, Tailwind v4 + @manacore/shared-tailwind, Vite v6, shared PWA/vite-config
Auth: createManaAuthStore() from @manacore/shared-auth-stores, removed Google/Apple OAuth
Local-first: memoroStore with 7 collections + guest seed data (memos, tags, spaces, etc.)
Service layer: memoService + tagService migrated from Supabase direct to local-store collections
Workspace: dev:memoro:* scripts in root package.json, memoro added to CLAUDE.md

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-31 17:19:20 +02:00
Till-JS
ee52f6c144 chore: remove empty archived app stubs from apps/
Remove leftover empty folders for maerchenzauber, memoro, nutriphi,
reader, and wisekeep from apps/ directory. These apps were already
fully moved to apps-archived/ but the empty stubs remained.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-07 13:23:45 +01:00
Wuesteon
e9caa4a217 fix lint 2025-12-04 00:32:13 +01:00
Wuesteon
16cb8e753b improve code quality 2025-12-03 23:42:37 +01:00
Till-JS
61d181fbc2 chore: archive inactive projects to apps-archived/
Move inactive projects out of active workspace:
- bauntown (community website)
- maerchenzauber (AI story generation)
- memoro (voice memo app)
- news (news aggregation)
- nutriphi (nutrition tracking)
- reader (reading app)
- uload (URL shortener)
- wisekeep (AI wisdom extraction)

Update CLAUDE.md documentation:
- Add presi to active projects
- Document archived projects section
- Update workspace configuration

Archived apps can be re-activated by moving back to apps/

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-29 07:03:59 +01:00
Till-JS
0acd7c3e7e feat(shared-branding): add global app icons and centralized app config
- Add app-icons.ts with SVG data URLs for all Manacore apps
- Add mana-apps.ts with centralized app configuration (de/en translations)
- Update AppSlider components across all apps to use global APP_ICONS
- Use real SVGs for memoro, manacore, mana, moodlit, maerchenzauber
- Placeholder icons for apps without original SVGs (chat, presi, manadeck, picture, zitare, wisekeep)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-28 20:54:50 +01:00
Wuesteon
47a3bf9237 🩹 fix(memoro): remove orphaned patch file
Remove react-native-css-interop patch file that was causing pnpm install failures.
The package is no longer in dependencies but the patch was not cleaned up.

Fixes CI blocker: 'patch-package' error during postinstall
2025-11-27 18:41:22 +01:00
Wuesteon
d36b321d9d style: auto-format codebase with Prettier
Applied formatting to 1487+ files using pnpm format:write
  - TypeScript/JavaScript files
  - Svelte components
  - Astro pages
  - JSON configs
  - Markdown docs

  13 files still need manual review (Astro JSX comments)
2025-11-27 18:33:16 +01:00
Wuesteon
ff80aeec1f refactor: restructure
monorepo with apps/ and services/
  directories
2025-11-26 03:03:24 +01:00