mirror of
https://github.com/Memo-2023/mana-monorepo.git
synced 2026-05-20 08:33:39 +02:00
Citycorners-Reste vom vorherigen Sprint mit committet. food → Nutriphi,
wardrobe → Werdrobe sind als Standalone-Apps live; die mana.how-unified-
App trägt die Modul-Surfaces nicht mehr.
Gelöscht / abgebaut:
- Module: apps/mana/.../modules/{food,wardrobe} + Routen + Locales
- Landing-Apps: apps/{food,citycorners}/ Top-Level
- Backend: apps/api/src/modules/{food,wardrobe} + MCP-Tools log_meal /
nutrition_summary, picture-routes verifyMediaOwnership-Allowlist
- shared-branding: APP_BRANDING, APP_ICONS, MANA_APPS, Logos, Onboarding
- shared-ai, mana-tool-registry, credits, shared-types/spaces,
shared-utils/analytics, spiral-db/MANA_APP_INDEX, website-blocks
- Cross-Module: Body-CalorieWeightChart, Comic-CharacterPicker-Wardrobe,
website-Embed wardrobe.outfits, DaySnapshot.nutrition, FoodEventType,
MealLogged/Meal*-Streaks/Goals/Companion/Trigger, AI-Agent-Policy,
GoalEditor MealLogged, MyDay/RitualRunner/Rules nutrition-Refs,
Crypto-Registry meals/wardrobeGarments/wardrobeOutfits
- Generic: PlaceCategory 'food' (places + geocoding + Locales),
spaces.ts 'food'/'wardrobe' Modul-IDs
- Infrastruktur: cloudflared, docker-compose CORS, nginx-Landing,
prometheus-Probe, load-tests, package.json dev-Scripts,
generate-env, mac-mini/build-landings, dependabot
Dexie v62 Migration:
- droppt meals, goals, foodFavorites, mealTags, wardrobeGarments,
wardrobeOutfits Tabellen
- entfernt wardrobeOutfitId / wardrobeGarmentId aus images-Index
- Upgrade-Callback strippt die toten FK-Properties aus alten image-Rows
Test/Doku:
- module-registry.test.ts: Snapshot refresht auf aktuellen Stand mit
56 Modulen (vorher 32, statisch eingefroren pre-refactor). Plus
LEGACY_TABLES-Exclusion für nicht-mehr-registrierte Tabellen aus
cards/citycorners/moodlit/rituals/wishes/who.
- streaks.test.ts: MealLogged-Test in TaskCompleted-Test umgebaut
- apps/mana/CLAUDE.md: food-Refs in AI-Tool-Tabelle und
AiProposalInbox-Liste entfernt
- validate-i18n-keys.mjs + validate-no-recursive-turbo.mjs:
existsSync-Guard, damit die Skripte mit gestaged-aber-rm'ten Dateien
klarkommen
mana-web svelte-check 0 errors / 7436 files, betroffene Tests grün
(streaks, dashboard, module-registry), validate:pg-schema,
validate:turbo, validate:i18n-parity grün.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
152 lines
4.1 KiB
Text
152 lines
4.1 KiB
Text
# Nginx Configuration for Self-Hosted Landing Pages
|
||
# Each server block serves a different landing page from its dist/ directory
|
||
# All traffic comes through Cloudflare Tunnel → localhost:4400
|
||
|
||
# Shared settings
|
||
gzip on;
|
||
gzip_vary on;
|
||
gzip_min_length 1024;
|
||
gzip_types text/plain text/css text/xml text/javascript application/javascript application/json image/svg+xml;
|
||
|
||
# ============================================
|
||
# Cardecky-Migration: 301-Redirects (2026-05-08)
|
||
# Alte cards.mana.how / cards-api.mana.how Bookmarks weiterleiten,
|
||
# bis sich Nutzer/externe Clients an die neue Domain gewöhnt haben.
|
||
# Nach 6–12 Monaten kann das wieder raus.
|
||
# ============================================
|
||
server {
|
||
listen 80;
|
||
server_name cards.mana.how cardecky.mana.how;
|
||
return 301 https://wordeck.com$request_uri;
|
||
}
|
||
|
||
server {
|
||
listen 80;
|
||
server_name cards-api.mana.how cardecky-api.mana.how;
|
||
return 301 https://api.wordeck.com$request_uri;
|
||
}
|
||
|
||
# ============================================
|
||
# mana e.V. Verein-Landing — kanonische Domain mana-ev.ch
|
||
# (Schweizer Verein in Gründung)
|
||
# Alle anderen TLDs (.com/.de/.at) und alle www-Varianten
|
||
# 301-Redirect auf https://mana-ev.ch.
|
||
# Apex `mana-ev.ch` liegt direkt am Astro-Landing-Container :3088,
|
||
# nicht hier.
|
||
# ============================================
|
||
server {
|
||
listen 80;
|
||
server_name www.mana-ev.ch
|
||
mana-ev.com www.mana-ev.com
|
||
mana-ev.de www.mana-ev.de
|
||
mana-ev.at www.mana-ev.at;
|
||
return 301 https://mana-ev.ch$request_uri;
|
||
}
|
||
|
||
# Default server (catch-all → it.mana.how as homepage)
|
||
server {
|
||
listen 80 default_server;
|
||
server_name _;
|
||
root /srv/landings/it;
|
||
index index.html;
|
||
include /etc/nginx/snippets/landing-common.conf;
|
||
}
|
||
|
||
# it.mana.how — European Tech Independence
|
||
server {
|
||
listen 80;
|
||
server_name it.mana.how;
|
||
root /srv/landings/it;
|
||
index index.html;
|
||
include /etc/nginx/snippets/landing-common.conf;
|
||
}
|
||
|
||
# chats.mana.how — Chat Landing
|
||
server {
|
||
listen 80;
|
||
server_name chats.mana.how;
|
||
root /srv/landings/chat;
|
||
index index.html;
|
||
include /etc/nginx/snippets/landing-common.conf;
|
||
}
|
||
|
||
# pics.mana.how — Picture Landing
|
||
server {
|
||
listen 80;
|
||
server_name pics.mana.how;
|
||
root /srv/landings/picture;
|
||
index index.html;
|
||
include /etc/nginx/snippets/landing-common.conf;
|
||
}
|
||
|
||
# quotess.mana.how — Quotes Landing
|
||
server {
|
||
listen 80;
|
||
server_name quotess.mana.how;
|
||
root /srv/landings/quotes;
|
||
index index.html;
|
||
include /etc/nginx/snippets/landing-common.conf;
|
||
}
|
||
|
||
# presis.mana.how — Presi Landing
|
||
server {
|
||
listen 80;
|
||
server_name presis.mana.how;
|
||
root /srv/landings/presi;
|
||
index index.html;
|
||
include /etc/nginx/snippets/landing-common.conf;
|
||
}
|
||
|
||
# clocks.mana.how — Clock Landing
|
||
server {
|
||
listen 80;
|
||
server_name clocks.mana.how;
|
||
root /srv/landings/clock;
|
||
index index.html;
|
||
include /etc/nginx/snippets/landing-common.conf;
|
||
}
|
||
|
||
|
||
|
||
# docs.mana.how — Documentation
|
||
server {
|
||
listen 80;
|
||
server_name docs.mana.how;
|
||
root /srv/landings/docs;
|
||
index index.html;
|
||
include /etc/nginx/snippets/landing-common.conf;
|
||
}
|
||
|
||
# status.mana.how — Public Status Page (generated by mana-status-gen every 60s)
|
||
server {
|
||
listen 80;
|
||
server_name status.mana.how;
|
||
root /srv/landings/status;
|
||
index index.html;
|
||
|
||
add_header X-Frame-Options "SAMEORIGIN" always;
|
||
add_header X-Content-Type-Options "nosniff" always;
|
||
add_header Cache-Control "no-store" always;
|
||
|
||
# Allow ManaScore page to fetch status.json
|
||
add_header Access-Control-Allow-Origin "*" always;
|
||
add_header Access-Control-Allow-Methods "GET" always;
|
||
|
||
location / {
|
||
try_files $uri /index.html;
|
||
}
|
||
|
||
# Serve status.json directly (do not rewrite to index.html)
|
||
location = /status.json {
|
||
add_header Content-Type "application/json" always;
|
||
add_header Cache-Control "no-store" always;
|
||
add_header Access-Control-Allow-Origin "*" always;
|
||
try_files $uri =404;
|
||
}
|
||
|
||
location /health {
|
||
access_log off;
|
||
return 200 "healthy\n";
|
||
add_header Content-Type text/plain;
|
||
}
|
||
}
|