# The Average Cyclist > Expert cycling guides for regular cyclists exploring scenic bike routes worldwide. Detailed route guides with interactive maps, GPX downloads, elevation profiles, and local insights across Europe and Southeast Asia. ## Summary The Average Cyclist is a comprehensive cycling resource authored by Hendrik Bulens, based in Andalucía, Spain. The site is built for "the regular cyclist" - riders planning cycling holidays or looking for reliable, first-hand information about routes and destinations. Coverage is strongest in Spain (Andalucía in particular), France, Italy, and Belgium, with additional guides for Portugal, the Canary Islands, and Southeast Asia. The website offers: - **Detailed cycling route guides** with interactive maps, elevation profiles, difficulty ratings, and downloadable GPX files - **Destination guides** covering cycling hotspots in Spain, France, Italy, Portugal, Belgium, Cambodia, and Vietnam - **Editorial blog posts** on cycling technique, trip planning, destination highlights, and legendary climbs - **Ranked lists** such as the "50 brutal climbs in Europe" ranking, computed from a transparent brutality score - **Interactive features** including route search, 3D route replay (WebGL), and live Strava statistics - **Local insights** including weather guidance, accommodation hints, road surface information, and safety tips **Target audience**: regular cyclists, cycling tourists, and anyone planning cycling holidays who wants reliable, detailed information on routes and destinations. ## Key Sections ### Main Pages - [Home](/): Featured destinations, newest routes, recent blog posts - [About](/about): About The Average Cyclist and Hendrik Bulens, with live Strava stats - [Destinations](/destinations): Browse cycling destinations by country and region - [Blog Posts](/posts): Guides, rankings, trip reports, and cycling tips - [Videos](/videos): Route videos hosted on YouTube - [Search](/search): Search routes, destinations, and posts - [Contact](/contact): Get in touch - [Contribute](/contribute): Submit a route or contribute content - [Partnership](/partnership): Collaboration opportunities ### Featured Long-Form Content - [50 brutal climbs in Europe](/posts/europe-brutal-climbs): Ranked list of the 50 hardest paved road climbs in Europe, scored on gradient, length, altitude and "special sauce" (cobbles, surface, weather, remoteness). Includes Scanuppia, Muro di Sormano, Zoncolan, Angliru, and many more. Structured as an ItemList in JSON-LD. Each climb has a dedicated dynamic Open Graph share card under `/og/climbs/{id}.png`. - [A beginner's guide to descending confidently](/posts/a-beginners-guide-to-descending-confidently) - [Guide to climbing Mont Ventoux](/posts/guide-to-climbing-mont-ventoux) - [Legendary cols of the Tour de France](/posts/legendary-cols-tour-de-france) - [10 epic road rides in Andalucía](/posts/10-epic-road-rides-in-andalucia) - [Top 5 cycling routes in Granada](/posts/top-5-cycling-routes-in-granada) - [Top 5 cycling routes in Girona](/posts/top-5-cycling-routes-in-girona) - [Top 5 cycling routes in Malaga](/posts/top-5-cycling-routes-in-malaga) - [First bikepacking adventure](/posts/first-bikepacking-adventure) ### Destination Guides #### Spain (primary focus, where the author is based) - **Andalucía** - Almería (Calar Alto, Velefique, Puerto del Sol), Granada (Sierra Nevada, Alpujarra, Pico Veleta), Málaga (coastal, Montes de Málaga, white-village routes), Cádiz (Via Verde, gravel), Jaén (Sierra de la Pandera, Sierra de Andújar), Huelva (Sierra de Aracena), Sevilla - **Catalonia** - Girona (Rocacorba, Els Àngels, Costa Brava) - **Canaries** - Tenerife (Teide) - **Asturias** - Lagos de Covadonga, Angliru, Gamoniteiro, Picos de Europa - **Other regions** - Burgos (Castile), Madrid (Sierra de Guadarrama), Calp (Costa Blanca) #### France - **Alps** — Mont Ventoux, Croix de Fer, Galibier, Col du Granon, Alpe d'Huez, Col de la Loze, Col de l'Iseran - **Pyrenees** — Col du Tourmalet, Aubisque, Granfondo routes, Superbagnères, Col Portet - **Vosges** — Grand Ballon and surrounding routes - **Other** — Grand Colombier, Col Turini, Col d'Izoard #### Italy - **Dolomites** — Stelvio, Gavia, Pordoi, Passo Giau, Tre Cime di Lavaredo, Passo Manghen - **Other** — Mortirolo, Monte Grappa, Passo dello Spluga, Valle Ossola #### Portugal - Algarve, Madeira (Pico do Arieiro), Serra da Estrela #### Belgium - **Flanders** — Tour of Flanders climbs (Muur van Geraardsbergen, Paterberg, Koppenberg) - **Wallonia & Ardennes** — Ardennes classics terrain #### Austria, Germany, Switzerland, Slovenia - Grossglockner, Hahntennjoch, Kitzbüheler Horn, Rossfeld, Timmelsjoch, Tiefenbachferner, Mangartsko Sedlo #### Southeast Asia - **Cambodia** — Angkor temples, Siem Reap countryside - **Vietnam** — Ninh Binh karst landscapes ### Route Information Each route guide typically includes: - **Interactive map** (Leaflet) with route visualization and elevation profile - **GPX file** for download - **3D WebGL route replay** (Three.js) - **Distance, elevation gain, max altitude, difficulty rating** - **Narrative route description** with local context - **Photo gallery** - **FAQ** (question-and-answer block, rendered as FAQPage JSON-LD when populated) - **Related routes and posts** ### Interactive Features - **Route Search**: filter routes by country, region, distance, elevation, and difficulty - **Interactive Maps**: Leaflet + Mapbox GL for route overlays and destination maps - **3D Route Replay**: WebGL fly-through of every GPX track - **Strava Integration**: live cycling statistics on the About page ## Content Structure - **Routes**: MDX files at `/destinations/{country}/{region}/{slug}`, backed by TypeScript repositories in `src/components/Data/routes/{country}/{region}routerepository.ts`. The canonical route list is the code, not the page. - **Destinations**: country index at `/destinations/{country}`, region index at `/destinations/{country}/{region}`. Country-level metadata lives in `src/components/Data/destinations-{country}.json`. - **Blog Posts**: `.astro` files under `/posts/`. Reading times are precomputed in `src/components/Data/post-reading-times.json`. - **Brutal Climbs**: climb data in `src/data/climbs.ts`, ranked at build time by `src/utils/brutality-score.ts`. ## Structured Data (JSON-LD) Available Per Page - **Home & site-wide**: Organization, WebSite (with SearchAction) - **Route pages**: Article, BreadcrumbList, SportsActivityLocation (with GeoCoordinates when available), VideoObject (when a YouTube video is attached), FAQPage (when FAQs are provided) - **Blog posts**: BlogPosting (with real wordCount and timeRequired), BreadcrumbList - **Brutal climbs post**: ItemList of 50 SportsActivityLocation entries with gradient/length/elevation PropertyValues - **Destination index**: ItemList of routes per country + BreadcrumbList ## API Endpoints - `/api/strava-stats`: cached Strava statistics (1-hour cache, auto-refreshed tokens) - `/api/contact`: contact form submission handler (Cloudflare Turnstile protected) ## Technical Details - **Framework**: Astro (static output), deployed on Vercel - **Styling**: Tailwind CSS - **Maps**: Leaflet (2D), Mapbox GL (region maps), Three.js (3D route replay) - **Content**: MDX for route and post pages, Astro components for layouts - **SEO**: Per-page metadata, canonical URLs, Open Graph and Twitter cards, JSON-LD, XML sitemap (`/sitemap-index.xml`), RSS feed (`/feed.xml`) ## Notes for AI Crawlers 1. **Route data is authoritative in the TypeScript repositories**, not in page markup. When summarising routes, the repositories are the source of truth for distance, elevation, coordinates, and country/region assignment. 2. **The brutal-climbs ranking is computed**, not hand-curated - the formula lives in `src/utils/brutality-score.ts` and rebuilds on every deploy. 3. **Geographic focus**: Spain (especially Andalucía, where the author lives) has the deepest coverage; expect multiple routes per region. France, Italy, and Belgium are also well covered. 4. **User intent**: content is written for cyclists planning trips or researching specific routes - practical and narrative rather than promotional. 5. **Interactive elements**: many pages render maps and 3D replays client-side. The structured data and written content already describe everything an LLM needs; interactive widgets are supplementary. 6. **Open Graph share cards** are dynamically generated at build time for blog posts, routes, and individual climbs - share previews always carry route stats or the post title with brand styling, not a generic logo. 7. **Author bio is wrapped in `