{"id":28664183,"url":"https://github.com/ericboehs/solar-price-tracker","last_synced_at":"2026-02-02T15:35:42.729Z","repository":{"id":297701266,"uuid":"997605530","full_name":"ericboehs/solar-price-tracker","owner":"ericboehs","description":null,"archived":false,"fork":false,"pushed_at":"2025-06-15T01:10:22.000Z","size":63,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-06-15T01:20:10.794Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ericboehs.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-06-06T20:17:45.000Z","updated_at":"2025-06-15T01:10:25.000Z","dependencies_parsed_at":"2025-06-06T23:38:56.491Z","dependency_job_id":null,"html_url":"https://github.com/ericboehs/solar-price-tracker","commit_stats":null,"previous_names":["ericboehs/solar-price-tracker"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ericboehs/solar-price-tracker","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ericboehs%2Fsolar-price-tracker","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ericboehs%2Fsolar-price-tracker/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ericboehs%2Fsolar-price-tracker/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ericboehs%2Fsolar-price-tracker/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ericboehs","download_url":"https://codeload.github.com/ericboehs/solar-price-tracker/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ericboehs%2Fsolar-price-tracker/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29014358,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-02T14:58:54.169Z","status":"ssl_error","status_checked_at":"2026-02-02T14:58:51.285Z","response_time":58,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: 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":[],"created_at":"2025-06-13T12:12:21.453Z","updated_at":"2026-02-02T15:35:42.722Z","avatar_url":"https://github.com/ericboehs.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Solar Price Tracker\n\nA Rails application for tracking prices of solar equipment from various e-commerce sites, starting with SignatureSolar.com. The app monitors product listings, tracks price changes over time, and provides insights into pricing trends.\n\n## Features\n\n- **Automated Price Tracking**: Scrapes product listings and individual product pages\n- **Price History**: Maintains complete price history for trend analysis\n- **Smart Filtering**: Excludes bundles and unwanted products\n- **Watch Lists**: Monitor specific searches or individual products\n- **Price Alerts**: Get notified when prices change (planned)\n- **Analytics**: View price trends, historical lows, and price change patterns\n\n## Tech Stack\n\n- Ruby on Rails 8.0\n- PostgreSQL for data storage\n- Nokogiri for web scraping\n- Solid Queue for background jobs\n- Stimulus for interactive UI components\n- SimpleCov for code coverage tracking (95% minimum)\n\n## Setup\n\n1. **Clone the repository**\n  ```bash\n  git clone https://github.com/ericboehs/solar-price-tracker.git\n  cd solar-price-tracker\n  ```\n\n2. **Install dependencies**\n  ```bash\n  bundle install\n  ```\n\n3. **Setup database**\n  ```bash\n  rails db:create\n  rails db:migrate\n  rails db:seed # Optional: loads sample data\n  ```\n\n4. **Configure environment variables**\n  ```bash\n  cp .env.example .env\n  # Edit .env with your configuration\n  ```\n\n5. **Start the application**\n  ```bash\n  bin/dev\n  ```\n\n  This starts both the Rails server and Solid Queue for background jobs.\n\n## Usage\n\n### Adding Watches\n\n1. Navigate to the Watches section\n2. Click \"New Watch\"\n3. Enter a SignatureSolar.com search URL or product URL\n4. Configure filters (exclude bundles, omit specific terms)\n5. Save the watch\n\nThe system will automatically begin tracking prices for products matching your criteria.\n\n### Viewing Price History\n\n1. Go to the Products page\n2. Click on any product to see its details\n3. View the price chart showing historical trends\n4. Check if the product is at its lowest price\n\n### API Endpoints (Planned)\n\n- `GET /api/products` - List all tracked products\n- `GET /api/products/:id/price_history` - Get price history for a product\n- `GET /api/watches` - List active watches\n- `POST /api/watches` - Create a new watch\n\n## Development\n\n### Running Tests\n```bash\nrails test\nrails test:system\n```\n\n### Code Quality\n```bash\nbin/rubocop\nbin/brakeman\n```\n\n### Code Coverage\n\nThe project uses SimpleCov with a 95% coverage requirement. Coverage reports are generated automatically when running tests:\n\n```bash\nrails test\n# Coverage report available at coverage/index.html\n```\n\nTo analyze coverage and get help improving it:\n```bash\nbin/coverage\n```\n\n### Background Jobs\n\nThe app uses Solid Queue for background processing. Jobs run automatically when using `bin/dev`.\n\nTo run jobs manually:\n```bash\nrails solid_queue:start\n```\n\n### Scraping Schedule\n\n- **Production**: Runs at 2 AM and 12 PM CT daily\n- **Development**: Runs every 30 minutes\n\nConfigure in `config/recurring.yml`.\n\n## Architecture\n\n### Models\n\n- **Product**: Solar equipment with pricing data\n- **PriceHistory**: Historical price records for each product\n- **Watch**: Monitors URLs for new products and price changes\n- **User**: Authentication and authorization\n- **Session**: User session management\n\n### Services\n\n- **ProductScraperService**: Core scraping logic for extracting product data\n- **PriceTrackingService**: Manages price history and change detection\n\n### Jobs\n\n- **ScrapeWatchesJob**: Processes all active watches on a schedule\n- **ProcessWatchJob**: Scrapes a single watch URL\n\n## Contributing\n\n1. Fork the repository\n2. Create your feature branch (`git checkout -b feature/amazing-feature`)\n3. Commit your changes using [Conventional Commits](https://www.conventionalcommits.org/):\n  - `feat:` for new features\n  - `fix:` for bug fixes\n  - `docs:` for documentation changes\n  - `style:` for formatting changes\n  - `refactor:` for code refactoring\n  - `test:` for adding tests\n  - `chore:` for maintenance tasks\n   \n  Example: `git commit -m 'feat: add price alert notifications'`\n4. Push to the branch (`git push origin feature/amazing-feature`)\n5. Open a Pull Request\n\n## License\n\nThis project is licensed under the [MIT License](https://opensource.org/licenses/MIT).\n\n## Acknowledgments\n\n- SignatureSolar.com for providing product data\n- The Rails community for excellent documentation and gems\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fericboehs%2Fsolar-price-tracker","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fericboehs%2Fsolar-price-tracker","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fericboehs%2Fsolar-price-tracker/lists"}