A beautiful, modern weather visualization app that transforms real-time weather data into stunning AI-generated isometric 3D city scenes. Experience any city in the world through art powered by Google Gemini.
Demo: Compare two cities side-by-side to see weather differences in real-time
- Live weather from Open-Meteo (completely free, no API key required!)
- Accurate local timezone support for cities worldwide
- Temperature, conditions, humidity, wind speed, and more
- Stunning 3D visualizations powered by Google Gemini
- City landmarks and architecture integrated with current weather
- Dynamic weather icons and atmospheric effects
- Beautiful glassmorphism UI with smooth animations
Instantly teleport to a random city and see its weather visualized. Perfect for discovering new places!
Side-by-side comparison of two cities. See how weather differs across the globe in real-time.
- Fully responsive - works beautifully on all devices
- Glassmorphism effects with gradient overlays
- Smooth animations and transitions
- Dark theme optimized for visual content
Double-click "Gemini 3" in the footer to reveal the AI prompt used for image generation!
- Node.js 18+ and npm/yarn/pnpm
- Google API key (for AI image generation) - Get one here
-
Clone the repository
git clone https://github.com/RamAnanth/skytile.git cd skytile -
Install dependencies
npm install # or yarn install # or pnpm install
-
Set up environment variables
Copy the example environment file:
cp .env.example .env.local
Then edit
.env.localand add your Google API key:GOOGLE_API_KEY=your_google_api_key_here GOOGLE_MODEL=gemini-2.5-flash-image # Optional: use 'gemini-3-pro-preview' for better quality
-
Run the development server
npm run dev # or yarn dev # or pnpm dev
-
Open your browser
Navigate to http://localhost:3000
- Search or Select a City - Use the search bar or pick from featured cities
- View Real-time Weather - See current conditions with accurate local time
- Generate AI Scene - Create a beautiful isometric visualization (requires Google API key)
- Compare Cities - Switch to compare mode to see two cities side-by-side
- Teleport - Click the teleport button to randomly explore cities worldwide
skytile/
βββ app/
β βββ api/
β β βββ weather/
β β β βββ route.ts # Open-Meteo weather API integration
β β βββ generate/
β β βββ route.ts # Google Gemini image generation
β βββ page.tsx # Main UI component
β βββ layout.tsx # Root layout
β βββ globals.css # Global styles
βββ components/
β βββ CitySelector.tsx # City search and selection
βββ lib/
β βββ cities.ts # Predefined cities database
β βββ prompt.ts # AI prompt builder
βββ .env.example # Environment variables template
βββ README.md # This file
| Variable | Required | Default | Description |
|---|---|---|---|
GOOGLE_API_KEY |
Yes* | - | Google Gemini API key for image generation |
GOOGLE_MODEL |
No | gemini-2.5-flash-image |
Gemini model to use (gemini-3 for better quality) |
*Required only for AI image generation. Weather data works without it!
gemini-2.5-flash-image(default) - Fast and cost-effectivegemini-3- Higher quality, better results (recommended for production)
- Push your code to GitHub
- Import your repository on Vercel
- Add your
GOOGLE_API_KEYin the environment variables section - Deploy! π
- Open-Meteo: Completely free, no limits
- Consider implementing rate limiting for public deployments
- Monitor API usage through Google Cloud Console
- Use
gemini-2.5-flash-imagefor cost optimization - Cache generated images if needed (not currently implemented)
- Next.js 16 - React framework with App Router
- TypeScript - Type safety
- Tailwind CSS 4 - Utility-first styling
- Open-Meteo API - Free weather data
- Google Gemini API - AI image generation
- @google/genai - Official Gemini SDK
We welcome contributions! Here are a few ways you can help:
Want to see your favorite city added?
- Open an issue - Use our City Suggestion template
- Include the details:
- City name
- Country
- Latitude and longitude (you can find these on Google Maps)
- Fork the repository
- Create your feature branch (
git checkout -b feat/fire_feature) - Commit your changes (
git commit -m 'feat: Add some fire feature') - Push to the branch (
git push origin feat/fire_feature) - Open a Pull Request
Found a bug? Please open an issue with:
- A clear description of the problem
- Steps to reproduce
- Expected vs actual behavior
- Screenshots if applicable
This project is licensed under the MIT License - see the LICENSE file for details.
- Open-Meteo for providing free, reliable weather data
- Google Gemini for powerful AI image generation
- Next.js team for an amazing framework
- Inspiration: This project was inspired by Pavol Rusnak's tweet
Made with β€οΈ using Next.js and Google Gemini