feat: Initialize monorepo with Python backend and React frontend

Related Issue(s):

Relates to #1 (closed) - Project initialization

What does this MR do?

This MR establishes the foundational monorepo structure for the Claude Code Marketplace Workshop project, consisting of:

Backend (Python 3.13+)

  • Basic Python application skeleton with pyproject.toml configuration
  • Entry point in main.py with hello world implementation
  • Python version pinned to 3.13 via .python-version file
  • Ready for FastAPI/Flask integration or other framework additions

Frontend (React 19 + Vite 7 + TypeScript)

  • Modern React 19.1 application with full TypeScript support
  • Vite 7.1 for lightning-fast development and optimized production builds
  • ESLint configured with React hooks, TypeScript, and React Refresh rules
  • SWC compiler for fast refresh and compilation
  • Demo counter application with Hot Module Replacement (HMR) enabled

Monorepo Configuration

  • Root-level .gitignore covering Python artifacts, Node.js modules, build outputs, and editor/OS files
  • Separate workspace directories for frontend and backend
  • Clean separation of concerns between frontend and backend codebases

Why was this MR needed?

This establishes the project structure required for developing the Claude Code Marketplace Workshop application. The monorepo approach allows for:

  • Unified version control for full-stack development
  • Easier coordination between frontend and backend changes
  • Shared tooling and CI/CD pipeline configuration
  • Simplified deployment and dependency management

Technical Details:

Backend Stack:

  • Python: 3.13+
  • Package manager: uv/pip (configured via pyproject.toml)
  • Structure ready for adding web framework (FastAPI, Flask, etc.)

Frontend Stack:

  • React: 19.1.1 (latest stable)
  • TypeScript: 5.9.3
  • Build tool: Vite 7.1.7 with @vitejs/plugin-react-swc
  • Linting: ESLint 9.36 with TypeScript and React plugins
  • Package manager: pnpm (lockfile included)

Development Features:

  • Frontend HMR with SWC for instant updates
  • TypeScript strict mode for type safety
  • ESLint configured for React hooks and refresh patterns
  • Separate TypeScript configs for app and node environments

How to Test:

Backend Verification:

cd /Users/admin/big-data/claude-code-marketplace-workshop/backend
python3 --version  # Should be Python 3.13 or higher
python3 main.py    # Should print "Hello from backend!"

Expected backend output:

Hello from backend!

Frontend Verification:

cd /Users/admin/big-data/claude-code-marketplace-workshop/frontend
pnpm install       # Install dependencies
pnpm run dev       # Start development server

Expected frontend behavior:

  1. Vite dev server starts on http://localhost:5173 (or next available port)
  2. Browser opens showing React + Vite demo page
  3. Counter component with increment button is functional
  4. Hot Module Replacement works - edit src/App.tsx and see instant updates

Linting verification:

cd /Users/admin/big-data/claude-code-marketplace-workshop/frontend
pnpm run lint      # Should pass with no errors

Build verification:

cd /Users/admin/big-data/claude-code-marketplace-workshop/frontend
pnpm run build     # Should create optimized production build in dist/
pnpm run preview   # Preview production build

File Structure Overview:

claude-code-marketplace-workshop/
├── .gitignore                 # Monorepo-wide ignore patterns
├── README.md                  # Project documentation (GitLab default)
├── backend/
│   ├── .python-version        # Python 3.13
│   ├── README.md
│   ├── main.py                # Entry point
│   └── pyproject.toml         # Python project config
└── frontend/
    ├── README.md              # Vite + React documentation
    ├── eslint.config.js       # ESLint 9 flat config
    ├── index.html             # App entry HTML
    ├── package.json           # Dependencies and scripts
    ├── pnpm-lock.yaml         # Locked dependencies
    ├── public/                # Static assets
    ├── src/                   # React source code
    │   ├── App.tsx           # Main App component
    │   ├── main.tsx          # React entry point
    │   └── *.css             # Stylesheets
    ├── tsconfig.*.json        # TypeScript configurations
    └── vite.config.ts         # Vite configuration

Implementation Notes:

  1. Python Version: Backend requires Python 3.13+ as specified in pyproject.toml. This is enforced via .python-version for pyenv/asdf users.

  2. Package Manager: Frontend uses pnpm for faster installs and efficient disk usage. If pnpm is not installed, run npm install -g pnpm.

  3. TypeScript Configuration: Uses separate configs for application code (tsconfig.app.json) and build tooling (tsconfig.node.json) for optimal type checking.

  4. ESLint v9: Utilizes the new flat config format (eslint.config.js) instead of legacy .eslintrc.* files.

  5. Ready for Extension: Both frontend and backend are minimal skeletons ready for:

    • Backend: Adding FastAPI/Flask, database connections, API routes
    • Frontend: Adding routing (React Router), state management (Redux/Zustand), UI libraries

Files Changed:

Added (17 files, ~2,300+ lines):

  • 1 root .gitignore
  • 4 backend files (Python app skeleton)
  • 12 frontend files (React + Vite + TypeScript setup + demo code)
  • ~1,869 lines from pnpm-lock.yaml (dependency lockfile)

Next Steps (Not Included in This MR):

  • Add web framework to backend (FastAPI/Flask)
  • Implement API endpoints
  • Add frontend routing and state management
  • Configure CI/CD pipeline
  • Add testing frameworks (pytest for backend, Vitest for frontend)
  • Update project README with actual project description

Checklist:

  • Backend runs successfully with Python 3.13
  • Frontend builds without errors
  • ESLint configuration is valid and passes
  • TypeScript compilation succeeds
  • HMR works in development mode
  • .gitignore covers all necessary patterns
  • Monorepo structure is clean and organized

🤖 Generated with Claude Code

Merge request reports

Loading