Cross-platform desktop weather app for 157 Algerian cities, in English, French, and Arabic. Electron + Next.js, no API key required.
# Algeria Weather
A cross-platform desktop weather app for Algeria, built with Electron and Next.js. Current conditions for **157 cities across all 58 wilayas**, in **English, French, and Arabic** (with full right-to-left layout), and a light/dark theme that remembers your choice.
No API key, no account, no configuration — weather comes from Open-Meteo, which is free and keyless for non-commercial use.
## Screenshots
| Light | Dark |
|---|---|
| | |
| City search | Arabic (RTL) |
|---|---|
| | |
## Features
- **157 Algerian cities**, searchable by city or wilaya name in any of the three languages
- **Trilingual** — English, French, Arabic, with `dir="rtl"` and mirrored layout for Arabic
- **Light and dark themes**, following your OS by default until you pick one
- **Remembers your last city, language, and theme** between launches
- Temperature, feels-like, humidity, wind, visibility, UV index, and precipitation probability
- **Fully keyboard accessible** — the city search is an ARIA combobox with arrow-key navigation, and all motion respects `prefers-reduced-motion`
- Responsive layout: two stat columns in a narrow window, four in a wide one
- Auto-refreshes every 10 minutes
## Install
Requires Node.js 20+. The repo contains **two npm packages** — the Electron shell at the root and the Next.js UI in `renderer/` — so install both:
```bash
git clone
github.com
cd weather-desktop-app
npm install
cd renderer && npm install && cd ..
```
## Development
```bash
npm run dev
```
This compiles the Electron main process, starts Next.js on port 3000, waits for it, then launches Electron pointed at the dev server with DevTools open. UI changes hot-reload; changes under `electron/` need a restart.
To work on the UI alone in a browser, `cd renderer && npm run dev`. There is no Electron bridge there, so the app keeps whatever the URL says and falls back to its defaults — every locale, including `/ar` and `/fr`, work …