Skip to content

Nonamechick/Weather

Repository files navigation

Weather Dashboard Widget - Technical Assessment

πŸ“… Start Date & Deadline

Start Time: 09.06.25 09:00 am
Submission Deadline: 12.06.25

🌦️ Interactive Weather Dashboard Widget

A React-based dashboard widget that displays and analyzes weather data across multiple cities, demonstrating advanced frontend development skills. Screenshot 2025-06-11 122513

πŸ› οΈ Tech Stack

  • Framework: React 19 with Vite
  • State Management: Context API + useReducer
  • Styling: CSS Modules with custom transitions
  • Visualization: Pure SVG charts
  • Testing: Jest + React Testing Library
  • API: OpenWeatherMap with mock service

πŸ“‹ Requirements Implemented

βœ… Data Integration
βœ… Complete UI Components
βœ… Advanced State Management
βœ… Custom Utility Functions
βœ… Responsive Design
βœ… Comprehensive Testing

πŸš€ Quick Start

  1. Clone repository:

    git clone https://github.com/your-username/weather-widget.git
    cd weather-widget
  2. Install dependencies:

    npm install
  3. Configure environment: Create .env file:

    VITE_OWM_API_KEY=your_openweathermap_api_key
  4. Run development server:

    npm run dev

πŸ“‚ Project Structure

/
β”œβ”€β”€ public/               # Static assets
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ components/       # All required UI components
β”‚   β”‚   β”œβ”€β”€ CitySelector/
β”‚   β”‚   β”œβ”€β”€ DataVisualization/
β”‚   β”‚   β”œβ”€β”€ ErrorBoundary/
β”‚   β”‚   β”œβ”€β”€ ForecastList/
β”‚   β”‚   β”œβ”€β”€ SettingsPanel/
β”‚   β”‚   └── WeatherDisplay/
β”‚   β”œβ”€β”€ context/          # Theme context
β”‚   β”œβ”€β”€ hooks/            # Custom hooks
β”‚   β”œβ”€β”€ reducers/         # State reducers
β”‚   β”œβ”€β”€ services/         # API services
β”‚   β”œβ”€β”€ utils/            # Utility functions
β”‚   └── App.jsx           # Main component
β”œβ”€β”€ tests/                # Unit tests
└── docs/                 # Documentation

πŸ“Š Component Architecture

flowchart TD
    A[WeatherWidget] --> B[CitySelector]
    A --> C[WeatherDisplay]
    A --> D[ForecastList]
    A --> E[DataVisualization]
    A --> F[SettingsPanel]
    A --> G[ErrorBoundary]
    B --> H[useWeatherData]
    C --> H
    D --> H
    E --> H
    F --> I[ThemeContext]
Loading

πŸ”„ Data Flow

sequenceDiagram
    participant User
    participant CitySelector
    participant useWeatherData
    participant OpenWeatherAPI
    participant WeatherDisplay
    
    User->>CitySelector: Select City
    CitySelector->>useWeatherData: CHANGE_CITY
    useWeatherData->>OpenWeatherAPI: Fetch Data
    OpenWeatherAPI-->>useWeatherData: Weather Data
    useWeatherData->>WeatherDisplay: Update State
    WeatherDisplay->>User: Show Weather
Loading

πŸ§ͺ Testing

Run all tests with:

npm test

Test coverage includes:

  • useWeatherData hook
  • Temperature conversion utilities
  • Debounce functionality
  • Component snapshots

βš™οΈ Performance Optimizations

  • API call throttling (1 call/5s)
  • Search input debounce (300ms)
  • Memoized components
  • Efficient data transformations
  • CSS hardware acceleration for animations

πŸ“š Documentation

Custom Hooks

useWeatherData
Handles all weather data operations including:

  • API fetching with throttling
  • Data transformation
  • Error handling
  • Unit conversion

Contexts

ThemeContext
Manages dark/light mode with color palette:

  • Light: #f8f9fa, #212529, #0d6efd
  • Dark: #212529, #f8f9fa, #0d6efd

πŸ“± Responsive Design

  • Fixed 800px width on desktop
  • Fluid layout on mobile
  • Adaptive component rendering

πŸ“ Submission Notes

  1. Mock API service included for development
  2. Clear error handling for API failures
  3. Complete documentation in code comments
  4. Sample tests provided for all critical paths

πŸ“ž Presentation Topics

  1. Component architecture decisions
  2. State management approach
  3. Performance optimization strategies
  4. SVG chart implementation rationale
  5. Responsive design solutions

🌀️ Developed with attention to detail and modern React patterns βš›οΈ

About

🌦️ Weather Dashboard Widget A React widget displaying real-time weather

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages