Files
gh-cskiro-claudex-devops-tools/skills/react-project-scaffolder/modes/sandbox-mode.md
2025-11-29 18:16:54 +08:00

8.7 KiB

Sandbox Mode - Vite + React + TypeScript

Mode Overview

Purpose: Lightning-fast React setup for experiments, prototyping, and learning

Target Users:

  • Developers testing React concepts
  • Quick proof-of-concept implementations
  • Learning React fundamentals
  • Isolating bug reproductions

Setup Time: ~15 seconds (after npm install)

Philosophy: Minimal configuration, maximum speed. Zero questions asked.


Tech Stack

Core:
  - Vite 5+ (fastest dev server, HMR in <50ms)
  - React 18+
  - TypeScript 5+ (strict mode)

Development:
  - ESLint (minimal rules, quick feedback)
  - Prettier (automatic formatting)

Excluded (intentionally):
  - Testing frameworks (add if needed)
  - Pre-commit hooks (keep it light)
  - CI/CD (not needed for sandboxes)
  - Additional tooling (KISS principle)

Workflow

Step 1: Validate Prerequisites

# Check Node.js version (>= 18)
node --version

# Check npm version (>= 9)
npm --version

If validation fails: Show clear error with upgrade instructions

Step 2: Get Project Name

Ask user: "What should I name your sandbox project?"

Validation:

  • No spaces (suggest kebab-case)
  • Valid directory name
  • Not already existing
  • Length 3-50 characters

Auto-suggest: If empty, suggest react-sandbox-{timestamp}

Step 3: Scaffold with Vite

npm create vite@latest {project-name} -- --template react-ts

Why Vite?

  • Fastest dev server (instant HMR)
  • Native ES modules (no bundling in dev)
  • Minimal config out of box
  • Production builds with Rollup

Step 4: Configure TypeScript (Strict Mode)

Update tsconfig.json:

{
  "compilerOptions": {
    "target": "ES2020",
    "useDefineForClassFields": true,
    "lib": ["ES2020", "DOM", "DOM.Iterable"],
    "module": "ESNext",
    "skipLibCheck": true,

    /* Bundler mode */
    "moduleResolution": "bundler",
    "allowImportingTsExtensions": true,
    "resolveJsonModule": true,
    "isolatedModules": true,
    "noEmit": true,
    "jsx": "react-jsx",

    /* Connor's Strict Mode Settings */
    "strict": true,
    "noUnusedLocals": true,
    "noUnusedParameters": true,
    "noFallthroughCasesInSwitch": true,
    "noUncheckedIndexedAccess": true,
    "exactOptionalPropertyTypes": true,
    "noImplicitReturns": true,
    "noImplicitOverride": true,

    /* Path Aliases */
    "baseUrl": ".",
    "paths": {
      "@/*": ["./src/*"]
    }
  },
  "include": ["src"],
  "references": [{ "path": "./tsconfig.node.json" }]
}

Step 5: Set Up Minimal Linting

Create .eslintrc.cjs:

module.exports = {
  root: true,
  env: { browser: true, es2020: true },
  extends: [
    'eslint:recommended',
    'plugin:@typescript-eslint/recommended',
    'plugin:react-hooks/recommended',
  ],
  ignorePatterns: ['dist', '.eslintrc.cjs'],
  parser: '@typescript-eslint/parser',
  plugins: ['react-refresh'],
  rules: {
    'react-refresh/only-export-components': [
      'warn',
      { allowConstantExport: true },
    ],
    // Connor's standards
    'no-console': 'warn',
    'no-var': 'error',
    'eqeqeq': ['error', 'always'],
  },
}

Create .prettierrc:

{
  "semi": true,
  "trailingComma": "es5",
  "singleQuote": true,
  "printWidth": 80,
  "tabWidth": 2
}

Step 6: Update package.json Scripts

Add to package.json:

{
  "scripts": {
    "dev": "vite",
    "build": "tsc && vite build",
    "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0",
    "format": "prettier --write \"src/**/*.{ts,tsx}\"",
    "format:check": "prettier --check \"src/**/*.{ts,tsx}\"",
    "preview": "vite preview"
  }
}

Step 7: Initialize Git

cd {project-name}
git init
git add .
git commit -m "feat: initial Vite + React + TypeScript sandbox setup"

Ensure .gitignore includes:

# Dependencies
node_modules/

# Build output
dist/
dist-ssr/

# Environment
.env
.env.local
.env.*.local

# Editor
.vscode/
.idea/
*.swp
*.swo

# OS
.DS_Store
Thumbs.db

Step 8: Generate README

