A modern full-stack weather application with real-time data, detailed forecasts, and intelligent insights. Built with Next.js and Kotlin/Ktor for seamless local and Docker deployment.
- Real-time weather from OpenMeteo for any city worldwide
- 5-day forecast with detailed temperature and conditions
- Global location search
- Intelligent "feels like" descriptions and recommendations
- Dark/light theme support
- Favorite locations and customization
- Responsive glassmorphism UI design
npm run docker:up # Start containers
npm run docker:logs # View logs
npm run docker:down # Stop containersAccess at: http://localhost:3000 (Frontend) | http://localhost:8080 (Backend)
Prerequisites: Node.js 20+, Java JDK 17+
# Install and configure
npm install
cp .env.example .env
# Start (Linux/Mac)
chmod +x start.sh && ./start.sh
# Start (Windows)
start.bat
# Manual start
./run-backend.sh # Terminal 1
npm run dev # Terminal 2Access at: http://localhost:9002 (Frontend) | http://localhost:8080 (Backend)
Frontend: Next.js 15, TypeScript, Tailwind CSS, shadcn/ui
Backend: Kotlin, Ktor, SQLite, Exposed
APIs: OpenMeteo (weather), Nominatim (geocoding)
Copy .env.example to .env and configure:
Local:
NEXT_PUBLIC_API_URL=http://localhost:8080
NODE_ENV=developmentDocker: Automatically configured via docker-compose.yml
Development:
npm run dev # Start dev server (Turbopack)
npm run build # Build for production
npm start # Start production server
npm run lint # Run ESLintDocker:
npm run docker:build # Build images
npm run docker:up # Start containers
npm run docker:down # Stop containers
npm run docker:logs # View logs
npm run docker:clean # Remove all containers/volumesBackend:
./run-backend.sh # Build and run
./gradlew build # Build onlyGET /weather?city=<city_name>- Current weather and forecastPOST /weather/rating- Submit rating (Body:{ "rating": number, "city": string })
Backend won't start:
- Verify Java 17+:
java -version - Check port 8080 availability
Frontend can't connect:
- Verify backend is running:
curl http://localhost:8080/weather?city=London - Check
.envhas correctNEXT_PUBLIC_API_URL
Docker issues:
- Ensure Docker is running
- Check port conflicts:
docker ps - View logs:
npm run docker:logs
docker-compose build --no-cache
docker-compose up -d
docker-compose logs -fConfigure reverse proxy, SSL/TLS, and security headers as needed.
- OpenMeteo - Weather data
- Nominatim - Geocoding
- shadcn/ui - UI components
- Next.js - Frontend framework
- Ktor - Backend framework
This project was developed as a collaborative team effort:
- Mailles - Frontend & Integration (Next.js development and backend integration)
- Backend Team - Two collaborators responsible for Kotlin/Ktor backend and API design
MIT License