Major refactor from simple HTML/JS app to modern full-stack TypeScript application: ## Architecture Changes - Migrated to monorepo structure with workspaces (backend, frontend, shared) - Backend: Node.js + Express + TypeScript + Socket.IO - Frontend: Next.js 15.5 + React 19 + TypeScript + Tailwind CSS - Shared: Common types and utilities across packages ## Key Features Implemented - Real-time WebSocket collaboration via Socket.IO - Virtual canvas with chunked loading for performance - Modern UI with dark mode and responsive design - Mock database system for easy development (Redis/PostgreSQL compatible) - Comprehensive error handling and rate limiting - User presence and cursor tracking - Infinite canvas support with zoom/pan controls ## Performance Optimizations - Canvas virtualization - only renders visible viewport - Chunked pixel data loading (64x64 pixel chunks) - Optimized WebSocket protocol - Memory-efficient state management with Zustand ## Development Experience - Full TypeScript support across all packages - Hot reload for both frontend and backend - Docker support for production deployment - Comprehensive linting and formatting - Automated development server startup ## Fixed Issues - Corrected start script paths - Updated environment configuration - Fixed ESLint configuration issues - Ensured all dependencies are properly installed - Verified build process works correctly
75 lines
No EOL
2 KiB
JavaScript
75 lines
No EOL
2 KiB
JavaScript
#!/usr/bin/env node
|
|
|
|
const { execSync } = require('child_process');
|
|
const fs = require('fs');
|
|
const path = require('path');
|
|
|
|
console.log('🎨 Setting up GaPlace...\n');
|
|
|
|
// Check if required files exist
|
|
const requiredFiles = [
|
|
'backend/.env',
|
|
'frontend/.env.local'
|
|
];
|
|
|
|
console.log('📋 Checking environment files...');
|
|
requiredFiles.forEach(file => {
|
|
if (!fs.existsSync(file)) {
|
|
console.log(`❌ Missing: ${file}`);
|
|
process.exit(1);
|
|
} else {
|
|
console.log(`✅ Found: ${file}`);
|
|
}
|
|
});
|
|
|
|
// Build shared package
|
|
console.log('\n📦 Building shared package...');
|
|
try {
|
|
execSync('npm run build', { cwd: 'shared', stdio: 'inherit' });
|
|
console.log('✅ Shared package built successfully');
|
|
} catch (error) {
|
|
console.error('❌ Failed to build shared package');
|
|
process.exit(1);
|
|
}
|
|
|
|
// Install dependencies for all workspaces
|
|
console.log('\n📦 Installing dependencies...');
|
|
try {
|
|
execSync('npm install', { stdio: 'inherit' });
|
|
console.log('✅ Dependencies installed successfully');
|
|
} catch (error) {
|
|
console.error('❌ Failed to install dependencies');
|
|
process.exit(1);
|
|
}
|
|
|
|
// Build backend
|
|
console.log('\n🔧 Building backend...');
|
|
try {
|
|
execSync('npm run build', { cwd: 'backend', stdio: 'inherit' });
|
|
console.log('✅ Backend built successfully');
|
|
} catch (error) {
|
|
console.error('❌ Failed to build backend');
|
|
process.exit(1);
|
|
}
|
|
|
|
// Build frontend
|
|
console.log('\n🎨 Building frontend...');
|
|
try {
|
|
execSync('npm run build', { cwd: 'frontend', stdio: 'inherit' });
|
|
console.log('✅ Frontend built successfully');
|
|
} catch (error) {
|
|
console.error('❌ Failed to build frontend');
|
|
process.exit(1);
|
|
}
|
|
|
|
console.log('\n🚀 Setup complete! To start development:');
|
|
console.log('');
|
|
console.log('1. Start databases:');
|
|
console.log(' docker-compose up redis postgres -d');
|
|
console.log('');
|
|
console.log('2. Start development servers:');
|
|
console.log(' npm run dev');
|
|
console.log('');
|
|
console.log('3. Open http://localhost:3000 in your browser');
|
|
console.log('');
|
|
console.log('🎨 Welcome to GaPlace! ✨'); |