Beta Rocks
MCP server for the beta.rocks climbing API - search crags, get conditions, and submit community reports
Ask AI about Beta Rocks
Powered by Claude Β· Grounded in docs
I know everything about Beta Rocks. Ask me about installation, configuration, usage, or troubleshooting.
0/500
Reviews
Documentation
beta.rocks
Get the beta on any crag worldwide. A free web and mobile app that provides real-time weather conditions, community reports, and crag information for climbers. Built with Next.js, React, and deployed on Vercel.
Getting Started
Prerequisites
- Node.js 18+ & npm installed - install with nvm
Local Development
# Clone the repository
git clone <YOUR_GIT_URL>
# Navigate to the project directory
cd beta-rocks
# Install dependencies
npm install
# Start the development server
npm run dev
Open http://localhost:3000 in your browser to see the app.
Environment Variables
Create a .env.local file in the project root:
NEXT_PUBLIC_SUPABASE_URL=https://vbqnfvgvxlnlfabuqlzi.supabase.co
NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY=<your-key>
# Optional: Only required for admin scripts (e.g., enrich-countries.ts)
# SUPABASE_SECRET_KEY=<your-service-role-secret>
What technologies are used?
This project is built with:
- Next.js 16 - React framework for production
- TypeScript - Type safety with strict mode
- Tailwind CSS 4 - Utility-first CSS
- shadcn/ui - High-quality React components
- Supabase - PostgreSQL database with RLS
- i18next - Internationalization (30 locales)
Project Structure
src/
βββ app/
β βββ api/ # API routes (conditions, reports, v1 public API)
β βββ location/[slug]/ # Dynamic crag pages (ISR)
β βββ docs/api/ # Public API documentation
β βββ sync/ # Sync key restoration page
β βββ layout.tsx # Root layout with Header
β βββ page.tsx # Home page
βββ components/ # React components
β βββ ui/ # shadcn/ui components
β βββ WeatherConditionCard.tsx
β βββ ConditionsDetailSheet.tsx
β βββ ...
βββ lib/
β βββ conditions/ # Conditions calculation service
β βββ external-apis/ # Open-Meteo, geocoding
β βββ db/ # Supabase queries
β βββ i18n/ # Internationalization config
β βββ auth/ # Sync key management
βββ integrations/
βββ supabase/ # Supabase types & client
Deployment
Deploy to Vercel with one click:
vercel
Or connect your GitHub repo to Vercel for automatic deployments on every push.
See Vercel docs for more info.
Features
Core
- Real-time weather - Open-Meteo integration with 14-day forecasts
- Conditions analysis - Rock type-specific conditions assessment with weather-aware drying calculations
- Global crag database - 8,000+ climbing areas worldwide from OpenStreetMap
Community
- Community reports - Share conditions, safety issues, access updates, beta, and facilities info
- Report categories - conditions, safety, access, beta, facilities, other
- Report voting - Helpful/unhelpful confirmations with user stats tracking
- User profiles - Optional display names, anonymous by default
Organization
- Favorites - Bookmark crags for quick access
- User stats - Track reports posted, confirmations given, and favorites count
Sharing & Pages
- Crag detail pages - ISR-generated pages with coordinate-based slugs (5min revalidation)
- Direct condition links - Shareable URLs for any crag (e.g.,
/location/45.123,-73.456) - Maps & external links - Embedded maps with external links
Sync & Privacy
- Multi-device sync - 16-character sync keys with QR code generation
- Offline support - LocalStorage + Supabase sync with online/offline indicators
- Privacy-first - No accounts, no email, anonymous by default with optional display names
- Row-level security - Supabase RLS policies protect user data
Public API
- REST API v1 - Versioned public API at
/api/v1/for external app integration - Crag search - Search crags by name, get details by ID, find nearby crags by coordinates
- Community reports - Fetch and submit reports via API with sync key authentication
- CORS enabled - Open CORS for all origins on v1 endpoints
- API docs - Interactive documentation at
/docs/api - MCP server -
beta-rocks-mcpfor Claude, Cursor, Windsurf, and other AI tools
i18n
- 30 languages - Full internationalization support with region-specific fallbacks