Create README.md:

# {project-name}

Quick React sandbox created with Vite + TypeScript.

## Getting Started

Install dependencies:
\`\`\`bash
npm install
\`\`\`

Start development server:
\`\`\`bash
npm run dev
\`\`\`

Visit http://localhost:5173 in your browser.

## Project Structure

\`\`\`
src/
  ├── App.tsx          # Main React component
  ├── App.css          # Component styles
  ├── main.tsx         # Application entry point
  ├── index.css        # Global styles
  └── vite-env.d.ts    # Vite type definitions
\`\`\`

## Available Commands

- \`npm run dev\` - Start development server with HMR
- \`npm run build\` - Build for production
- \`npm run preview\` - Preview production build locally
- \`npm run lint\` - Check code quality
- \`npm run format\` - Format code with Prettier

## Tech Stack

- ⚡ Vite - Next generation frontend tooling
- ⚛️ React 18 - UI library
- 🔷 TypeScript - Type safety
- 🎨 ESLint + Prettier - Code quality

## Next Steps

This is a minimal sandbox. Add what you need:

- **Testing**: \`npm install -D vitest @testing-library/react jsdom\`
- **Routing**: \`npm install react-router-dom\`
- **State**: \`npm install zustand\` or \`npm install @tanstack/react-query\`
- **Styling**: \`npm install -D tailwindcss\`

## Configuration

- TypeScript strict mode is enabled
- ESLint checks for common issues
- Prettier formats on save (if editor configured)

---

Built with [react-project-scaffolder](https://github.com/yourusername/react-project-scaffolder)

Step 9: Verify Setup

# Check all files were created
ls -la

# Verify package.json is valid
cat package.json | grep "vite"

# Check TypeScript config
cat tsconfig.json | grep "strict"

Step 10: Provide User Instructions

Display to user:

✅ Sandbox project "{project-name}" created successfully!

📁 Location: ./{project-name}

🚀 Next steps:

  1. cd {project-name}
  2. npm install
  3. npm run dev

Your dev server will start at http://localhost:5173

📚 What you have:
  ✓ Vite + React 18 + TypeScript (strict mode)
  ✓ ESLint + Prettier configured
  ✓ Git initialized with first commit
  ✓ Minimal dependencies for fast experiments

⚡ Lightning fast HMR - changes reflect instantly!

💡 Tips:
  - Edit src/App.tsx to start building
  - Add dependencies as needed
  - Run 'npm run lint' to check code quality
  - Run 'npm run format' to auto-format

🎯 This is a sandbox - keep it simple and experiment freely!

File Structure Output

{project-name}/
├── .git/                   # Git repository
├── .gitignore              # Git ignore rules
├── .eslintrc.cjs           # ESLint configuration
├── .prettierrc             # Prettier configuration
├── index.html              # HTML entry point
├── package.json            # Dependencies and scripts
├── tsconfig.json           # TypeScript config (strict)
├── tsconfig.node.json      # TypeScript for Node
├── vite.config.ts          # Vite configuration
├── README.md               # Project documentation
├── public/                 # Static assets
└── src/
    ├── App.tsx             # Main component
    ├── App.css             # Component styles
    ├── main.tsx            # Entry point
    ├── index.css           # Global styles
    ├── vite-env.d.ts       # Vite types
    └── assets/             # Images, etc.

Success Criteria

  • Vite project scaffolded successfully
  • TypeScript strict mode enabled
  • ESLint + Prettier configured
  • Git initialized with commit
  • README generated
  • All files present in expected locations
  • No errors in console
  • Setup time < 20 seconds (excluding npm install)

Troubleshooting

Issue: npm create vite fails Solution: Update npm to latest version: npm install -g npm@latest

Issue: TypeScript errors on import Solution: Check tsconfig.json has correct paths configuration

Issue: ESLint not working Solution: Ensure .eslintrc.cjs is in root directory

Issue: Port 5173 already in use Solution: Kill process on port or Vite will auto-increment to 5174


Why This Tech Stack?

Vite over Create React App:

  • 10-100x faster dev server startup
  • Instant HMR (< 50ms)
  • CRA is no longer maintained by React team
  • Smaller bundle sizes
  • Better TypeScript experience

TypeScript over JavaScript:

  • Catch errors before runtime
  • Better IDE autocomplete
  • Connor's standard (required)
  • Minimal overhead in sandbox

ESLint + Prettier:

  • Consistent code style
  • Catch common mistakes
  • Quick feedback loop
  • Industry standard

Remember: This mode prioritizes speed over features. Get users coding in <15 seconds!