Frontend: Swift, SwiftUI, UIKit
Backend: Node.js, Express, MongoDB (Atlas), Google App Engine
Libraries & Frameworks:
- SwiftyJSON: Handling JSON data
- Alamofire: Making HTTP requests
- Toast-Swift: Displaying toast messages
- SwiftSpinner: Loading spinner
- HighCharts: Implementing charts for data visualization
- Tomorrow.io API - Fetches real-time and forecast weather data.
- Google Places Autocomplete API - Provides search suggestions for cities.
- Google Geocoding API - Converts location names into latitude/longitude.
- MongoDB Atlas - Stores user-favorited locations in a cloud database.
- Twitter (X) Share API - Allows users to share weather updates on X (Twitter).
- Automatically fetches weather data based on the user’s current location.
- Uses Apple’s Core Location framework to determine the location.
- Implements a UISearchBar with autocomplete functionality.
- Fetches weather data via Tomorrow.io API based on user input.
- Displays search results in a table view.
- Today Tab: Displays current weather data including:
- Temperature
- Humidity
- Wind Speed
- Visibility
- Pressure
- Weekly Tab: Shows 7-day forecast with:
- Date, sunrise/sunset times
- Temperature trends using HighCharts area charts
- Weather Data Tab: Includes:
- Precipitation probability, humidity, cloud cover
- Activity gauge charts using HighCharts
- Allows users to save cities to a favorites list.
- Implements persistent storage using MongoDB Atlas (cloud database).
- Supports removing cities from favorites and syncing data with the backend.
- Integrates Twitter (X) sharing.
- Generates a tweet containing the weather details.
- Uses SwiftUI and UIKit for a smooth experience.
- Includes dynamic loading spinners for API calls.
- Displays error messages gracefully.
- Uses a Node.js backend deployed on Google App Engine (GAE).
- Stores user-favorite locations in MongoDB Atlas for cross-device sync.
- Communicates with the backend via asynchronous HTTP requests.
The full source code for this project is not publicly available.
If you are interested in accessing the code, please feel free to request it by contacting me.