{"id":31908248,"url":"https://github.com/elyeandre/weather-app-winforms","last_synced_at":"2025-10-13T15:25:56.700Z","repository":{"id":316527339,"uuid":"1063745834","full_name":"elyeandre/weather-app-winforms","owner":"elyeandre","description":null,"archived":false,"fork":false,"pushed_at":"2025-09-25T05:10:33.000Z","size":514,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-09-25T06:20:33.664Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C#","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/elyeandre.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-09-25T04:13:05.000Z","updated_at":"2025-09-25T05:10:36.000Z","dependencies_parsed_at":"2025-09-25T06:20:36.991Z","dependency_job_id":"6a8ad794-ca44-49ab-a7ca-cddb8e1ca82e","html_url":"https://github.com/elyeandre/weather-app-winforms","commit_stats":null,"previous_names":["elyeandre/weather-app-winforms"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/elyeandre/weather-app-winforms","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/elyeandre%2Fweather-app-winforms","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/elyeandre%2Fweather-app-winforms/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/elyeandre%2Fweather-app-winforms/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/elyeandre%2Fweather-app-winforms/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/elyeandre","download_url":"https://codeload.github.com/elyeandre/weather-app-winforms/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/elyeandre%2Fweather-app-winforms/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279015919,"owners_count":26085778,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-13T02:00:06.723Z","response_time":61,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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-10-13T15:25:55.357Z","updated_at":"2025-10-13T15:25:56.689Z","avatar_url":"https://github.com/elyeandre.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🌤️ Weather App WinForms\n\n[![Made With C#][made-with-csharp]][forthebadge-url]\n[![Built With Love][built-with-love]][forthebadge-url]\n\n[![Contributors][contributors-shield]][contributors-url]\n[![Forks][forks-shield]][forks-url]\n[![Stargazers][stars-shield]][stars-url]\n[![Issues][issues-shield]][issues-issues-url]\n\nA modern **desktop weather application** built with C# Windows Forms that provides comprehensive weather information with a beautiful glassmorphic UI design. This application demonstrates modern software development practices including API integration, MVP architecture pattern, and custom UI controls with real-time weather data from AccuWeather API.\n\n## 📋 Table of Contents\n- [🎯 Project Overview](#-project-overview)\n- [✨ Key Features](#-key-features)\n- [🛠️ Tech Stack](#️-tech-stack)\n- [🏗️ Architecture](#️-architecture)\n- [📁 Project Structure](#-project-structure)\n- [🚀 Quick Start](#-quick-start)\n- [⚙️ Configuration](#️-configuration)\n- [📱 Usage Guide](#-usage-guide)\n- [🔒 Security Notes](#-security-notes)\n- [🚀 Deployment](#-deployment)\n- [🤝 Contributing](#-contributing)\n- [📄 License](#-license)\n- [📸 Screenshots](#-screenshots)\n\n## 🎯 Project Overview\n\n**Weather App WinForms** is a sophisticated Windows Forms desktop application that provides real-time weather information with an elegant glassmorphic design. Built using C# and integrated with AccuWeather API and OpenStreetMap, it demonstrates modern software development principles while delivering accurate weather forecasts and current conditions.\n\n### 🎯 Target Users\n- **🌍 General Users**: Anyone needing accurate weather information\n- **🏃‍♂️ Outdoor Enthusiasts**: Planning activities based on weather conditions\n- **📱 Developers**: Learning modern WinForms development patterns\n\n### 🌟 Problem Statement\nDeliver a visually appealing and user-friendly weather application that provides comprehensive weather data including current conditions, hourly forecasts, and 5-day predictions with intelligent location search and beautiful UI design.\n\n## ✨ Key Features\n\n### 🌡️ **Weather Information**\n- **Current Conditions**: Real-time temperature, weather description, and conditions\n- **Detailed Metrics**: Humidity, wind speed, visibility, dew point, and precipitation\n- **Feels Like Temperature**: Apparent temperature based on weather conditions\n- **Weather Icons**: Dynamic weather icons that change based on conditions and time\n\n### 📊 **Forecast System**\n- **Hourly Forecast**: 12-hour detailed weather predictions\n- **Daily Forecast**: 5-day weather outlook with min/max temperatures\n- **Precipitation Probability**: Rain/snow chances for informed planning\n- **Weather Descriptions**: Detailed weather condition explanations\n\n### 🔍 **Location Search**\n- **Intelligent Search**: OpenStreetMap integration for accurate location search\n- **Search Suggestions**: Auto-complete dropdown with multiple location options\n- **Location Details**: Comprehensive address information (Barangay, City, Province)\n- **Default Location**: Automatic loading of preset location on startup\n\n### 🎨 **Modern UI Design**\n- **Glassmorphic Interface**: Beautiful frosted glass effect panels\n- **Custom Controls**: Handcrafted `GlassmorphicPanel` with transparency effects\n- **Responsive Design**: Adaptive layout that works on different screen sizes\n- **Smooth Animations**: Elegant hover effects and transitions\n\n## 🛠️ Tech Stack\n\n### **Core Technologies**\n- **Language**: C# .NET Framework 4.7.2\n- **GUI Framework**: Windows Forms with custom controls\n- **APIs**: AccuWeather API, OpenStreetMap Nominatim API\n- **JSON Processing**: Newtonsoft.Json 13.0.3\n- **HTTP Client**: System.Net.Http for API calls\n\n### **Development Tools**\n- **IDE**: Visual Studio 2019/2022\n- **Package Manager**: NuGet Package Manager\n- **Version Control**: Git\n- **API Testing**: Built-in HTTP client testing\n\n### **Architecture Patterns**\n- **MVP Pattern**: Model-View-Presenter architecture\n- **Service Layer**: Abstracted weather service interfaces\n- **Repository Pattern**: Data access abstraction\n- **Observer Pattern**: UI updates through interface contracts\n\n## 🏗️ Architecture\n\n### **System Architecture**\n```\n┌─────────────────┐    ┌─────────────────┐    ┌─────────────────┐\n│  Presentation   │    │   Business      │    │   External      │\n│     Layer       │    │     Logic       │    │    Services     │\n│                 │    │                 │    │                 │\n│ ┌─────────────┐ │    │ ┌─────────────┐ │    │ ┌─────────────┐ │\n│ │  MainForm   │ │    │ │ Weather     │ │    │ │ AccuWeather │ │\n│ │ (IWeatherView)│◄├────┤►│ Presenter   │◄├────┤►│    API      │ │\n│ └─────────────┘ │    │ └─────────────┘ │    │ └─────────────┘ │\n│ ┌─────────────┐ │    │ ┌─────────────┐ │    │ ┌─────────────┐ │\n│ │Glassmorphic │ │    │ │ Weather     │ │    │ │OpenStreetMap│ │\n│ │   Panels    │ │    │ │  Service    │ │    │ │  Nominatim  │ │\n│ └─────────────┘ │    │ └─────────────┘ │    │ └─────────────┘ │\n└─────────────────┘    └─────────────────┘    └─────────────────┘\n```\n\n### **MVP Pattern Implementation**\n```csharp\n// Model: Weather data models\npublic class CurrentWeather { ... }\npublic class Location { ... }\n\n// View: MainForm implements IWeatherView\npublic interface IWeatherView\n{\n    void DisplayCurrentWeather(CurrentWeather weather, Location location);\n    void DisplayHourlyForecast(HourlyForecast[] forecasts);\n    void DisplayDailyForecast(DailyForecast[] forecasts);\n    void ShowLocations(IEnumerable\u003cLocation\u003e locations);\n}\n\n// Presenter: WeatherPresenter coordinates between View and Service\npublic class WeatherPresenter\n{\n    private readonly IWeatherView _view;\n    private readonly IWeatherService _service;\n}\n```\n\n## 📁 Project Structure\n\n```\nweather-app-winforms/\n├── 📄 weather-app-winforms.csproj     # Visual Studio project file\n├── 📄 weather-app-winforms.sln       # Solution file\n├── 📄 App.config                     # Application configuration\n├── 📄 packages.config                # NuGet packages configuration\n├── 📄 README.md                      # Project documentation\n├── 📄 Program.cs                     # Application entry point\n├── 📄 GlassmorphicPanel.cs           # Custom glassmorphic UI control\n├── 📁 Forms/                         # Application forms\n│   ├── 📄 MainForm.cs                # Main application window\n│   ├── 📄 MainForm.Designer.cs       # Form designer code\n│   └── 📄 MainForm.resx              # Form resources\n├── 📁 Models/                        # Data models\n│   └── 📄 WeatherModels.cs           # Weather data structures\n├── 📁 Services/                      # Business logic services\n│   ├── 📄 IWeatherView.cs            # View interface contract\n│   ├── 📄 WeatherService.cs          # API service implementation\n│   ├── 📄 WeatherPresenter.cs        # MVP presenter logic\n│   └── 📄 WeatherIconMapper.cs       # Weather icon mapping\n├── 📁 Properties/                    # Assembly and project properties\n│   ├── 📄 AssemblyInfo.cs            # Assembly metadata\n│   ├── 📄 Resources.Designer.cs      # Generated resources\n│   ├── 📄 Resources.resx             # Application resources\n│   ├── 📄 Settings.Designer.cs       # Generated settings\n│   └── 📄 Settings.settings          # Application settings\n└── 📁 Resources/                     # Weather icons and UI assets\n    ├── 📄 Various weather icons      # 44+ weather condition icons\n    ├── 📄 UI elements (search, etc.) # Interface icons\n    └── 📄 bg2.jpg                    # Background image\n```\n\n## 🚀 Quick Start\n\n### **Prerequisites**\n- Windows 10/11\n- .NET Framework 4.7.2 or higher\n- Visual Studio 2019/2022 (Community Edition is fine)\n- Internet connection for API calls\n- AccuWeather API key (free tier available)\n\n### **Installation**\n\n1. **Clone the Repository**\n   ```bash\n   git clone https://github.com/elyeandre/weather-app-winforms.git\n   cd weather-app-winforms\n   ```\n\n2. **API Key Setup**\n   \n   **Step 1: Get AccuWeather API Key**\n   - Visit [AccuWeather Developer Portal](https://developer.accuweather.com/)\n   - Create a free account\n   - Create a new app to get your API key\n   - Note down your API key\n   \n   **Step 2: Configure API Key**\n   - Open `Services/WeatherService.cs`\n   - Replace the API key in the AccuWeatherService class:\n   ```csharp\n   public class AccuWeatherService : IWeatherService\n   {\n       private const string ApiKey = \"YOUR_API_KEY_HERE\"; // Replace with your key\n       private const string BaseUrl = \"http://dataservice.accuweather.com\";\n   }\n   ```\n\n3. **Open and Build Project**\n   - Open `weather-app-winforms.sln` in Visual Studio\n   - Restore NuGet packages (should happen automatically)\n   - Build the solution (Ctrl+Shift+B)\n\n4. **Run the Application**\n   - Press F5 or click \"Start\" in Visual Studio\n   - The application will launch with default location (Tortugas, Balanga, PH)\n   - Use the search box to find your desired location\n\n## ⚙️ Configuration\n\n### **API Configuration**\nUpdate `WeatherService.cs` for your AccuWeather setup:\n\n```csharp\npublic class AccuWeatherService : IWeatherService\n{\n    private readonly HttpClient _client = new HttpClient();\n    private const string ApiKey = \"YOUR_ACCUWEATHER_API_KEY\"; // Required\n    private const string BaseUrl = \"http://dataservice.accuweather.com\";\n    \n    // Optional: Customize default location\n    public async Task SetDefaultLocation()\n    {\n        var locations = await _service.SearchLocationsAsync(\"Your City, Your Country\");\n        // ... rest of the method\n    }\n}\n```\n\n### **UI Customization**\nModify glassmorphic panel appearance in `GlassmorphicPanel.cs`:\n\n```csharp\npublic class GlassmorphicPanel : Panel\n{\n    private int _cornerRadius = 20;        // Adjust corner roundness\n    private Color _glassColor = Color.FromArgb(100, 255, 255, 255); // Glass tint\n    private int _blurOpacity = 30;         // Blur intensity (0-100)\n    private Color _borderColor = Color.FromArgb(150, 255, 255, 255); // Border color\n}\n```\n\n## 📱 Usage Guide\n\n### **Location Search**\n\n1. **Finding Locations**\n   - Click on the search textbox at the top\n   - Type your desired location (city, address, landmark)\n   - Press Enter or wait for suggestions to appear\n   - Click on any suggestion to select that location\n\n2. **Search Features**\n   - **Smart Search**: Combines OpenStreetMap and AccuWeather data\n   - **Multiple Results**: Shows various location matches\n   - **Detailed Info**: Displays full address hierarchy\n   - **Quick Selection**: One-click location selection\n\n### **Weather Information**\n\n1. **Current Weather Display**\n   - **Main Panel**: Current temperature and weather description\n   - **Feels Like**: Apparent temperature\n   - **Date/Time**: Current observation time\n   - **Location**: Selected location name\n\n2. **Weather Details Panel**\n   - **Humidity**: Current relative humidity percentage\n   - **Wind Speed**: Wind velocity in km/h\n   - **Visibility**: Atmospheric visibility distance\n   - **Dew Point**: Dew point temperature\n   - **Precipitation**: Rain/snow amounts (past 12 hours)\n\n3. **Forecast Panels**\n   - **Hourly**: Next 12 hours with temperature and conditions\n   - **Daily**: 5-day forecast with high/low temps and rain probability\n\n### **Application Controls**\n\n- **Search Box**: Location search and selection\n- **Refresh Button**: Updates weather data for current location\n- **Weather Icons**: Visual representation of current and forecast conditions\n- **Glassmorphic Panels**: Beautiful semi-transparent information containers\n\n## 🔒 Security Notes\n\nThis application handles API keys and external data requests.\n\n### Current Implementation\n- API key stored in source code (development convenience)\n- HTTPS API calls to AccuWeather and OpenStreetMap\n- Basic error handling for API failures\n- User-agent headers for API compliance\n\n### Recommended Improvements for Production\n- Store API keys in encrypted configuration files\n- Implement API key rotation mechanisms\n- Add request rate limiting and caching\n- Implement comprehensive error logging\n- Add offline mode with cached data\n- Validate and sanitize all API responses\n\n## 🚀 Deployment\n\n### **Standalone Application Deployment**\n\n1. **Build Release Version**\n   ```bash\n   # In Visual Studio\n   Build → Configuration Manager → Set to \"Release\"\n   Build → Build Solution\n   ```\n\n2. **Prepare Distribution Package**\n   ```\n   WeatherApp/\n   ├── weather-app-winforms.exe\n   ├── Newtonsoft.Json.dll\n   ├── System.Text.Json.dll\n   ├── Microsoft.Bcl.AsyncInterfaces.dll\n   ├── Other required DLLs\n   ├── App.config\n   └── Resources/\n       └── Weather icons and images\n   ```\n\n3. **Installation Requirements**\n   - .NET Framework 4.7.2+ (usually pre-installed on Windows 10/11)\n   - Internet connection for API calls\n   - Minimum 4GB RAM, 50MB storage\n   - Screen resolution: 1024x768 or higher\n\n### **ClickOnce Deployment (Optional)**\n\n1. **Setup ClickOnce in Visual Studio**\n   ```bash\n   Project → Properties → Publish\n   Set Publishing Folder Location\n   Configure Update Settings\n   Click \"Publish Now\"\n   ```\n\n2. **Web Deployment**\n   - Upload published files to web server\n   - Users can install via web browser\n   - Automatic updates support\n\n## 🤝 Contributing\n\nWe welcome contributions to improve the Weather App!\n\n### **Development Setup**\n\n1. **Fork and Clone**\n   ```bash\n   git clone https://github.com/elyeandre/weather-app-winforms.git\n   cd weather-app-winforms\n   ```\n\n2. **Development Environment**\n   - Install Visual Studio 2019/2022\n   - Get AccuWeather API key\n   - Create feature branch: `git checkout -b feature/your-feature`\n\n### **Contribution Guidelines**\n\n- Follow C# coding conventions and naming standards\n- Test all API integrations thoroughly\n- Update documentation for new features\n- Ensure UI responsiveness across different screen sizes\n- Add appropriate error handling\n\n### **Areas for Contribution**\n\n- **🌐 Multiple Languages**: Internationalization support\n- **📊 Weather Charts**: Graphical weather data visualization\n- **🔔 Weather Alerts**: Severe weather notifications\n- **📱 Responsive Design**: Better scaling for different screen sizes\n- **🎨 Themes**: Dark mode and custom theme support\n- **💾 Data Caching**: Offline mode with cached weather data\n- **📍 GPS Integration**: Automatic location detection\n- **⚙️ Settings Panel**: User preferences and configuration\n\n## 📄 License\n\nThis project is licensed under the **MIT License** - see the [LICENSE](LICENSE) file for details.\n\n## 📸 Screenshots\n\n![Weather App Main Interface](https://github.com/user-attachments/assets/cef1c8c3-01be-4dad-9dfd-cdf1e00c717f)\n\n### Main Weather Interface\n*Beautiful glassmorphic design with comprehensive weather information*\n\n### Location Search\n*Intelligent location search with OpenStreetMap integration*\n\n### Hourly Forecast\n*12-hour detailed weather predictions with icons*\n\n### Daily Forecast\n*5-day weather outlook with temperature ranges*\n\n---\n\n**🌤️ Built with ❤️ for Weather Enthusiasts Everywhere**\n\n*\"Bringing beautiful weather information to your desktop\"*\n\n---\n\n[made-with-csharp]: https://img.shields.io/badge/Made%20with-C%23-blue.svg?style=for-the-badge\n[built-with-love]: https://img.shields.io/badge/Built%20with-❤️-red.svg?style=for-the-badge\n[forthebadge-url]: http://forthebadge.com\n[contributors-shield]: https://img.shields.io/github/contributors/elyeandre/weather-app-winforms.svg?style=for-the-badge\n[contributors-url]: https://github.com/elyeandre/weather-app-winforms/graphs/contributors\n[forks-shield]: https://img.shields.io/github/forks/elyeandre/weather-app-winforms.svg?style=for-the-badge\n[forks-url]: https://github.com/elyeandre/weather-app-winforms/network/members\n[stars-shield]: https://img.shields.io/github/stars/elyeandre/weather-app-winforms.svg?style=for-the-badge\n[stars-url]: https://github.com/elyeandre/weather-app-winforms/stargazers\n[issues-shield]: https://img.shields.io/github/issues/elyeandre/weather-app-winforms.svg?style=for-the-badge\n[issues-issues-url]: https://github.com/elyeandre/weather-app-winforms/issues\n\n*Last updated: September 25, 2025*","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Felyeandre%2Fweather-app-winforms","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Felyeandre%2Fweather-app-winforms","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Felyeandre%2Fweather-app-winforms/lists"}