mirror of
https://github.com/Memo-2023/mana-monorepo.git
synced 2026-05-14 23:21:08 +02:00
Mirror of github.com/Memo-2023/mana-monorepo
Replaces the cross-origin call to https://mana-api.mana.how with a SvelteKit catch-all server route that proxies internally to the mana-api container over the docker network. Why --- The mana-api.mana.how cloudflared route was added as part of the production deploy of apps/api, but reloading the cloudflared LaunchDaemon to pick up the new ingress rule needs sudo. The deploy automation runs unattended (no interactive password prompt), so the cloudflared route ends up registered with Cloudflare DNS but not yet served by the local tunnel — every browser request to mana-api.mana.how gets a 404 from the catch-all rule until someone manually restarts the daemon. Same-origin proxy through mana-web sidesteps the whole problem: browser → cloudflared → mana-web (mana.how) → mana-api (docker net) mana.how is already routed, mana-web is already up, mana-api is already on the same docker network — no new cloudflared work needed. The deploy is now fully sudo-free and self-contained. What's in this commit --------------------- routes/api/v1/who/[...path]/+server.ts (NEW) Catch-all SvelteKit handler. Forwards GET/POST/PUT/DELETE to http://mana-api:3060/api/v1/who/<path> with the Authorization header from the incoming request. 30s timeout, body streamed through, status + content-type passed through 1:1, errors surface as 502 so DevTools clearly distinguishes "proxy failed" from "handler crashed". modules/who/stores/games.svelte.ts Drop the getManaApiUrl() import. API_BASE is now the constant string '/api/v1/who' — same-origin, no env injection needed. modules/who/ListView.svelte Same change for the deck-catalogue fetch on mount. The MANA_API_INTERNAL_URL env var on the proxy lets the upstream hostname be overridden for local-dev use (default http://mana-api:3060 matches the docker compose service name). Trade-off: one extra hop (mana-web in the middle) for every request. Measured in single-digit ms over the bridge network so the practical cost is invisible. The big win is the sudo-free deploy. Pattern can be reused for the other apps/api modules as their compute features come online in production — same shape, just swap [...path] segment to /api/v1/calendar/[...path], /api/v1/picture/[...path], etc. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> |
||
|---|---|---|
| .changeset | ||
| .claude | ||
| .github | ||
| .husky | ||
| apps | ||
| docker | ||
| docs | ||
| games/arcade | ||
| load-tests | ||
| NewAppIdeas/Roblox Reimagined | ||
| packages | ||
| patches | ||
| scripts | ||
| services | ||
| tests | ||
| .dockerignore | ||
| .editorconfig | ||
| .env.development | ||
| .env.macmini.example | ||
| .env.secrets.example | ||
| .gitignore | ||
| .npmrc | ||
| .nvmrc | ||
| .prettierignore | ||
| .prettierrc.json | ||
| CLAUDE.md | ||
| cloudflared-config.yml | ||
| docker-compose.dev.yml | ||
| docker-compose.macmini.yml | ||
| docker-compose.test.yml | ||
| eslint.config.mjs | ||
| gift-codes-2026-02-14.txt | ||
| lint-staged.config.js | ||
| package.json | ||
| playwright.config.ts | ||
| pnpm-lock.yaml | ||
| pnpm-workspace.yaml | ||
| README.md | ||
| TROUBLESHOOTING.md | ||
| turbo.json | ||
| vitest.config.ts | ||
Mana Monorepo
Monorepo containing all Mana projects — a self-hosted multi-app ecosystem with shared packages and unified tooling.
Projects
| Project | Description | Apps |
|---|---|---|
| mana | Multi-app ecosystem platform | Expo mobile, SvelteKit web |
| chat | AI chat application | NestJS backend, Expo mobile, SvelteKit web, Astro landing |
| todo | Task management | NestJS backend, SvelteKit web, Astro landing |
| calendar | Calendar & scheduling | NestJS backend, SvelteKit web, Astro landing |
| clock | Pomodoro & time tracking | NestJS backend, SvelteKit web, Astro landing |
| contacts | Contact management | NestJS backend, SvelteKit web |
| picture | AI image generation | NestJS backend, Expo mobile, SvelteKit web, Astro landing |
| cards | Card/deck management | NestJS backend, Expo mobile, SvelteKit web |
| zitare | Daily inspiration quotes | NestJS backend, Expo mobile, SvelteKit web, Astro landing |
| mukke | Music player | NestJS backend, SvelteKit web |
| planta | Plant care tracker | NestJS backend, SvelteKit web |
| storage | Cloud storage | NestJS backend, SvelteKit web |
| questions | Q&A with web search | SvelteKit web |
| skilltree | Skill tree visualization | NestJS backend, SvelteKit web |
| nutriphi | Nutrition tracking | NestJS backend, SvelteKit web |
| citycorners | City guide | NestJS backend, SvelteKit web, Astro landing |
| presi | Presentation tool | NestJS backend, SvelteKit web |
| photos | Photo management | NestJS backend, SvelteKit web |
Getting Started
Prerequisites
- Node.js 20+
- pnpm 9.15.0+
- Docker (for PostgreSQL, Redis, MinIO)
Installation
pnpm install
Development
# Start infrastructure (PostgreSQL, Redis, MinIO)
pnpm docker:up
# Start any app with auto DB setup
pnpm dev:chat:full
pnpm dev:todo:full
pnpm dev:calendar:full
pnpm dev:contacts:full
# Build & quality
pnpm run build
pnpm run type-check
pnpm run format
See CLAUDE.md for comprehensive development documentation.
Architecture
mana-monorepo/
├── apps/ # Product applications
├── services/ # Microservices (auth, search, LLM, bots)
├── packages/ # Shared packages
├── docker/ # Docker configuration
└── scripts/ # Development & deployment scripts
Tooling
- Package Manager: pnpm 9.15.0
- Build System: Turborepo
- Formatting: Prettier (tabs, single quotes, 100 char width)
- Hosting: Mac Mini (self-hosted) via Docker + Cloudflare Tunnel
- Analytics: Umami (stats.mana.how)
License
Private - All rights reserved