- Delete 9 deprecated/obsolete docs (~6,300 lines removed)
- Move test PDFs to tests/fixtures/ocr-samples/
- Create docs/DEPLOYMENT.md as principal guide
- Create tests/ocr-validation/README.md
- Update all refs for ultrathin monolith architecture
- Update OCR tests to use relative paths
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add deployment/linux/ with deploy.sh for deploying from Claude-Agent LXC to Windows server
- Add ServerLogsView.vue for viewing server logs from frontend
- Add shared/routes/system.py for system health endpoints
- Update CLAUDE.md with quick deploy instructions
- Improve Windows deployment scripts (ROA2WEB-Console.ps1)
- Fix OCR service validation and worker pool improvements
- Update environment config examples
- Various script permission and startup fixes
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Consolidate 3 separate applications (reports-app, data-entry-app, telegram-bot) into a unified
architecture with single backend and frontend:
Backend Changes:
- Unified FastAPI backend at backend/ with modular structure
- Modules: reports, data_entry, telegram in backend/modules/
- Centralized config.py and main.py with all routers registered
- Single worker mode (--workers 1) for Telegram bot compatibility
- Shared Oracle connection pool and JWT authentication
- Unified requirements.txt and environment configuration
Frontend Changes:
- Single Vue.js SPA with module-based routing
- Unified frontend at src/ with modules in src/modules/{reports,data-entry}/
- Shared components and stores in src/shared/
- Error boundaries for module isolation
- Dual API proxy in Vite for module communication
Infrastructure:
- New unified startup scripts: start-prod.sh, start-test.sh, start-backend.sh
- Environment templates: .env.dev.example, .env.test.example, .env.prod.example
- Updated deployment scripts for Windows IIS
- Simplified SSH tunnel management
Documentation:
- Comprehensive CLAUDE.md with architecture overview
- Module-specific docs in docs/{data-entry,telegram}/
- Architecture decision records in docs/ARCHITECTURE-DECISIONS.md
- Deployment guides consolidated in deployment/windows/docs/
This migration reduces complexity, improves maintainability, and enables easier
deployment while maintaining all existing functionality.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Data Entry App:
- Fix shared path finding for both dev and production environments
- Add base URL support for IIS subdirectory deployment (/data-entry/)
- Use import.meta.env.BASE_URL in router for correct path handling
- Add email-validator and python-jose dependencies
Deployment Scripts:
- Enhance Build-ROA2WEB.ps1 with improved build process
- Update ROA2WEB-Console.ps1 with Data Entry support
- Improve Publish-And-Deploy.ps1 deployment workflow
- Update deploy-config.json with new settings
Gitignore:
- Add more build cache patterns to ignore
- Add temp frontend build directories
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit introduces a complete deployment automation system for Windows Server deployment:
New Features:
- Publish-And-Deploy.ps1: Interactive console for building locally and transferring to server
* Supports auto-detection of transfer method (Windows Share or SSH)
* Configurable via deploy-config.json
* Integrated with Build-ROA2WEB.ps1 for consistent builds
- Check-And-Deploy.ps1: Server-side auto-deployment script
* Monitors transfer directory for new packages
* Automatically deploys when new version detected
* Integrates with ROA2WEB-Console.ps1 for deployment
- Setup-AutoDeploy.ps1: Configures scheduled task for auto-deployment
- DEPLOYMENT_AUTOMATION.md: Complete documentation for automation workflow
Bug Fixes:
- Fix path resolution in Publish-And-Deploy.ps1: Added Resolve-FullPath function to correctly resolve ../deploy-package path
- Fix ROA2WEB-Console.ps1 exit codes: Properly return boolean values and exit codes in non-interactive mode
- Fix Build-ROA2WEB.ps1 script copying: Added debug output and force deletion to avoid caching issues
Enhancements:
- ROA2WEB-Console.ps1: Support for ROA2WEB_SOURCE environment variable for flexible source paths
- Build-ROA2WEB.ps1: Enhanced debug output for troubleshooting script copying issues
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Fixed critical runtime error where backend service couldn't import
shared modules (ModuleNotFoundError: No module named 'database').
Changes:
- Updated Install-BackendFirstTime: Set PYTHONPATH to shared directory
instead of parent directory
- Added Fix-BackendPythonPath.ps1: Quick fix script for existing
installations
The backend imports 'from database.oracle_pool' which requires the
database module to be in PYTHONPATH. Previously PYTHONPATH pointed to
C:\inetpub\wwwroot\roa2web but the database module is located at
C:\inetpub\wwwroot\roa2web\shared\database. Now PYTHONPATH correctly
points to the shared directory.
For existing installations, run Fix-BackendPythonPath.ps1 as Administrator
to update the service configuration without reinstalling.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
## Bug Fix
### Problem
IIS configuration failed with error:
```
[INSTALLATION FAILED] Cannot validate argument on parameter 'Name'.
The argument is null. Provide a valid value for the argument, and then try running the command again.
at Install-BackendFirstTime, line 643
```
The error occurred at line 643:
```powershell
Remove-WebAppPool -Name $Config.IISAppPoolName -ErrorAction SilentlyContinue
```
### Root Cause
Global configuration was missing IIS-related properties used in the IIS setup section:
- `$Config.IISAppPoolName` - used for Application Pool name (line 643, 646, 647)
- `$Config.IISSiteName` - used for IIS Site name (line 651, 653, 657)
- `$Config.IISAppName` - used for Web Application name (line 651, 653, 656)
When the script tried to use these null values, PowerShell validation failed.
### Solution
Added IIS configuration properties to `$script:Config` hashtable (lines 81-84):
```powershell
# IIS Configuration
IISSiteName = "Default Web Site"
IISAppName = "roa2web"
IISAppPoolName = "ROA2WEB-AppPool"
```
### Impact
- IIS Application Pool creation now works correctly
- Web Application is created under "Default Web Site" with path "/roa2web"
- Frontend files are served through IIS with proper app pool isolation
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
## Bug Fix
### Problem
Deployment failed with error:
```
[INSTALLATION FAILED] You cannot call a method on a null-valued expression.
at Install-BackendFirstTime, line 611
```
The error occurred at line 611:
```powershell
& nssm install $Config.BackendServiceName $pythonPath "-m" "uvicorn" ... "--port" $Config.BackendPort.ToString()
```
### Root Cause
Global configuration was missing required properties used by service installation functions:
- `$Config.BackendPort` - used in NSSM service creation (line 611)
- `$Config.BackendServiceDisplayName` - used for service display name (line 612)
- `$Config.BackendServiceDescription` - used for service description (line 613)
- `$Config.TelegramBotServiceDisplayName` - used in telegram bot service (line 816)
- `$Config.TelegramBotServiceDescription` - used in telegram bot service (line 817)
- `$Config.TelegramBotPort` - added for consistency (not yet used)
When the script tried to call `.ToString()` on `$Config.BackendPort`, it was null, causing the error.
### Solution
Added missing properties to `$script:Config` hashtable (lines 63-96):
**Backend properties:**
- `BackendPort = 8000`
- `BackendServiceDisplayName = "ROA2WEB Backend API"`
- `BackendServiceDescription = "FastAPI backend service for ROA2WEB application"`
**Telegram Bot properties:**
- `TelegramBotPort = 8002`
- `TelegramBotServiceDisplayName = "ROA2WEB Telegram Bot"`
- `TelegramBotServiceDescription = "Telegram bot frontend for ROA2WEB application"`
### Impact
- Backend service creation now works correctly with proper port configuration
- Service display names and descriptions are properly set in Windows Services
- Configuration is now complete and consistent
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
## Bug Fix
### Problem
Backend deployment failed with error:
```
[INSTALLATION FAILED] You cannot call a method on a null-valued expression.
at Install-BackendFirstTime, line 609
```
The error occurred because `$pythonPath` was being used in service creation (line 609), but it was defined inside the `if (Test-Path $requirementsPath)` block. If requirements.txt didn't exist (or for any reason the block was skipped), the variable would be null when used later.
### Root Cause
Variable scope issue - paths were defined inside the requirements check block:
```powershell
# Before (WRONG):
if (Test-Path $requirementsPath) {
$pipPath = Join-Path $venvPath "Scripts\pip.exe"
$pythonPath = Join-Path $venvPath "Scripts\python.exe" # Only defined if requirements exists!
...
}
# Later:
& nssm install ... $pythonPath ... # ERROR: $pythonPath is null!
```
### Solution
Moved path definitions BEFORE the if block to ensure they're always available:
```powershell
# After (CORRECT):
$pipPath = Join-Path $venvPath "Scripts\pip.exe"
$pythonPath = Join-Path $venvPath "Scripts\python.exe" # Always defined
$requirementsPath = Join-Path $Config.BackendPath "requirements.txt"
if (Test-Path $requirementsPath) {
# Use the paths here
}
# Later:
& nssm install ... $pythonPath ... # OK: $pythonPath is defined
```
### Changes
- `Install-BackendFirstTime`: Moved `$pipPath`, `$pythonPath`, `$requirementsPath` definitions outside the if block
- `Install-TelegramBotFirstTime`: Applied the same fix to prevent future issues
### Tested
This ensures paths are always available for service creation, regardless of whether requirements.txt exists or the if block executes.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
This commit completes the unified Windows deployment console with automatic detection of first-time install vs update, eliminating the need for separate Install-*.ps1 scripts.
## Changes
### Added Detection Functions
- `Test-BackendInstalled`: Checks if backend is installed (venv + service + requirements.txt)
- `Test-TelegramBotInstalled`: Checks if telegram bot is installed (venv + service + app files)
### Added Prerequisite Installation Functions
- `Install-Chocolatey`: Automated Chocolatey package manager installation
- `Install-Python`: Python 3.11 installation via Chocolatey
- `Install-NSSM`: NSSM (Windows service manager) installation via Chocolatey
- `Install-IISModules`: IIS and required modules (URL Rewrite, Application Initialization)
### Added First-Time Installation Functions
- `Install-BackendFirstTime`: Complete backend first-time installation (~240 lines)
- Directory structure creation
- Backend, frontend, shared files copying with exclusions
- .env.example template copying
- Virtual environment creation with proper pip installation
- Windows Service creation via NSSM
- IIS Application Pool and Web Application configuration
- `Install-TelegramBotFirstTime`: Complete telegram bot first-time installation (~155 lines)
- Directory structure (app, data, logs, temp, backups)
- App files and requirements.txt copying
- Virtual environment creation
- Windows Service creation via NSSM
### Updated Deployment Functions with Auto-Routing
- `Deploy-Backend`: Now calls `Test-BackendInstalled` first
- If NOT installed → routes to `Install-BackendFirstTime`
- If installed → proceeds with existing UPDATE logic (backup, stop, update, start)
- `Deploy-TelegramBot`: Now calls `Test-TelegramBotInstalled` first
- If NOT installed → routes to `Install-TelegramBotFirstTime`
- If installed → proceeds with existing UPDATE logic (backup, stop, update, start)
## Benefits
1. **Single Entry Point**: Users can run the same deploy command for both first-time install and updates
2. **No Separate Install Scripts**: Eliminates confusion between Install-*.ps1 and Deploy-*.ps1
3. **Automatic Detection**: Intelligently detects what needs to be done
4. **Safer Updates**: Always checks if components exist before attempting updates
5. **Better UX**: Clear warnings about first-time installation vs updates
## Usage
```powershell
# Interactive (auto-detects install vs update)
.\ROA2WEB-Console.ps1
# Select: Deploy Components > Backend + Frontend
# Command line (auto-detects install vs update)
.\ROA2WEB-Console.ps1 -NonInteractive -Action DeployBackend
.\ROA2WEB-Console.ps1 -NonInteractive -Action DeployTelegramBot
.\ROA2WEB-Console.ps1 -NonInteractive -Action DeployAll
```
The console will automatically:
- Detect if backend/telegram-bot are installed
- Perform first-time installation if needed (including prerequisites)
- Perform updates if already installed (with automatic backups)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Major improvements to deployment workflow with unified scripts and interactive menus.
New unified scripts:
- Build-ROA2WEB.ps1: Interactive menu for building all components
* Isolated temp directory for frontend builds (prevents WSL node_modules corruption)
* Automatic devDependencies installation (fixes Vite not found issue)
* Auto-cleanup after build
* Supports both interactive menu and non-interactive CLI
- ROA2WEB-Console.ps1: All-in-one deployment and management console
* Interactive menus for deploy, manage services, and status checks
* Automatic backups before deployment
* Smart dependency updates (only if requirements.txt changed)
* Health checks after service operations
* Color-coded status output
* Both interactive and non-interactive modes
Removed deprecated scripts (replaced by unified tools):
- Build-Frontend.ps1 → Use Build-ROA2WEB.ps1 -Component Frontend
- Build-TelegramBot.ps1 → Use Build-ROA2WEB.ps1 -Component TelegramBot
- Deploy-ROA2WEB.ps1 → Use ROA2WEB-Console.ps1 [Deploy menu]
- Deploy-TelegramBot.ps1 → Use ROA2WEB-Console.ps1 [Deploy menu]
- Manage-ROA2WEB.ps1 → Use ROA2WEB-Console.ps1 [Manage menu]
Updated documentation:
- Complete rewrite of scripts/README.md
- Clear workflow guides for first-time deployment and updates
- Comparison table v1.0 vs v2.0
- Updated best practices and troubleshooting
Benefits:
✅ Reduced from 13 to 8 scripts (better maintainability)
✅ Interactive menus for better UX
✅ Fixed WSL node_modules corruption issue
✅ Smart dependency management (faster deployments)
✅ Unified interface reduces learning curve
✅ Better error handling and health checks
🤖 Generated with Claude Code (https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Issues fixed:
1. Build-Frontend.ps1: Add verification that requirements.txt is included in deployment package
- Prevents incomplete packages that cause ModuleNotFoundError on server
- Throws error if critical files are missing before package is transferred
2. Deploy-ROA2WEB.ps1: Auto-detect first deployment and force install dependencies
- Automatically sets ForceInstallDependencies=true on first deployment
- Add -ForceInstallDependencies parameter for manual override
- Better error handling and validation for pip install
- Shows clear error messages with manual recovery instructions
This fixes the "ModuleNotFoundError: No module named 'httpx'" error that occurred
when deploying to Windows Server without explicitly forcing dependency installation.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
This commit fixes overly broad .gitignore patterns that were excluding
important source code files from version control. Previously, wildcard
patterns like *auth*, *token*, *secret*, *connection*, and *credential*
were excluding ALL files containing these words, including critical
application code.
Changes:
- Updated .gitignore with specific patterns for sensitive config files
(*.json, *.txt, *.yml, *.yaml extensions only)
- Removed broad wildcards that excluded source code files
Added missing source files:
- shared/auth/ (9 files): Complete authentication system
- JWT handler, middleware, auth service, models, routes
- reports-app/backend/app/routers/auth.py: Authentication API router
- reports-app/backend/app/auth_middleware_wrapper.py: Middleware wrapper
- reports-app/frontend/src/stores/auth.js: Vue.js auth store
- reports-app/frontend/tests/: E2E tests and fixtures for auth
- reports-app/telegram-bot/app/auth/: Telegram auth linking module
- deployment/windows/scripts/Setup-ClaudeAuth.ps1: Windows deployment script
- security/secrets_scanner.py: Security scanning utility
These files are essential for the application to function and should
have been included in the initial commit.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>