Files
VPNTray/CLAUDE.md
2025-09-06 06:23:56 +02:00

3.5 KiB

CLAUDE.md

This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.

Common Commands

Running the Application

  • uv run python main.py - Start the VPN manager GUI application
  • uv run python main.py & - Start the application in background for testing
  • The application runs as a system tray application and can be minimized to the tray

Managing Running Instances

  • ps aux | grep "python main.py" | grep -v grep - Check for running instances
  • pkill -f "uv run python main.py" - Kill running instances (recommended)
  • Note: KillBash only kills the shell, not the spawned uv process - use pkill instead

Development Environment

  • This project uses uv for Python package management
  • uv sync - Install dependencies from pyproject.toml
  • Python 3.13+ required

Code Architecture

Core Components

main.py - Main GUI application entry point

  • VPNManagerWindow class: Primary tkinter-based GUI application
  • Implements a two-column layout: active customers (left) vs inactive customers (right)
  • Features system tray integration using pystray
  • Uses a modern dark theme with predefined color scheme
  • Includes search functionality across customers, locations, and hosts

models.py - Data model definitions using dataclasses

  • Host: Individual services/endpoints (SSH, Web, SMB, etc.)
  • Location: Customer locations (headquarters, branch offices) with VPN configurations
  • Customer: Top-level entities containing multiple locations
  • Each model includes helper methods for common operations

data_loader.py - Data management layer

  • load_customers(): Currently returns mock data, designed to be replaceable
  • save_customers(): Placeholder for future persistence
  • Isolates data loading logic from UI components

Key Architecture Patterns

Hierarchical Data Structure: Customer → Location → Host

  • Customers can have multiple locations (e.g., headquarters, branches)
  • Each location has its own VPN configuration and connection state
  • Locations contain multiple hosts/services that become accessible when VPN is connected

Active/Inactive Location Management:

  • Locations (not customers) are activated/deactivated individually
  • Left column shows customers with at least one active location (displaying only their active locations)
  • Right column shows customers with at least one inactive location (displaying only their inactive locations)
  • UI automatically reorganizes based on location activation state

Mock Implementation:

  • Currently a UI mockup with no actual VPN functionality
  • All VPN operations (connect, disconnect, routes) are placeholder methods
  • Button actions update UI state but don't perform real network operations

Data Flow

  1. data_loader.load_customers() provides initial customer data
  2. Main window loads and filters data based on search terms
  3. UI renders two-column layout based on location active states
  4. User interactions update dataclass attributes directly
  5. UI re-renders to reflect state changes

UI Layout Structure

  • Header: Search bar and application title
  • Two-column main area with independent scrolling
  • Left column shows full location details with hosts for active locations
  • Right column shows summary cards with activation buttons for inactive locations
  • System tray integration for minimize-to-tray behavior

Future Extensibility

  • Replace load_customers() with real data source (database, config files, API)
  • Implement actual VPN connection logic in placeholder methods
  • Add persistence through save_customers() implementation