Interactive Global Map of Akamai Linode Cloud Regions
- Interactive World Map using Leaflet and OpenStreetMap
- Real-time Region Data from Linode API with local fallbacks
- Dynamic Geocoding for new regions using Nominatim
- Region Details Sidebar with comprehensive information
- Availability Checker for different Linode plans
- Responsive Design optimized for desktop and mobile
- Smart Caching to minimize API calls
- Node.js 16+
- npm or yarn
-
Clone and install dependencies:
git clone <repository-url> cd akamap npm install
-
Start the development server:
npm start
-
Open your browser: Navigate to
http://localhost:3000
- Primary: Live Linode API (
https://api.linode.com/v4/regions
) - Fallback: Local JSON files for offline development
- Geocoding: Nominatim (OpenStreetMap) for coordinates
- Bundled coordinates - Pre-geocoded locations in
coordinates.json
- Runtime geocoding - New regions geocoded automatically via Nominatim
- Local caching - Geocoded locations cached in localStorage
- Visual indicators - New regions marked with "NEW" badges
src/
├── components/ # React components
│ ├── RegionMarker.js # Map markers
│ ├── Sidebar.js # Region details panel
│ ├── LoadingSpinner.js
│ └── GeocodingSummary.js
├── hooks/ # Custom React hooks
│ └── useRegionGeocoding.js
├── services/ # API services
│ └── linodeApi.js # Linode API calls
├── utils/ # Utilities
│ └── geocoding.js # Geocoding logic
└── data/ # Local data files
├── coordinates.json # Pre-geocoded coordinates
├── list-regions.json # Sample regions data
└── get-availability.json # Sample availability data
- Explore the Map: Pan and zoom to see different regions
- Hover for Quick Info: See basic region details on hover
- Click for Details: Open full sidebar with region information
- Check Availability: Click "Get Availability" to see plan availability
- New Regions: Automatically detected and marked with "NEW" badges
Run the geocoding script to update coordinates for new regions:
./geocode-regions.sh
- Regions:
GET https://api.linode.com/v4/regions
- Availability:
GET https://api.linode.com/v4/regions/{regionId}/availability
- Geocoding:
GET https://nominatim.openstreetmap.org/search
- Desktop: Full sidebar and map view
- Tablet: Collapsible sidebar
- Mobile: Full-screen sidebar overlay
Modify App.css
to change map themes, colors, and animations.
Update .custom-marker
classes for different marker appearances.
Modify getCategoryForCapability()
in Sidebar.js
to customize capability groupings.
npm run build
The build creates a static site that can be deployed to:
- Netlify
- Vercel
- GitHub Pages
- AWS S3
- Any static file server
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests if applicable
- Submit a pull request
Found a bug or have a feature request? Reach out on Twitter: @joel-g
MIT License - see LICENSE file for details
- Leaflet - Interactive maps
- OpenStreetMap - Map tiles and geocoding
- Linode - API data
- React - UI framework