{
  "as_of": "2026-10-04",
  "method": "Physical lines including comments and blank lines; selected current project files only; assembled dashboard counted once; excludes old builds, backups, generated binaries and third-party dependencies.",
  "total_lines": 2187,
  "total_files": 37,
  "categories": [
    {
      "category": "Dashboard and interactive diagnostics",
      "files": [
        "r2-q5-site/dist/assets/future-dashboard.html"
      ],
      "physical_lines": 492,
      "nonblank_lines": 479
    },
    {
      "category": "Body and Dome firmware",
      "files": [
        "esp32-controller/src/main.cpp",
        "esp32-controller/src/ota_service.h"
      ],
      "physical_lines": 336,
      "nonblank_lines": 326
    },
    {
      "category": "Camera integration",
      "files": [
        "watcher-integration/r2q5_wireless.c",
        "watcher-integration/r2q5_wireless.h",
        "watcher-integration/r2q5_radio.c"
      ],
      "physical_lines": 196,
      "nonblank_lines": 196
    },
    {
      "category": "Local hardware services and updates",
      "files": [
        "controller_manager.py",
        "controller_installer.py",
        "watcher_camera_bridge.py",
        "watcher_network.py",
        "camera_private_config.py",
        "ota/coordinator.py"
      ],
      "physical_lines": 711,
      "nonblank_lines": 676
    },
    {
      "category": "Website and media production",
      "files": [
        "r2-q5-site/dist/index.html",
        "tmp/build_origin_openings.py",
        "export_revised_demo.py",
        "export_synced_demo.py",
        "export_welcome_demo.py",
        "build_sensor_guide.py",
        "tmp/build_polished_openings.py"
      ],
      "physical_lines": 356,
      "nonblank_lines": 333
    },
    {
      "category": "Verification scripts",
      "files": [
        "r2-q5-site/check_controller_setup.cjs",
        "r2-q5-site/check_diagnostics.cjs",
        "r2-q5-site/check_direct_tabs.cjs",
        "r2-q5-site/check_distinct_themes.cjs",
        "r2-q5-site/check_interactive.cjs",
        "r2-q5-site/check_mk4.cjs",
        "r2-q5-site/check_music_themes.cjs",
        "r2-q5-site/check_simulation.cjs",
        "r2-q5-site/check_site.cjs",
        "r2-q5-site/check_sound_fit.cjs",
        "r2-q5-site/check_unified_app.cjs",
        "r2-q5-site/check_working_sound_fit.cjs",
        "r2-q5-site/check_wrap_nav.cjs",
        "check_camera_network.cjs",
        "check_controller_install.cjs",
        "check_diag_views.cjs",
        "check_gamepad_setup.cjs",
        "check_pie_hinges.cjs"
      ],
      "physical_lines": 96,
      "nonblank_lines": 86
    }
  ]
}