mirror of
https://github.com/Memo-2023/mana-monorepo.git
synced 2026-05-14 20:21:09 +02:00
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>
305 lines
9.7 KiB
Markdown
305 lines
9.7 KiB
Markdown
# CLAUDE.md
|
|
|
|
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
|
|
|
## Monorepo Overview
|
|
|
|
This is a pnpm workspace monorepo containing multiple product applications with shared packages. All projects use Supabase for database/auth and follow similar architectural patterns.
|
|
|
|
**Package Manager:** pnpm 9.15.0 (use `pnpm` for all commands)
|
|
**Build System:** Turborepo
|
|
**Node Version:** 20+
|
|
|
|
## Projects
|
|
|
|
| Project | Description | Apps |
|
|
| ------------ | ---------------------------- | --------------------------------------------------------- |
|
|
| **manacore** | Multi-app ecosystem platform | Expo mobile, SvelteKit web |
|
|
| **manadeck** | Card/deck management | NestJS backend, Expo mobile, SvelteKit web |
|
|
| **picture** | AI image generation | Expo mobile, SvelteKit web, Astro landing |
|
|
| **chat** | AI chat application | NestJS backend, Expo mobile, SvelteKit web, Astro landing |
|
|
| **zitare** | Daily inspiration quotes | NestJS backend, Expo mobile, SvelteKit web, Astro landing |
|
|
| **presi** | Presentation tool | NestJS backend, Expo mobile, SvelteKit web |
|
|
|
|
### Archived Projects (`apps-archived/`)
|
|
|
|
These projects are temporarily archived and excluded from the workspace. To re-activate, move back to `apps/`.
|
|
|
|
| Project | Description |
|
|
| ------------------ | -------------------------------- |
|
|
| **bauntown** | Community website for developers |
|
|
| **maerchenzauber** | AI story generation |
|
|
| **memoro** | Voice memo & AI analysis |
|
|
| **news** | News aggregation |
|
|
| **nutriphi** | Nutrition tracking |
|
|
| **reader** | Reading app |
|
|
| **uload** | URL shortener |
|
|
| **wisekeep** | AI wisdom extraction from video |
|
|
|
|
## Development Commands
|
|
|
|
```bash
|
|
# Install dependencies
|
|
pnpm install
|
|
|
|
# Start specific project (runs all apps in project)
|
|
pnpm run manacore:dev
|
|
pnpm run manadeck:dev
|
|
pnpm run picture:dev
|
|
pnpm run chat:dev
|
|
pnpm run zitare:dev
|
|
pnpm run presi:dev
|
|
|
|
# Start specific app within project
|
|
pnpm run dev:chat:mobile # Just mobile app
|
|
pnpm run dev:chat:backend # Just NestJS backend
|
|
pnpm run dev:chat:app # Web + backend together
|
|
|
|
# Build & quality
|
|
pnpm run build
|
|
pnpm run type-check
|
|
pnpm run format
|
|
```
|
|
|
|
Each project has its own `CLAUDE.md` with detailed project-specific commands.
|
|
|
|
## Architecture Patterns
|
|
|
|
### Monorepo Structure
|
|
|
|
```
|
|
manacore-monorepo/
|
|
├── apps/ # Active SaaS product applications
|
|
│ ├── chat/
|
|
│ │ ├── apps/
|
|
│ │ │ ├── backend/ # NestJS API
|
|
│ │ │ ├── mobile/ # Expo React Native app
|
|
│ │ │ ├── web/ # SvelteKit web app
|
|
│ │ │ └── landing/ # Astro marketing page
|
|
│ │ └── packages/ # Project-specific shared code
|
|
│ ├── manadeck/
|
|
│ ├── picture/
|
|
│ └── ...
|
|
├── apps-archived/ # Archived apps (excluded from workspace)
|
|
│ ├── bauntown/
|
|
│ ├── maerchenzauber/
|
|
│ ├── memoro/
|
|
│ ├── news/
|
|
│ ├── nutriphi/
|
|
│ ├── reader/
|
|
│ ├── uload/
|
|
│ └── wisekeep/
|
|
├── games/ # Game projects
|
|
│ └── {game-name}/ # Individual games
|
|
├── services/ # Standalone microservices
|
|
│ └── mana-core-auth/ # Central authentication service
|
|
├── packages/ # Monorepo-wide shared packages
|
|
└── docker/ # Docker configuration files
|
|
```
|
|
|
|
### Standard Project Structure (inside apps/)
|
|
|
|
```
|
|
apps/{project}/
|
|
├── apps/
|
|
│ ├── backend/ # NestJS API (when present)
|
|
│ ├── mobile/ # Expo React Native app
|
|
│ ├── web/ # SvelteKit web app
|
|
│ └── landing/ # Astro marketing page
|
|
├── packages/ # Project-specific shared code
|
|
└── package.json
|
|
```
|
|
|
|
### Technology Stack by App Type
|
|
|
|
**Mobile Apps (Expo):**
|
|
|
|
- React Native 0.76-0.81 + Expo SDK 52-54
|
|
- Expo Router (file-based routing)
|
|
- NativeWind (Tailwind for React Native)
|
|
- Zustand (state management)
|
|
|
|
**Web Apps (SvelteKit):**
|
|
|
|
- SvelteKit 2.x + Svelte 5
|
|
- Tailwind CSS
|
|
- Supabase SSR auth
|
|
|
|
**Landing Pages (Astro):**
|
|
|
|
- Astro 5.x
|
|
- Tailwind CSS
|
|
- Static site generation
|
|
|
|
**Backends (NestJS):**
|
|
|
|
- NestJS 10-11
|
|
- TypeScript
|
|
- Supabase integration
|
|
|
|
### Authentication Architecture
|
|
|
|
All projects use a **middleware-based authentication** pattern via Mana Core:
|
|
|
|
- Middleware issues: `manaToken`, `appToken` (Supabase-compatible JWT), `refreshToken`
|
|
- Mobile apps use `@manacore/shared-auth` package for auth services
|
|
- Tokens stored via platform-specific storage (SecureStore on mobile, localStorage on web)
|
|
- Supabase RLS policies use JWT claims (`sub`, `role`, `app_id`)
|
|
|
|
### Svelte 5 Runes Mode (Web Apps)
|
|
|
|
All SvelteKit apps use Svelte 5 runes:
|
|
|
|
```typescript
|
|
// CORRECT - Svelte 5
|
|
let count = $state(0);
|
|
let doubled = $derived(count * 2);
|
|
$effect(() => {
|
|
console.log(count);
|
|
});
|
|
|
|
// WRONG - Old Svelte syntax
|
|
let count = 0;
|
|
$: doubled = count * 2;
|
|
```
|
|
|
|
## Shared Packages (`packages/`)
|
|
|
|
| Package | Purpose |
|
|
| --------------------------- | ------------------------------------------------------- |
|
|
| `@manacore/shared-auth` | Configurable auth service, token manager, JWT utilities |
|
|
| `@manacore/shared-supabase` | Unified Supabase client |
|
|
| `@manacore/shared-types` | Common TypeScript types |
|
|
| `@manacore/shared-utils` | Utility functions |
|
|
| `@manacore/shared-ui` | React Native UI components |
|
|
| `@manacore/shared-theme` | Theme configuration |
|
|
| `@manacore/shared-i18n` | Internationalization |
|
|
|
|
Import shared packages:
|
|
|
|
```typescript
|
|
import { createAuthService } from '@manacore/shared-auth';
|
|
import { formatDate, truncate } from '@manacore/shared-utils';
|
|
```
|
|
|
|
## Database (Supabase)
|
|
|
|
- All projects use Supabase for PostgreSQL database, auth, and storage
|
|
- Row Level Security (RLS) policies enforce access control via JWT claims
|
|
- Each project has its own Supabase project/schema
|
|
- Types typically generated via `supabase gen types`
|
|
|
|
## Adding Dependencies
|
|
|
|
```bash
|
|
# Add to workspace root (dev tools only)
|
|
pnpm add -D <package> -w
|
|
|
|
# Add to specific project
|
|
pnpm add <package> --filter memoro
|
|
|
|
# Add to specific app within project
|
|
pnpm add <package> --filter @memoro/mobile
|
|
|
|
# Add to shared package
|
|
pnpm add <package> --filter @manacore/shared-utils
|
|
```
|
|
|
|
## Environment Variables
|
|
|
|
### Centralized Development Environment
|
|
|
|
All development environment variables are managed from a single file: `.env.development`
|
|
|
|
```bash
|
|
# First-time setup: generates all app-specific .env files
|
|
pnpm setup:env
|
|
|
|
# This also runs automatically after `pnpm install`
|
|
```
|
|
|
|
The script reads `.env.development` and generates platform-specific `.env` files for each app with the correct prefixes:
|
|
|
|
- **Expo mobile**: `EXPO_PUBLIC_*` prefix
|
|
- **SvelteKit web**: `PUBLIC_*` prefix
|
|
- **NestJS backend**: No prefix
|
|
|
|
### Key Files
|
|
|
|
- `.env.development` - Central source of truth (committed to git)
|
|
- `scripts/generate-env.mjs` - Generation script
|
|
- `apps/**/apps/**/.env` - Generated files (gitignored)
|
|
|
|
### Adding New Variables
|
|
|
|
1. Add the variable to `.env.development`
|
|
2. Update `scripts/generate-env.mjs` to map it to the appropriate apps
|
|
3. Run `pnpm setup:env` to regenerate
|
|
|
|
### Platform Prefix Patterns
|
|
|
|
**Mobile (Expo):**
|
|
|
|
```
|
|
EXPO_PUBLIC_SUPABASE_URL=...
|
|
EXPO_PUBLIC_SUPABASE_ANON_KEY=...
|
|
EXPO_PUBLIC_MIDDLEWARE_API_URL=...
|
|
```
|
|
|
|
**Web (SvelteKit):**
|
|
|
|
```
|
|
PUBLIC_SUPABASE_URL=...
|
|
PUBLIC_SUPABASE_ANON_KEY=...
|
|
```
|
|
|
|
**Backend (NestJS):**
|
|
|
|
```
|
|
SUPABASE_URL=...
|
|
SUPABASE_SERVICE_ROLE_KEY=...
|
|
PORT=...
|
|
```
|
|
|
|
## Project-Specific Documentation
|
|
|
|
- **[docs/ENVIRONMENT_VARIABLES.md](docs/ENVIRONMENT_VARIABLES.md)** - Complete environment setup guide
|
|
|
|
Each project has its own `CLAUDE.md` with detailed information:
|
|
|
|
- `apps/manacore/CLAUDE.md` - Multi-app ecosystem, auth details
|
|
- `apps/manadeck/CLAUDE.md` - Card/deck management
|
|
- `apps/chat/CLAUDE.md` - Chat API endpoints, AI models
|
|
- `apps/picture/CLAUDE.md` - AI image generation
|
|
- `services/mana-core-auth/` - Central authentication service
|
|
|
|
Navigate to the specific project directory to work on it.
|
|
|
|
## Code Quality Infrastructure (TODO)
|
|
|
|
A detailed plan for code quality tooling is available at `.claude/plans/proud-dancing-moon.md`. When ready to implement:
|
|
|
|
### Planned Setup
|
|
|
|
- **Pre-commit hooks**: Husky + lint-staged (format + lint on commit)
|
|
- **Commit messages**: Commitlint with Conventional Commits (`feat:`, `fix:`, `docs:`, etc.)
|
|
- **CI Pipeline**: GitHub Actions PR checks (lint, format, type-check, tests)
|
|
- **Formatting**: Tabs, single quotes, 100 char width (unified across all projects)
|
|
- **Test coverage**: 80% minimum for new code (once testing infrastructure is in place)
|
|
|
|
### Key Files to Create
|
|
|
|
```
|
|
.husky/pre-commit # Run lint-staged
|
|
.husky/commit-msg # Run commitlint
|
|
commitlint.config.js # Conventional commit rules
|
|
.github/workflows/pr-check.yml # CI pipeline
|
|
packages/eslint-config/ # Shared ESLint configuration
|
|
```
|
|
|
|
### Current State
|
|
|
|
- Testing: ~25 test files total (sparse coverage)
|
|
- Linting: Fragmented configs across projects
|
|
- CI: Only 2 backend deployment workflows exist
|
|
- Pre-commit: Only maerchenzauber has Husky (SSH URL fixer only)
|