# Lego Ladder / MechBase PLC — Project Context

## Two Projects, One Workflow

| Project | Path | Purpose |
|---|---|---|
| **Lego Ladder** (frontend) | `~/projects/lego-ladder/` | Tauri + Vite 5.4 + React 19, ladder logic editor UI |
| **MechBase PLC** (backend) | `~/projects/mechbase-plc/` | Flask backend, L5X parser, C++ ladder interpreter |

## Lego Ladder (Frontend)

- **Stack:** Vite 5.4 / React 19 / Tauri — native desktop app, NOT browser-based
- **Theme:** Studio 5000 (Allen Bradley) visual style applied
- **Tests:** 96/103 passing
- **Build:** `npm run tauri build` from `~/projects/lego-ladder/`
- **Dev:** `npm run dev` starts Vite + Tauri dev window

### Key Files

| File | Purpose |
|---|---|
| `src/` | React components, hooks, types |
| `src-tauri/` | Tauri config, Rust backend bridge |
| `vite.config.ts` | Vite build config |
| `package.json` | Scripts and deps |
| `PROJECT_STATE.md` | Current project status |

## MechBase PLC (Backend)

- **Stack:** Flask on port **5003**, Python 3.13 venv at `venv/`
- **Purpose:** Serves UI, handles API calls, runs ladder interpreter
- **Key components:**
  - `src/l5x_parser.py` — parses Allen-Bradley .L5X files
  - `src/ladder_test.py` — ladder logic testing utilities
  - `app.py` — Flask app, `app.run(host='0.0.0.0', port=5003)`
  - C++ interpreter for ladder logic execution

### Run

```bash
cd ~/projects/mechbase-plc && source venv/bin/activate
python app.py
```

## Common Pitfalls

- Lego Ladder is a **Tauri desktop app** — it does NOT run in a browser.
- MechBase runs on port **5003** — same port as Command Sovereignty. Don't run both simultaneously.
- Allen Bradley PLC format: .L5X files are XML-based.
- The ladder editor targets Lego Technic projects, not industrial PLCs directly.