mirror of
https://github.com/Memo-2023/mana-monorepo.git
synced 2026-05-14 20:21:09 +02:00
docs(voxel-lava): add project documentation and env config
- Add CLAUDE.md with project overview, API endpoints, and setup guide - Add voxel-lava environment variables to .env.development 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
1c64359b18
commit
658ebe08fe
2 changed files with 152 additions and 0 deletions
|
|
@ -134,3 +134,11 @@ QUOTE_DATABASE_URL=postgresql://manacore:devpassword@localhost:5432/quote
|
||||||
|
|
||||||
PRESI_BACKEND_PORT=3008
|
PRESI_BACKEND_PORT=3008
|
||||||
PRESI_DATABASE_URL=postgresql://manacore:devpassword@localhost:5432/presi
|
PRESI_DATABASE_URL=postgresql://manacore:devpassword@localhost:5432/presi
|
||||||
|
|
||||||
|
# ============================================
|
||||||
|
# VOXEL-LAVA PROJECT
|
||||||
|
# ============================================
|
||||||
|
|
||||||
|
VOXEL_LAVA_BACKEND_PORT=3010
|
||||||
|
VOXEL_LAVA_DATABASE_URL=postgresql://manacore:devpassword@localhost:5432/voxel_lava
|
||||||
|
VOXEL_LAVA_API_URL=http://localhost:3010
|
||||||
|
|
|
||||||
144
games/voxel-lava/CLAUDE.md
Normal file
144
games/voxel-lava/CLAUDE.md
Normal file
|
|
@ -0,0 +1,144 @@
|
||||||
|
# Voxel-Lava Project Guide
|
||||||
|
|
||||||
|
## Project Overview
|
||||||
|
|
||||||
|
Voxel-Lava is a 3D voxel building and platforming game built with SvelteKit and Three.js. Players can create levels, share them publicly, and play levels created by others.
|
||||||
|
|
||||||
|
## Project Structure
|
||||||
|
|
||||||
|
```
|
||||||
|
games/voxel-lava/
|
||||||
|
├── apps/
|
||||||
|
│ ├── web/ # SvelteKit web application (@voxel-lava/web)
|
||||||
|
│ └── backend/ # NestJS API server (@voxel-lava/backend)
|
||||||
|
├── packages/ # Shared code (optional)
|
||||||
|
├── package.json # Workspace root
|
||||||
|
├── pnpm-workspace.yaml
|
||||||
|
├── turbo.json
|
||||||
|
└── CLAUDE.md
|
||||||
|
```
|
||||||
|
|
||||||
|
## Commands
|
||||||
|
|
||||||
|
### Root Level (from monorepo root)
|
||||||
|
```bash
|
||||||
|
pnpm voxel-lava:dev # Run web + backend
|
||||||
|
pnpm dev:voxel-lava:web # Start web app only
|
||||||
|
pnpm dev:voxel-lava:backend # Start backend only
|
||||||
|
pnpm voxel-lava:db:push # Push DB schema
|
||||||
|
pnpm voxel-lava:db:studio # Open Drizzle Studio
|
||||||
|
```
|
||||||
|
|
||||||
|
### Backend (games/voxel-lava/apps/backend)
|
||||||
|
```bash
|
||||||
|
pnpm start:dev # Start with hot reload
|
||||||
|
pnpm build # Build for production
|
||||||
|
pnpm migration:generate # Generate DB migration
|
||||||
|
pnpm migration:run # Run migrations
|
||||||
|
pnpm db:push # Push schema directly
|
||||||
|
pnpm db:studio # Open Drizzle Studio
|
||||||
|
```
|
||||||
|
|
||||||
|
### Web App (games/voxel-lava/apps/web)
|
||||||
|
```bash
|
||||||
|
pnpm dev # Start dev server (port 5180)
|
||||||
|
pnpm build # Build for production
|
||||||
|
pnpm preview # Preview production build
|
||||||
|
pnpm check # Type check
|
||||||
|
```
|
||||||
|
|
||||||
|
## Technology Stack
|
||||||
|
|
||||||
|
- **Web**: SvelteKit 2.x, Svelte 5, Three.js, Tailwind CSS
|
||||||
|
- **Backend**: NestJS 10, Drizzle ORM, PostgreSQL
|
||||||
|
- **Auth**: Mana Core Auth Service (centralized)
|
||||||
|
- **Database**: PostgreSQL (voxel_lava database)
|
||||||
|
|
||||||
|
## Architecture
|
||||||
|
|
||||||
|
### Backend API Endpoints
|
||||||
|
|
||||||
|
| Endpoint | Method | Auth | Description |
|
||||||
|
|----------|--------|------|-------------|
|
||||||
|
| `/api/health` | GET | No | Health check |
|
||||||
|
| `/api/levels/public` | GET | No | List public levels (paginated) |
|
||||||
|
| `/api/levels` | GET | Yes | List user's levels |
|
||||||
|
| `/api/levels/:id` | GET | No | Get level by ID |
|
||||||
|
| `/api/levels` | POST | Yes | Create new level |
|
||||||
|
| `/api/levels/:id` | PUT | Yes | Update level (owner only) |
|
||||||
|
| `/api/levels/:id` | DELETE | Yes | Delete level (owner only) |
|
||||||
|
| `/api/levels/:id/like` | POST | Yes | Toggle like |
|
||||||
|
| `/api/levels/:id/liked` | GET | Yes | Check if liked |
|
||||||
|
| `/api/levels/:id/play` | POST | No | Record play attempt |
|
||||||
|
| `/api/levels/:id/leaderboard` | GET | No | Get top completions |
|
||||||
|
|
||||||
|
### Database Schema
|
||||||
|
|
||||||
|
**levels** - Main level storage
|
||||||
|
- `id`, `name`, `description`, `userId`
|
||||||
|
- `voxelData` (JSONB) - Block data
|
||||||
|
- `spawnPoint`, `worldSize` (JSONB)
|
||||||
|
- `isPublic`, `playCount`, `likesCount`
|
||||||
|
- `difficulty`, `tags`, `thumbnailUrl`
|
||||||
|
|
||||||
|
**level_likes** - Like tracking (unique per user/level)
|
||||||
|
|
||||||
|
**level_plays** - Play statistics and leaderboard data
|
||||||
|
|
||||||
|
### Block Types
|
||||||
|
|
||||||
|
- `grass` - Standard ground block
|
||||||
|
- `lava` - Deadly, player sinks and respawns
|
||||||
|
- `ice` - Slippery surface
|
||||||
|
- `goal` - Level completion trigger
|
||||||
|
- `spawn` - Player spawn point
|
||||||
|
- `fragile` - Breaks after stepping on
|
||||||
|
- `trampoline` - Bounces player
|
||||||
|
|
||||||
|
## Environment Variables
|
||||||
|
|
||||||
|
### Backend (.env)
|
||||||
|
```
|
||||||
|
DATABASE_URL=postgresql://manacore:devpassword@localhost:5432/voxel_lava
|
||||||
|
MANA_CORE_AUTH_URL=http://localhost:3001
|
||||||
|
PORT=3010
|
||||||
|
```
|
||||||
|
|
||||||
|
### Web (.env)
|
||||||
|
```
|
||||||
|
PUBLIC_VOXEL_LAVA_API_URL=http://localhost:3010
|
||||||
|
PUBLIC_MANA_CORE_AUTH_URL=http://localhost:3001
|
||||||
|
```
|
||||||
|
|
||||||
|
## Development Setup
|
||||||
|
|
||||||
|
1. Start Docker infrastructure:
|
||||||
|
```bash
|
||||||
|
pnpm docker:up
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Push database schema:
|
||||||
|
```bash
|
||||||
|
pnpm voxel-lava:db:push
|
||||||
|
```
|
||||||
|
|
||||||
|
3. Start development:
|
||||||
|
```bash
|
||||||
|
pnpm voxel-lava:dev
|
||||||
|
```
|
||||||
|
|
||||||
|
4. Open http://localhost:5180
|
||||||
|
|
||||||
|
## Code Style Guidelines
|
||||||
|
|
||||||
|
- **TypeScript**: Strict typing
|
||||||
|
- **Web**: Svelte 5 runes mode
|
||||||
|
- **Styling**: Tailwind CSS
|
||||||
|
- **Formatting**: Prettier with 2 space indentation
|
||||||
|
|
||||||
|
## Important Notes
|
||||||
|
|
||||||
|
1. **Three.js Game Logic**: Located in `apps/web/src/lib/` - PlayerController.ts, BlockTypes.ts
|
||||||
|
2. **Auth**: Uses Mana Core Auth Service - tokens stored in localStorage
|
||||||
|
3. **Voxel Data**: Stored as JSONB with position keys (e.g., "1,2,3")
|
||||||
|
4. **No PocketBase**: Migrated to NestJS + PostgreSQL backend
|
||||||
Loading…
Add table
Add a link
Reference in a new issue