build-app.sh now checks available RAM before builds and only stops
monitoring containers when free memory is below 3 GB threshold.
New memory-baseline.sh script measures per-container and per-category
RAM usage for capacity planning.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Document mana-games and other games in root CLAUDE.md project tables.
Add mana-games-web service to docker-compose for Mac Mini deployment
on port 5210.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Features added to links page:
- QR code generation with modal and download
- Edit modal for title, URL, UTM parameters
- Collapsible UTM parameter fields (source, medium, campaign)
- Click count links to analytics page
- Confirm dialog before delete
Analytics dashboard improvements:
- Country breakdown with progress bars
- Device breakdown with percentages
- Time period switcher (7/30/90 days)
- Tooltip on timeline bars
- Back navigation
Other:
- Public profile page /u/[username] via Hono endpoint
- i18n setup with svelte-i18n (DE/EN locale files)
- PWA support via @vite-pwa/sveltekit
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Production-ready Dockerfile on port 5210, security headers and analytics
injection via hooks.server.ts, GlitchTip error tracking, and feedback page
using shared feedback package.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Dockerfile: two-stage build on sveltekit-base, port 5028
- docker-compose.macmini.yml: manavoxel-web service on port 5028
- Root package.json: dev:manavoxel:web and dev:manavoxel:full scripts
- Fix Tailwind CSS import (shared-tailwind/themes.css)
- Port changed from 5195 to 5028 (consistent dev/prod)
Deploy with: ./scripts/mac-mini/build-app.sh manavoxel-web
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Adds login/register/forgot-password auth routes using shared-auth-ui,
settings page with theme/language/account controls, themes browser,
help page, community submit form, profile, and app onboarding modal.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Add getCityStats() and getPlatformStats() query helpers
- City home: stats panel showing location count, map coverage,
contributor count, and top category breakdown
- City discovery: platform stats bar (total cities, locations,
contributors) and per-city badges (location count, contributors,
top categories)
- i18n strings for all stats labels (DE + EN)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Replace old /map, /add, /locations/[id] routes with redirects to /
(locations are now at /cities/[slug]/...)
- Rewrite landing page for multi-city platform concept
- Remove old Konstanz-specific landing components and data
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Replace Astro SSG with SvelteKit 2 + Svelte 5 to align with monorepo
standard stack. Adds shared packages (auth, theme, PWA, i18n, local-store),
Tailwind 4, PillNavigation, and local-first data layer for game stats.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Rewrite project docs to reflect the new multi-city architecture:
local-first data layer, city-scoped routes, and community-driven
content model.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Remove API fetch calls from city-scoped pages since CityCorners
has no backend server — all CRUD goes through IndexedDB via
@manacore/local-store with mana-sync for server synchronization.
- City home: use useAllLocations() + filterByCity() instead of API
- Map: read locations from IndexedDB reactive queries
- Detail: load from locationCollection.getById(), compute nearby
locations locally with haversine distance
- Edit: read/write via locationCollection
- Add: insert via locationCollection instead of POST to API
- Delete: use locationCollection.delete() instead of API call
- Remove review/gallery API calls (no backend for these yet)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Rebuild CityCorners from a Konstanz-only guide into a user-generated
platform for any city/village. Users can now create cities and add
locations within them, growing the platform organically.
- Add cities collection (name, slug, country, state, coordinates)
- Add cityId FK to locations, scope locations to cities
- New URL structure: /cities/[slug], /cities/[slug]/map, etc.
- Home page becomes city discovery with search
- Add city creation page with geocoding + slug generation
- Context-aware navigation (global vs city mode)
- Remove all Konstanz-specific hardcoding from i18n and map
- Guest seed with 3 example cities (Konstanz, Zürich, Berlin)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Local-First Persistence (Dexie.js):
- gameStore via @manacore/local-store: worlds, areas, items, inventories
- Guest seed data: demo village with street + 2-story house
- World loader bridge: converts between DB format and engine format
- Base64 encoding for pixel data (Dexie-compatible)
- Auto-loads first world on startup, supports ?world= URL param
World Templates + "New World" UI:
- 5 templates: Village, Dungeon, Arena, House, Empty
- Each template generates pre-built areas with pixel data
- /worlds route: browse own worlds, create new, delete
- New World dialog: name input + template selection grid
- Navigation: "Worlds" button in HUD links to world browser
- Game engine accepts world data from DB instead of hardcoded demo
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Add auth store using createManaAuthStore
- Wrap app layout with AuthGate (allowGuest=true)
- Add GuestWelcomeModal and SessionExpiredBanner
- Start sync on login, stop on logout
- Rewrite login/register/forgot-password to use shared auth UI
- Remove all PocketBase auth references
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Move from apps-archived/ to apps/
- Delete NestJS backend, PocketBase, old scripts and docs
- Create Hono/Bun redirect server (click tracking, analytics API)
- Create @manacore/uload-database shared Drizzle schema package
- Add local-first store (Dexie.js) for links, tags, folders
- Rewrite Links and Tags pages to use IndexedDB
- Simplify hooks, layouts, remove all server-side data loading
- Add dev scripts: dev:uload:web, dev:uload:server, dev:uload:local
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Inventory class: 8 slots, hold/select, add/remove, rarity-based borders
- GameItem type with sprite data, properties, and rarity
- Inventory UI component with canvas-rendered item thumbnails (Svelte action)
- Rarity border colors (common→legendary), held item highlight
- Right-click to drop items, number keys 1-8 to select slots
- Sprite editor now creates GameItems and adds them to inventory
- Inventory bar always visible at bottom of screen
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- AreaManager: load/unload areas, portal detection, fade transitions,
floor switching for multi-story interiors
- Demo street (10cm): cobblestone road, brick/wood buildings, trees, torches
- Demo interior (5cm): 2-floor house with table, fireplace, bed, windows
- TilemapRenderer: dynamic tileSize per resolution, clear(), setWorldSize()
- Game engine: E key for doors, F key for stairs, area name + floor in HUD
- Fade overlay for smooth area transitions
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- docker-compose.macmini.yml: calc-web service on port 5026
- cloudflared-config.yml: calc.mana.how → localhost:5026
- mana-auth trusted origins: add https://calc.mana.how
- mana-credits & mana-user CORS: add https://calc.mana.how
- Dockerfile port updated from 5018 to 5026 (5018 used by zitare)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Copy-to-clipboard button on all 5 skins (Modern, HP-35, Casio, TI-84, Minimal)
- Scientific calculator now supports skin switching like standard mode
- Production Dockerfile using sveltekit-base (port 5018)
- Real settings page: default mode/skin, decimal places, thousands separator,
angle mode, history size, keyboard hints, shortcuts reference
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Project detail page (/projects/[id]): stats, budget progress, inline
edit, full entry list with billing value calculation
- Client detail page (/clients/[id]): stats, project cards, entry list,
billing value summary
- Duration rounding: configurable increment (1-15 min) and method
(up/down/nearest), applied automatically when timer stops
- ConfirmDialog component: reusable modal for destructive actions
- Confirmation required before deleting entries, projects, and clients
- 18 new rounding tests (67 total, all passing)
- i18n: added deleteConfirm keys for DE and EN
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
New calculator app with standard, scientific, programmer, unit converter,
currency, finance, date, and percentage modes. Includes 5 visual skins:
Modern, HP-35 (1972), Casio fx (1985), TI-84 (2004), and Minimal.
Local-first with IndexedDB history, keyboard support, safe math parser.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
New app for professional time tracking with timer, projects, clients,
and reports. Local-first architecture with IndexedDB + mana-sync.
- Timer store with start/stop/resume, auto-save every 10s
- 6 local-store collections: clients, projects, timeEntries, tags, templates, settings
- TimerCard with live counter, project selector, billable toggle
- EntryItem with inline-expand editing, EntryList with day grouping
- EntryForm modal with quick-duration buttons (15m-4h)
- QuickStart pills from recent entries
- Projects page: card grid, color coding, budget progress, inline CRUD
- Clients page: billing rates, project rollup, inline CRUD
- Reports page: stats grid, billable breakdown, project/daily charts
- i18n: German + English
- Registered in shared-branding with icon, URLs, dev scripts
- Guest seed: 2 clients, 3 projects, 5 time entries, 4 tags
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Remove set -e to prevent abort on non-critical errors
- Suppress tar errors for volatile TSDB files (VictoriaMetrics)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Migrate 17 app Dockerfiles from standalone builds (each copying 20+
packages individually) to use the shared sveltekit-base:local image.
Benefits:
- No more missing package COPY errors
- Single base image to maintain
- Consistent build pattern across all apps
- Faster builds (shared deps pre-installed)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Categories are now side-by-side columns with heading on top and apps
stacked vertically below. 7 columns on desktop, wraps on smaller screens.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Each category now has a full-width heading bar on top, with the app
tiles flowing in the grid below it.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add @iconify-json/ph for Phosphor icons via astro-icon. Each app tile
now shows a clean Phosphor icon instead of an emoji.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The sed-based insertion script added the import twice. Fixed by
deduplicating with awk.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Deactivate Ollama, FLUX.2, and Telegram Bot LaunchAgents on Mac Mini
- Remove extra_hosts from mana-llm (no longer needs host.docker.internal)
- Update health-check.sh to monitor GPU server services instead of local
- Update status.sh to show GPU server status instead of native services
- Rewrite MAC_MINI_SERVER.md: remove ~400 lines of Ollama/FLUX/Bot docs,
add GPU server architecture diagram and deactivation notes
- Update CAPACITY_PLANNING.md with post-offload numbers (~80-150 peak users)
Mac Mini is now a pure hosting server (Web, API, DB, Sync).
All AI workloads run on GPU server (RTX 3090) via LAN.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
patchedDependencies was already cleaned in package.json. The sed
command was mangling the JSON structure.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>