{"id":39931018,"url":"https://github.com/johnzastrow/waterlogger","last_synced_at":"2026-01-18T18:08:49.557Z","repository":{"id":304576830,"uuid":"1019166723","full_name":"johnzastrow/waterlogger","owner":"johnzastrow","description":"Waterlogger A comprehensive web application for managing pool and hot tub water chemistry parameters, with built-in calculations, data visualization, and export capabilities. Built entirely, including the documentation (but not screenshots), by talking to the computer, in this case, Claude Code using the Sonnet 4 model.","archived":false,"fork":false,"pushed_at":"2025-10-27T02:14:14.000Z","size":131513,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-10-27T02:25:04.201Z","etag":null,"topics":["chemistry","claude-code","pools"],"latest_commit_sha":null,"homepage":"","language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/johnzastrow.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-07-13T22:13:20.000Z","updated_at":"2025-10-27T02:14:18.000Z","dependencies_parsed_at":"2025-10-27T02:27:58.458Z","dependency_job_id":null,"html_url":"https://github.com/johnzastrow/waterlogger","commit_stats":null,"previous_names":["johnzastrow/waterlogger"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/johnzastrow/waterlogger","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/johnzastrow%2Fwaterlogger","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/johnzastrow%2Fwaterlogger/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/johnzastrow%2Fwaterlogger/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/johnzastrow%2Fwaterlogger/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/johnzastrow","download_url":"https://codeload.github.com/johnzastrow/waterlogger/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/johnzastrow%2Fwaterlogger/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28547005,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-18T14:59:57.589Z","status":"ssl_error","status_checked_at":"2026-01-18T14:59:46.540Z","response_time":98,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["chemistry","claude-code","pools"],"created_at":"2026-01-18T18:08:49.411Z","updated_at":"2026-01-18T18:08:49.542Z","avatar_url":"https://github.com/johnzastrow.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Waterlogger\n\nA comprehensive web application for managing pool and hot tub water chemistry parameters, with built-in calculations, data visualization, and export capabilities. Built entirely, including the documentation (but not screenshots), by talking to the computer, in this case, Claude Code using the Sonnet 4 model.\n\n## Features\n\n### Core Functionality\n- **Multi-User Support**: Multiple users can manage water testing data with full authentication\n- **User Management**: Complete user administration with create, edit, and delete capabilities\n- **Pool Management**: Track multiple pools and hot tubs with detailed specifications\n- **Test Kit Management**: Organize and track testing equipment and supplies\n- **Water Chemistry**: Record comprehensive water parameter measurements\n- **Automatic Calculations**: LSI (Langelier Saturation Index) and RSI (Ryznar Stability Index) calculations\n- **Data Visualization**: Interactive charts showing parameter trends over time\n\n### Advanced Features (Version 1.2+)\n- **Pool Volume Calculator**: Comprehensive volume calculation system supporting rectangular, round, oval, kidney, and L-shaped pools with varying depths, steps, and attached spas\n- **Chemical Adjustment System**: Professional-grade water balance calculations with precise chemical dosing recommendations for 11 different pool chemicals\n- **Water Balance Analysis**: Real-time LSI/RSI calculations with color-coded indicators for optimal water balance\n- **Adjustment History**: Complete tracking of chemical adjustments with before/after conditions and user notes\n- **PDF Export**: Professional PDF generation for adjustment details with safety guidelines and water balance explanations\n- **Dashboard Analytics**: Quick overview of recent samples, water quality status, and recent adjustments across all pools\n\n### Database Management (Version 1.4+)\n- **Schema Migration System**: Version-tracked database schema changes with automatic migration on startup\n- **Migration Management UI**: View complete migration history and status from the settings page\n- **One-Click Database Backups**: Create timestamped JSON backups directly from the web interface\n- **Web-Based Backup Import** (Version 1.5+): Upload and restore JSON backups through the Settings page with backwards compatibility\n- **Migration Commands**: Command-line tools for viewing status and rolling back migrations\n- **Cross-Database Migration**: Bidirectional data migration between SQLite and MariaDB\n- **Enhanced Settings UI**: Comprehensive system information display including app version, build info, database type, and schema version\n\n### Deployment Automation (Version 1.4+)\n- **Automated Linux Deployment**: One-command deployment script (`deploy-linux.sh`) that handles everything from directory creation to systemd service installation\n- **Automated Windows Deployment**: One-command deployment script (`deploy-windows.bat`) for Windows service installation\n- **Security Hardening**: Systemd service includes NoNewPrivileges, ProtectSystem, and other security features\n- **Production-Ready Defaults**: Optional automatic configuration for production logging settings\n- **Service Management**: Automatic service creation with restart policies and proper permissions\n\n### Technical Features\n- **Export Functionality**: Export data to Excel, Markdown, and JSON backup formats\n- **Responsive Design**: Mobile-friendly interface with modern UI and professional favicon\n- **Database Flexibility**: Support for SQLite and MariaDB databases with migration capabilities\n- **Cross-Platform**: Single executable for Windows and Linux\n- **Build Timestamps**: Each build includes deployment tracking in the UI\n- **Structured Logging**: High-performance logging with rotation, multiple outputs, and audit trails\n\n## Screenshots\n\n![Dashboard](docs/dashboard.png)\n*Main dashboard showing recent samples and pool status*\n\n![Samples](docs/samples.png)\n*First-run setup wizard for configuration*\n\n## Quick Start\n\n### Prerequisites\n\n- Go 1.21 or later (for building from source)\n- SQLite (included) or MariaDB (optional)\n\n### Installation\n\n#### Option 1: Download Pre-built Binary\n\n1. Download the latest release for your platform from [Releases](https://github.com/johnzastrow/waterlogger/releases)\n2. Extract the binary to your desired location\n3. Run the application\n\n#### Option 2: Build from Source\n\n**⚠️ Prerequisites:** SQLite requires CGO (C compiler). See detailed build requirements below.\n\n```bash\n# Clone the repository\ngit clone https://github.com/johnzastrow/waterlogger.git\ncd waterlogger\n\n# Install build tools first (see platform-specific instructions below)\n\n# Build using the build script (recommended)\n./build.sh      # Linux/macOS\nbuild.bat       # Windows\n\n# Run the application\n./waterlogger         # Linux/macOS\nwaterlogger.exe       # Windows\n```\n\nSee **[docs/BUILD_AND_RUN.md](docs/BUILD_AND_RUN.md)** for platform-specific setup instructions.\n\n### First Run\n\n1. Start the application\n2. Open your web browser to `http://localhost:2342`\n3. Complete the setup wizard to:\n   - Create an administrator account\n   - Configure database settings\n   - Set server preferences\n\n## Building and Running\n\nFor comprehensive build, run, and debugging instructions, see **[docs/BUILD_AND_RUN.md](docs/BUILD_AND_RUN.md)** (recommended).\n\nThis document covers:\n- **Building from source** (all platforms)\n- **Running locally** (development mode)\n- **Running in production** (service deployment)\n- **Debugging and troubleshooting**\n- **Command-line options**\n\n### Quick Start (TL;DR)\n\n**Prerequisites:**\n- Go 1.21 or later\n- C compiler: MSYS2 MinGW-w64 (Windows) or build-essential (Linux) or Xcode tools (macOS)\n\n**Build:**\n```bash\n./build.sh     # Linux/macOS\nbuild.bat      # Windows\n```\n\n**Run:**\n```bash\n./waterlogger  # Linux/macOS\nwaterlogger.exe  # Windows\n```\n\n**Access:** Open browser to `http://localhost:2342`\n\n### Quick Deployment\n\n**Linux (Automated):**\n```bash\nsudo ./deploy-linux.sh\n```\n\n**Windows (Automated, as Administrator):**\n```cmd\ndeploy-windows.bat\n```\n\nFor detailed instructions, platform-specific setup, troubleshooting, and all other information, see:\n- **[docs/BUILD_AND_RUN.md](docs/BUILD_AND_RUN.md)** - Complete guide (recommended)\n- **[docs/BUILD_REQUIREMENTS.md](docs/BUILD_REQUIREMENTS.md)** - Platform-specific build requirements\n- **[docs/DEPLOYMENT.md](docs/DEPLOYMENT.md)** - Deployment options and configuration\n\n## Configuration\n\n### Configuration File\n\nThe application uses a YAML configuration file (`config.yaml`). A fully commented example configuration is provided in `config.example.yaml`.\n\n**First-time setup:**\n```bash\ncp config.example.yaml config.yaml\n# Edit config.yaml with your settings\n```\n\nThe `config.example.yaml` file includes detailed comments explaining:\n- Server settings (port, host)\n- **Database configuration** (SQLite vs MariaDB with complete setup instructions)\n- Application settings (secret key generation)\n- Logging options (levels, formats, rotation)\n\n**Basic configuration structure:**\n```yaml\nserver:\n  port: 2342              # Web server port\n  host: \"localhost\"       # Bind address\n\ndatabase:\n  type: \"sqlite\"          # \"sqlite\" or \"mariadb\"\n  sqlite:\n    path: \"waterlogger.db\"\n  mariadb:                # See config.example.yaml for setup instructions\n    host: \"localhost\"\n    port: 3306\n    username: \"waterlogger\"\n    password: \"password\"\n    database: \"waterlogger\"\n\napp:\n  name: \"Waterlogger\"\n  version: \"1.4.0\"\n  secret_key: \"change-this-to-a-secure-random-string\"\n\nlogging:\n  level: \"info\"           # debug, info, warn, error, fatal\n  format: \"console\"       # json, console\n  output: \"both\"          # stdout, file, both\n  # ... see config.example.yaml for full logging options\n```\n\n**For detailed MariaDB setup and migration instructions, see the comments in `config.example.yaml`.**\n\n### Server Configuration\n\n#### Changing the Port\n\nTo change the port the application listens on, modify the `server.port` value in your `config.yaml` file:\n\n```yaml\nserver:\n  port: 8080  # Change from default 2342 to 8080\n  host: \"localhost\"\n```\n\nAfter making this change, restart the application. The web interface will be available at `http://localhost:8080` (or whatever port you specified).\n\n#### Changing the Host\n\nTo configure which hosts the application will accept connections from, modify the `server.host` value:\n\n**For localhost only (default - most secure):**\n```yaml\nserver:\n  host: \"localhost\"  # Only accepts connections from localhost/127.0.0.1\n```\n\n**For all network interfaces (allows remote connections):**\n```yaml\nserver:\n  host: \"0.0.0.0\"  # Accepts connections from any IP address\n```\n\n**For specific network interface:**\n```yaml\nserver:\n  host: \"192.168.1.100\"  # Only accepts connections to this specific IP\n```\n\n⚠️ **Security Warning**: Setting `host: \"0.0.0.0\"` allows connections from any IP address that can reach your server. Only use this setting if you understand the security implications and have proper firewall rules in place.\n\n#### Complete Example\n\n```yaml\nserver:\n  port: 8080\n  host: \"0.0.0.0\"  # Accept connections from any IP on port 8080\n```\n\n### Production Mode and Logging\n\n#### Running in Production Mode\n\nFor production deployments, you should configure the application to run in production mode, which provides better performance and security:\n\n**Method 1: Using Configuration File**\n\nSet the `app.name` field to `\"production\"` in your `config.yaml`:\n\n```yaml\napp:\n  name: \"production\"  # Enables production mode\n  version: \"1.0.0\"\n  secret_key: \"your-secret-key-change-this\"\n```\n\n**Method 2: Using Environment Variable**\n\nSet the `GIN_MODE` environment variable to `release`:\n\n```bash\n# Linux/macOS\nexport GIN_MODE=release\n./waterlogger\n\n# Windows\nset GIN_MODE=release\nwaterlogger.exe\n```\n\n**Method 3: One-liner with Logging**\n\n```bash\n# Linux/macOS - Run in production mode with logging\nGIN_MODE=release ./waterlogger \u003e /var/log/waterlogger.log 2\u003e\u00261 \u0026\n\n# Windows - Run in production mode with logging\nset GIN_MODE=release \u0026\u0026 waterlogger.exe \u003e waterlogger.log 2\u003e\u00261\n```\n\n#### Production Mode Benefits\n\nWhen running in production mode:\n- **Reduced Logging**: Less verbose output for better performance\n- **Better Performance**: Optimized middleware and request handling\n- **Security**: Debug routes and verbose error messages are disabled\n- **Cleaner Output**: Only essential information is logged\n\n#### Logging Configuration\n\nWaterlogger includes built-in structured logging with automatic log rotation (see [docs/LOGGING.md](docs/LOGGING.md) for details).\n\n**Configure logging in `config.yaml`:**\n\n```yaml\nlogging:\n    level: info           # debug, info, warn, error, fatal\n    format: console       # json (production), console (development)\n    output: both          # stdout, file, both\n    file_path: logs/waterlogger.log\n    max_size: 100         # MB\n    max_backups: 3        # number of old log files to keep\n    max_age: 28           # days\n    compress: true        # compress old log files\n```\n\n**Recommended production settings:**\n```yaml\nlogging:\n    level: info\n    format: json\n    output: file\n```\n\n**Recommended development settings:**\n```yaml\nlogging:\n    level: debug\n    format: console\n    output: both\n```\n\n**Debug Mode (Development Only):**\n\nFor development and troubleshooting, you can enable debug mode:\n\n```bash\n# Linux/macOS\nGIN_MODE=debug ./waterlogger\n\n# Windows\nset GIN_MODE=debug\nwaterlogger.exe\n```\n\n### Command Line Options\n\n```bash\nwaterlogger [options]\n\nOptions:\n  -config string           Path to configuration file (default: config.yaml)\n  -version                 Show version information\n  -help                    Show help message\n  -migrate-to-mariadb      Migrate data from SQLite to MariaDB\n  -migrate-to-sqlite       Migrate data from MariaDB to SQLite\n  -export string           Export database data to backup file\n  -import string           Import database data from backup file\n  -reset-password string   Reset password for specified username\n```\n\n### Password Management\n\n#### Resetting User Passwords\n\nIf you need to reset a user's password (e.g., if they forgot it), you can use the command-line password reset utility:\n\n```bash\n# Reset password for a specific user\n./waterlogger -reset-password username\n\n# Example: Reset password for user \"jcz\"\n./waterlogger -reset-password jcz\n```\n\nThe utility will prompt you to:\n1. Enter a new password\n2. Confirm the new password\n\n**Note**: Passwords can be simple (no complexity requirements) - they only need to be non-empty.\n\n#### Interactive vs Non-Interactive Mode\n\n- **Interactive Mode**: When run in a terminal, the utility will securely prompt for password input (hidden typing)\n- **Non-Interactive Mode**: When input is piped or redirected, it will read the password directly from stdin\n\nExample of non-interactive usage:\n```bash\necho \"newpassword\" | ./waterlogger -reset-password username\n```\n\n### Database Setup\n\n#### SQLite (Default)\n- **No additional setup required** - database file is created automatically\n- Single file storage: `waterlogger.db` (configurable in `config.yaml`)\n- Requires CGO (C compiler) to build the application\n- Perfect for:\n  - Single-user deployments\n  - Small to medium datasets\n  - Simple backup/restore (just copy the .db file)\n  - No separate database server needed\n\n#### MariaDB (Optional)\n**When to use MariaDB:**\n- Multi-user environments with concurrent access\n- Large datasets (thousands of samples)\n- Remote database server requirements\n- Better performance for complex queries\n\n**Setup Instructions:**\n\n1. **Install MariaDB Server**\n   ```bash\n   # Ubuntu/Debian\n   sudo apt install mariadb-server\n\n   # Windows: Download from https://mariadb.org/download/\n   # macOS\n   brew install mariadb\n   ```\n\n2. **Create Database and User**\n   ```bash\n   # Login to MariaDB as root\n   mysql -u root -p\n   ```\n\n   Then run these SQL commands:\n   ```sql\n   CREATE DATABASE waterlogger;\n   CREATE USER 'waterlogger'@'localhost' IDENTIFIED BY 'your-secure-password';\n   GRANT ALL PRIVILEGES ON waterlogger.* TO 'waterlogger'@'localhost';\n   FLUSH PRIVILEGES;\n   EXIT;\n   ```\n\n3. **Update Configuration**\n\n   Edit `config.yaml` and change the database type:\n   ```yaml\n   database:\n     type: \"mariadb\"  # Changed from \"sqlite\"\n     mariadb:\n       host: \"localhost\"\n       port: 3306\n       username: \"waterlogger\"\n       password: \"your-secure-password\"  # Use the password from step 2\n       database: \"waterlogger\"\n   ```\n\n   See `config.example.yaml` for detailed configuration comments.\n\n4. **Migrate Existing SQLite Data (Optional)**\n\n   If you have existing data in SQLite and want to move it to MariaDB:\n   ```bash\n   # After updating config.yaml to MariaDB settings\n   ./waterlogger -migrate-to-mariadb\n   ```\n\n   This will:\n   - Export all data from your SQLite database\n   - Create tables in MariaDB\n   - Import all data to MariaDB\n   - Preserve all relationships and data integrity\n\n5. **Start the Application**\n   ```bash\n   ./waterlogger\n   ```\n\n   The application will now use MariaDB for all data storage.\n\n**Migrating Back to SQLite:**\n```bash\n# Update config.yaml to use type: \"sqlite\"\n# Then run:\n./waterlogger -migrate-to-sqlite\n```\n\n## Usage\n\n### Water Parameters\n\nThe application tracks the following water chemistry parameters:\n\n- **FC (Free Chlorine)**: 1.0-4.0 ppm - Available chlorine for sanitization\n- **TC (Total Chlorine)**: Should match FC - Total chlorine including combined chlorine\n- **pH**: 7.4-7.6 - Acidity/alkalinity level\n- **TA (Total Alkalinity)**: 80-120 ppm - pH buffering capacity\n- **CH (Calcium Hardness)**: 200-400 ppm - Dissolved calcium concentration\n- **CYA (Cyanuric Acid)**: 30-50 ppm - Chlorine stabilizer (optional)\n- **Temperature**: Water temperature in °F\n- **Salinity**: 2,700-3,400 ppm - For saltwater pools (optional)\n- **TDS (Total Dissolved Solids)**: Total dissolved substances (optional)\n\n### Calculated Indices\n\n- **LSI (Langelier Saturation Index)**: Indicates water balance (-0.3 to +0.3 ideal)\n- **RSI (Ryznar Stability Index)**: Predicts scaling tendency (6.0-7.0 ideal)\n\n### Data Export\n\nExport your data in multiple formats:\n\n1. **Excel Export**: Multi-worksheet file with separate sheets for each data type (users, pools, kits, samples, measurements, indices, adjustments)\n2. **Markdown Export**: Structured text report with tables, summaries, and comprehensive adjustment details\n3. **JSON Backup**: Complete database backup with all tables and relationships for migration purposes\n4. **PDF Export**: Professional adjustment reports with chemical safety guidelines and water balance explanations\n\nFiles are named with format: `WL[timestamp].xlsx`, `WL[timestamp].md`, or `WL_backup_[timestamp].json`\n\n## API Documentation\n\n### REST Endpoints\n\n#### Authentication\n- `POST /api/login` - User login\n- `POST /api/logout` - User logout\n\n#### Users\n- `GET /api/users` - List all users\n- `POST /api/users` - Create new user\n- `PUT /api/users/:id` - Update user\n- `DELETE /api/users/:id` - Delete user\n\n#### Pools\n- `GET /api/pools` - List all pools\n- `POST /api/pools` - Create new pool\n- `PUT /api/pools/:id` - Update pool\n- `DELETE /api/pools/:id` - Delete pool\n\n#### Test Kits\n- `GET /api/kits` - List all test kits\n- `POST /api/kits` - Create new test kit\n- `PUT /api/kits/:id` - Update test kit\n- `DELETE /api/kits/:id` - Delete test kit\n\n#### Samples\n- `GET /api/samples` - List all samples\n- `POST /api/samples` - Create new sample\n- `PUT /api/samples/:id` - Update sample\n- `DELETE /api/samples/:id` - Delete sample\n\n#### Adjustments\n- `GET /api/adjustments` - List chemical adjustments (supports ?pool_id= and ?limit= parameters)\n- `POST /api/adjustments` - Create new chemical adjustment\n- `GET /api/adjustments/:id` - Get specific adjustment details\n\n#### Charts\n- `GET /api/charts/data` - Get chart data for visualization\n\n#### Export\n- `GET /api/export/excel` - Export data to Excel\n- `GET /api/export/markdown` - Export data to Markdown\n- `GET /api/export/backup` - Export complete database backup (JSON)\n\n#### Settings\n- `GET /api/settings` - Get user settings\n- `POST /api/settings` - Update user settings\n\n## Development\n\n### Project Structure\n\n```\nwaterlogger/\n├── cmd/waterlogger/          # Application entry point\n├── internal/\n│   ├── config/              # Configuration management\n│   ├── database/            # Database abstraction layer\n│   ├── handlers/            # HTTP handlers\n│   ├── middleware/          # HTTP middleware\n│   ├── models/              # Data models\n│   └── chemistry/           # Water chemistry calculations\n├── web/\n│   ├── static/              # Static assets (CSS, JS)\n│   │   ├── css/             # Stylesheets\n│   │   └── js/              # JavaScript files\n│   └── templates/           # HTML templates\n├── docs/                    # Documentation\n│   ├── BUILD_AND_RUN.md     # Build, run, and debug guide\n│   ├── DEPLOYMENT.md        # Deployment guide\n│   └── API.md               # API documentation\n├── build.sh                 # Build script with timestamps\n├── config.yaml              # Configuration file\n└── README.md                # This file\n```\n\n### Getting Started with Development\n\nFor building, running, and debugging instructions, see **[docs/BUILD_AND_RUN.md](docs/BUILD_AND_RUN.md)**.\n\n### Testing\n\n```bash\n# Run unit tests\ngo test ./...\n\n# Run tests with coverage\ngo test -cover ./...\n\n# Run integration tests\ngo test -tags integration ./...\n```\n\n### Contributing\n\n1. Fork the repository\n2. Create a feature branch (`git checkout -b feature/amazing-feature`)\n3. Commit your changes (`git commit -m 'Add amazing feature'`)\n4. Push to the branch (`git push origin feature/amazing-feature`)\n5. Open a Pull Request\n\n### Code Style\n\n- Follow Go best practices and conventions\n- Use `gofmt` for code formatting\n- Include unit tests for new features\n- Update documentation for API changes\n\n## Troubleshooting\n\nFor comprehensive troubleshooting guide, see **[docs/BUILD_AND_RUN.md#troubleshooting](docs/BUILD_AND_RUN.md#troubleshooting)**.\n\n### Common Issues Quick Reference\n\n- **Port Already in Use**: See [docs/BUILD_AND_RUN.md#port-already-in-use](docs/BUILD_AND_RUN.md#port-already-in-use)\n- **Database Connection Issues**: See [docs/BUILD_AND_RUN.md#database-connection-failed](docs/BUILD_AND_RUN.md#database-connection-failed)\n- **Build Failures**: See [docs/BUILD_AND_RUN.md#build-issues](docs/BUILD_AND_RUN.md#build-issues)\n- **Service Issues (Linux)**: See [docs/BUILD_AND_RUN.md#service-issues-linux](docs/BUILD_AND_RUN.md#service-issues-linux)\n- **Performance Issues**: See [docs/BUILD_AND_RUN.md#performance-issues](docs/BUILD_AND_RUN.md#performance-issues)\n\n### Log Files\n\nApplication logs are written based on configuration:\n- **Development**: Logs appear in console and optionally in `logs/` directory\n- **Production**: Logs are written to configured file location (see `config.yaml`)\n- **Systemd**: Service logs captured by journald (`journalctl -u waterlogger -f`)\n\n## License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## Support\n\n- **Issues**: Report bugs and feature requests on [GitHub Issues](https://github.com/johnzastrow/waterlogger/issues)\n- **Discussions**: Join the community on [GitHub Discussions](https://github.com/johnzastrow/waterlogger/discussions)\n- **Documentation**: Visit the [Wiki](https://github.com/johnzastrow/waterlogger/wiki) for detailed guides\n\n## Acknowledgments\n\n- Water chemistry calculations based on research from [WaterPy](https://github.com/johnzastrow/WaterPy)\n- UI framework: [Alpine.js](https://alpinejs.dev/)\n- Database ORM: [GORM](https://gorm.io/)\n- Web framework: [Gin](https://gin-gonic.com/)\n\n## Changelog\n\nSee [CHANGELOG.md](docs/CHANGELOG.md) for complete version history and detailed release notes.\n\n---\n\n**Waterlogger** - Making pool and hot tub water management simple and efficient.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjohnzastrow%2Fwaterlogger","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjohnzastrow%2Fwaterlogger","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjohnzastrow%2Fwaterlogger/lists"}