{"id":26148914,"url":"https://github.com/zabavb/weather-forecast-app","last_synced_at":"2026-04-07T22:32:02.466Z","repository":{"id":280270138,"uuid":"941484226","full_name":"zabavb/Weather-forecast-app","owner":"zabavb","description":"Weather Forecast App is a modern full-stack web application that allows users to retrieve and search weather forecasts for today or the next three days across various cities. Built using a microservices architecture, the app showcases key backend and frontend practices like RESTful APIs, authentication, caching, async programming, and validation. ","archived":false,"fork":false,"pushed_at":"2025-05-22T17:59:11.000Z","size":250,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-06-15T20:43:59.754Z","etag":null,"topics":["app","asp-net","dotnet","jwt-authentication","microservices","ocelot-gateway","react","redis","redux","restful-api","typescript","weather-forecast","zod-validation"],"latest_commit_sha":null,"homepage":"","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/zabavb.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","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-03-02T12:04:56.000Z","updated_at":"2025-05-22T17:59:15.000Z","dependencies_parsed_at":null,"dependency_job_id":"ad8ba051-9722-4392-8e49-59882428c1cd","html_url":"https://github.com/zabavb/Weather-forecast-app","commit_stats":null,"previous_names":["zabavb/weather-forecast-app"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/zabavb/Weather-forecast-app","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zabavb%2FWeather-forecast-app","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zabavb%2FWeather-forecast-app/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zabavb%2FWeather-forecast-app/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zabavb%2FWeather-forecast-app/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zabavb","download_url":"https://codeload.github.com/zabavb/Weather-forecast-app/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zabavb%2FWeather-forecast-app/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31532243,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-07T16:28:08.000Z","status":"ssl_error","status_checked_at":"2026-04-07T16:28:06.951Z","response_time":105,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5: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":["app","asp-net","dotnet","jwt-authentication","microservices","ocelot-gateway","react","redis","redux","restful-api","typescript","weather-forecast","zod-validation"],"created_at":"2025-03-11T05:22:09.667Z","updated_at":"2026-04-07T22:32:02.451Z","avatar_url":"https://github.com/zabavb.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"client/src/assets/logo.svg\" alt=\"Weather App Logo\" width=\"200\"/\u003e\n\u003c/p\u003e\n\n\u003ch1 align=\"center\"\u003eWeather Forecast Web Application\u003c/h1\u003e\n\n\u003cp\u003e\n  \u003cstrong\u003eWeather Forecast App\u003c/strong\u003e is a modern full-stack web application that allows users \n  to retrieve and search weather forecasts for today or the next three days across various cities. \n  Built using a microservices architecture, the app showcases key backend and frontend practices \n  like RESTful APIs, authentication, caching, asynchronous programming, and validation.\n\u003c/p\u003e\n\n\u003cp\u003e\n  This project demonstrates integration with a remote weather API and efficient data handling \n  via Redis caching, database persistence, and optimized frontend performance.\n\u003c/p\u003e\n\n\u003ch2\u003e🧱 Architecture Overview\u003c/h2\u003e\n\u003cul\u003e\n  \u003cli\u003e\n    \u003cstrong\u003eBackend:\u003c/strong\u003e ASP.NET Core 8 with a microservice architecture\n  \u003c/li\u003e\n  \u003cli\u003e\n    \u003cstrong\u003eFrontend:\u003c/strong\u003e React with TypeScript\n  \u003c/li\u003e\n  \u003cli\u003e\n    \u003cstrong\u003eGateway:\u003c/strong\u003e Ocelot API Gateway\n  \u003c/li\u003e\n\u003c/ul\u003e\n\n\u003ch2\u003e🔙 Backend Details\u003c/h2\u003e\n\u003ch3\u003eMicroservices\u003c/h3\u003e\n\u003cul\u003e\n  \u003cli\u003e\n    \u003cstrong\u003eUserAPI\u003c/strong\u003e – Manages user accounts and authentication:\n    \u003cul\u003e\n      \u003cli\u003e\n        JWT-based role authentication\n      \u003c/li\u003e\n      \u003cli\u003e\n        EF Core-based interaction with SQL database\n      \u003c/li\u003e\n      \u003cli\u003e\n        Includes login and registration flows\n      \u003c/li\u003e\n    \u003c/ul\u003e\n  \u003c/li\u003e\n  \u003cli\u003e\n    \u003cstrong\u003eForecastAPI\u003c/strong\u003e – Interacts with a remote \u003ccode\u003eweather.api\u003c/code\u003e service to fetch:\n    \u003cul\u003e\n      \u003cli\u003e\n        Today’s weather forecast\n      \u003c/li\u003e\n      \u003cli\u003e\n        Forecasts for the next 3 days (inclusive of today)\n      \u003c/li\u003e\n      \u003cli\u003e\n        Filtering based on city\n      \u003c/li\u003e\n    \u003c/ul\u003e\n  \u003c/li\u003e\n  \u003cli\u003e\n    \u003cstrong\u003eGateway\u003c/strong\u003e – Ocelot-based API Gateway to route requests between services securely and efficiently\n  \u003c/li\u003e\n\u003c/ul\u003e\n\n\u003ch3\u003eCommon Backend Features\u003c/h3\u003e\n\u003cul\u003e\n  \u003cli\u003e\n    RESTful API structure using controller-service-repository pattern\n  \u003c/li\u003e\n  \u003cli\u003e\n    JWT Authentication and Authorization\n  \u003c/li\u003e\n  \u003cli\u003e\n    Redis caching for optimized forecast responses\n  \u003c/li\u003e\n  \u003cli\u003e\n    Asynchronous programming (async/await) for non-blocking operations\n  \u003c/li\u003e\n  \u003cli\u003e\n    Serilog for structured logging\n  \u003c/li\u003e\n  \u003cli\u003e\n    Validation of incoming data\n  \u003c/li\u003e\n\u003c/ul\u003e\n\n\u003ch2\u003e🖥️ Frontend Details\u003c/h2\u003e\n\u003ch3\u003eArchitecture\u003c/h3\u003e\n\u003cp\u003e\n  \u003ccode\u003eapi → repository → service → container → component\u003c/code\u003e\n\u003c/p\u003e\n\u003ch3\u003eMain Features\u003c/h3\u003e\n\u003cul\u003e\n  \u003cli\u003e\n    React with TypeScript, Vite as the build tool\n  \u003c/li\u003e\n  \u003cli\u003e\n    JWT token handling and role-based UI updates\n  \u003c/li\u003e\n  \u003cli\u003e\n    Axios for HTTP requests to backend services\n  \u003c/li\u003e\n  \u003cli\u003e\n    Zod for form and schema validation\n  \u003c/li\u003e\n  \u003cli\u003e\n    Memoization of expensive operations for performance\n  \u003c/li\u003e\n\u003c/ul\u003e\n\n\u003ch2\u003e🔐 Authentication \u0026 Authorization\u003c/h2\u003e\n\u003cul\u003e\n  \u003cli\u003e\n    Secure login and registration\n  \u003c/li\u003e\n  \u003cli\u003e\n    JWT-based authentication with protected routes\n  \u003c/li\u003e\n  \u003cli\u003e\n    Tokens stored in \u003ccode\u003elocalStorage\u003c/code\u003e\n  \u003c/li\u003e\n\u003c/ul\u003e\n\n\u003ch2\u003e🛠️ Technologies Used\u003c/h2\u003e\n\u003ch3\u003eBackend\u003c/h3\u003e\n\u003cul\u003e\n  \u003cli\u003eASP.NET Core 8\u003c/li\u003e\n  \u003cli\u003eEntity Framework Core\u003c/li\u003e\n  \u003cli\u003eRedis\u003c/li\u003e\n  \u003cli\u003eOcelot API Gateway\u003c/li\u003e\n  \u003cli\u003eSerilog\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFrontend\u003c/h3\u003e\n\u003cul\u003e\n  \u003cli\u003eReact + TypeScript\u003c/li\u003e\n  \u003cli\u003eVite\u003c/li\u003e\n  \u003cli\u003eZod\u003c/li\u003e\n  \u003cli\u003eAxios\u003c/li\u003e\n\u003c/ul\u003e\n\n\u003ch2\u003e📡 API Integration\u003c/h2\u003e\n\u003cp\u003eThis project consumes a remote third-party API for weather data:\u003c/p\u003e\n\u003cul\u003e\n  \u003cli\u003eAll forecast data is retrieved from the \n    \u003ca href=\"https://www.weatherapi.com\"\u003ewww.weatherapi.com\u003c/a\u003e\n    remote server\u003c/li\u003e\n  \u003cli\u003eData is filtered and cached appropriately to reduce unnecessary API calls\u003c/li\u003e\n\u003c/ul\u003e\n\n\u003ch2\u003e🧪 Development Status\u003c/h2\u003e\n\u003cp\u003e\n  \u003cem\u003e\n    This project is a demonstration of microservice integration, JWT security, and caching. Payment systems \n    or admin panels are not part of the scope. Future improvements may include user dashboards, forecast \n    history, and enhanced UX features.\n  \u003c/em\u003e\n\u003c/p\u003e\n\u003ch2\u003e🔗 Repository\u003c/h2\u003e\n\u003cp\u003e GitHub: \n  \u003ca href=\"https://github.com/zabavb/weather-forecast-app\"\u003egithub.com/zabavb/weather-forecast-app\u003c/a\u003e\n\u003c/p\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzabavb%2Fweather-forecast-app","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzabavb%2Fweather-forecast-app","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzabavb%2Fweather-forecast-app/lists"}