// Personal R&D / 2026

Kurdistan Weather
کەش و هەوای کوردستان

A fully Kurdish-language weather platform covering 25 cities and towns across Kurdistan — live conditions, a 25-hour forecast strip, a 7-day outlook, and an atmospheric sky background that mirrors the real weather and time of day. Built on the keyless Open-Meteo API.

Next.js 15React 19TypeScriptTailwind CSSOpen-Meteo APIISR / SSGRTL Kurdish
weather.ibrahim-eng.dev
Kurdistan Weather — screenshot

25 Cities & Towns

Locations

Open-Meteo API

Weather Data

Kurdish Sorani (RTL)

Language

weather.ibrahim-eng.dev

Domain

01 — The Problem

Weather Apps Ignore Kurdistan's Towns — and Its Language

Every mainstream weather app is in English or Arabic. For millions of Kurdish speakers — especially older people and those in smaller towns — checking the weather means reading a foreign language just to know if it will rain tomorrow.

Worse, global apps only cover the big cities. Towns like Barzan, Penjwen, Mergasor, or Sidakan simply don't exist on most platforms — yet that's where weather matters most: farming, travel through mountain roads, and daily life.

02 — What I Built

Six Core Features

Every screen is natively Kurdish Sorani with a right-to-left layout and Kurdish-Indic digits throughout.

کەش و هەوای ئێستا

Live conditions: temperature, feels-like, humidity, wind speed & direction, pressure, visibility, UV index, cloud cover, and rain probability

پێشبینی کاتژمێری

Next 25 hours as a horizontal strip with a temperature curve, condition icons, and rain probability per hour

پێشبینی ٧ ڕۆژە

Full week forecast with min/max temperature bars, expandable daily details, sunrise and sunset times

٢٥ شار و شارۆچکە

Every supported city on one grid — Erbil, Sulaymaniyah, Duhok, Zakho, and small towns like Barzan and Mergasor

گەڕان و شوێنی من

Search in Kurdish or English with spelling aliases, plus opt-in geolocation that finds your nearest city

ئاسمانی زیندوو

The entire background adapts to the real weather and time — stars at night, rain, snow, fog, dust, and storm flashes

03 — Technical Deep Dive

Architecture & How It Works

Data Layer

Open-Meteo Service Layer

All API communication lives in a single module (src/lib/weather/service.ts) powered by Open-Meteo — a free weather API that requires no API key. Raw responses are mapped into clean internal types, so the UI never touches API shapes and the provider can be swapped without changing a single component.

Requests carry a 9-second timeout, one automatic retry, a 10-minute in-memory cache, and Next.js ISR revalidation (revalidate: 600) — so the app stays fast under load and resilient when the API hiccups.

Efficiency

One Request for 25 Cities

Instead of 25 separate calls, the cities grid uses a single batched request — Open-Meteo accepts comma-separated latitude/longitude lists and returns one array. Every city's current temperature, condition, and rain probability arrives in a single round trip.

Coordinates are fixed geographic points in a local dataset (locations.ts), so city names are never sent to the API — searches resolve locally, in Kurdish or English.

Atmosphere

Weather-Driven Sky Engine

WMO weather codes are mapped to 7 visual sky categories, and the real sunrise/sunset times from the API pick one of 4 phases — day, dawn, dusk, or night. Dawn and dusk trigger warm palettes within a 40-minute window around the actual sun times.

The result is a pure-CSS atmosphere: stars at night, drifting clouds, rain streaks, two-layer snowfall, moving fog bands, dust haze, and lightning flashes — zero canvas, zero images, cheap to paint on any device.

Sky Categories

7 Atmospheric States

ClearGradient sky + stars at night
CloudyDrifting cloud layers
RainFalling rain streaks
StormRain + lightning flashes
SnowTwo-layer snowfall
FogMoving mist bands
DustHazy dust overlay

Full Kurdish Localization

Kurdish-Indic digits (٠١٢٣٤٥٦٧٨٩), Kurdish month and weekday names, Kurdish compass directions (باکووری ڕۆژهەڵات), and human-readable relative times like "نوێکراوەتەوە ٨ خولەک لەمەوبەر" — all formatted by hand, no i18n library.

Search, Aliases & Geolocation

Search resolves Kurdish, English, and alternate spellings (بەرزان/بارزان, hewler, slemany) via an alias map. Opt-in geolocation finds the nearest supported city using the Haversine formula — never overriding a manual choice.

Hand-Built SVG Icon System

Every weather icon — sun, moon, clouds, rain, snow, storm — is a hand-drawn animated SVG. No emojis, no icon fonts, perfectly consistent with the design language.

Static Generation + Live Data

All 25 city pages are statically generated (generateStaticParams) with per-city Kurdish metadata for SEO. The server fetches weather at request time with ISR; if it fails, the client falls back to /api routes seamlessly.

Quiet Auto-Refresh

The app silently refetches every 10 minutes and shows a live "updated X minutes ago" label that ticks every minute — users always know how fresh the data is without a manual reload.

Shareable City URLs

Switching cities updates the URL via history.replaceState (/weather/erbil, /weather/halabja...) so any city's forecast can be bookmarked or shared directly.

Impact

Deployed live at weather.ibrahim-eng.dev, Kurdistan Weather is the first weather experience built natively for Kurdish speakers — covering not just the big cities but 25 cities and towns across the region, with a living sky that reflects the actual weather outside, entirely in Kurdish Sorani.

Check Kurdistan's Weather

Try the live app or explore the full source code on GitHub.