rename(mana-games): rebrand to Arcade
Rename games/mana-games/ to games/arcade/, update all package names (@mana-games/* → @arcade/*), appIds, display names, docker-compose service, root scripts, and documentation. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
|
@ -62,7 +62,7 @@ For comprehensive guidelines on code patterns and conventions, see the `.claude/
|
|||
|
||||
| Game | Description | Tech |
|
||||
|------|-------------|------|
|
||||
| **mana-games** | AI browser games platform (22+ games) | SvelteKit, NestJS, Gemini/Claude/GPT |
|
||||
| **arcade** | AI browser games platform (22+ games) | SvelteKit, NestJS, Gemini/Claude/GPT |
|
||||
| **voxelava** | Voxel game | SvelteKit |
|
||||
| **whopixels** | Phaser.js pixel game | Phaser, JavaScript |
|
||||
| **worldream** | World exploration game | SvelteKit |
|
||||
|
|
@ -153,7 +153,7 @@ manacore-monorepo/
|
|||
│ ├── uload/
|
||||
│ └── wisekeep/
|
||||
├── games/ # Game projects
|
||||
│ ├── mana-games/ # AI browser games platform (SvelteKit + NestJS)
|
||||
│ ├── arcade/ # AI browser games platform (SvelteKit + NestJS)
|
||||
│ ├── voxelava/ # Voxel game
|
||||
│ ├── whopixels/ # Phaser.js pixel game
|
||||
│ └── worldream/ # World exploration game
|
||||
|
|
|
|||
|
|
@ -1329,12 +1329,12 @@ services:
|
|||
retries: 3
|
||||
start_period: 20s
|
||||
|
||||
mana-games-web:
|
||||
arcade-web:
|
||||
build:
|
||||
context: .
|
||||
dockerfile: games/mana-games/apps/web/Dockerfile
|
||||
image: mana-games-web:local
|
||||
container_name: mana-app-mana-games-web
|
||||
dockerfile: games/arcade/apps/web/Dockerfile
|
||||
image: arcade-web:local
|
||||
container_name: mana-app-arcade-web
|
||||
restart: always
|
||||
mem_limit: 128m
|
||||
depends_on:
|
||||
|
|
|
|||
|
|
@ -1,13 +1,13 @@
|
|||
# Mana Games - CLAUDE.md
|
||||
# Arcade - CLAUDE.md
|
||||
|
||||
AI-powered browser games platform mit 22+ Spielen und KI-Spielgenerierung.
|
||||
|
||||
## Projektstruktur
|
||||
|
||||
```
|
||||
games/mana-games/
|
||||
games/arcade/
|
||||
├── apps/
|
||||
│ ├── web/ # SvelteKit Web-App (@mana-games/web)
|
||||
│ ├── web/ # SvelteKit Web-App (@arcade/web)
|
||||
│ │ ├── src/
|
||||
│ │ │ ├── routes/ # SvelteKit-Routen
|
||||
│ │ │ │ ├── (app)/ # App-Routen mit PillNavigation
|
||||
|
|
@ -27,12 +27,12 @@ games/mana-games/
|
|||
│ │ ├── games/ # 22 HTML-Spiele
|
||||
│ │ └── screenshots/ # Game-Thumbnails
|
||||
│ ├── web-astro/ # Alte Astro-App (Referenz, zum Löschen)
|
||||
│ └── backend/ # NestJS API (@mana-games/backend)
|
||||
│ └── backend/ # NestJS API (@arcade/backend)
|
||||
│ └── src/
|
||||
│ ├── game-generator/ # AI-Spielgenerierung (Gemini, Claude, GPT-4)
|
||||
│ ├── game-submission/ # Community-Einreichungen (GitHub API)
|
||||
│ └── health/
|
||||
└── package.json # Root (mana-games)
|
||||
└── package.json # Root (arcade)
|
||||
```
|
||||
|
||||
## Tech Stack
|
||||
|
|
@ -53,16 +53,16 @@ games/mana-games/
|
|||
|
||||
```bash
|
||||
# Alles starten (Web + Backend)
|
||||
pnpm mana-games:dev
|
||||
pnpm arcade:dev
|
||||
|
||||
# Nur Web (SvelteKit)
|
||||
pnpm dev:mana-games:web
|
||||
pnpm dev:arcade:web
|
||||
|
||||
# Nur Backend (NestJS)
|
||||
pnpm dev:mana-games:backend
|
||||
pnpm dev:arcade:backend
|
||||
|
||||
# Web + Backend zusammen
|
||||
pnpm dev:mana-games:app
|
||||
pnpm dev:arcade:app
|
||||
```
|
||||
|
||||
**Ports:**
|
||||
|
|
@ -126,7 +126,7 @@ MANA_GAMES_AZURE_OPENAI_API_KEY=your_key
|
|||
MANA_GAMES_AZURE_OPENAI_DEPLOYMENT=gpt-4o
|
||||
MANA_GAMES_GITHUB_TOKEN=your_token
|
||||
MANA_GAMES_GITHUB_OWNER=tillschneider
|
||||
MANA_GAMES_GITHUB_REPO=mana-games
|
||||
MANA_GAMES_GITHUB_REPO=arcade
|
||||
```
|
||||
|
||||
## Spiel hinzufügen
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"name": "@mana-games/backend",
|
||||
"name": "@arcade/backend",
|
||||
"version": "1.0.0",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
|
|
@ -32,6 +32,6 @@ async function bootstrap() {
|
|||
const server = await app.listen(port);
|
||||
server.setTimeout(120000);
|
||||
|
||||
console.log(`Mana Games backend running on http://localhost:${port}`);
|
||||
console.log(`Arcade backend running on http://localhost:${port}`);
|
||||
}
|
||||
bootstrap();
|
||||
|
|
@ -4,21 +4,21 @@ FROM sveltekit-base:local AS builder
|
|||
ARG PUBLIC_MANA_CORE_AUTH_URL=http://mana-auth:3001
|
||||
ENV PUBLIC_MANA_CORE_AUTH_URL=$PUBLIC_MANA_CORE_AUTH_URL
|
||||
|
||||
COPY games/mana-games/apps/web ./games/mana-games/apps/web
|
||||
COPY games/arcade/apps/web ./games/arcade/apps/web
|
||||
|
||||
RUN --mount=type=cache,id=pnpm,target=/root/.local/share/pnpm/store \
|
||||
pnpm install --no-frozen-lockfile --ignore-scripts
|
||||
|
||||
WORKDIR /app/games/mana-games/apps/web
|
||||
WORKDIR /app/games/arcade/apps/web
|
||||
RUN pnpm exec svelte-kit sync
|
||||
RUN NODE_OPTIONS="--max-old-space-size=4096" pnpm build
|
||||
|
||||
FROM node:20-alpine AS production
|
||||
WORKDIR /app/games/mana-games/apps/web
|
||||
WORKDIR /app/games/arcade/apps/web
|
||||
COPY --from=builder /app/node_modules/.pnpm /app/node_modules/.pnpm
|
||||
COPY --from=builder /app/games/mana-games/apps/web/node_modules ./node_modules
|
||||
COPY --from=builder /app/games/mana-games/apps/web/build ./build
|
||||
COPY --from=builder /app/games/mana-games/apps/web/package.json ./
|
||||
COPY --from=builder /app/games/arcade/apps/web/node_modules ./node_modules
|
||||
COPY --from=builder /app/games/arcade/apps/web/build ./build
|
||||
COPY --from=builder /app/games/arcade/apps/web/package.json ./
|
||||
|
||||
EXPOSE 5210
|
||||
ENV NODE_ENV=production PORT=5210 HOST=0.0.0.0
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"name": "@mana-games/web",
|
||||
"name": "@arcade/web",
|
||||
"version": "0.1.0",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
|
|
@ -2,7 +2,7 @@ import { initErrorTracking, handleSvelteError } from '@manacore/shared-error-tra
|
|||
import type { HandleClientError } from '@sveltejs/kit';
|
||||
|
||||
initErrorTracking({
|
||||
serviceName: 'mana-games-web',
|
||||
serviceName: 'arcade-web',
|
||||
dsn: (window as any).__PUBLIC_GLITCHTIP_DSN__,
|
||||
environment: import.meta.env.MODE,
|
||||
});
|
||||
|
|
@ -29,7 +29,7 @@ export interface LocalFavorite extends BaseRecord {
|
|||
const SYNC_SERVER_URL = import.meta.env.PUBLIC_SYNC_SERVER_URL || 'http://localhost:3050';
|
||||
|
||||
export const gamesStore = createLocalStore({
|
||||
appId: 'mana-games',
|
||||
appId: 'arcade',
|
||||
collections: [
|
||||
{
|
||||
name: 'gameStats',
|
||||
|
|
@ -11,7 +11,7 @@ register('en', () => import('./locales/en.json'));
|
|||
|
||||
function getInitialLocale(): SupportedLocale {
|
||||
if (browser) {
|
||||
const stored = localStorage.getItem('mana_games_locale');
|
||||
const stored = localStorage.getItem('arcade_locale');
|
||||
if (stored && supportedLocales.includes(stored as SupportedLocale)) {
|
||||
return stored as SupportedLocale;
|
||||
}
|
||||
|
|
@ -31,7 +31,7 @@ init({
|
|||
export function setLocale(newLocale: SupportedLocale) {
|
||||
locale.set(newLocale);
|
||||
if (browser) {
|
||||
localStorage.setItem('mana_games_locale', newLocale);
|
||||
localStorage.setItem('arcade_locale', newLocale);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"app": {
|
||||
"name": "Mana Games",
|
||||
"name": "Arcade",
|
||||
"loading": "Wird geladen..."
|
||||
},
|
||||
"nav": {
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"app": {
|
||||
"name": "Mana Games",
|
||||
"name": "Arcade",
|
||||
"loading": "Loading..."
|
||||
},
|
||||
"nav": {
|
||||
|
|
@ -3,6 +3,6 @@ import { authStore } from '$lib/stores/auth.svelte';
|
|||
|
||||
export const feedbackService = createFeedbackService({
|
||||
apiUrl: import.meta.env.DEV ? 'http://localhost:3001' : 'https://auth.mana.how',
|
||||
appId: 'mana-games',
|
||||
appId: 'arcade',
|
||||
getAuthToken: async () => authStore.getAccessToken(),
|
||||
});
|
||||
|
|
@ -5,7 +5,7 @@ const onboardingSteps: AppOnboardingStep[] = [
|
|||
{
|
||||
id: 'features',
|
||||
type: 'info',
|
||||
question: 'Willkommen bei Mana Games!',
|
||||
question: 'Willkommen bei Arcade!',
|
||||
description: 'Das erwartet dich:',
|
||||
emoji: '🎮',
|
||||
gradient: { from: 'green-500', to: 'green-700' },
|
||||
|
|
@ -33,7 +33,7 @@ const onboardingSteps: AppOnboardingStep[] = [
|
|||
];
|
||||
|
||||
export const gamesOnboarding = createAppOnboardingStore({
|
||||
appId: 'mana-games',
|
||||
appId: 'arcade',
|
||||
steps: onboardingSteps,
|
||||
userSettings,
|
||||
onComplete: async () => {},
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
import { createSimpleNavigationStores } from '@manacore/shared-stores';
|
||||
|
||||
export const { isNavCollapsed } = createSimpleNavigationStores({
|
||||
storageKey: 'mana-games',
|
||||
storageKey: 'arcade',
|
||||
});
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
import { createThemeStore } from '@manacore/shared-theme';
|
||||
|
||||
export const theme = createThemeStore({
|
||||
appId: 'mana-games',
|
||||
appId: 'arcade',
|
||||
defaultVariant: 'lume',
|
||||
});
|
||||
|
|
@ -12,7 +12,7 @@ function getAuthUrl(): string {
|
|||
}
|
||||
|
||||
export const userSettings = createUserSettingsStore({
|
||||
appId: 'mana-games',
|
||||
appId: 'arcade',
|
||||
authUrl: getAuthUrl,
|
||||
getAccessToken: () => authStore.getAccessToken(),
|
||||
});
|
||||
|
|
@ -40,12 +40,12 @@
|
|||
let showGuestWelcome = $state(false);
|
||||
|
||||
function initGuestWelcome() {
|
||||
if (!authStore.isAuthenticated && shouldShowGuestWelcome('mana-games')) {
|
||||
if (!authStore.isAuthenticated && shouldShowGuestWelcome('arcade')) {
|
||||
showGuestWelcome = true;
|
||||
}
|
||||
}
|
||||
|
||||
const appItems = getPillAppItems('mana-games');
|
||||
const appItems = getPillAppItems('arcade');
|
||||
|
||||
let { children } = $props();
|
||||
|
||||
|
|
@ -134,7 +134,7 @@
|
|||
];
|
||||
|
||||
const navItems = $derived(
|
||||
filterHiddenNavItems('mana-games', baseNavItems, userSettings.nav?.hiddenNavItems || {})
|
||||
filterHiddenNavItems('arcade', baseNavItems, userSettings.nav?.hiddenNavItems || {})
|
||||
);
|
||||
|
||||
function handleKeydown(event: KeyboardEvent) {
|
||||
|
|
@ -148,7 +148,7 @@
|
|||
isCollapsed = collapsed;
|
||||
collapsedStore.set(collapsed);
|
||||
if (typeof localStorage !== 'undefined') {
|
||||
localStorage.setItem('mana-games-nav-collapsed', String(collapsed));
|
||||
localStorage.setItem('arcade-nav-collapsed', String(collapsed));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -174,7 +174,7 @@
|
|||
tagMutations.startSync(getToken);
|
||||
}
|
||||
|
||||
const savedCollapsed = localStorage.getItem('mana-games-nav-collapsed');
|
||||
const savedCollapsed = localStorage.getItem('arcade-nav-collapsed');
|
||||
if (savedCollapsed === 'true') {
|
||||
isCollapsed = true;
|
||||
collapsedStore.set(true);
|
||||
|
|
@ -195,7 +195,7 @@
|
|||
<PillNavigation
|
||||
items={navItems}
|
||||
currentPath={$page.url.pathname}
|
||||
appName="Mana Games"
|
||||
appName="Arcade"
|
||||
homeRoute="/"
|
||||
onToggleTheme={handleToggleTheme}
|
||||
{isDark}
|
||||
|
|
@ -244,11 +244,11 @@
|
|||
</div>
|
||||
|
||||
{#if gamesOnboarding.shouldShow}
|
||||
<MiniOnboardingModal store={gamesOnboarding} appName="Mana Games" appEmoji="🎮" />
|
||||
<MiniOnboardingModal store={gamesOnboarding} appName="Arcade" appEmoji="🎮" />
|
||||
{/if}
|
||||
|
||||
<GuestWelcomeModal
|
||||
appId="mana-games"
|
||||
appId="arcade"
|
||||
visible={showGuestWelcome}
|
||||
onClose={() => (showGuestWelcome = false)}
|
||||
onLogin={() => goto('/login')}
|
||||
|
|
@ -3,7 +3,7 @@
|
|||
</script>
|
||||
|
||||
<svelte:head>
|
||||
<title>{$_('nav.community')} - Mana Games</title>
|
||||
<title>{$_('nav.community')} - Arcade</title>
|
||||
</svelte:head>
|
||||
|
||||
<div class="space-y-6">
|
||||
|
|
@ -100,7 +100,7 @@
|
|||
</script>
|
||||
|
||||
<svelte:head>
|
||||
<title>{$_('create.title')} - Mana Games</title>
|
||||
<title>{$_('create.title')} - Arcade</title>
|
||||
</svelte:head>
|
||||
|
||||
<div class="space-y-6">
|
||||
|
|
@ -5,7 +5,7 @@
|
|||
</script>
|
||||
|
||||
<svelte:head>
|
||||
<title>Feedback - Mana Games</title>
|
||||
<title>Feedback - Arcade</title>
|
||||
</svelte:head>
|
||||
|
||||
<FeedbackPage {feedbackService} appName="Mana Games" currentUserId={authStore.user?.id} />
|
||||
<FeedbackPage {feedbackService} appName="Arcade" currentUserId={authStore.user?.id} />
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
<svelte:head>
|
||||
<title>Hilfe - Mana Games</title>
|
||||
<title>Hilfe - Arcade</title>
|
||||
</svelte:head>
|
||||
|
||||
<div class="max-w-2xl mx-auto space-y-6">
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
<svelte:head>
|
||||
<title>Mana - Mana Games</title>
|
||||
<title>Mana - Arcade</title>
|
||||
</svelte:head>
|
||||
|
||||
<div class="max-w-2xl mx-auto text-center py-12">
|
||||
|
|
@ -17,7 +17,7 @@
|
|||
</script>
|
||||
|
||||
<svelte:head>
|
||||
<title>Generierte Spiele - Mana Games</title>
|
||||
<title>Generierte Spiele - Arcade</title>
|
||||
</svelte:head>
|
||||
|
||||
<div class="space-y-6">
|
||||
|
|
@ -46,7 +46,7 @@
|
|||
</script>
|
||||
|
||||
<svelte:head>
|
||||
<title>{game?.title || 'Spiel'} - Mana Games</title>
|
||||
<title>{game?.title || 'Spiel'} - Arcade</title>
|
||||
</svelte:head>
|
||||
|
||||
{#if game}
|
||||
|
|
@ -5,7 +5,7 @@
|
|||
</script>
|
||||
|
||||
<svelte:head>
|
||||
<title>Profil - Mana Games</title>
|
||||
<title>Profil - Arcade</title>
|
||||
</svelte:head>
|
||||
|
||||
{#if authStore.isAuthenticated}
|
||||
|
|
@ -21,13 +21,13 @@
|
|||
</script>
|
||||
|
||||
<svelte:head>
|
||||
<title>{$_('nav.settings')} - Mana Games</title>
|
||||
<title>{$_('nav.settings')} - Arcade</title>
|
||||
</svelte:head>
|
||||
|
||||
<div class="settings-page">
|
||||
<header class="mb-8">
|
||||
<h1 class="text-2xl font-bold text-foreground">{$_('nav.settings')}</h1>
|
||||
<p class="text-muted-foreground text-sm mt-1">Passe Mana Games an deine Bedürfnisse an</p>
|
||||
<p class="text-muted-foreground text-sm mt-1">Passe Arcade an deine Bedürfnisse an</p>
|
||||
</header>
|
||||
|
||||
<!-- Theme -->
|
||||
|
|
@ -30,7 +30,7 @@
|
|||
</script>
|
||||
|
||||
<svelte:head>
|
||||
<title>{$_('stats.title')} - Mana Games</title>
|
||||
<title>{$_('stats.title')} - Arcade</title>
|
||||
</svelte:head>
|
||||
|
||||
<div class="space-y-6">
|
||||
|
|
@ -66,7 +66,7 @@
|
|||
</script>
|
||||
|
||||
<svelte:head>
|
||||
<title>Spiel einreichen - Mana Games</title>
|
||||
<title>Spiel einreichen - Arcade</title>
|
||||
</svelte:head>
|
||||
|
||||
<div class="max-w-2xl mx-auto space-y-6">
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
<svelte:head>
|
||||
<title>Tags - Mana Games</title>
|
||||
<title>Tags - Arcade</title>
|
||||
</svelte:head>
|
||||
|
||||
<div class="max-w-2xl mx-auto text-center py-12">
|
||||
|
|
@ -7,13 +7,13 @@
|
|||
</script>
|
||||
|
||||
<svelte:head>
|
||||
<title>Themes - Mana Games</title>
|
||||
<title>Themes - Arcade</title>
|
||||
</svelte:head>
|
||||
|
||||
<div class="max-w-4xl mx-auto space-y-6">
|
||||
<div>
|
||||
<h1 class="text-2xl font-bold text-foreground">Themes</h1>
|
||||
<p class="text-muted-foreground mt-1">Wähle ein Theme für Mana Games</p>
|
||||
<p class="text-muted-foreground mt-1">Wähle ein Theme für Arcade</p>
|
||||
</div>
|
||||
|
||||
<div class="grid grid-cols-2 sm:grid-cols-3 lg:grid-cols-4 gap-3">
|
||||
|
|
@ -5,7 +5,7 @@
|
|||
</script>
|
||||
|
||||
<svelte:head>
|
||||
<title>Mana Games - Passwort vergessen</title>
|
||||
<title>Arcade - Passwort vergessen</title>
|
||||
</svelte:head>
|
||||
|
||||
<ForgotPasswordPage {authStore} {goto} appName="Mana Games" loginHref="/login" />
|
||||
<ForgotPasswordPage {authStore} {goto} appName="Arcade" loginHref="/login" />
|
||||
|
|
@ -5,13 +5,13 @@
|
|||
</script>
|
||||
|
||||
<svelte:head>
|
||||
<title>Mana Games - Login</title>
|
||||
<title>Arcade - Login</title>
|
||||
</svelte:head>
|
||||
|
||||
<LoginPage
|
||||
{authStore}
|
||||
{goto}
|
||||
appName="Mana Games"
|
||||
appName="Arcade"
|
||||
registerHref="/register"
|
||||
forgotPasswordHref="/forgot-password"
|
||||
primaryColor="#00ff88"
|
||||
|
|
@ -5,7 +5,7 @@
|
|||
</script>
|
||||
|
||||
<svelte:head>
|
||||
<title>Mana Games - Registrieren</title>
|
||||
<title>Arcade - Registrieren</title>
|
||||
</svelte:head>
|
||||
|
||||
<RegisterPage {authStore} {goto} appName="Mana Games" loginHref="/login" primaryColor="#00ff88" />
|
||||
<RegisterPage {authStore} {goto} appName="Arcade" loginHref="/login" primaryColor="#00ff88" />
|
||||
|
|
@ -3,7 +3,7 @@
|
|||
</script>
|
||||
|
||||
<svelte:head>
|
||||
<title>Mana Games - Passwort zurücksetzen</title>
|
||||
<title>Arcade - Passwort zurücksetzen</title>
|
||||
</svelte:head>
|
||||
|
||||
<div class="min-h-screen flex items-center justify-center">
|
||||
|
|
@ -4,7 +4,7 @@ export const GET: RequestHandler = async () => {
|
|||
return new Response(
|
||||
JSON.stringify({
|
||||
status: 'ok',
|
||||
service: 'mana-games-web',
|
||||
service: 'arcade-web',
|
||||
timestamp: new Date().toISOString(),
|
||||
}),
|
||||
{
|
||||
|
Before Width: | Height: | Size: 385 B After Width: | Height: | Size: 385 B |
|
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 49 KiB After Width: | Height: | Size: 49 KiB |
|
Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 40 KiB |
|
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 34 KiB |
|
Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 68 KiB After Width: | Height: | Size: 68 KiB |
|
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 26 KiB |
|
Before Width: | Height: | Size: 67 KiB After Width: | Height: | Size: 67 KiB |
|
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 83 KiB After Width: | Height: | Size: 83 KiB |
|
Before Width: | Height: | Size: 69 KiB After Width: | Height: | Size: 69 KiB |
|
Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 62 KiB |