Best use case
Mapbox — Custom Interactive Maps is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
## Overview
Teams using Mapbox — Custom Interactive Maps should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/mapbox/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How Mapbox — Custom Interactive Maps Compares
| Feature / Agent | Mapbox — Custom Interactive Maps | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
## Overview
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# Mapbox — Custom Interactive Maps
## Overview
You are an expert in Mapbox, the platform for custom interactive maps, geocoding, navigation, and geospatial data visualization. You help developers build location-aware applications with custom map styles, markers, layers, 3D terrain, route planning, and real-time location tracking using Mapbox GL JS and the Mapbox APIs.
## Instructions
### Basic Map
```typescript
// React integration with react-map-gl
import Map, { Marker, Popup, NavigationControl, Source, Layer } from "react-map-gl";
import "mapbox-gl/dist/mapbox-gl.css";
function StoreLocator() {
const [selectedStore, setSelectedStore] = useState(null);
return (
<Map
mapboxAccessToken={process.env.NEXT_PUBLIC_MAPBOX_TOKEN}
initialViewState={{ longitude: -73.98, latitude: 40.75, zoom: 12 }}
style={{ width: "100%", height: "100vh" }}
mapStyle="mapbox://styles/mapbox/light-v11"
>
<NavigationControl position="top-right" />
{stores.map((store) => (
<Marker
key={store.id}
longitude={store.lng}
latitude={store.lat}
onClick={() => setSelectedStore(store)}
>
<div className="store-pin">📍</div>
</Marker>
))}
{selectedStore && (
<Popup
longitude={selectedStore.lng}
latitude={selectedStore.lat}
onClose={() => setSelectedStore(null)}
>
<h3>{selectedStore.name}</h3>
<p>{selectedStore.address}</p>
<p>Open: {selectedStore.hours}</p>
</Popup>
)}
</Map>
);
}
```
### Data Layers
```typescript
// Heatmap layer for density visualization
function DeliveryHeatmap({ deliveries }) {
const geojson = {
type: "FeatureCollection",
features: deliveries.map((d) => ({
type: "Feature",
geometry: { type: "Point", coordinates: [d.lng, d.lat] },
properties: { weight: d.orderCount },
})),
};
return (
<Map mapboxAccessToken={TOKEN} mapStyle="mapbox://styles/mapbox/dark-v11"
initialViewState={{ longitude: -73.98, latitude: 40.75, zoom: 11 }}>
<Source type="geojson" data={geojson}>
<Layer
type="heatmap"
paint={{
"heatmap-weight": ["get", "weight"],
"heatmap-intensity": ["interpolate", ["linear"], ["zoom"], 0, 1, 15, 3],
"heatmap-radius": ["interpolate", ["linear"], ["zoom"], 0, 5, 15, 30],
"heatmap-color": [
"interpolate", ["linear"], ["heatmap-density"],
0, "rgba(0,0,255,0)", 0.2, "blue", 0.4, "cyan",
0.6, "lime", 0.8, "yellow", 1, "red",
],
}}
/>
</Source>
</Map>
);
}
```
### Geocoding and Directions
```typescript
// Geocoding API — address to coordinates
const geocode = async (address: string) => {
const res = await fetch(
`https://api.mapbox.com/geocoding/v5/mapbox.places/${encodeURIComponent(address)}.json?access_token=${TOKEN}`
);
const data = await res.json();
const [lng, lat] = data.features[0].center;
return { lng, lat, place_name: data.features[0].place_name };
};
// Directions API — route between two points
const getRoute = async (start: [number, number], end: [number, number]) => {
const res = await fetch(
`https://api.mapbox.com/directions/v5/mapbox/driving/${start.join(",")};${end.join(",")}?geometries=geojson&access_token=${TOKEN}`
);
const data = await res.json();
return {
route: data.routes[0].geometry, // GeoJSON LineString
duration: data.routes[0].duration, // seconds
distance: data.routes[0].distance, // meters
};
};
```
## Installation
```bash
npm install mapbox-gl react-map-gl
# Get access token at https://account.mapbox.com/
```
## Examples
**Example 1: User asks to set up mapbox**
User: "Help me set up mapbox for my project"
The agent should:
1. Check system requirements and prerequisites
2. Install or configure mapbox
3. Set up initial project structure
4. Verify the setup works correctly
**Example 2: User asks to build a feature with mapbox**
User: "Create a dashboard using mapbox"
The agent should:
1. Scaffold the component or configuration
2. Connect to the appropriate data source
3. Implement the requested feature
4. Test and validate the output
## Guidelines
1. **Custom map styles** — Use Mapbox Studio to create branded map styles; match your app's design language
2. **Clustering for markers** — Use `cluster` property on GeoJSON sources when displaying 100+ points; prevents visual clutter
3. **react-map-gl for React** — Use the official React wrapper; it handles lifecycle, state sync, and TypeScript types
4. **Lazy load maps** — Maps are heavy (~200KB); lazy load the map component; show a placeholder during load
5. **Tile-based layers** — For large datasets (10K+ points), use vector tiles instead of GeoJSON; much better performance
6. **Geocoding with autocomplete** — Use the Geocoding API with the `autocomplete=true` parameter for search-as-you-type address input
7. **3D terrain** — Enable terrain with `map.setTerrain({ source: "mapbox-dem" })` for topographic visualizations
8. **Rate limits** — Mapbox has generous free tiers (50K loads/month for GL JS); monitor usage to avoid surprise billsRelated Skills
customerio-webhooks-events
Implement Customer.io webhook and reporting event handling. Use when processing email delivery events, click/open tracking, bounce handling, or streaming to a data warehouse. Trigger: "customer.io webhook", "customer.io events", "customer.io delivery status", "customer.io bounces", "customer.io open tracking".
customerio-upgrade-migration
Plan and execute Customer.io SDK upgrades and migrations. Use when upgrading customerio-node versions, migrating from legacy APIs, or updating to new SDK patterns. Trigger: "upgrade customer.io", "customer.io migration", "update customer.io sdk", "customer.io breaking changes".
customerio-security-basics
Apply Customer.io security best practices. Use when implementing secure credential storage, PII handling, webhook signature verification, or GDPR/CCPA compliance. Trigger: "customer.io security", "customer.io pii", "secure customer.io", "customer.io gdpr", "customer.io webhook verify".
customerio-sdk-patterns
Apply production-ready Customer.io SDK patterns. Use when implementing typed clients, retry logic, event batching, or singleton management for customerio-node. Trigger: "customer.io best practices", "customer.io patterns", "production customer.io", "customer.io architecture", "customer.io singleton".
customerio-reliability-patterns
Implement Customer.io reliability and fault-tolerance patterns. Use when building circuit breakers, fallback queues, idempotency, or graceful degradation for Customer.io integrations. Trigger: "customer.io reliability", "customer.io resilience", "customer.io circuit breaker", "customer.io fault tolerance".
customerio-reference-architecture
Implement Customer.io enterprise reference architecture. Use when designing integration layers, event-driven architectures, or enterprise-grade Customer.io setups. Trigger: "customer.io architecture", "customer.io design", "customer.io enterprise", "customer.io integration pattern".
customerio-rate-limits
Implement Customer.io rate limiting and backoff. Use when handling high-volume API calls, implementing retry logic, or hitting 429 errors. Trigger: "customer.io rate limit", "customer.io throttle", "customer.io 429", "customer.io backoff", "customer.io too many requests".
customerio-prod-checklist
Execute Customer.io production deployment checklist. Use when preparing for production launch, auditing integration quality, or performing pre-launch validation. Trigger: "customer.io production", "customer.io checklist", "deploy customer.io", "customer.io go-live", "customer.io launch".
customerio-primary-workflow
Implement Customer.io primary messaging workflow. Use when setting up campaign triggers, welcome sequences, onboarding flows, or event-driven email automation. Trigger: "customer.io campaign", "customer.io workflow", "customer.io email automation", "customer.io messaging", "customer.io onboarding".
customerio-performance-tuning
Optimize Customer.io API performance for high throughput. Use when improving response times, implementing connection pooling, batching, caching, or regional routing. Trigger: "customer.io performance", "optimize customer.io", "customer.io latency", "customer.io connection pooling".
customerio-observability
Set up Customer.io monitoring and observability. Use when implementing metrics, structured logging, alerting, or Grafana dashboards for Customer.io integrations. Trigger: "customer.io monitoring", "customer.io metrics", "customer.io dashboard", "customer.io alerts", "customer.io observability".
customerio-multi-env-setup
Configure Customer.io multi-environment setup with workspace isolation. Use when setting up dev/staging/prod workspaces, environment-aware clients, or Kubernetes config overlays. Trigger: "customer.io environments", "customer.io staging", "customer.io dev prod", "customer.io workspace isolation".