@echo off setlocal EnableExtensions title AutoFirmer - Windows setup REM ============================================================================ REM AutoFirmer instance setup for Windows. REM REM Standalone: drop this file anywhere and run it. It clones the repo into a REM subfolder next to itself, installs, builds, and points the instance at the REM master dashboard. Safe to re-run - it pulls and rebuilds instead of cloning. REM ============================================================================ set "REPO_URL=https://git.juicerroom.com/senofy/autofirmer-expanded.git" set "DEFAULT_MASTER=https://master.juicerroom.com" set "TARGET=%~dp0autofirmer" echo. echo ============================================ echo AutoFirmer - Windows setup echo ============================================ echo. REM ---------------------------------------------------------------- git check REM Git for Windows only adds itself to PATH if "Git from the command line" was REM chosen at install time, and an already-open cmd keeps its old PATH anyway. REM So probe the usual install homes before giving up. where git >nul 2>&1 if not errorlevel 1 goto :git_ok if exist "%ProgramFiles%\Git\cmd\git.exe" set "PATH=%ProgramFiles%\Git\cmd;%PATH%" if exist "%ProgramFiles(x86)%\Git\cmd\git.exe" set "PATH=%ProgramFiles(x86)%\Git\cmd;%PATH%" if exist "%LOCALAPPDATA%\Programs\Git\cmd\git.exe" set "PATH=%LOCALAPPDATA%\Programs\Git\cmd;%PATH%" where git >nul 2>&1 if not errorlevel 1 ( echo [ok] git ^(found off PATH, added for this run^) goto :git_done ) echo [X] Git not found on PATH, and not in any of: echo %ProgramFiles%\Git\cmd echo %LOCALAPPDATA%\Programs\Git\cmd echo. echo If Git is NOT installed: https://git-scm.com/download/win echo If you JUST installed it: close this window, open a new Command echo Prompt and run the script again - an open window keeps its old PATH. echo If it is installed elsewhere: check with where git goto :fail :git_ok echo [ok] git :git_done REM --------------------------------------------------------------- node check where node >nul 2>&1 if not errorlevel 1 goto :node_found if exist "%ProgramFiles%\nodejs\node.exe" set "PATH=%ProgramFiles%\nodejs;%PATH%" if exist "%LOCALAPPDATA%\Programs\nodejs\node.exe" set "PATH=%LOCALAPPDATA%\Programs\nodejs;%PATH%" where node >nul 2>&1 if not errorlevel 1 goto :node_found echo [X] Node.js not found on PATH, and not in any of: echo %ProgramFiles%\nodejs echo %LOCALAPPDATA%\Programs\nodejs echo. echo Install Node 22 LTS from https://nodejs.org/ then re-run. echo If you JUST installed it, open a NEW Command Prompt first. goto :fail :node_found for /f "tokens=* usebackq" %%v in (`node -p "process.versions.node"`) do set "NODEVER=%%v" for /f "tokens=1 delims=." %%m in ("%NODEVER%") do set "NODEMAJOR=%%m" echo [ok] node v%NODEVER% REM better-sqlite3 ships prebuilt binaries only for released Node ABIs. On a REM newer major it falls back to node-gyp, which needs Visual Studio Build REM Tools - a long, confusing failure if it is not installed. if %NODEMAJOR% GEQ 23 goto :node_warn goto :node_ok :node_warn echo. echo [!] Node %NODEMAJOR% is newer than better-sqlite3's prebuilt binaries. echo Install may try to compile from source and fail without Visual echo Studio Build Tools. Node 22 LTS is the safe choice here. echo. set "GOON=" set /p "GOON= Continue anyway? [y/N] " if /i not "%GOON%"=="y" goto :fail :node_ok REM ------------------------------------------------------------------- python where python >nul 2>&1 if errorlevel 1 ( echo [--] python not found - the dashboard will still work. echo Needed only for the clicker ^(clicker\runner.py^). set "HAVE_PY=0" ) else ( echo [ok] python set "HAVE_PY=1" ) REM ------------------------------------------------------------------- prompts echo. set "MASTER_URL=" set /p "MASTER_URL= Master dashboard URL [%DEFAULT_MASTER%]: " if "%MASTER_URL%"=="" set "MASTER_URL=%DEFAULT_MASTER%" set "INSTANCE=" set /p "INSTANCE= Instance name [%COMPUTERNAME%]: " if "%INSTANCE%"=="" set "INSTANCE=%COMPUTERNAME%" echo. echo Installing to: %TARGET% echo. REM -------------------------------------------------------------- clone / pull if exist "%TARGET%\.git" ( echo [1/5] Existing checkout found - pulling latest... pushd "%TARGET%" git pull --ff-only if errorlevel 1 ( popd echo [X] git pull failed. Resolve local changes and re-run. goto :fail ) popd ) else ( echo [1/5] Cloning %REPO_URL% ... git clone "%REPO_URL%" "%TARGET%" if errorlevel 1 ( echo [X] Clone failed. Check network access to git.juicerroom.com. goto :fail ) ) pushd "%TARGET%" REM ------------------------------------------------------------------- install echo. echo [2/5] Installing npm dependencies ^(this takes a few minutes^)... REM playwright is declared but unreferenced anywhere in the source; skipping its REM browser download saves several hundred MB and a lot of time. set "PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1" call npm install if errorlevel 1 ( echo. echo [X] npm install failed. echo If the error mentions node-gyp, MSBuild, or better_sqlite3.cpp, echo the native module could not find a prebuilt binary. Either switch echo to Node 22 LTS, or install "Desktop development with C++" from the echo Visual Studio Build Tools installer. popd goto :fail ) REM --------------------------------------------------------------------- build echo. echo [3/5] Building... call npm run build if errorlevel 1 ( echo [X] Build failed. popd goto :fail ) REM ------------------------------------------------------------------ settings echo. echo [4/5] Writing instance settings... node scripts\seed-settings.js "%MASTER_URL%" "%INSTANCE%" if errorlevel 1 ( echo [X] Could not write settings to autotrader.sqlite. popd goto :fail ) REM ------------------------------------------------------ python deps (option) if "%HAVE_PY%"=="1" ( echo. echo [5/5] Installing clicker Python dependencies... python -m pip install --quiet --disable-pip-version-check -r clicker\requirements.txt if errorlevel 1 ( echo [!] pip install failed - the dashboard still works, the clicker will not. ) ) else ( echo. echo [5/5] Skipping Python dependencies ^(python not found^). ) REM ---------------------------------------------------------------- start file > "%~dp0start-autofirmer.bat" ( echo @echo off echo title AutoFirmer - %INSTANCE% echo cd /d "%TARGET%" echo echo Dashboard starting on http://localhost:3000 echo call npm run start echo pause ) popd echo. echo ============================================ echo Done. echo ============================================ echo. echo Instance name : %INSTANCE% echo Reporting to : %MASTER_URL% echo Installed in : %TARGET% echo. echo Start it with : start-autofirmer.bat echo Dashboard at : http://localhost:3000 echo. echo Still manual: echo - Load the Chrome extension: chrome://extensions, enable Developer echo mode, "Load unpacked", select %TARGET%\extension echo - Add your firm credentials on the dashboard's Settings page echo - Run the clicker when needed: python clicker\runner.py echo. pause exit /b 0 :fail echo. echo Setup did not complete. echo. pause exit /b 1