#!/bin/bash # CourseWorx Mobile-Desktop Development Setup Script # This script helps set up your development environment for cross-platform work echo "๐Ÿš€ CourseWorx Mobile-Desktop Development Setup" echo "==============================================" # Function to check if command exists command_exists() { command -v "$1" >/dev/null 2>&1 } # Function to install Linear CLI install_linear_cli() { echo "๐Ÿ“‹ Installing Linear CLI..." if command_exists npm; then npm install -g @linear/cli echo "โœ… Linear CLI installed successfully" else echo "โŒ npm not found. Please install Node.js first." exit 1 fi } # Function to set up GitHub Codespaces configuration setup_codespaces() { echo "โ˜๏ธ Setting up GitHub Codespaces configuration..." mkdir -p .devcontainer cat > .devcontainer/devcontainer.json << 'EOF' { "name": "CourseWorx Development", "image": "mcr.microsoft.com/vscode/devcontainers/typescript-node:16", "features": { "ghcr.io/devcontainers/features/github-cli:1": {}, "ghcr.io/devcontainers/features/node:1": { "version": "18" } }, "forwardPorts": [3000, 5000], "postCreateCommand": "npm run install-all", "customizations": { "vscode": { "extensions": [ "ms-vscode.vscode-typescript-next", "bradlc.vscode-tailwindcss", "ms-vscode.vscode-json", "GitHub.copilot", "esbenp.prettier-vscode" ], "settings": { "terminal.integrated.shell.linux": "/bin/bash" } } }, "remoteEnv": { "NODE_ENV": "development" } } EOF echo "โœ… Codespaces configuration created" } # Function to create mobile development branch create_mobile_branch() { echo "๐Ÿ“ฑ Setting up mobile development branch..." # Check if we're in a git repository if git rev-parse --git-dir > /dev/null 2>&1; then # Create and switch to mobile development branch git checkout -b feature/mobile-development 2>/dev/null || git checkout feature/mobile-development echo "โœ… Mobile development branch ready" else echo "โš ๏ธ Not in a git repository. Skipping branch creation." fi } # Function to set up Linear integration setup_linear() { echo "๐Ÿ”— Setting up Linear integration..." # Create Linear configuration cat > .linear.yml << 'EOF' # Linear Configuration for CourseWorx workspace: courseworx-development default_team: CW # Issue templates templates: feature: | ## Description Brief description of the feature ## Acceptance Criteria - [ ] Requirement 1 - [ ] Requirement 2 ## Technical Notes Any technical considerations bug: | ## Description What is the bug? ## Steps to Reproduce 1. Step 1 2. Step 2 ## Expected Behavior What should happen? ## Actual Behavior What actually happens? spec: | ## Overview High-level description of the specification ## User Stories - As a [user type], I want [goal] so that [benefit] ## Acceptance Criteria - [ ] Criteria 1 - [ ] Criteria 2 ## Technical Requirements - System requirements - Integration points ## Dependencies - Depends on: [Issue IDs] - Blocks: [Issue IDs] EOF echo "โœ… Linear configuration created" } # Function to create mobile-friendly npm scripts setup_mobile_scripts() { echo "๐Ÿ“ฑ Setting up mobile-friendly development scripts..." # Check if package.json exists if [ -f "package.json" ]; then # Backup original package.json cp package.json package.json.bak # Add mobile development scripts using Node.js node << 'EOF' const fs = require('fs'); const pkg = JSON.parse(fs.readFileSync('package.json', 'utf8')); // Add mobile development scripts pkg.scripts = pkg.scripts || {}; pkg.scripts['dev:mobile'] = 'concurrently --names "BACKEND,FRONTEND" --prefix-colors "blue,green" "npm run server" "npm run client:mobile"'; pkg.scripts['client:mobile'] = 'cd frontend && BROWSER=none npm start'; pkg.scripts['preview:mobile'] = 'cd frontend && npm run build && npx serve -s build -p 3000'; pkg.scripts['test:mobile'] = 'cd frontend && npm test -- --watchAll=false'; pkg.scripts['lint:mobile'] = 'cd frontend && npx eslint src/ --ext .js,.jsx'; fs.writeFileSync('package.json', JSON.stringify(pkg, null, 2)); console.log('โœ… Mobile scripts added to package.json'); EOF else echo "โš ๏ธ package.json not found. Skipping mobile scripts setup." fi } # Function to create mobile testing configuration setup_mobile_testing() { echo "๐Ÿงช Setting up mobile testing configuration..." mkdir -p frontend/src/__tests__/mobile cat > frontend/src/__tests__/mobile/responsive.test.js << 'EOF' import { render, screen } from '@testing-library/react'; import '@testing-library/jest-dom'; // Mock window.matchMedia for responsive testing Object.defineProperty(window, 'matchMedia', { writable: true, value: jest.fn().mockImplementation(query => ({ matches: false, media: query, onchange: null, addListener: jest.fn(), // deprecated removeListener: jest.fn(), // deprecated addEventListener: jest.fn(), removeEventListener: jest.fn(), dispatchEvent: jest.fn(), })), }); describe('Mobile Responsive Tests', () => { beforeEach(() => { // Mock mobile viewport global.innerWidth = 375; global.innerHeight = 667; global.dispatchEvent(new Event('resize')); }); test('should render mobile-friendly layout', () => { // Add your mobile-specific component tests here expect(true).toBe(true); // Placeholder test }); test('should handle touch events', () => { // Add touch event tests here expect(true).toBe(true); // Placeholder test }); }); EOF echo "โœ… Mobile testing configuration created" } # Function to create workflow documentation create_workflow_docs() { echo "๐Ÿ“š Creating workflow documentation..." cat > MOBILE_WORKFLOW.md << 'EOF' # Mobile-Desktop Development Workflow ## Quick Start Commands ### Mobile Development ```bash # Start mobile-optimized development server npm run dev:mobile # Test mobile responsiveness npm run test:mobile # Build and preview mobile version npm run preview:mobile ``` ### Git Workflow for Mobile-Desktop Sync ```bash # Start mobile work git checkout feature/mobile-development git pull origin main # Make changes on mobile (via Codespaces/GitPod) # Commit with Linear integration git commit -m "CW-123: Add mobile navigation component" # Push changes git push origin feature/mobile-development # Continue on desktop git checkout feature/mobile-development git pull origin feature/mobile-development npm run dev ``` ### Linear Integration Commands ```bash # Create issue from CLI linear issue create --title "Mobile: Fix responsive header" # View current mobile issues linear issues --label mobile # Link commits to Linear git commit -m "CW-456: Implement mobile touch gestures" ``` ## Development Environment URLs - **Local Development**: http://localhost:3000 - **Mobile Testing**: Use browser dev tools or access via local IP - **Codespaces**: Forwarded port will be provided - **GitPod**: Workspace URL will be provided ## Mobile Testing Checklist - [ ] Test on actual mobile devices - [ ] Check responsive breakpoints - [ ] Verify touch interactions - [ ] Test offline functionality (if applicable) - [ ] Validate performance on mobile networks - [ ] Check accessibility on mobile screen readers EOF echo "โœ… Workflow documentation created" } # Main setup function main() { echo "Starting CourseWorx mobile-desktop development setup..." echo "" # Check prerequisites echo "๐Ÿ” Checking prerequisites..." if ! command_exists git; then echo "โŒ Git not found. Please install Git first." exit 1 fi if ! command_exists node; then echo "โŒ Node.js not found. Please install Node.js first." exit 1 fi if ! command_exists npm; then echo "โŒ npm not found. Please install npm first." exit 1 fi echo "โœ… Prerequisites check passed" echo "" # Run setup steps setup_codespaces echo "" create_mobile_branch echo "" setup_linear echo "" setup_mobile_scripts echo "" setup_mobile_testing echo "" create_workflow_docs echo "" # Optional: Install Linear CLI read -p "๐Ÿ“‹ Install Linear CLI? (y/n): " install_linear if [[ $install_linear =~ ^[Yy]$ ]]; then install_linear_cli fi echo "" echo "๐ŸŽ‰ Setup Complete!" echo "==================" echo "" echo "Next Steps:" echo "1. ๐Ÿ“ฑ Push changes to enable Codespaces: git add . && git commit -m 'Add mobile dev setup' && git push" echo "2. โ˜๏ธ Create Codespace: Go to GitHub โ†’ Code โ†’ Codespaces โ†’ Create" echo "3. ๐Ÿ”— Set up Linear: Visit linear.app and follow the Linear Integration Guide" echo "4. ๐Ÿš€ Start Development: npm run dev:mobile" echo "" echo "๐Ÿ“– Read the documentation:" echo " - docs/Mobile-Desktop-Development-Guide.md" echo " - docs/Linear-Integration-Guide.md" echo " - MOBILE_WORKFLOW.md" echo "" echo "Happy coding! ๐Ÿš€" } # Run main function main "$@"