1. Admin role gate: Nav link only shows for admin role users, admin
layout redirects non-admins to /home with access denied message
2. Profile update: Replace stubbed setTimeout with real API call to
profileService.updateProfile(), add empty name validation
3. Error boundaries: Wrap each dashboard widget in svelte:boundary
with error UI showing widget name, error message, retry button
4. Payment page: Replace alert() with toast notification for
unfinished payment integration (no more browser alerts)
5. Form validation: Add name validation in profile update
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The generate-dockerfiles script overwrote the manual fix. Re-adding
shared-feedback-types, shared-help-content, shared-help-types, and
shared-help-ui.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Four new tabs on the observatory page:
- Flusse: Horizontal scroll of all 6 data flow rivers with animated
SVG preview, from/to labels, speed and width stats
- Rangliste: Sortable table of all 20 apps with score, trend, status
dot, and mini bar charts for all 8 categories. Click any column
header to sort, click row for detail panel
- Vergleich: Select up to 4 apps via chip selector, see overlaid
radar charts and side-by-side category bar comparison
- Trends: Slope chart showing score evolution with hover highlight,
trend annotations for big movers (+29 Storage, +16 Todo, +15
Calendar), average score summary card
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Distribute start_period values across service groups to prevent
thundering herd of simultaneous health checks. Backends: 40-60s,
web: 20-45s, bots: 15-35s, monitoring: 10-30s.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add shared-feedback-types, shared-help-content, shared-help-types,
and shared-help-ui to Docker COPY statements.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Three tabs on the observatory page:
- Seenplatte: the main interactive landscape (existing)
- Pflanzen: horizontal scroll gallery of all 20 apps as plant cards,
grouped by status (Mature/Production/Beta/Alpha), each with SVG
preview, score, type label, trend indicator. Click opens detail panel.
- Seen: horizontal scroll of all 6 infrastructure lakes with gradient
preview, description, clarity and fill level stats.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
41 commits: PWA icons for all apps, Mac Mini port exhaustion fix,
Todo UX overhaul (inline edit, drag fix, long press), Dashboard
widget shows all tasks, Dockerfile validator, auth improvements.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
New script scans source imports vs package.json deps to catch missing
workspace dependencies that work locally but break in Docker.
Fixed: manadeck-web and presi-web missing shared-stores.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
New script generates COPY blocks between marker comments, eliminating
manual maintenance. All 17 web Dockerfiles updated with markers.
Supports --check flag for CI validation.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Phase 5 - Interactivity:
- Hover tooltip with score, status, category bars on every plant
- Click opens slide-in detail panel with 8-axis radar chart
- Panel shows all category scores, app links, ManaScore link
- Escape key and backdrop click close the panel
- Pan vs click distinction (no panel on drag)
Phase 6 - Atmosphere:
- Dynamic sky that follows real time of day (sunrise/noon/sunset/night)
- Stars with twinkling animation at night
- Sun glow during golden hour
- Birds flying across the scene (daytime)
- Dragonflies circling over lakes
- Butterflies near plants
- Fireflies at night (glowing, drifting)
- Time updates every minute
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Replaced Tailwind utility classes with inline styles for the container
and SVG element to prevent CSS purging issues in production build.
Added explicit preserveAspectRatio and xmlns attributes.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The tasks widget only showed tasks with dueDate=today, so tasks without
a date appeared as "no tasks". Now fetches all open tasks via GET /tasks,
sorted by due date (today/overdue first, then future, then no date).
- Add getAllOpenTasks() to todo service
- Update widget to use getAllOpenTasks()
- Show due date label next to task title (with overdue highlighting)
- Update i18n: "Aufgaben heute" → "Aufgaben"
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
4-column categorized footer showcasing the entire Mana ecosystem:
- Ecosystem: All 15 apps with status dots and expandable list
- Platform: Dashboard, Observatory, Playground, monitoring, community
- Insights: Devlog, ManaScore, Release Plan, Blueprints, landing pages
- Legal: Privacy, DSGVO, AI models, Impressum
Responsive: 4 cols desktop, 2 cols tablet, 1 col mobile.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Interactive SVG lake landscape that visualizes all ManaCore apps as plants
around interconnected lakes. Plant type and health reflects ManaScore:
- Oaks/Birches for mature/production apps (85+)
- Young trees and reeds for beta apps
- Sprouts for alpha/prototype apps
- Animated water (waves, river flow particles)
- Pan & zoom navigation
- 6 lakes representing infrastructure (Auth, Redis, MinIO, 3x PostgreSQL)
- 20 apps with real ManaScore data
Accessible at /observatory in the ManaCore web dashboard.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Update about page with Score Trend, Lighthouse, Dependency Health,
API Conformity, and Cross-App Consistency documentation. Add
ManaScore section to root CLAUDE.md for discoverability.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Remove unnecessary wrapper div in WidgetContainer
- Increase grid gap from gap-4 to gap-5 for breathing room
- Add auto-rows-fr for equal row heights
- Add min-h on widget content so empty widgets aren't tiny
- Change default layout to 3 equal columns (small)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Full-stack achievement system for SkillTree with backend (NestJS) and frontend (SvelteKit):
- 26 achievements across 7 categories (XP, Skills, Levels, Activities, Streak, Branches, Special)
- 5 rarity tiers (Common → Legendary) with distinct styling
- Auto-unlock after XP gain, skill creation, and activity logging
- Celebration animation on unlock with sparkle effects
- Achievements page with category filters and progress tracking
- IndexedDB offline support with local condition evaluation
- Backend seeds achievements on startup, checks conditions after mutations
- Stats overview extended with achievement counter
- i18n translations (DE + EN)
Also adds docs/MONETIZATION_REPORT.md with ranked analysis of all apps.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Two infrastructure improvements for tech independence:
1. Cloudflare Fallback Documentation (docs/CLOUDFLARE_FALLBACK.md):
- Plan B: WireGuard + Caddy on Hetzner VPS (€3.79/mo)
- Complete Caddyfile with all 30+ subdomains
- Step-by-step failover checklist (~15 min to switch)
- Plan C: Direct IP with ISP
2. Self-Hosted Landing Pages (eliminates Cloudflare Pages dependency):
- Nginx container (mana-infra-landings) on port 4400
- Multi-site config: each subdomain → separate dist/ folder
- Build script: scripts/mac-mini/build-landings.sh
- Cloudflare Tunnel ingress rules for 10 landing page domains
- Storage: /Volumes/ManaData/landings/ on external SSD
- Domains: it, chats, pics, zitares, presis, clocks,
manadeck, nutriphi, citycorners, docs
Migration path: Build landings locally, set Cloudflare DNS to
tunnel instead of Pages, then decommission CF Pages projects.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The animate:flip wrapper div in DashboardGrid was not passing through
the col-span classes, causing all widgets to render at minimum width.
Moved size classes from WidgetContainer to the grid wrapper div.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add optional lighthouse scores (performance, accessibility, best
practices, SEO) to schema. Display as inline badges on overview
and circular gauges on detail page with average score.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add history array to schema for tracking score changes over time.
Index page shows inline sparkline + delta, detail page shows larger
area chart with score labels on each data point.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Allows Vite/SvelteKit to import the package without a prior build step,
matching the pattern used by other shared packages like shared-credit-ui.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Prevents postinstall from triggering premature builds before shared
packages are compiled.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Rename content collection, pages, and routes from "audits" to
"manascore" for clearer branding. Add comprehensive about page
explaining the 8 scoring categories, weights, and methodology.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Adds a "Kosten" tab showing all 40+ credit operations across all apps,
grouped by app with category filters (AI, Productivity, Premium) and
color-coded cost badges.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Context menus in 12 apps, shared-llm package, onboarding for 16 apps,
todo redesign, QuickInputBar rollout, and dashboard widgets.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add the 3 missing widget components that were registered but not implemented:
- MukkeLibraryWidget: shows library stats (songs, playlists, favorites),
recent songs with artist/duration
- PresiDecksWidget: shows recent presentations with public/private
indicator, descriptions, and update dates
- ContextDocsWidget: shows recent documents grouped by type (text,
context, prompt) with space names, falls back to space list
All widgets follow the established pattern: APP_URLS for links,
WidgetSkeleton/WidgetError for loading/error, auto-retry on failure.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Fix todo dev port in APP_URLS (5188, was swapped with inventory 5189)
- Use APP_URLS for all links instead of hardcoded localhost ports
- TasksTodayWidget: add priority dots, subtask progress, label tags,
completed/total counter, clickable task links
- TasksUpcomingWidget: add priority dots, label tags, overdue/today
date highlighting with colored badges, clickable task links
- Extend Task type with labels and subtasks for richer widget display
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Switch devlog convention from daily to session-based (vormittag/abend).
Add devlog for Manalink prod-readiness work and deployment.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
New service that generates static Astro landing pages for organizations
and deploys them to Cloudflare Pages at {slug}.mana.how.
Components:
- Landing Builder Service (NestJS, port 3030) with Astro template
- Admin UI in Manacore web dashboard at /organizations/[id]/landing
- TeamSection + ContactSection for shared-landing-ui
- Two org themes (classic dark, warm light)
- LandingPageConfig types in shared-types
- Docker + CI/CD integration for Mac Mini deployment
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Align mobile AuthProviders (chat, manacore) with web auth stores:
- Replace { error: { message } | null } with { success: boolean, error?: string }
- Add needsVerification support to signUp return type
- Update all consumer screens (login, register, reset-password) accordingly
All auth methods across web and mobile now use the same return pattern.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Align all 20 web app auth stores to a consistent pattern:
- Use DEV_* constants with import.meta.env.DEV guard (no localhost leak in prod)
- Pass backendUrl to initializeWebAuth for automatic 401 token refresh
- Add redirectTo to forgotPassword for correct post-reset redirect
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The browser error tracking hooks.client.ts added earlier requires the
shared-error-tracking package to be copied and built in the Docker image.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add @sentry/browser integration via shared-error-tracking/browser export
and hooks.client.ts in every web app for client-side error reporting to GlitchTip.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Create Analytics.astro component in @manacore/shared-landing-ui that
automatically tracks CTA clicks and pricing section views via Umami.
The component uses event delegation and auto-detection of section
context (hero/pricing/footer) from section IDs or DOM position,
requiring zero changes to existing landing page content.
Tracked events: cta_click (with location), pricing_viewed,
pricing_plan_selected (with plan name)
Added to all 10 landing page Layout.astro files.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>