{"id":2241399,"date":"2026-11-06T11:29:10","date_gmt":"2026-11-06T08:29:10","guid":{"rendered":""},"modified":"2026-11-06T11:29:10","modified_gmt":"2026-11-06T08:29:10","slug":"how-to-turn-an-ai-into-your-personal-coach-goal-specific-prompts-and-setup-instructions","status":"publish","type":"post","link":"https:\/\/analyse.optim.biz\/?p=2241399","title":{"rendered":"How to turn an AI into your personal coach: Goal-specific prompts and setup instructions"},"content":{"rendered":"<p>[analyse_image type=&#8221;featured&#8221; src=&#8221;https:\/\/cdn.mos.cms.futurecdn.net\/R6qu7nBSZD8s5MLhhHKDX6-2560-80.jpg&#8221;]<\/p>\n<article class=\"m-0 box-border flex flex-row items-center pr-2.5 gap-[15px] w-[278px] h-20 flex-none upnext-article-divider\" role=\"listitem\" aria-label=\"Recommended article 1 of 3\">\n<div class=\"relative flex-none w-20 h-20\">\n    <source type=\"image\/webp\" srcset=\"https:\/\/cdn.mos.cms.futurecdn.net\/hxXVjkuJPd3h2VM5jFbJ7V-160-80.jpg.webp 160w, https:\/\/cdn.mos.cms.futurecdn.net\/hxXVjkuJPd3h2VM5jFbJ7V-80-80.jpg.webp 80w\" sizes=\"80px\" \/><\/p>\n<div class=\"flex items-center justify-center absolute w-4 h-6 left-0 top-0 bg-white\/90 flex-none z-[1]\" aria-hidden=\"true\"><span class=\"font-normal text-base leading-[17px] tracking-[1.3px] uppercase text-black flex-none\">1<\/span><\/div>\n<\/div>\n<div class=\"flex flex-col items-center justify-center gap-1.5 w-[173px] h-20 flex-none\">\n<p class=\"font-article-heading font-medium text-base leading-[21px] text-gray-800 w-[173px] line-clamp-3 group-hover:underline\">\n                                    Wahoo CEO talks finances, artificial intelligence and the company&#8217;s &#8216;next big opportunity&#8217;\n                                <\/p>\n<\/div>\n<\/article>\n<article class=\"m-0 box-border flex flex-row items-center pr-2.5 gap-[15px] w-[278px] h-20 flex-none upnext-article-divider\" role=\"listitem\" aria-label=\"Recommended article 2 of 3\">\n<div class=\"relative flex-none w-20 h-20\">\n    <source type=\"image\/webp\" srcset=\"https:\/\/cdn.mos.cms.futurecdn.net\/gaFuLTmLfcXtVJHeine4w8-160-80.jpg.webp 160w, https:\/\/cdn.mos.cms.futurecdn.net\/gaFuLTmLfcXtVJHeine4w8-80-80.jpg.webp 80w\" sizes=\"80px\" \/><\/p>\n<div class=\"flex items-center justify-center absolute w-[18px] h-6 left-0 top-0 bg-white\/90 flex-none z-[1]\" aria-hidden=\"true\"><span class=\"font-normal text-base leading-[17px] tracking-[1.3px] uppercase text-black flex-none\">2<\/span><\/div>\n<\/div>\n<div class=\"flex flex-col items-center justify-center gap-1.5 w-[173px] h-20 flex-none\">\n<p class=\"font-article-heading font-medium text-base leading-[21px] text-gray-800 w-[173px] line-clamp-3 group-hover:underline\">\n                                    From scandals and scepticism to parasocial belief \u2013 I&#8217;ve witnessed cycling&#8217;s perception of doping shift dramatically over the last decade, but is that OK?\n                                <\/p>\n<\/div>\n<\/article>\n<article class=\"m-0 box-border flex flex-row items-center pr-2.5 gap-[15px] w-[278px] h-20 flex-none\" role=\"listitem\" aria-label=\"Recommended article 3 of 3\">\n<div class=\"relative flex-none w-20 h-20\">\n    <source type=\"image\/webp\" srcset=\"https:\/\/cdn.mos.cms.futurecdn.net\/YdvLTgcE9qYCbzEvcprbsR-160-80.png.webp 160w, https:\/\/cdn.mos.cms.futurecdn.net\/YdvLTgcE9qYCbzEvcprbsR-80-80.png.webp 80w\" sizes=\"80px\" \/><\/p>\n<div class=\"flex items-center justify-center absolute w-[18px] h-6 left-0 top-0 bg-white\/90 flex-none z-[1]\" aria-hidden=\"true\"><span class=\"font-normal text-base leading-[17px] tracking-[1.3px] uppercase text-black flex-none\">3<\/span><\/div>\n<\/div>\n<div class=\"flex flex-col items-center justify-center gap-1.5 w-[173px] h-20 flex-none\">\n<p class=\"font-article-heading font-medium text-base leading-[21px] text-gray-800 w-[173px] line-clamp-3 group-hover:underline\">\n                                    Ask our Labs experts anything about wind tunnel testing, aero bikes, equipment and more \u2013 AskCN\n                                <\/p>\n<\/div>\n<\/article>\n<article class=\"page-content-onecol flex-1\nnews-article article\n\"><\/p>\n<div class=\"widget-area-group widget-area-group-2col flex flex-wrap box-border\">\n<div id=\"widgetArea16\" class=\"widget-area basis-full md:basis-2\/3 widget-area-g-md-vp-2-3 widget-area-g-lg-vp-2-3 widget-area-g-xl-vp-2-3 page-widget-area-16\">\n<div data-widget-type=\"hero\" id=\"hero\" class=\"clear-both widget widget-hero widget-hero widget-hero-hero widget-hero widget-hero-fter-news\">\n<div class=\"news-article\">\n<header data-component-name=\"Article:Hero\">\n<nav data-component-name=\"UI:Breadcrumbs\" aria-label=\"Breadcrumbs\" class=\"type-breadcrumbs-sm md:type-breadcrumbs-md mb-5\" data-palette=\"brand\">\n<ol class=\"inline-flex flex-wrap items-center align-top gap-1\">\n<li class=\"inline-flex items-center gap-1\">\nCycling Culture<\/p>\n<\/li>\n<li class=\"inline-flex items-center gap-1\">\nTraining\n<\/li>\n<\/ol>\n<\/nav>\n<h1>How to turn an AI into your personal coach: Goal-specific prompts and setup instructions<\/h1>\n<div class=\"byline-social\">\n<div class=\"vds-byline-block flex flex-row flex-nowrap my-1.5 gap-2 text-left items-start justify-start\" data-component-name=\"Article:BylineBlock\">\n<p>Features<\/p>\n<div class=\"my-auto vds-simple-byline\"><span class=\"inline-block vds-author\"><br \/>\nBy<br \/>\nTim Perkin <\/span><\/p>\n<div class=\"flex gap-1 vds-byline-with-avatar__meta\"><span class=\"vds-date block font-normal tracking-normal normal-case text-xs\"><br \/>\nPublished<br \/>\n<time data-component-name=\"UI:DateTime\" datetime=\"2026-11-06T11:29:10Z\" class=\"relative-date\"><br \/>\n6 November 2026<br \/>\n<\/time><\/span><\/div>\n<\/div>\n<\/div>\n<p class=\"strapline\">Would you use AI to analyse your historical riding data? <\/p>\n<\/div>\n<aside class=\"text-gray-700 flex items-center mx-0 my-5 p-0 justify-start text-left\" id=\"affiliate-disclaimer\" data-component-name=\"AffiliateDisclaimer\" data-hawk-message=\"Affiliate disclaimer removed because hawk deemed there are no affiliate links on this page\">\n<p class=\"text-[color:var(--affiliate-disclaimer--text-color,inherit)] mb-2 text-[length:var(--affiliate-disclaimer--font-size,0.75rem)] leading-[18px] md:text-[13px] [&amp;&gt;a]:text-inherit [&amp;&gt;a]:underline\">\nWhen you purchase through links on our site, we may earn an affiliate commission. Here\u2019s how it works.\n<\/p>\n<\/aside>\n<\/header>\n<\/div>\n<\/div>\n<div data-widget-type=\"contentparsed\" id=\"content\" class=\"clear-both widget widget-contentparsed widget-content widget-contentparsed-content widget-content-parsed widget-content-parsed-content_document \">\n<div class=\"wcp-item-content\">\n<section class=\"content-wrapper\">\n<div class=\"box less-space hero-image-wrapper\">\n<figure class=\"mb-0\">\n<source type=\"image\/webp\" srcset=\"https:\/\/cdn.mos.cms.futurecdn.net\/R6qu7nBSZD8s5MLhhHKDX6-1920-80.jpg.webp 1920w, https:\/\/cdn.mos.cms.futurecdn.net\/R6qu7nBSZD8s5MLhhHKDX6-1600-80.jpg.webp 1600w, https:\/\/cdn.mos.cms.futurecdn.net\/R6qu7nBSZD8s5MLhhHKDX6-1200-80.jpg.webp 1200w, https:\/\/cdn.mos.cms.futurecdn.net\/R6qu7nBSZD8s5MLhhHKDX6-1024-80.jpg.webp 1024w, https:\/\/cdn.mos.cms.futurecdn.net\/R6qu7nBSZD8s5MLhhHKDX6-970-80.jpg.webp 970w, https:\/\/cdn.mos.cms.futurecdn.net\/R6qu7nBSZD8s5MLhhHKDX6-750-80.jpg.webp 750w, https:\/\/cdn.mos.cms.futurecdn.net\/R6qu7nBSZD8s5MLhhHKDX6-650-80.jpg.webp 650w, https:\/\/cdn.mos.cms.futurecdn.net\/R6qu7nBSZD8s5MLhhHKDX6-480-80.jpg.webp 480w, https:\/\/cdn.mos.cms.futurecdn.net\/R6qu7nBSZD8s5MLhhHKDX6-320-80.jpg.webp 320w\" sizes=\"(min-width: 1000px) 600px, 100vw\" \/><figcaption class=\"font-article-copy text-(--image--text--color) font-article-copy mt-2\"><span class=\"credit font-article-copy\">(Image credit: AI generated image)<\/span><\/figcaption><\/figure>\n<\/div>\n<div id=\"article-body\" class=\"text-copy bodyCopy auto paywall-locker\">\n<div data-analytics-id=\"utility-bar\" id=\"utility-bar\" class=\"font-ui-heading flex justify-between items-center py-2 border-t border-b border-gray-300 border-solid mb-5 mx-auto\" data-component-name=\"UtilityBar\" data-mrf-recirculation=\"utility-bar\">\n<div class=\"flex gap-2 text-[#333] subcontainer\"><span data-component-name=\"UI:Tooltip\" class=\"group relative inline-flex\"><\/p>\n<div data-component-name=\"Social:Dropdown\" role=\"menu\" id=\"utilitybar__dropdown--share\" aria-labelledby=\"utilitybar__button--share\" class=\"absolute left-0 top-full w-44 bg-white rounded-md shadow-md border border-neutral-200 z-[9996] list-none m-0 py-2 px-3 border-solid\">\n<ul class=\"m-0!\">\n<li class=\"!p-0 !m-0 list-none border-b border-gray-200 border-solid\">\n<li class=\"!p-0 !m-0 list-none border-b border-gray-200 border-solid\">\n<p>Facebook<\/p>\n<\/li>\n<li class=\"!p-0 !m-0 list-none border-b border-gray-200 border-solid\">\n<p>X<\/p>\n<\/li>\n<li class=\"!p-0 !m-0 list-none border-b border-gray-200 border-solid\">\n<p>Pinterest<\/p>\n<\/li>\n<li class=\"!p-0 !m-0 list-none border-b border-gray-200 border-solid\">\n<p>Email<\/p>\n<\/li>\n<\/ul>\n<\/div>\n<p><span class=\"pointer-events-none absolute z-10 opacity-0 transition-opacity duration-fast-02 ease-enter group-hover:opacity-100 group-has-[:focus-visible]:opacity-100 left-1\/2 bottom-full mb-1.5 -translate-x-1\/2\" aria-hidden=\"true\"><\/p>\n<div class=\"inline-flex flex-col items-center\" data-palette=\"brand\">\n<div class=\"block w-max max-w-xs px-2.5 py-1.5 rounded-lg bg-surface-brand-black text-on-brand-black type-tooltip\"><span class=\"line-clamp-2\">Share this article<\/span><\/div>\n<\/div>\n<p><\/span><\/span><span data-component-name=\"UI:Tooltip\" class=\"group relative inline-flex\"><span class=\"ml-1 inline-flex h-5 px-2 shrink-0 items-center justify-center self-center overflow-hidden whitespace-nowrap rounded-[10px] bg-primary-500 text-[11px] leading-none font-ui-heading font-semibold text-white\">0<\/span><span class=\"pointer-events-none absolute z-10 opacity-0 transition-opacity duration-fast-02 ease-enter group-hover:opacity-100 group-has-[:focus-visible]:opacity-100 left-1\/2 bottom-full mb-1.5 -translate-x-1\/2\" aria-hidden=\"true\"><\/p>\n<div class=\"inline-flex flex-col items-center\" data-palette=\"brand\">\n<div class=\"block w-max max-w-xs px-2.5 py-1.5 rounded-lg bg-surface-brand-black text-on-brand-black type-tooltip\"><span class=\"line-clamp-2\">Join the conversation<\/span><\/div>\n<\/div>\n<p><\/span><\/span><\/div>\n<div class=\"flex gap-2 text-[#333] subcontainer\"><span data-component-name=\"UI:Tooltip\" class=\"group relative inline-flex\"><\/p>\n<p>Follow us<\/p>\n<p><span class=\"pointer-events-none absolute z-10 opacity-0 transition-opacity duration-fast-02 ease-enter group-hover:opacity-100 group-has-[:focus-visible]:opacity-100 left-1\/2 bottom-full mb-1.5 -translate-x-1\/2\" aria-hidden=\"true\"><\/p>\n<div class=\"inline-flex flex-col items-center\" data-palette=\"brand\">\n<div class=\"block w-max max-w-xs px-2.5 py-1.5 rounded-lg bg-surface-brand-black text-on-brand-black type-tooltip\"><span class=\"line-clamp-2\">Add us as a preferred source on Google<\/span><\/div>\n<\/div>\n<p><\/span><\/span><span data-component-name=\"UI:Tooltip\" class=\"group relative inline-flex\"><span class=\"pointer-events-none absolute z-10 opacity-0 transition-opacity duration-fast-02 ease-enter group-hover:opacity-100 group-has-[:focus-visible]:opacity-100 left-1\/2 bottom-full mb-1.5 -translate-x-1\/2\" aria-hidden=\"true\"><\/p>\n<div class=\"inline-flex flex-col items-center\" data-palette=\"brand\">\n<div class=\"block w-max max-w-xs px-2.5 py-1.5 rounded-lg bg-surface-brand-black text-on-brand-black type-tooltip\"><span class=\"line-clamp-2\">Subscribe to our newsletter<\/span><\/div>\n<\/div>\n<p><\/span><\/span><\/div>\n<\/div>\n<p id=\"elk-e1ebf8da-d92d-11f1-8780-2d797ea14038\">The world of Artificial Intelligence (AI) is moving so fast that even WorldTour cycling teams are now using it to help understand and interpret riders&#8217; data to aid with training and racing.<\/p>\n<p>For example, Netcompany-Ineos recently announced it would use an AI-based aero testing app next year.<\/p>\n<p id=\"elk-e1ebf8da-d92d-11f1-8780-2d797ea14038-2\" aria-hidden=\"true\" class=\"kiosq-b\">AI use is commonplace now, and cyclists are using it to their advantage. Following suit, I decided to see what AI could do for me.<\/p>\n<div class=\"my-6 w-full overflow-hidden rounded-[10px] lg:my-8\" data-component-name=\"JwPlayer:Carousel\" data-jwp-carousel data-jwp-carousel-payload=\"{&quot;ids&quot;:{&quot;playerID&quot;:&quot;jYDCcabO&quot;,&quot;searchPlaylistID&quot;:&quot;gwjdoYHD&quot;,&quot;divID&quot;:&quot;botr_gwjdoYHD_jYDCcabO_div&quot;,&quot;fallbackPlaylistID&quot;:&quot;gwjdoYHD&quot;,&quot;fallbackDivID&quot;:&quot;botr_gwjdoYHD_jYDCcabO_div&quot;,&quot;key&quot;:&quot;X9\/mXVGac0NphghLH9hZaqWA5d3dhAM\/Ih07grnEyMLjuO2E&quot;,&quot;tintLogo&quot;:true,&quot;useSearchPlaylist&quot;:false,&quot;enabled&quot;:true},&quot;signPostingEnabled&quot;:true,&quot;signPostingLinkEnabled&quot;:true,&quot;waitForAdLoad&quot;:false,&quot;hidePlayerOnDesktop&quot;:false,&quot;hidePlayerOnMobile&quot;:false,&quot;hidePlayerOnTablet&quot;:false}\">\n<div class=\"flex flex-nowrap items-center justify-between gap-3 bg-zinc-900 px-[14px] py-3\" data-jwp-carousel-header>\n<div class=\"flex min-w-0 shrink items-center\"><span class=\"inline-flex items-center gap-1.5 text-sm font-article-heading capitalize leading-5 text-white whitespace-nowrap\"><span class=\"jwp-carousel-title-desktop\">Latest Videos From<\/span><span class=\"jwp-carousel-brand\">Cyclingnews<\/span><\/span><\/div>\n<\/div>\n<div class=\"min-h-[44px] bg-zinc-900 px-[14px] py-3\" data-jwp-carousel-signposting><a class=\"invisible block truncate text-sm font-bold leading-5 text-white underline decoration-solid underline-offset-2\" data-jwp-carousel-signposting-link href target=\"_blank\" rel=\"noopener noreferrer\"><span data-jwp-carousel-signposting-title>Watch full video here: <\/span><\/a><\/div>\n<\/div>\n<p aria-hidden=\"true\" class=\"kiosq-b\">My end goal was for AI to generate a bespoke training plan that could return me to my peak level of fitness, whatever that was. Simple, or so I thought. I wanted to learn about customising an AI training plan based on my own historical data, and improve my skills along the way.<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">The first challenge was choosing a platform. ChatGPT, Claude, Gemini and Microsoft Copilot were all AI assistants that I investigated.<\/p>\n<aside data-component-name=\"Recirculation:ArticleRiver\" data-recirculation-type=\"inline\" data-mrf-recirculation=\"Trending Bar\" data-nosnippet class=\"clear-both pt-2 pb-0 mb-4\"><span class=\"\n            flex\n            after:content-[&apos;&apos;] after:flex-1 after:ml-4 after:my-[0.7rem] after:border-t after:border-solid after:border-t-[#ccc]\n            before:content-[&apos;&apos;] before:flex-1 before:mr-4 before:my-[0.7rem] before:border-t before:border-solid before:border-t-[#ccc]\n            font-article-heading pb-0 text-[length:var(--article-river-title--font-size,1em)] uppercase md:text-[length:var(--article-river-title--font-size,0.875em)] font-bold\n        \"><br \/>\n            You may like<br \/>\n        <\/span><\/p>\n<ul class=\"flex flex-col gap-0 m-0 max-w-full\">\n<li class=\"m-0 list-none border-b border-solid border-[#ededed] py-2\" data-recirculation-id=\"recirculation-card-1\" id=\"recirculation-inline-1\" data-analytics-id=\"recirculation-inline-1\" data-mrf-recirculation=\"recirculation-inline-1\">\n    <source type=\"image\/webp\" srcset=\"https:\/\/cdn.mos.cms.futurecdn.net\/hxXVjkuJPd3h2VM5jFbJ7V-250-80.jpg.webp 250w, https:\/\/cdn.mos.cms.futurecdn.net\/hxXVjkuJPd3h2VM5jFbJ7V-150-80.jpg.webp 150w\" sizes=\"150px\" \/><span class=\"w-full text-base font-[var(--article-river-item--font-weight,500)] font-article-heading line-clamp-3 md:line-clamp-2\">Wahoo CEO talks finances, artificial intelligence and the company&#8217;s &#8216;next big opportunity&#8217;<\/span><\/li>\n<li class=\"m-0 list-none border-b border-solid border-[#ededed] py-2\" data-recirculation-id=\"recirculation-card-2\" id=\"recirculation-inline-2\" data-analytics-id=\"recirculation-inline-2\" data-mrf-recirculation=\"recirculation-inline-2\">\n    <source type=\"image\/webp\" srcset=\"https:\/\/cdn.mos.cms.futurecdn.net\/YBHichqmEYXX9VoRbx6fff-250-80.jpg.webp 250w, https:\/\/cdn.mos.cms.futurecdn.net\/YBHichqmEYXX9VoRbx6fff-150-80.jpg.webp 150w\" sizes=\"150px\" \/><span class=\"w-full text-base font-[var(--article-river-item--font-weight,500)] font-article-heading line-clamp-3 md:line-clamp-2\">Indoor cycling setup checklist &#8211; How to optimise your indoor training space<\/span><\/li>\n<li class=\"m-0 list-none border-b border-solid border-[#ccc] py-2\" data-recirculation-id=\"recirculation-card-3\" id=\"recirculation-inline-3\" data-analytics-id=\"recirculation-inline-3\" data-mrf-recirculation=\"recirculation-inline-3\">\n    <source type=\"image\/webp\" srcset=\"https:\/\/cdn.mos.cms.futurecdn.net\/iDxxugHuxR2SBQoRy8dTh6-250-80.png.webp 250w, https:\/\/cdn.mos.cms.futurecdn.net\/iDxxugHuxR2SBQoRy8dTh6-150-80.png.webp 150w\" sizes=\"150px\" \/><span class=\"w-full text-base font-[var(--article-river-item--font-weight,500)] font-article-heading line-clamp-3 md:line-clamp-2\">&#8216;AI could reverse cycling 2.0&#8217;s gains&#8217; \u2013 Why artificial intelligence could become an anti-doping scientist&#8217;s worst nightmare<\/span><\/li>\n<\/ul>\n<\/aside>\n<p aria-hidden=\"true\" class=\"kiosq-b\">Some AI engines or apps are free, some aren&#8217;t. Free versions limit what you can do and, in this case, how many files you can upload to be analysed. I paid a subscription fee as I was always going to need to use my full training history. After researching the different platforms, I settled on Claude because it could read and analyse my CSV files directly.<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">With Claude chosen, I paid for a subscription and began to see what it could do.<\/p>\n<div id=\"slice-container-newsletterForm-articleInbodyContent-e7z75U5uwa95qJXU4RfGDi\" class=\"slice-container newsletter-inbodyContent-slice newsletterForm-articleInbodyContent-e7z75U5uwa95qJXU4RfGDi slice-container-newsletterForm\">\n<div data-hydrate=\"true\" class=\"newsletter-form__wrapper newsletter-form__wrapper--inbodyContent\">\n<div class=\"newsletter-form__container\">\n<section class=\"newsletter-form__top-bar\">\n<div class=\"newsletter-form__header\">Get The Leadout Newsletter<\/div>\n<\/section>\n<section class=\"newsletter-form__main-section\">\n<p class=\"newsletter-form__strapline\">The latest race content, interviews, features, reviews and expert buying guides, direct to your inbox!<\/p>\n<footer class=\"newsletter-form__footer \">By submitting your information you agree to the Terms &amp; Conditions and Privacy Policy and are aged 16 or over.<\/footer>\n<\/section>\n<\/div>\n<\/div>\n<\/div>\n<p id=\"elk-e1ebf98e-d92d-11f1-8f78-0b274943b86f\" aria-hidden=\"true\" class=\"kiosq-b\">I decided to ask it to build me a 12-week indoor training plan using this simple prompt:<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\"><strong>&#8220;Build me a 12-week indoor cycling training plan of between 7 and 10 hours a week. I can ride 5 times a week, but not on Thursday.&#8221;<\/strong><\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">Claude then produced the plan below for me:<\/p>\n<aside data-component-name=\"Recirculation:ArticleRiver\" data-recirculation-type=\"inline\" data-mrf-recirculation=\"Trending Bar\" data-nosnippet class=\"clear-both pt-2 pb-0 mb-4\"><span class=\"\n            flex\n            after:content-[&apos;&apos;] after:flex-1 after:ml-4 after:my-[0.7rem] after:border-t after:border-solid after:border-t-[#ccc]\n            before:content-[&apos;&apos;] before:flex-1 before:mr-4 before:my-[0.7rem] before:border-t before:border-solid before:border-t-[#ccc]\n            font-article-heading pb-0 text-[length:var(--article-river-title--font-size,1em)] uppercase md:text-[length:var(--article-river-title--font-size,0.875em)] font-bold\n        \"><br \/>\n            What to read next<br \/>\n        <\/span><\/p>\n<ul class=\"flex flex-col gap-0 m-0 max-w-full\">\n<li class=\"m-0 list-none border-b border-solid border-[#ededed] py-2\" data-recirculation-id=\"recirculation-card-1\" id=\"recirculation-inline-2-1\" data-analytics-id=\"recirculation-2-inline-1\" data-mrf-recirculation=\"recirculation-2-inline-1\">\n    <source type=\"image\/webp\" srcset=\"https:\/\/cdn.mos.cms.futurecdn.net\/ecL5h6x9KNXFZT7TPtyrWU-250-80.jpg.webp 250w, https:\/\/cdn.mos.cms.futurecdn.net\/ecL5h6x9KNXFZT7TPtyrWU-150-80.jpg.webp 150w\" sizes=\"150px\" \/><span class=\"w-full text-base font-[var(--article-river-item--font-weight,500)] font-article-heading line-clamp-3 md:line-clamp-2\">TrainerRoad vs TrainingPeaks: Which is the best app to support your structured training?<\/span><\/li>\n<li class=\"m-0 list-none border-b border-solid border-[#ededed] py-2\" data-recirculation-id=\"recirculation-card-2\" id=\"recirculation-inline-2-2\" data-analytics-id=\"recirculation-2-inline-2\" data-mrf-recirculation=\"recirculation-2-inline-2\">\n    <source type=\"image\/webp\" srcset=\"https:\/\/cdn.mos.cms.futurecdn.net\/iV4HrtCzWUTgR8xb48wFk4-250-80.jpg.webp 250w, https:\/\/cdn.mos.cms.futurecdn.net\/iV4HrtCzWUTgR8xb48wFk4-150-80.jpg.webp 150w\" sizes=\"150px\" \/><span class=\"w-full text-base font-[var(--article-river-item--font-weight,500)] font-article-heading line-clamp-3 md:line-clamp-2\">Zwift reveals higher subscription tier with AI coach, adaptive training plans and real-world video<\/span><\/li>\n<li class=\"m-0 list-none border-b border-solid border-[#ccc] py-2\" data-recirculation-id=\"recirculation-card-3\" id=\"recirculation-inline-2-3\" data-analytics-id=\"recirculation-2-inline-3\" data-mrf-recirculation=\"recirculation-2-inline-3\">\n    <source type=\"image\/webp\" srcset=\"https:\/\/cdn.mos.cms.futurecdn.net\/wK9npbGQqwAxNURQH3pbFa-250-80.jpg.webp 250w, https:\/\/cdn.mos.cms.futurecdn.net\/wK9npbGQqwAxNURQH3pbFa-150-80.jpg.webp 150w\" sizes=\"150px\" \/><span class=\"w-full text-base font-[var(--article-river-item--font-weight,500)] font-article-heading line-clamp-3 md:line-clamp-2\">Zwift vs TrainerRoad: An indoor cycling head-to-head<\/span><\/li>\n<\/ul>\n<\/aside>\n<div class=\"slice-container table-wrapper slice-container-table kiosq-b\" data-component-name=\"Slice:Table\" id=\"elk-e1ebfae2-d92d-11f1-8d12-affdf587d182\" aria-hidden=\"true\">\n<div class=\"table__instruction\">\nSwipe to scroll horizontally<\/p>\n<\/div>\n<div class=\"table__container\">\n<table tabindex=\"0\" class=\"table__wrapper table__wrapper--inbodyContent table__wrapper--sticky table__wrapper--divider\">\n<tbody class=\"table__body\">\n<tr class=\"table__body__row\">\n<td class=\"table_body__data\" colspan=\"1\">\n<p><strong>Weeks<\/strong><\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p><strong>Phase <\/strong><\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p><strong>Hours per week <\/strong><\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p><strong>Main work <\/strong><\/p>\n<\/td>\n<\/tr>\n<tr class=\"table__body__row\">\n<td class=\"table_body__data\" colspan=\"1\">\n<p>1-3<\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>Base<\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>7.5 \u2192 8.5 \u2192 9.5<\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>FTP test in Week 1, then sweet spot and tempo<\/p>\n<\/td>\n<\/tr>\n<tr class=\"table__body__row\">\n<td class=\"table_body__data\" colspan=\"1\">\n<p>4<\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>Recovery<\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>7<\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>Easier riding<\/p>\n<\/td>\n<\/tr>\n<tr class=\"table__body__row\">\n<td class=\"table_body__data\" colspan=\"1\">\n<p>5-7<\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>Build<\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>8 \u2192 9 \u2192 10<\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>Threshold and over under intervals<\/p>\n<\/td>\n<\/tr>\n<tr class=\"table__body__row\">\n<td class=\"table_body__data\" colspan=\"1\">\n<p>8<\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>Recovery<\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>7<\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>Easier riding <\/p>\n<\/td>\n<\/tr>\n<tr class=\"table__body__row\">\n<td class=\"table_body__data\" colspan=\"1\">\n<p>9-11<\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>Peak<\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>8.5 \u2192 9.5 \u2192 10<\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>V02 Max intervals with some threshhold<\/p>\n<\/td>\n<\/tr>\n<tr class=\"table__body__row\">\n<td class=\"table_body__data\" colspan=\"1\">\n<p>12<\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>Taper<\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>7<\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>FTP re -test on Saturday<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p id=\"elk-f075d948-d92d-11f1-a3eb-b531ab8303a8\" aria-hidden=\"true\" class=\"kiosq-b\">The plan is perfectly acceptable, but it&#8217;s limited. It offers nothing beyond what you can find in cycling training manuals or on hundreds of websites online.<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">The plan falls short because it is not based on my own data. Without access to my training data, asking AI to build me a plan will always result in something this generic.<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">Granted, you can input parameters such as how many rides you intend to do each week, how many hours you have available for training, and which days suit you best, but beyond that, the output will always be limited.<\/p>\n<figure class=\"van-image-figure inline-layout kiosq-b\" data-bordeaux-image-check id=\"elk-87d48114-d937-11f1-bd8b-8db1b3b10aa9\" aria-hidden=\"true\">\n<div class=\"image-full-width-wrapper\">\n<div class=\"image-widthsetter\">\n<p class=\"vanilla-image-block\">\n<source type=\"image\/webp\" srcset=\"https:\/\/cdn.mos.cms.futurecdn.net\/C5RmA7kZnYPhoRnYCVX3yQ-1200-80.jpg.webp 1200w, https:\/\/cdn.mos.cms.futurecdn.net\/C5RmA7kZnYPhoRnYCVX3yQ-1024-80.jpg.webp 1024w, https:\/\/cdn.mos.cms.futurecdn.net\/C5RmA7kZnYPhoRnYCVX3yQ-970-80.jpg.webp 970w, https:\/\/cdn.mos.cms.futurecdn.net\/C5RmA7kZnYPhoRnYCVX3yQ-650-80.jpg.webp 650w, https:\/\/cdn.mos.cms.futurecdn.net\/C5RmA7kZnYPhoRnYCVX3yQ-480-80.jpg.webp 480w, https:\/\/cdn.mos.cms.futurecdn.net\/C5RmA7kZnYPhoRnYCVX3yQ-320-80.jpg.webp 320w\" sizes=\"(min-width: 1000px) 970px, calc(100vw - 40px)\" \/><\/p>\n<\/div>\n<\/div><figcaption class=\" inline-layout\"><span class=\"credit\">(Image credit: AI generated image)<\/span><\/figcaption><\/figure>\n<h2 id=\"data-is-key-3\" aria-hidden=\"true\" class=\"kiosq-b\">Data is key<\/h2>\n<p id=\"elk-0f7416ac-d92e-11f1-91b6-2106c8d5d488\" aria-hidden=\"true\" class=\"kiosq-b\">To create a bespoke plan and something tailored to my requirements, I realised that I needed to provide AI with my training data. Only with this could AI produce a bespoke plan. And for that, I knew where to go:<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">My Strava account held almost all my training data, and with the functionality to download it, I could then take the relevant files and have AI analyse them and utilise my training and riding history.<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">[Ed. Since undertaking this project, but prior to publishing, Strava launched its MCP connector, allowing direct plugin to AI assistants, enabling the sharing of historic datam, plus future data in perpetuity].<\/p>\n<h2 id=\"a-data-side-quest-3\" aria-hidden=\"true\" class=\"kiosq-b\">A data side quest<\/h2>\n<p id=\"elk-0f741724-d92e-11f1-9fbf-f3fe8ef895af\" aria-hidden=\"true\" class=\"kiosq-b\">However, I had to undertake a slight side quest first. Strava did not have all my data. My early years of training results were held on spreadsheets, so I had to get these uploaded into Strava using a third-party app.<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">I reformatted the spreadsheets got the data uploaded into Strava, using a third-party go between. I then requested my complete set of training data from Strava. An email link soon arrived with a 1.7 GB archive, though I only needed one file from it.<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">The summary file was called &#8220;activities.csv&#8221; and contained enough data to enable AI to produce a tailored plan for me.<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">To download your own data in Strava, go to Settings &gt; My Account &gt; Download or Delete Your Account, then select Request Your Archive. Strava then emails you a link to the data.<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">Only activities.csv is needed, so there&#8217;s no need to upload the whole thing. If you have many years of riding and the file is too large to upload, delete the oldest rows, but keep your best season so the AI can compare against it.<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">A word of caution: activities.csv includes heart-rate data, which is personal health information. I recommend checking your AI platform&#8217;s privacy and data settings before you upload it.<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">Power figures only appear in activities.csv files for rides recorded with a power meter or smart trainer. Without them, the AI&#8217;s FTP estimates and power targets will be much less reliable, so bear this in mind too.<\/p>\n<figure class=\"van-image-figure inline-layout kiosq-b\" data-bordeaux-image-check id=\"elk-7ffa9088-d9c7-11f1-92ea-69ab4345a169\" aria-hidden=\"true\">\n<div class=\"image-full-width-wrapper\">\n<div class=\"image-widthsetter\">\n<p class=\"vanilla-image-block\">\n<source type=\"image\/webp\" srcset=\"https:\/\/cdn.mos.cms.futurecdn.net\/aLBRPfbBK46LRF9xcGMTTQ-1200-80.jpg.webp 1200w, https:\/\/cdn.mos.cms.futurecdn.net\/aLBRPfbBK46LRF9xcGMTTQ-1024-80.jpg.webp 1024w, https:\/\/cdn.mos.cms.futurecdn.net\/aLBRPfbBK46LRF9xcGMTTQ-970-80.jpg.webp 970w, https:\/\/cdn.mos.cms.futurecdn.net\/aLBRPfbBK46LRF9xcGMTTQ-650-80.jpg.webp 650w, https:\/\/cdn.mos.cms.futurecdn.net\/aLBRPfbBK46LRF9xcGMTTQ-480-80.jpg.webp 480w, https:\/\/cdn.mos.cms.futurecdn.net\/aLBRPfbBK46LRF9xcGMTTQ-320-80.jpg.webp 320w\" sizes=\"(min-width: 1000px) 970px, calc(100vw - 40px)\" \/><\/p>\n<\/div>\n<\/div><figcaption class=\" inline-layout\"><span class=\"caption-text\">This is just an AI generated image, but with a simple prompt, you could ask Claude to build you a dashboard that provides similar data at a glance. <\/span><span class=\"credit\">(Image credit: AI generated image)<\/span><\/figcaption><\/figure>\n<h2 id=\"ai-and-prompts-3\" aria-hidden=\"true\" class=\"kiosq-b\">AI and prompts<\/h2>\n<p id=\"elk-0f741788-d92e-11f1-a986-e5135c420428\" aria-hidden=\"true\" class=\"kiosq-b\">The next challenge was writing the correct prompts to finesse my training programme. My first attempt was too simple. After some research, I learned that a good prompt needs four key components.<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">The first component is the persona, which assigns the AI a specific role, for example: &#8220;<em>You are an elite cycling WorldTour coach<\/em>.&#8221;<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">The second component is the specific task, such as &#8220;<em>Using my uploaded data, analyse and assess my current level and create me a 12-week training plan that gets me to and surpasses my previous best cycling fitness levels<\/em>.&#8221;<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">The third component is the context: including any important details, which in this case were the days I could train and for how many hours.<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">The fourth and final component is the format, or how I would like the answer to look.<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">The prompt I decided to use to build my specific training plan was as follows:<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">&#8220;<em>You are an elite cycling WorldTour coach. Using my uploaded data in the spreadsheet only, analyse and assess my current level and create a 12-week training plan that gets me to and surpasses my previous best cycling fitness levels.<\/em>&#8220;<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">&#8220;<em>I have 10 hours per week for training and can ride 5 times a week, with the exception of Thursday<\/em>.&#8221;<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">&#8220;<em>Sessions in the week must not last longer than 90 minutes. I would like a detailed session plan, detailing how long each session should last, power output and heart rate.<\/em>&#8220;<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">I also find that going to a separate Claude chat window and asking it to suggest its own prompt is a good way to learn the phrasing and terminology that Claude itself understands. You can iterate on its suggestion more easily than create your own from scratch, and the wording is often less vague than anything I would generate myself.<\/p>\n<figure class=\"van-image-figure inline-layout kiosq-b\" data-bordeaux-image-check id=\"elk-3579941c-d9c9-11f1-823c-1919b391dfdf\" aria-hidden=\"true\">\n<div class=\"image-full-width-wrapper\">\n<div class=\"image-widthsetter\">\n<p class=\"vanilla-image-block\">\n<source type=\"image\/webp\" srcset=\"https:\/\/cdn.mos.cms.futurecdn.net\/L9WFzGhvb4ctdzAbiJYtYA-1200-80.jpg.webp 1200w, https:\/\/cdn.mos.cms.futurecdn.net\/L9WFzGhvb4ctdzAbiJYtYA-1024-80.jpg.webp 1024w, https:\/\/cdn.mos.cms.futurecdn.net\/L9WFzGhvb4ctdzAbiJYtYA-970-80.jpg.webp 970w, https:\/\/cdn.mos.cms.futurecdn.net\/L9WFzGhvb4ctdzAbiJYtYA-650-80.jpg.webp 650w, https:\/\/cdn.mos.cms.futurecdn.net\/L9WFzGhvb4ctdzAbiJYtYA-480-80.jpg.webp 480w, https:\/\/cdn.mos.cms.futurecdn.net\/L9WFzGhvb4ctdzAbiJYtYA-320-80.jpg.webp 320w\" sizes=\"(min-width: 1000px) 970px, calc(100vw - 40px)\" \/><\/p>\n<\/div>\n<\/div><figcaption class=\" inline-layout\"><span class=\"credit\">(Image credit: AI generated image)<\/span><\/figcaption><\/figure>\n<p id=\"elk-3fa6719e-d9c9-11f1-b02c-dd55adf4e866\" aria-hidden=\"true\" class=\"kiosq-b\">I later refined these prompts into a shorter version that you can reuse:<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">&#8220;<em>You are an elite WorldTour cycling coach. Using only the rides in my attached Strava activities.csv, assess my current level against my all-time best (estimated FTP, and best 20-minute and 60-minute power), then create a 12-week plan starting [date] to beat it.&#8221;<\/em><\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\"><em>&#8220;I have 10 hours a week over 5 rides. I can&#8217;t ride on Thursday or [second rest day], and weekday rides must be 90 minutes or less. Give me my power and heart-rate zones, then a table for each week showing day, duration, session, target watts, and target heart rate. Include recovery weeks and FTP tests in weeks 1, 4, 8, and 12, and be honest about how realistic the goal is.&#8221;<\/em><\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">Before building the plan, the AI assessed my data. It estimated that my FTP had fallen from about 325\u2013329 watts at my peak (December 2021 to February 2022) to about 260 watts, a drop of around 20%, and that my weekly riding had halved from 8\u201310 hours to about 4.5 hours. That told me straight away that this plan would be built around me, not a textbook.<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">The output, generated by the first of the two prompts above, was a very detailed plan with tailored power and heart-rate targets. The table below shows Week 1; the other 11 weeks are just as detailed.<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">The plan is not fixed. After each FTP test, I can give the AI the result and ask it to recalculate my zones and update the remaining weeks, so the plan keeps pace with my fitness. With the newly added MCP Connector, this could even be automated.<\/p>\n<h2 id=\"example-block-1-rebuild-ftp-260-w-3\" aria-hidden=\"true\" class=\"kiosq-b\">Example Block 1: Rebuild (FTP 260 W)<\/h2>\n<div class=\"slice-container table-wrapper slice-container-table kiosq-b\" data-component-name=\"Slice:Table\" id=\"elk-e8027e86-d92f-11f1-84fa-fd417705d59f\" aria-hidden=\"true\">\n<div class=\"table__instruction\">\nSwipe to scroll horizontally<\/p>\n<\/div>\n<div class=\"table__container\">\n<table tabindex=\"0\" class=\"table__wrapper table__wrapper--inbodyContent table__wrapper--sticky table__wrapper--divider\">\n<caption class=\"table__caption table__caption--top table__caption--left\">\nWeek 1 (26th Oct), 8 hours, approx 430 TSS<br \/>\n<\/caption>\n<tbody class=\"table__body\">\n<tr class=\"table__body__row\">\n<td class=\"table_body__data\" colspan=\"1\">\n<p><strong>Day<\/strong><\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p><strong>Duration <\/strong><\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p><strong>Session <\/strong><\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p><strong>Power <\/strong><\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>HR<\/p>\n<\/td>\n<\/tr>\n<tr class=\"table__body__row\">\n<td class=\"table_body__data\" colspan=\"1\">\n<p>Tue <\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>75 mins<\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>20-min FTP test. 15 min Z2, 3 \u00d7 1 min at 290 W<\/p>\n<p>(1 min easy), 5 min easy, 20 min max effort (start at 265 W, build). FTP = 0.95 \u00d7 20-min average<\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>FTP TEST <\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>Rising to 165-172<\/p>\n<\/td>\n<\/tr>\n<tr class=\"table__body__row\">\n<td class=\"table_body__data\" colspan=\"1\">\n<p>Wed<\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>75 mins <\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>Z2 endurance, 85\u201395 rpm<\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>170-190 W<\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>115-133<\/p>\n<\/td>\n<\/tr>\n<tr class=\"table__body__row\">\n<td class=\"table_body__data\" colspan=\"1\">\n<p>Fri<\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>60 mins <\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>Easy, with 4 \u00d7 30 s spin-ups at 110\u2013120 rpm<\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>155-180 W<\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>&lt;128<\/p>\n<\/td>\n<\/tr>\n<tr class=\"table__body__row\">\n<td class=\"table_body__data\" colspan=\"1\">\n<p>Sat <\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>150 mins <\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>Endurance, last hour includes 2 \u00d7 10 min tempo (5 min easy between)<\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>175-190 W<br \/>210-225 W <\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>&lt;133 \/ 135 &#8211; 148<\/p>\n<\/td>\n<\/tr>\n<tr class=\"table__body__row\">\n<td class=\"table_body__data\" colspan=\"1\">\n<p>Sun<\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>120 mins <\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>Z2 endurance<\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>165-185 W <\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>&lt;133<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h2 id=\"prompts-you-may-find-useful-3\" aria-hidden=\"true\" class=\"kiosq-b\">Prompts you may find useful <\/h2>\n<h4 class=\"article-body__section kiosq-b\" id=\"section-goal-planning\" aria-hidden=\"true\"><span>Goal Planning<\/span><\/h4>\n<p id=\"elk-1de61a4e-d930-11f1-b996-115d1bb1fcdf\" aria-hidden=\"true\" class=\"kiosq-b\">This prompt gets the AI to act as your personal cycling coach and build a 12-week plan that fits around your life and moves you towards a goal, such as beating your best FTP. It is a fuller version of the short prompt above, giving you more control over the output.<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">&#8220;You are an elite WorldTour cycling coach who builds periodised, power-based plans for time-limited amateurs. Using the &#8216;Ride&#8217; and &#8216;Virtual Ride&#8217; activities in my attached Strava activities.csv, create a progressive 12-week plan to [goal, e.g., beat my previous best FTP]. I have [X] hours a week across [X] rides; I can&#8217;t ride on [days], and weekday sessions are capped at [X] minutes.<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">Remember to be specific in your demands; a degree of nuance and experience is needed here, and if you choose to experiment, the more you do, the better you will get.<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\"><strong>I asked the AI to give me:<\/strong><\/p>\n<ul id=\"elk-4797e8c8-d9d4-11f1-be6b-f96107129742\" aria-hidden=\"true\" class=\"kiosq-b\">\n<li>An assessment of my current level against my all-time best, with key numbers. Estimate FTP from Weighted Average Power in 20\u201360-minute rides, and include weekly hours, load, and consistency over the last 12 weeks.<\/li>\n<li>A zones table: % of FTP, watts, and heart rate.<\/li>\n<li>One table per week: day, duration, session (with intervals and recoveries), target watts, target heart rate, and weekly total hours. Include recovery weeks and FTP tests in weeks 1, 4, 8, and 12, with week 12 a taper that ends in the final test.<\/li>\n<li>Up to five rules on fuelling, adjusting when fatigued, and updating zones after each test.<\/li>\n<li>Be realistic about what 12 weeks can achieve.<\/li>\n<\/ul>\n<figure class=\"van-image-figure inline-layout kiosq-b\" data-bordeaux-image-check id=\"elk-567fb144-d9cb-11f1-ac8c-3db5c24a9bf4\" aria-hidden=\"true\">\n<div class=\"image-full-width-wrapper\">\n<div class=\"image-widthsetter\">\n<p class=\"vanilla-image-block\">\n<source type=\"image\/webp\" srcset=\"https:\/\/cdn.mos.cms.futurecdn.net\/uy9qauk23whRTWEW5CxPxG-1200-80.jpg.webp 1200w, https:\/\/cdn.mos.cms.futurecdn.net\/uy9qauk23whRTWEW5CxPxG-1024-80.jpg.webp 1024w, https:\/\/cdn.mos.cms.futurecdn.net\/uy9qauk23whRTWEW5CxPxG-970-80.jpg.webp 970w, https:\/\/cdn.mos.cms.futurecdn.net\/uy9qauk23whRTWEW5CxPxG-650-80.jpg.webp 650w, https:\/\/cdn.mos.cms.futurecdn.net\/uy9qauk23whRTWEW5CxPxG-480-80.jpg.webp 480w, https:\/\/cdn.mos.cms.futurecdn.net\/uy9qauk23whRTWEW5CxPxG-320-80.jpg.webp 320w\" sizes=\"(min-width: 1000px) 970px, calc(100vw - 40px)\" \/><\/p>\n<\/div>\n<\/div><figcaption class=\" inline-layout\"><span class=\"credit\">(Image credit: AI generated image)<\/span><\/figcaption><\/figure>\n<h4 class=\"article-body__section kiosq-b\" id=\"section-recovery-assessment\" aria-hidden=\"true\"><span>Recovery Assessment<\/span><\/h4>\n<p id=\"elk-2b942a82-d930-11f1-ab9d-c7ee6f9a24cc\" aria-hidden=\"true\" class=\"kiosq-b\">This prompt uses your data to check whether you&#8217;ve been riding too hard too often over the past month without enough easy days or rest between hard rides. The aim is to catch fatigue before it leads to poor performance, illness, or burnout.<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">&#8220;You are a cycling physiologist specialising in recovery and fatigue monitoring. Using the &#8216;Ride&#8217; and &#8216;Virtual Ride&#8217; activities in my attached Strava activities.csv file from the last 30 days, find the days where my recovery was probably not enough. My FTP is [X] W, and my threshold heart rate is [X] bpm. Classify each ride as hard (above 85% of FTP), moderate, or easy (below 70% of FTP), using Weighted Average Power, Relative Effort, and heart rate, and treat a heart rate of 0 as not recorded. Flag hard days back-to-back, more than three hard rides in any seven days, and heart rate out of line with power.&#8221;<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\"><strong>I also asked my AI coach to give me:<\/strong><\/p>\n<ul id=\"elk-4797e9ae-d9d4-11f1-8933-c9cbe0727b1a\" aria-hidden=\"true\" class=\"kiosq-b\">\n<li>A 30-day calendar table: date, ride, duration, Weighted Average Power, and Hard\/Moderate\/Easy\/Rest.<\/li>\n<li>Each day where recovery was not enough, with a one-line reason.<\/li>\n<li>My hard-to-easy ratio compared with 80\/20.<\/li>\n<li>Three changes to my weekly structure.<\/li>\n<\/ul>\n<h4 class=\"article-body__section kiosq-b\" id=\"section-event-preparation\" aria-hidden=\"true\"><span>Event Preparation<\/span><\/h4>\n<p id=\"elk-4797ea76-d9d4-11f1-abf3-31526c76d17a\" aria-hidden=\"true\" class=\"kiosq-b\">This prompt checks whether your recent riding has prepared you for a specific event, such as a sportive, road race, or time trial, and tells you what to work on in the four weeks before it.<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">&#8220;You are an experienced cycling coach who prepares riders for races and sportives. Look at my rides from the last 12 weeks in the attached Strava activities.csv file. I&#8217;m riding [event, e.g., a 120 km sportive with 2,000 m of climbing] on [date]; my goal is [goal, e.g., finish under 4 hours], and my FTP is about [X] W. Tell me whether my training so far has prepared me for this event.<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\"><strong>I also asked my AI coach to give me:<\/strong><\/p>\n<ul id=\"elk-4797eae4-d9d4-11f1-b25d-cb1734b392e4\" aria-hidden=\"true\" class=\"kiosq-b\">\n<li>A short summary of how fit I am now, in three or four sentences.<\/li>\n<li>A table of my last 12 weeks: hours ridden, longest ride, total climbing, and number of hard sessions (Weighted Average Power above 85% of FTP) each week.<\/li>\n<li>What&#8217;s missing. Check whether I&#8217;ve done enough long rides, enough climbing, enough long steady, hard efforts, and enough short bursts for attacks. For each gap, show the evidence from my data and why it matters for this event.<\/li>\n<li>A four-week plan to fix those gaps, with the key sessions, the long ride for each week, and power and heart-rate targets.<\/li>\n<li>An honest one-line answer on whether my goal is realistic.<\/li>\n<\/ul>\n<h3 id=\"a-word-on-agentic-ai-3\" aria-hidden=\"true\" class=\"kiosq-b\">A word on agentic AI<\/h3>\n<p id=\"elk-4797eba2-d9d4-11f1-81aa-a1a6a4b36605\" aria-hidden=\"true\" class=\"kiosq-b\">Rather than building all of the above as a self-serve chat-based coach that you ask questions of and manually prompt when you want it to adjust or analyse your work, it could even be built agentically. An overarching AI Agent could be given the primary prompt, the database of Strava workouts uploaded as resources alongside your preferences, and improvements to your power duration curve or your FTP can be its reward signal.<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">The trio of prompts above &#8211; alongside others &#8211; could then be created as &#8216;skills&#8217; &#8211; essentially tools that the LLM can call upon, and automations can be built to check your progress periodically, update the plan in real time, and flag whenever you&#8217;re off track.<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">If you wanted, you could even connect it to your Whoop (if you use one), and your Calendar app of choice to slot the workout into your day.<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">There&#8217;s a lot of potential here, and although the build essentially seeks to mimic much of what&#8217;s already been achieved by TrainerRoad, Zwift Plus, Vekta, FasCat, Xert et al, there&#8217;s a certain enjoyment and pride in building it yourself (even if Claude is doing the hard yards), and being able to tweak it to your liking.<\/p>\n<h2 id=\"conclusion-3\" aria-hidden=\"true\" class=\"kiosq-b\">Conclusion<\/h2>\n<p id=\"elk-2b942afa-d930-11f1-8899-1973f9c3682f\" aria-hidden=\"true\" class=\"kiosq-b\">AI can be a valuable tool for cyclists to understand their training and improve performance, and many are already experimenting with ways to use AI to improve their training.<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">The results are going to depend on the input. While generating a basic training plan is easy, creating a genuinely bespoke one is harder.<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">The real insights come when AI accesses your historical training data. It analyses past performances, assesses your current state, and builds a plan around your ambitions, time, and individual needs. This results in a more detailed and personalised approach.<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">For the plans and outputs to be relevant, the data must be accurate, prompts carefully constructed, and output critically evaluated. Training recommendations are only as useful as their underlying information and assumptions. AI should not replace professional coaching or understanding your body&#8217;s response to training.<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">There&#8217;s also a cost, both for AI platform subscriptions and the time to organise data and refine prompts. Yet, for cyclists willing to invest the initial effort, the reward is a plan built around their own numbers rather than a generic one.<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">I aimed to see if AI could help me regain peak fitness. I now have a structured, data-driven 12-week plan designed to do just that. Its success will ultimately be determined on the bike in the coming weeks.<\/p>\n<\/div>\n<div class=\"block mb-5\" id=\"articleTag\" data-component-name=\"PostArticleLinks\" data-nosnippet data-mrf-recirculation=\"post-article-links\">\n<div class=\"border-b border-b-black border-solid py-2.5 text-black font-bold uppercase\">TOPICS<\/div>\n<nav class=\"py-2.5 flex gap-2.5 flex-wrap\" data-analytics-id=\"article-tag\" data-mrf-recirculation=\"article-tag\">\n<p>Tech<\/p>\n<\/nav>\n<\/div>\n<div id=\"slice-container-authorBio-e7z75U5uwa95qJXU4RfGDi\" class=\"slice-container slice-author-bio authorBio-e7z75U5uwa95qJXU4RfGDi slice-container-authorBio\">\n<div class=\"slice-container slice-author-bio authorBio slice-container-authorBio\" id=\"slice-container-authorBio\" data-component-name=\"Slice:AuthorBio\">\n<div class=\"author author__default-layout author--separator author--collapsible\" data-author-bio-max-height=\"250\" data-author-bio-read-more=\"Read more\" data-author-bio-read-less=\"Read less\">\n<div class=\"author__header\">\n<div class=\"author__heading\">\n<div class=\"author__name\">\n<p>Tim Perkin<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n<div class=\"relative max-w-[1070px] viafoura-twig-component mt-6 mx-4 lg:mx-0\" data-component-name=\"Viafoura:Comments\" data-nosnippet data-community-guidelines-text=\"&lt;p class=&apos;vfcustom-community-guidelines&apos;&gt;Please follow our &lt;a href=&quot;https:\/\/www.cyclingnews.com\/about\/#section-community-guidelines&quot; target=&quot;_blank&quot;&gt;community guidelines&lt;\/a&gt;.&lt;\/p&gt;\" data-join-the-conversation-text=\"Join the Conversation\">\n<div class=\"absolute top-0 left-0 w-full h-full flex items-center justify-center z-50 bg-white\/90 border-1 rounded-b-[var(--comment-widget-border-radius,0)]\">\n<div class=\"p-2 text-center\">\n<p class=\"mb-3 text-lg!\">You must confirm your public display name before commenting<\/p>\n<p class=\"mb-3 text-sm!\">Please logout and then login again, you will then be prompted to enter your display name.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<section class=\"mx-2 my-5 md:mx-0\">\n<aside class=\"w-full\" data-nosnippet data-mrf-recirculation=\"article-river-stacked\">\n<div data-recirc-id=\"article-river-stacked-adviser:hybrid\">\n<div class=\"text-white py-4 px-3 mb-4 bg-[#333] uppercase font-bold custom-header-styles\">Read more<\/div>\n<div class=\"grid grid-cols-1 gap-4 mt-4 mb-5\">\n<div>\n<div class=\"aspect-[var(--img-listing-aspect-ratio,16\/9)] relative mb-3.5\">\n    <source type=\"image\/webp\" srcset=\"https:\/\/cdn.mos.cms.futurecdn.net\/hxXVjkuJPd3h2VM5jFbJ7V-840-80.jpg.webp 840w, https:\/\/cdn.mos.cms.futurecdn.net\/hxXVjkuJPd3h2VM5jFbJ7V-650-80.jpg.webp 650w, https:\/\/cdn.mos.cms.futurecdn.net\/hxXVjkuJPd3h2VM5jFbJ7V-500-80.jpg.webp 500w, https:\/\/cdn.mos.cms.futurecdn.net\/hxXVjkuJPd3h2VM5jFbJ7V-450-80.jpg.webp 450w, https:\/\/cdn.mos.cms.futurecdn.net\/hxXVjkuJPd3h2VM5jFbJ7V-320-80.jpg.webp 320w\" sizes=\"(min-width: 900px) 925px, (min-width: 700px) 450px, calc(100vw - 48px)\" \/><\/div>\n<p><span class=\"custom-subheading-styles\">Training<\/span><span class=\"text-base text-black font-bold mx-0 my-2.5 p-0 block custom-text-styles\">Wahoo CEO talks finances, artificial intelligence and the company&#8217;s &#8216;next big opportunity&#8217;<\/span><\/div>\n<div class=\"relative recirc-feed sponsored-card min-h-[250px]\" data-recirc-id=\"article-river-stacked-ads:native-cards\" data-mrf-recirculation=\"article-river-ads\" data-nosnippet data-ad-slot-path=\"feed-sponsored-post\" data-attribute-device=\"all\">\n<div class=\"max-w-full sponsored-post--placeholder animate-pulse\">\n<div class=\"relative!\"><span class=\"text-base text-black font-bold mx-0 my-2.5 p-0 block bg-gray-100\">\u00a0<br \/>\u00a0<\/span><\/div>\n<\/div>\n<\/div>\n<div>\n<div class=\"aspect-[var(--img-listing-aspect-ratio,16\/9)] relative mb-3.5\">\n    <source type=\"image\/webp\" srcset=\"https:\/\/cdn.mos.cms.futurecdn.net\/YBHichqmEYXX9VoRbx6fff-840-80.jpg.webp 840w, https:\/\/cdn.mos.cms.futurecdn.net\/YBHichqmEYXX9VoRbx6fff-650-80.jpg.webp 650w, https:\/\/cdn.mos.cms.futurecdn.net\/YBHichqmEYXX9VoRbx6fff-500-80.jpg.webp 500w, https:\/\/cdn.mos.cms.futurecdn.net\/YBHichqmEYXX9VoRbx6fff-450-80.jpg.webp 450w, https:\/\/cdn.mos.cms.futurecdn.net\/YBHichqmEYXX9VoRbx6fff-320-80.jpg.webp 320w\" sizes=\"(min-width: 900px) 925px, (min-width: 700px) 450px, calc(100vw - 48px)\" \/><\/div>\n<p><span class=\"custom-subheading-styles\">Training<\/span><span class=\"text-base text-black font-bold mx-0 my-2.5 p-0 block custom-text-styles\">Indoor cycling setup checklist &#8211; How to optimise your indoor training space<\/span><\/div>\n<div class=\"relative recirc-feed sponsored-card min-h-[250px]\" data-recirc-id=\"article-river-stacked-ads:native-cards\" data-mrf-recirculation=\"article-river-ads\" data-nosnippet data-ad-slot-path=\"feed-sponsored-post\" data-attribute-device=\"all\">\n<div class=\"max-w-full sponsored-post--placeholder animate-pulse\">\n<div class=\"relative!\"><span class=\"text-base text-black font-bold mx-0 my-2.5 p-0 block bg-gray-100\">\u00a0<br \/>\u00a0<\/span><\/div>\n<\/div>\n<\/div>\n<div>\n<div class=\"aspect-[var(--img-listing-aspect-ratio,16\/9)] relative mb-3.5\">\n    <source type=\"image\/webp\" srcset=\"https:\/\/cdn.mos.cms.futurecdn.net\/iDxxugHuxR2SBQoRy8dTh6-840-80.png.webp 840w, https:\/\/cdn.mos.cms.futurecdn.net\/iDxxugHuxR2SBQoRy8dTh6-650-80.png.webp 650w, https:\/\/cdn.mos.cms.futurecdn.net\/iDxxugHuxR2SBQoRy8dTh6-500-80.png.webp 500w, https:\/\/cdn.mos.cms.futurecdn.net\/iDxxugHuxR2SBQoRy8dTh6-450-80.png.webp 450w, https:\/\/cdn.mos.cms.futurecdn.net\/iDxxugHuxR2SBQoRy8dTh6-320-80.png.webp 320w\" sizes=\"(min-width: 900px) 925px, (min-width: 700px) 450px, calc(100vw - 48px)\" \/><\/div>\n<p><span class=\"custom-subheading-styles\">Doping<\/span><span class=\"text-base text-black font-bold mx-0 my-2.5 p-0 block custom-text-styles\">&#8216;AI could reverse cycling 2.0&#8217;s gains&#8217; \u2013 Why artificial intelligence could become an anti-doping scientist&#8217;s worst nightmare<\/span><\/div>\n<div class=\"relative recirc-feed sponsored-card min-h-[250px]\" data-recirc-id=\"article-river-stacked-ads:native-cards\" data-mrf-recirculation=\"article-river-ads\" data-nosnippet data-ad-slot-path=\"feed-sponsored-post\" data-attribute-device=\"all\">\n<div class=\"max-w-full sponsored-post--placeholder animate-pulse\">\n<div class=\"relative!\"><span class=\"text-base text-black font-bold mx-0 my-2.5 p-0 block bg-gray-100\">\u00a0<br \/>\u00a0<\/span><\/div>\n<\/div>\n<\/div>\n<div>\n<div class=\"aspect-[var(--img-listing-aspect-ratio,16\/9)] relative mb-3.5\">\n    <source type=\"image\/webp\" srcset=\"https:\/\/cdn.mos.cms.futurecdn.net\/ecL5h6x9KNXFZT7TPtyrWU-840-80.jpg.webp 840w, https:\/\/cdn.mos.cms.futurecdn.net\/ecL5h6x9KNXFZT7TPtyrWU-650-80.jpg.webp 650w, https:\/\/cdn.mos.cms.futurecdn.net\/ecL5h6x9KNXFZT7TPtyrWU-500-80.jpg.webp 500w, https:\/\/cdn.mos.cms.futurecdn.net\/ecL5h6x9KNXFZT7TPtyrWU-450-80.jpg.webp 450w, https:\/\/cdn.mos.cms.futurecdn.net\/ecL5h6x9KNXFZT7TPtyrWU-320-80.jpg.webp 320w\" sizes=\"(min-width: 900px) 925px, (min-width: 700px) 450px, calc(100vw - 48px)\" \/><\/div>\n<p><span class=\"custom-subheading-styles\">Smart Trainers<\/span><span class=\"text-base text-black font-bold mx-0 my-2.5 p-0 block custom-text-styles\">TrainerRoad vs TrainingPeaks: Which is the best app to support your structured training?<\/span><\/div>\n<div class=\"relative recirc-feed sponsored-card min-h-[250px]\" data-recirc-id=\"article-river-stacked-ads:native-cards\" data-mrf-recirculation=\"article-river-ads\" data-nosnippet data-ad-slot-path=\"feed-sponsored-post\" data-attribute-device=\"all\">\n<div class=\"max-w-full sponsored-post--placeholder animate-pulse\">\n<div class=\"relative!\"><span class=\"text-base text-black font-bold mx-0 my-2.5 p-0 block bg-gray-100\">\u00a0<br \/>\u00a0<\/span><\/div>\n<\/div>\n<\/div>\n<div>\n<div class=\"aspect-[var(--img-listing-aspect-ratio,16\/9)] relative mb-3.5\">\n    <source type=\"image\/webp\" srcset=\"https:\/\/cdn.mos.cms.futurecdn.net\/iV4HrtCzWUTgR8xb48wFk4-840-80.jpg.webp 840w, https:\/\/cdn.mos.cms.futurecdn.net\/iV4HrtCzWUTgR8xb48wFk4-650-80.jpg.webp 650w, https:\/\/cdn.mos.cms.futurecdn.net\/iV4HrtCzWUTgR8xb48wFk4-500-80.jpg.webp 500w, https:\/\/cdn.mos.cms.futurecdn.net\/iV4HrtCzWUTgR8xb48wFk4-450-80.jpg.webp 450w, https:\/\/cdn.mos.cms.futurecdn.net\/iV4HrtCzWUTgR8xb48wFk4-320-80.jpg.webp 320w\" sizes=\"(min-width: 900px) 925px, (min-width: 700px) 450px, calc(100vw - 48px)\" \/><\/div>\n<p><span class=\"custom-subheading-styles\">Training<\/span><span class=\"text-base text-black font-bold mx-0 my-2.5 p-0 block custom-text-styles\">Zwift reveals higher subscription tier with AI coach, adaptive training plans and real-world video<\/span><\/div>\n<div class=\"relative recirc-feed sponsored-card min-h-[250px]\" data-recirc-id=\"article-river-stacked-ads:native-cards\" data-mrf-recirculation=\"article-river-ads\" data-nosnippet data-ad-slot-path=\"feed-sponsored-post\" data-attribute-device=\"all\">\n<div class=\"max-w-full sponsored-post--placeholder animate-pulse\">\n<div class=\"relative!\"><span class=\"text-base text-black font-bold mx-0 my-2.5 p-0 block bg-gray-100\">\u00a0<br \/>\u00a0<\/span><\/div>\n<\/div>\n<\/div>\n<div>\n<div class=\"aspect-[var(--img-listing-aspect-ratio,16\/9)] relative mb-3.5\">\n    <source type=\"image\/webp\" srcset=\"https:\/\/cdn.mos.cms.futurecdn.net\/wK9npbGQqwAxNURQH3pbFa-840-80.jpg.webp 840w, https:\/\/cdn.mos.cms.futurecdn.net\/wK9npbGQqwAxNURQH3pbFa-650-80.jpg.webp 650w, https:\/\/cdn.mos.cms.futurecdn.net\/wK9npbGQqwAxNURQH3pbFa-500-80.jpg.webp 500w, https:\/\/cdn.mos.cms.futurecdn.net\/wK9npbGQqwAxNURQH3pbFa-450-80.jpg.webp 450w, https:\/\/cdn.mos.cms.futurecdn.net\/wK9npbGQqwAxNURQH3pbFa-320-80.jpg.webp 320w\" sizes=\"(min-width: 900px) 925px, (min-width: 700px) 450px, calc(100vw - 48px)\" \/><\/div>\n<p><span class=\"custom-subheading-styles\">Smart Trainers<\/span><span class=\"text-base text-black font-bold mx-0 my-2.5 p-0 block custom-text-styles\">Zwift vs TrainerRoad: An indoor cycling head-to-head<\/span><\/div>\n<div class=\"relative recirc-feed sponsored-card min-h-[250px]\" data-recirc-id=\"article-river-stacked-ads:native-cards\" data-mrf-recirculation=\"article-river-ads\" data-nosnippet data-ad-slot-path=\"feed-sponsored-post\" data-attribute-device=\"all\">\n<div class=\"max-w-full sponsored-post--placeholder animate-pulse\">\n<div class=\"relative!\"><span class=\"text-base text-black font-bold mx-0 my-2.5 p-0 block bg-gray-100\">\u00a0<br \/>\u00a0<\/span><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/aside>\n<aside class=\"w-full\" data-nosnippet data-mrf-recirculation=\"article-river-stacked\">\n<div data-recirc-id=\"article-river-stacked-solr:latest-category\">\n<div class=\"text-white py-4 px-3 mb-4 bg-[#333] uppercase font-bold custom-header-styles\">Latest in Training<\/div>\n<div class=\"grid grid-cols-1 gap-4 mt-4 mb-5\">\n<div>\n<div class=\"aspect-[var(--img-listing-aspect-ratio,16\/9)] relative mb-3.5\">\n    <source type=\"image\/webp\" srcset=\"https:\/\/cdn.mos.cms.futurecdn.net\/hxXVjkuJPd3h2VM5jFbJ7V-840-80.jpg.webp 840w, https:\/\/cdn.mos.cms.futurecdn.net\/hxXVjkuJPd3h2VM5jFbJ7V-650-80.jpg.webp 650w, https:\/\/cdn.mos.cms.futurecdn.net\/hxXVjkuJPd3h2VM5jFbJ7V-500-80.jpg.webp 500w, https:\/\/cdn.mos.cms.futurecdn.net\/hxXVjkuJPd3h2VM5jFbJ7V-450-80.jpg.webp 450w, https:\/\/cdn.mos.cms.futurecdn.net\/hxXVjkuJPd3h2VM5jFbJ7V-320-80.jpg.webp 320w\" sizes=\"(min-width: 900px) 925px, (min-width: 700px) 450px, calc(100vw - 48px)\" \/><\/div>\n<p><span class=\"custom-subheading-styles\">Training<\/span><span class=\"text-base text-black font-bold mx-0 my-2.5 p-0 block custom-text-styles\">Wahoo CEO talks finances, artificial intelligence and the company&#8217;s &#8216;next big opportunity&#8217;<\/span><\/div>\n<div class=\"relative recirc-feed sponsored-card min-h-[250px]\" data-recirc-id=\"article-river-stacked-ads:native-cards\" data-mrf-recirculation=\"article-river-ads\" data-nosnippet data-ad-slot-path=\"feed-sponsored-post\" data-attribute-device=\"all\">\n<div class=\"max-w-full sponsored-post--placeholder animate-pulse\">\n<div class=\"relative!\"><span class=\"text-base text-black font-bold mx-0 my-2.5 p-0 block bg-gray-100\">\u00a0<br \/>\u00a0<\/span><\/div>\n<\/div>\n<\/div>\n<div>\n<div class=\"aspect-[var(--img-listing-aspect-ratio,16\/9)] relative mb-3.5\">\n    <source type=\"image\/webp\" srcset=\"https:\/\/cdn.mos.cms.futurecdn.net\/iV4HrtCzWUTgR8xb48wFk4-840-80.jpg.webp 840w, https:\/\/cdn.mos.cms.futurecdn.net\/iV4HrtCzWUTgR8xb48wFk4-650-80.jpg.webp 650w, https:\/\/cdn.mos.cms.futurecdn.net\/iV4HrtCzWUTgR8xb48wFk4-500-80.jpg.webp 500w, https:\/\/cdn.mos.cms.futurecdn.net\/iV4HrtCzWUTgR8xb48wFk4-450-80.jpg.webp 450w, https:\/\/cdn.mos.cms.futurecdn.net\/iV4HrtCzWUTgR8xb48wFk4-320-80.jpg.webp 320w\" sizes=\"(min-width: 900px) 925px, (min-width: 700px) 450px, calc(100vw - 48px)\" \/><\/div>\n<p><span class=\"custom-subheading-styles\">Training<\/span><span class=\"text-base text-black font-bold mx-0 my-2.5 p-0 block custom-text-styles\">Zwift reveals higher subscription tier with AI coach, adaptive training plans and real-world video<\/span><\/div>\n<div class=\"relative recirc-feed sponsored-card min-h-[250px]\" data-recirc-id=\"article-river-stacked-ads:native-cards\" data-mrf-recirculation=\"article-river-ads\" data-nosnippet data-ad-slot-path=\"feed-sponsored-post\" data-attribute-device=\"all\">\n<div class=\"max-w-full sponsored-post--placeholder animate-pulse\">\n<div class=\"relative!\"><span class=\"text-base text-black font-bold mx-0 my-2.5 p-0 block bg-gray-100\">\u00a0<br \/>\u00a0<\/span><\/div>\n<\/div>\n<\/div>\n<div>\n<div class=\"aspect-[var(--img-listing-aspect-ratio,16\/9)] relative mb-3.5\">\n    <source type=\"image\/webp\" srcset=\"https:\/\/cdn.mos.cms.futurecdn.net\/YBHichqmEYXX9VoRbx6fff-840-80.jpg.webp 840w, https:\/\/cdn.mos.cms.futurecdn.net\/YBHichqmEYXX9VoRbx6fff-650-80.jpg.webp 650w, https:\/\/cdn.mos.cms.futurecdn.net\/YBHichqmEYXX9VoRbx6fff-500-80.jpg.webp 500w, https:\/\/cdn.mos.cms.futurecdn.net\/YBHichqmEYXX9VoRbx6fff-450-80.jpg.webp 450w, https:\/\/cdn.mos.cms.futurecdn.net\/YBHichqmEYXX9VoRbx6fff-320-80.jpg.webp 320w\" sizes=\"(min-width: 900px) 925px, (min-width: 700px) 450px, calc(100vw - 48px)\" \/><br \/>\n    <source type=\"image\/webp\" srcset=\"https:\/\/cdn.mos.cms.futurecdn.net\/jorsDMGQatsjhfmJg4omCc-200-100.png.webp\" \/><\/div>\n<p><span class=\"custom-subheading-styles\">Training<\/span><span class=\"text-base text-black font-bold mx-0 my-2.5 p-0 block custom-text-styles\">Indoor cycling setup checklist &#8211; How to optimise your indoor training space<\/span><\/div>\n<div class=\"relative recirc-feed sponsored-card min-h-[250px]\" data-recirc-id=\"article-river-stacked-ads:native-cards\" data-mrf-recirculation=\"article-river-ads\" data-nosnippet data-ad-slot-path=\"feed-sponsored-post\" data-attribute-device=\"all\">\n<div class=\"max-w-full sponsored-post--placeholder animate-pulse\">\n<div class=\"relative!\"><span class=\"text-base text-black font-bold mx-0 my-2.5 p-0 block bg-gray-100\">\u00a0<br \/>\u00a0<\/span><\/div>\n<\/div>\n<\/div>\n<div>\n<div class=\"aspect-[var(--img-listing-aspect-ratio,16\/9)] relative mb-3.5\">\n    <source type=\"image\/webp\" srcset=\"https:\/\/cdn.mos.cms.futurecdn.net\/Xvnx6YDNeXCDDEbgJRpCPV-840-80.jpg.webp 840w, https:\/\/cdn.mos.cms.futurecdn.net\/Xvnx6YDNeXCDDEbgJRpCPV-650-80.jpg.webp 650w, https:\/\/cdn.mos.cms.futurecdn.net\/Xvnx6YDNeXCDDEbgJRpCPV-500-80.jpg.webp 500w, https:\/\/cdn.mos.cms.futurecdn.net\/Xvnx6YDNeXCDDEbgJRpCPV-450-80.jpg.webp 450w, https:\/\/cdn.mos.cms.futurecdn.net\/Xvnx6YDNeXCDDEbgJRpCPV-320-80.jpg.webp 320w\" sizes=\"(min-width: 900px) 925px, (min-width: 700px) 450px, calc(100vw - 48px)\" \/><br \/>\n    <source type=\"image\/webp\" srcset=\"https:\/\/cdn.mos.cms.futurecdn.net\/jorsDMGQatsjhfmJg4omCc-200-100.png.webp\" \/><\/div>\n<p><span class=\"custom-subheading-styles\">Training<\/span><span class=\"text-base text-black font-bold mx-0 my-2.5 p-0 block custom-text-styles\">It&#8217;s indoor cycling week at Cyclingnews<\/span><\/div>\n<div class=\"relative recirc-feed sponsored-card min-h-[250px]\" data-recirc-id=\"article-river-stacked-ads:native-cards\" data-mrf-recirculation=\"article-river-ads\" data-nosnippet data-ad-slot-path=\"feed-sponsored-post\" data-attribute-device=\"all\">\n<div class=\"max-w-full sponsored-post--placeholder animate-pulse\">\n<div class=\"relative!\"><span class=\"text-base text-black font-bold mx-0 my-2.5 p-0 block bg-gray-100\">\u00a0<br \/>\u00a0<\/span><\/div>\n<\/div>\n<\/div>\n<div>\n<div class=\"aspect-[var(--img-listing-aspect-ratio,16\/9)] relative mb-3.5\">\n    <source type=\"image\/webp\" srcset=\"https:\/\/cdn.mos.cms.futurecdn.net\/N4P8e3mRbKfvLFnZHihRxg-840-80.png.webp 840w, https:\/\/cdn.mos.cms.futurecdn.net\/N4P8e3mRbKfvLFnZHihRxg-650-80.png.webp 650w, https:\/\/cdn.mos.cms.futurecdn.net\/N4P8e3mRbKfvLFnZHihRxg-500-80.png.webp 500w, https:\/\/cdn.mos.cms.futurecdn.net\/N4P8e3mRbKfvLFnZHihRxg-450-80.png.webp 450w, https:\/\/cdn.mos.cms.futurecdn.net\/N4P8e3mRbKfvLFnZHihRxg-320-80.png.webp 320w\" sizes=\"(min-width: 900px) 925px, (min-width: 700px) 450px, calc(100vw - 48px)\" \/><\/div>\n<p><span class=\"custom-subheading-styles\">Training<\/span><span class=\"text-base text-black font-bold mx-0 my-2.5 p-0 block custom-text-styles\">The indoor cycling app scene is evolving, so what options are currently out there and do they challenge Zwift&#8217;s dominance?<\/span><\/div>\n<div class=\"relative recirc-feed sponsored-card min-h-[250px]\" data-recirc-id=\"article-river-stacked-ads:native-cards\" data-mrf-recirculation=\"article-river-ads\" data-nosnippet data-ad-slot-path=\"feed-sponsored-post\" data-attribute-device=\"all\">\n<div class=\"max-w-full sponsored-post--placeholder animate-pulse\">\n<div class=\"relative!\"><span class=\"text-base text-black font-bold mx-0 my-2.5 p-0 block bg-gray-100\">\u00a0<br \/>\u00a0<\/span><\/div>\n<\/div>\n<\/div>\n<div>\n<div class=\"aspect-[var(--img-listing-aspect-ratio,16\/9)] relative mb-3.5\">\n    <source type=\"image\/webp\" srcset=\"https:\/\/cdn.mos.cms.futurecdn.net\/KEAHW6hcGZkvaEd9zj8QxU-840-80.png.webp 840w, https:\/\/cdn.mos.cms.futurecdn.net\/KEAHW6hcGZkvaEd9zj8QxU-650-80.png.webp 650w, https:\/\/cdn.mos.cms.futurecdn.net\/KEAHW6hcGZkvaEd9zj8QxU-500-80.png.webp 500w, https:\/\/cdn.mos.cms.futurecdn.net\/KEAHW6hcGZkvaEd9zj8QxU-450-80.png.webp 450w, https:\/\/cdn.mos.cms.futurecdn.net\/KEAHW6hcGZkvaEd9zj8QxU-320-80.png.webp 320w\" sizes=\"(min-width: 900px) 925px, (min-width: 700px) 450px, calc(100vw - 48px)\" \/><\/div>\n<p><span class=\"custom-subheading-styles\">Training<\/span><span class=\"text-base text-black font-bold mx-0 my-2.5 p-0 block custom-text-styles\">The 5 training metrics you\u2019re forgetting to pay attention to that could unlock your performance<\/span><\/div>\n<div class=\"relative recirc-feed sponsored-card min-h-[250px]\" data-recirc-id=\"article-river-stacked-ads:native-cards\" data-mrf-recirculation=\"article-river-ads\" data-nosnippet data-ad-slot-path=\"feed-sponsored-post\" data-attribute-device=\"all\">\n<div class=\"max-w-full sponsored-post--placeholder animate-pulse\">\n<div class=\"relative!\"><span class=\"text-base text-black font-bold mx-0 my-2.5 p-0 block bg-gray-100\">\u00a0<br \/>\u00a0<\/span><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/aside>\n<aside class=\"w-full\" data-nosnippet data-mrf-recirculation=\"article-river-stacked\">\n<div data-recirc-id=\"article-river-stacked-solr:latest-articletype\">\n<div class=\"text-white py-4 px-3 mb-4 bg-[#333] uppercase font-bold custom-header-styles\">Latest in Features<\/div>\n<div class=\"grid grid-cols-1 gap-4 mt-4 mb-5\">\n<div>\n<div class=\"aspect-[var(--img-listing-aspect-ratio,16\/9)] relative mb-3.5\">\n    <source type=\"image\/webp\" srcset=\"https:\/\/cdn.mos.cms.futurecdn.net\/zynmugmNnNmAP9st9Uyr5Z-840-80.jpg.webp 840w, https:\/\/cdn.mos.cms.futurecdn.net\/zynmugmNnNmAP9st9Uyr5Z-650-80.jpg.webp 650w, https:\/\/cdn.mos.cms.futurecdn.net\/zynmugmNnNmAP9st9Uyr5Z-500-80.jpg.webp 500w, https:\/\/cdn.mos.cms.futurecdn.net\/zynmugmNnNmAP9st9Uyr5Z-450-80.jpg.webp 450w, https:\/\/cdn.mos.cms.futurecdn.net\/zynmugmNnNmAP9st9Uyr5Z-320-80.jpg.webp 320w\" sizes=\"(min-width: 900px) 925px, (min-width: 700px) 450px, calc(100vw - 48px)\" \/><\/div>\n<p><span class=\"custom-subheading-styles\">Bikes<\/span><span class=\"text-base text-black font-bold mx-0 my-2.5 p-0 block custom-text-styles\">Early access: Watch our video review of the new Argon 18 Nitrogen Pro before anyone else<\/span><\/div>\n<div class=\"relative recirc-feed sponsored-card min-h-[250px]\" data-recirc-id=\"article-river-stacked-ads:native-cards\" data-mrf-recirculation=\"article-river-ads\" data-nosnippet data-ad-slot-path=\"feed-sponsored-post\" data-attribute-device=\"all\">\n<div class=\"max-w-full sponsored-post--placeholder animate-pulse\">\n<div class=\"relative!\"><span class=\"text-base text-black font-bold mx-0 my-2.5 p-0 block bg-gray-100\">\u00a0<br \/>\u00a0<\/span><\/div>\n<\/div>\n<\/div>\n<div>\n<div class=\"aspect-[var(--img-listing-aspect-ratio,16\/9)] relative mb-3.5\">\n    <source type=\"image\/webp\" srcset=\"https:\/\/cdn.mos.cms.futurecdn.net\/zpRx98Pkeek5sU4Xh6yhuV-840-80.jpg.webp 840w, https:\/\/cdn.mos.cms.futurecdn.net\/zpRx98Pkeek5sU4Xh6yhuV-650-80.jpg.webp 650w, https:\/\/cdn.mos.cms.futurecdn.net\/zpRx98Pkeek5sU4Xh6yhuV-500-80.jpg.webp 500w, https:\/\/cdn.mos.cms.futurecdn.net\/zpRx98Pkeek5sU4Xh6yhuV-450-80.jpg.webp 450w, https:\/\/cdn.mos.cms.futurecdn.net\/zpRx98Pkeek5sU4Xh6yhuV-320-80.jpg.webp 320w\" sizes=\"(min-width: 900px) 925px, (min-width: 700px) 450px, calc(100vw - 48px)\" \/><\/div>\n<p><span class=\"custom-subheading-styles\">Teams &amp; Riders<\/span><span class=\"text-base text-black font-bold mx-0 my-2.5 p-0 block custom-text-styles\">Who will actually ride the Giro d\u2019Italia in 2027? Analysing the choices facing Poga\u010dar, Vingegaard, Seixas, Evenepoel, Del Toro and more<\/span><\/div>\n<div class=\"relative recirc-feed sponsored-card min-h-[250px]\" data-recirc-id=\"article-river-stacked-ads:native-cards\" data-mrf-recirculation=\"article-river-ads\" data-nosnippet data-ad-slot-path=\"feed-sponsored-post\" data-attribute-device=\"all\">\n<div class=\"max-w-full sponsored-post--placeholder animate-pulse\">\n<div class=\"relative!\"><span class=\"text-base text-black font-bold mx-0 my-2.5 p-0 block bg-gray-100\">\u00a0<br \/>\u00a0<\/span><\/div>\n<\/div>\n<\/div>\n<div>\n<div class=\"aspect-[var(--img-listing-aspect-ratio,16\/9)] relative mb-3.5\">\n    <source type=\"image\/webp\" srcset=\"https:\/\/cdn.mos.cms.futurecdn.net\/ALD3tNadfHfKZfQG9XuyAV-840-80.jpg.webp 840w, https:\/\/cdn.mos.cms.futurecdn.net\/ALD3tNadfHfKZfQG9XuyAV-650-80.jpg.webp 650w, https:\/\/cdn.mos.cms.futurecdn.net\/ALD3tNadfHfKZfQG9XuyAV-500-80.jpg.webp 500w, https:\/\/cdn.mos.cms.futurecdn.net\/ALD3tNadfHfKZfQG9XuyAV-450-80.jpg.webp 450w, https:\/\/cdn.mos.cms.futurecdn.net\/ALD3tNadfHfKZfQG9XuyAV-320-80.jpg.webp 320w\" sizes=\"(min-width: 900px) 925px, (min-width: 700px) 450px, calc(100vw - 48px)\" \/><\/div>\n<p><span class=\"custom-subheading-styles\">Racing<\/span><span class=\"text-base text-black font-bold mx-0 my-2.5 p-0 block custom-text-styles\">The Giro d&#8217;Italia&#8217;s most feared climb \u2013 A closer look at the mighty Monte Zoncolan ahead of its return in 2027<\/span><\/div>\n<div class=\"relative recirc-feed sponsored-card min-h-[250px]\" data-recirc-id=\"article-river-stacked-ads:native-cards\" data-mrf-recirculation=\"article-river-ads\" data-nosnippet data-ad-slot-path=\"feed-sponsored-post\" data-attribute-device=\"all\">\n<div class=\"max-w-full sponsored-post--placeholder animate-pulse\">\n<div class=\"relative!\"><span class=\"text-base text-black font-bold mx-0 my-2.5 p-0 block bg-gray-100\">\u00a0<br \/>\u00a0<\/span><\/div>\n<\/div>\n<\/div>\n<div>\n<div class=\"aspect-[var(--img-listing-aspect-ratio,16\/9)] relative mb-3.5\">\n    <source type=\"image\/webp\" srcset=\"https:\/\/cdn.mos.cms.futurecdn.net\/bedm7DKwLWbRuJYmmRKMzc-840-80.jpg.webp 840w, https:\/\/cdn.mos.cms.futurecdn.net\/bedm7DKwLWbRuJYmmRKMzc-650-80.jpg.webp 650w, https:\/\/cdn.mos.cms.futurecdn.net\/bedm7DKwLWbRuJYmmRKMzc-500-80.jpg.webp 500w, https:\/\/cdn.mos.cms.futurecdn.net\/bedm7DKwLWbRuJYmmRKMzc-450-80.jpg.webp 450w, https:\/\/cdn.mos.cms.futurecdn.net\/bedm7DKwLWbRuJYmmRKMzc-320-80.jpg.webp 320w\" sizes=\"(min-width: 900px) 925px, (min-width: 700px) 450px, calc(100vw - 48px)\" \/><\/div>\n<p><span class=\"custom-subheading-styles\">Women&#8217;s Cycling<\/span><span class=\"text-base text-black font-bold mx-0 my-2.5 p-0 block custom-text-styles\">Turned up to 11 \u2013 The 2027 Giro d\u2019Italia Women route is tough, but it risks producing a race without crucial jeopardy<\/span><\/div>\n<div class=\"relative recirc-feed sponsored-card min-h-[250px]\" data-recirc-id=\"article-river-stacked-ads:native-cards\" data-mrf-recirculation=\"article-river-ads\" data-nosnippet data-ad-slot-path=\"feed-sponsored-post\" data-attribute-device=\"all\">\n<div class=\"max-w-full sponsored-post--placeholder animate-pulse\">\n<div class=\"relative!\"><span class=\"text-base text-black font-bold mx-0 my-2.5 p-0 block bg-gray-100\">\u00a0<br \/>\u00a0<\/span><\/div>\n<\/div>\n<\/div>\n<div>\n<div class=\"aspect-[var(--img-listing-aspect-ratio,16\/9)] relative mb-3.5\">\n    <source type=\"image\/webp\" srcset=\"https:\/\/cdn.mos.cms.futurecdn.net\/37PhNQZUbY6GgTpHTL7AbZ-840-80.jpg.webp 840w, https:\/\/cdn.mos.cms.futurecdn.net\/37PhNQZUbY6GgTpHTL7AbZ-650-80.jpg.webp 650w, https:\/\/cdn.mos.cms.futurecdn.net\/37PhNQZUbY6GgTpHTL7AbZ-500-80.jpg.webp 500w, https:\/\/cdn.mos.cms.futurecdn.net\/37PhNQZUbY6GgTpHTL7AbZ-450-80.jpg.webp 450w, https:\/\/cdn.mos.cms.futurecdn.net\/37PhNQZUbY6GgTpHTL7AbZ-320-80.jpg.webp 320w\" sizes=\"(min-width: 900px) 925px, (min-width: 700px) 450px, calc(100vw - 48px)\" \/><\/div>\n<p><span class=\"custom-subheading-styles\">Women&#8217;s Cycling<\/span><span class=\"text-base text-black font-bold mx-0 my-2.5 p-0 block custom-text-styles\">&#8216;I felt quite lost and desperate&#8217; \u2013 How Ashleigh Moolman Pasio re-wrote the ending of her 17-year career, and how she&#8217;s re-writing the future for African cyclists<\/span><\/div>\n<div class=\"relative recirc-feed sponsored-card min-h-[250px]\" data-recirc-id=\"article-river-stacked-ads:native-cards\" data-mrf-recirculation=\"article-river-ads\" data-nosnippet data-ad-slot-path=\"feed-sponsored-post\" data-attribute-device=\"all\">\n<div class=\"max-w-full sponsored-post--placeholder animate-pulse\">\n<div class=\"relative!\"><span class=\"text-base text-black font-bold mx-0 my-2.5 p-0 block bg-gray-100\">\u00a0<br \/>\u00a0<\/span><\/div>\n<\/div>\n<\/div>\n<div>\n<div class=\"aspect-[var(--img-listing-aspect-ratio,16\/9)] relative mb-3.5\">\n    <source type=\"image\/webp\" srcset=\"https:\/\/cdn.mos.cms.futurecdn.net\/hAA2edDJG8qUtHcQr4TvkU-840-80.png.webp 840w, https:\/\/cdn.mos.cms.futurecdn.net\/hAA2edDJG8qUtHcQr4TvkU-650-80.png.webp 650w, https:\/\/cdn.mos.cms.futurecdn.net\/hAA2edDJG8qUtHcQr4TvkU-500-80.png.webp 500w, https:\/\/cdn.mos.cms.futurecdn.net\/hAA2edDJG8qUtHcQr4TvkU-450-80.png.webp 450w, https:\/\/cdn.mos.cms.futurecdn.net\/hAA2edDJG8qUtHcQr4TvkU-320-80.png.webp 320w\" sizes=\"(min-width: 900px) 925px, (min-width: 700px) 450px, calc(100vw - 48px)\" \/><\/div>\n<p><span class=\"custom-subheading-styles\">Road Bikes<\/span><span class=\"text-base text-black font-bold mx-0 my-2.5 p-0 block custom-text-styles\">Zero to hero? Wind tunnel testing the new Look 795 Blade RS<\/span><\/div>\n<div class=\"relative recirc-feed sponsored-card min-h-[250px]\" data-recirc-id=\"article-river-stacked-ads:native-cards\" data-mrf-recirculation=\"article-river-ads\" data-nosnippet data-ad-slot-path=\"feed-sponsored-post\" data-attribute-device=\"all\">\n<div class=\"max-w-full sponsored-post--placeholder animate-pulse\">\n<div class=\"relative!\"><span class=\"text-base text-black font-bold mx-0 my-2.5 p-0 block bg-gray-100\">\u00a0<br \/>\u00a0<\/span><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/aside>\n<\/section>\n<\/div>\n<\/div>\n<\/div>\n<div id=\"widgetArea17\" class=\"widget-area md:basis-1\/3 widget-area-g-md-vp-1-3 widget-area-g-lg-vp-1-3 widget-area-g-xl-vp-1-3 page-widget-area-17\">\n<div data-widget-type=\"dynamic\" id=\"popular-data\" class=\"clear-both widget widget-dynamic widget-popular-data widget-dynamic-popular-data widget-dynamic-fter-popular-box\">\n<div class=\"wdn-fte-pb pos-relative space-t20\n\"><\/p>\n<div class=\"slice-container popular-box-slice\">\n<section class=\"popular-box\" data-component-name=\"Slice:PopularBox\">\n<div class=\"popular-box__label\">\n<div class=\"popular-box__label__tab popular-box__label__tab--active\" role=\"heading\">\nLATEST ARTICLES\n<\/div>\n<\/div>\n<ol class=\"popular-box__articles-list popular-box__articles-list--active\">\n<li class=\"popular-box__article-list\">\n<div class=\"popular-box__article-list__container\">\n<div class=\"popular-box__article-list__image-wrapper\">\n<div>\n<source type=\"image\/webp\" srcset=\"https:\/\/cdn.mos.cms.futurecdn.net\/wyn7PHuveeWpE4A4zf3fE5-1280-80.jpg.webp 1280w, https:\/\/cdn.mos.cms.futurecdn.net\/wyn7PHuveeWpE4A4zf3fE5-720-80.jpg.webp 720w, https:\/\/cdn.mos.cms.futurecdn.net\/wyn7PHuveeWpE4A4zf3fE5-640-80.jpg.webp 640w, https:\/\/cdn.mos.cms.futurecdn.net\/wyn7PHuveeWpE4A4zf3fE5-320-80.jpg.webp 320w\" sizes=\"99vw\" \/><\/div>\n<\/div>\n<div class=\"popular-box__article-list__content\">\n<div class=\"popular-box__article-list__number-text\">1<\/div>\n<div class=\"popular-box__article-list__heading\">\n<p>Michael Vanthourenhout fined for post-race clash with Cameron Mason at Middelkerke cyclo-cross<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/li>\n<li class=\"popular-box__article-list\">\n<div class=\"popular-box__article-list__container\">\n<div class=\"popular-box__article-list__content\">\n<div class=\"popular-box__article-list__number-text\">2<\/div>\n<div class=\"popular-box__article-list__heading\">\n<p>TrainerRoad vs TrainingPeaks: Which is the best app to support your structured training?<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/li>\n<li class=\"popular-box__article-list\">\n<div class=\"popular-box__article-list__container\">\n<div class=\"popular-box__article-list__content\">\n<div class=\"popular-box__article-list__number-text\">3<\/div>\n<div class=\"popular-box__article-list__heading\">\n<p>&#8216;Tom&#8217;s pace is pretty mind-blowing&#8217; \u2013 Tom Pidcock swaps two wheels for four to tackle fearsome N\u00fcrburgring Nordschleife race track in Porsche 911<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/li>\n<li class=\"popular-box__article-list\">\n<div class=\"popular-box__article-list__container\">\n<div class=\"popular-box__article-list__content\">\n<div class=\"popular-box__article-list__number-text\">4<\/div>\n<div class=\"popular-box__article-list__heading\">\n<p>How to turn an AI into your personal coach: Goal-specific prompts and setup instructions<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/li>\n<li class=\"popular-box__article-list\">\n<div class=\"popular-box__article-list__container\">\n<div class=\"popular-box__article-list__content\">\n<div class=\"popular-box__article-list__number-text\">5<\/div>\n<div class=\"popular-box__article-list__heading\">\n<p>&#8216;I felt quite lost and desperate&#8217; \u2013 How Ashleigh Moolman Pasio re-wrote the ending of her 17-year career, and how she&#8217;s re-writing the future for African cyclists<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/li>\n<\/ol>\n<\/section>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/article>\n<article class=\"page-content-onecol flex-1\nnews-article article\n\"><\/p>\n<div class=\"widget-area-group widget-area-group-2col flex flex-wrap box-border\">\n<div id=\"widgetArea16\" class=\"widget-area basis-full md:basis-2\/3 widget-area-g-md-vp-2-3 widget-area-g-lg-vp-2-3 widget-area-g-xl-vp-2-3 page-widget-area-16\">\n<div data-widget-type=\"hero\" id=\"hero\" class=\"clear-both widget widget-hero widget-hero widget-hero-hero widget-hero widget-hero-fter-news\">\n<div class=\"news-article\">\n<header data-component-name=\"Article:Hero\">\n<nav data-component-name=\"UI:Breadcrumbs\" aria-label=\"Breadcrumbs\" class=\"type-breadcrumbs-sm md:type-breadcrumbs-md mb-5\" data-palette=\"brand\">\n<ol class=\"inline-flex flex-wrap items-center align-top gap-1\">\n<li class=\"inline-flex items-center gap-1\">\nCycling Culture<\/p>\n<\/li>\n<li class=\"inline-flex items-center gap-1\">\nTraining\n<\/li>\n<\/ol>\n<\/nav>\n<h1>How to turn an AI into your personal coach: Goal-specific prompts and setup instructions<\/h1>\n<div class=\"byline-social\">\n<div class=\"vds-byline-block flex flex-row flex-nowrap my-1.5 gap-2 text-left items-start justify-start\" data-component-name=\"Article:BylineBlock\">\n<p>Features<\/p>\n<div class=\"my-auto vds-simple-byline\"><span class=\"inline-block vds-author\"><br \/>\nBy<br \/>\nTim Perkin <\/span><\/p>\n<div class=\"flex gap-1 vds-byline-with-avatar__meta\"><span class=\"vds-date block font-normal tracking-normal normal-case text-xs\"><br \/>\nPublished<br \/>\n<time data-component-name=\"UI:DateTime\" datetime=\"2026-11-06T11:29:10Z\" class=\"relative-date\"><br \/>\n6 November 2026<br \/>\n<\/time><\/span><\/div>\n<\/div>\n<\/div>\n<p class=\"strapline\">Would you use AI to analyse your historical riding data? <\/p>\n<\/div>\n<aside class=\"text-gray-700 flex items-center mx-0 my-5 p-0 justify-start text-left\" id=\"affiliate-disclaimer\" data-component-name=\"AffiliateDisclaimer\" data-hawk-message=\"Affiliate disclaimer removed because hawk deemed there are no affiliate links on this page\">\n<p class=\"text-[color:var(--affiliate-disclaimer--text-color,inherit)] mb-2 text-[length:var(--affiliate-disclaimer--font-size,0.75rem)] leading-[18px] md:text-[13px] [&amp;&gt;a]:text-inherit [&amp;&gt;a]:underline\">\nWhen you purchase through links on our site, we may earn an affiliate commission. Here\u2019s how it works.\n<\/p>\n<\/aside>\n<\/header>\n<\/div>\n<\/div>\n<div data-widget-type=\"contentparsed\" id=\"content\" class=\"clear-both widget widget-contentparsed widget-content widget-contentparsed-content widget-content-parsed widget-content-parsed-content_document \">\n<div class=\"wcp-item-content\">\n<section class=\"content-wrapper\">\n<div class=\"box less-space hero-image-wrapper\">\n<figure class=\"mb-0\">\n<source type=\"image\/webp\" srcset=\"https:\/\/cdn.mos.cms.futurecdn.net\/R6qu7nBSZD8s5MLhhHKDX6-1920-80.jpg.webp 1920w, https:\/\/cdn.mos.cms.futurecdn.net\/R6qu7nBSZD8s5MLhhHKDX6-1600-80.jpg.webp 1600w, https:\/\/cdn.mos.cms.futurecdn.net\/R6qu7nBSZD8s5MLhhHKDX6-1200-80.jpg.webp 1200w, https:\/\/cdn.mos.cms.futurecdn.net\/R6qu7nBSZD8s5MLhhHKDX6-1024-80.jpg.webp 1024w, https:\/\/cdn.mos.cms.futurecdn.net\/R6qu7nBSZD8s5MLhhHKDX6-970-80.jpg.webp 970w, https:\/\/cdn.mos.cms.futurecdn.net\/R6qu7nBSZD8s5MLhhHKDX6-750-80.jpg.webp 750w, https:\/\/cdn.mos.cms.futurecdn.net\/R6qu7nBSZD8s5MLhhHKDX6-650-80.jpg.webp 650w, https:\/\/cdn.mos.cms.futurecdn.net\/R6qu7nBSZD8s5MLhhHKDX6-480-80.jpg.webp 480w, https:\/\/cdn.mos.cms.futurecdn.net\/R6qu7nBSZD8s5MLhhHKDX6-320-80.jpg.webp 320w\" sizes=\"(min-width: 1000px) 600px, 100vw\" \/><figcaption class=\"font-article-copy text-(--image--text--color) font-article-copy mt-2\"><span class=\"credit font-article-copy\">(Image credit: AI generated image)<\/span><\/figcaption><\/figure>\n<\/div>\n<div id=\"article-body\" class=\"text-copy bodyCopy auto paywall-locker\">\n<div data-analytics-id=\"utility-bar\" id=\"utility-bar\" class=\"font-ui-heading flex justify-between items-center py-2 border-t border-b border-gray-300 border-solid mb-5 mx-auto\" data-component-name=\"UtilityBar\" data-mrf-recirculation=\"utility-bar\">\n<div class=\"flex gap-2 text-[#333] subcontainer\"><span data-component-name=\"UI:Tooltip\" class=\"group relative inline-flex\"><\/p>\n<div data-component-name=\"Social:Dropdown\" role=\"menu\" id=\"utilitybar__dropdown--share\" aria-labelledby=\"utilitybar__button--share\" class=\"absolute left-0 top-full w-44 bg-white rounded-md shadow-md border border-neutral-200 z-[9996] list-none m-0 py-2 px-3 border-solid\">\n<ul class=\"m-0!\">\n<li class=\"!p-0 !m-0 list-none border-b border-gray-200 border-solid\">\n<li class=\"!p-0 !m-0 list-none border-b border-gray-200 border-solid\">\n<p>Facebook<\/p>\n<\/li>\n<li class=\"!p-0 !m-0 list-none border-b border-gray-200 border-solid\">\n<p>X<\/p>\n<\/li>\n<li class=\"!p-0 !m-0 list-none border-b border-gray-200 border-solid\">\n<p>Pinterest<\/p>\n<\/li>\n<li class=\"!p-0 !m-0 list-none border-b border-gray-200 border-solid\">\n<p>Email<\/p>\n<\/li>\n<\/ul>\n<\/div>\n<p><span class=\"pointer-events-none absolute z-10 opacity-0 transition-opacity duration-fast-02 ease-enter group-hover:opacity-100 group-has-[:focus-visible]:opacity-100 left-1\/2 bottom-full mb-1.5 -translate-x-1\/2\" aria-hidden=\"true\"><\/p>\n<div class=\"inline-flex flex-col items-center\" data-palette=\"brand\">\n<div class=\"block w-max max-w-xs px-2.5 py-1.5 rounded-lg bg-surface-brand-black text-on-brand-black type-tooltip\"><span class=\"line-clamp-2\">Share this article<\/span><\/div>\n<\/div>\n<p><\/span><\/span><span data-component-name=\"UI:Tooltip\" class=\"group relative inline-flex\"><span class=\"ml-1 inline-flex h-5 px-2 shrink-0 items-center justify-center self-center overflow-hidden whitespace-nowrap rounded-[10px] bg-primary-500 text-[11px] leading-none font-ui-heading font-semibold text-white\">0<\/span><span class=\"pointer-events-none absolute z-10 opacity-0 transition-opacity duration-fast-02 ease-enter group-hover:opacity-100 group-has-[:focus-visible]:opacity-100 left-1\/2 bottom-full mb-1.5 -translate-x-1\/2\" aria-hidden=\"true\"><\/p>\n<div class=\"inline-flex flex-col items-center\" data-palette=\"brand\">\n<div class=\"block w-max max-w-xs px-2.5 py-1.5 rounded-lg bg-surface-brand-black text-on-brand-black type-tooltip\"><span class=\"line-clamp-2\">Join the conversation<\/span><\/div>\n<\/div>\n<p><\/span><\/span><\/div>\n<div class=\"flex gap-2 text-[#333] subcontainer\"><span data-component-name=\"UI:Tooltip\" class=\"group relative inline-flex\"><\/p>\n<p>Follow us<\/p>\n<p><span class=\"pointer-events-none absolute z-10 opacity-0 transition-opacity duration-fast-02 ease-enter group-hover:opacity-100 group-has-[:focus-visible]:opacity-100 left-1\/2 bottom-full mb-1.5 -translate-x-1\/2\" aria-hidden=\"true\"><\/p>\n<div class=\"inline-flex flex-col items-center\" data-palette=\"brand\">\n<div class=\"block w-max max-w-xs px-2.5 py-1.5 rounded-lg bg-surface-brand-black text-on-brand-black type-tooltip\"><span class=\"line-clamp-2\">Add us as a preferred source on Google<\/span><\/div>\n<\/div>\n<p><\/span><\/span><span data-component-name=\"UI:Tooltip\" class=\"group relative inline-flex\"><span class=\"pointer-events-none absolute z-10 opacity-0 transition-opacity duration-fast-02 ease-enter group-hover:opacity-100 group-has-[:focus-visible]:opacity-100 left-1\/2 bottom-full mb-1.5 -translate-x-1\/2\" aria-hidden=\"true\"><\/p>\n<div class=\"inline-flex flex-col items-center\" data-palette=\"brand\">\n<div class=\"block w-max max-w-xs px-2.5 py-1.5 rounded-lg bg-surface-brand-black text-on-brand-black type-tooltip\"><span class=\"line-clamp-2\">Subscribe to our newsletter<\/span><\/div>\n<\/div>\n<p><\/span><\/span><\/div>\n<\/div>\n<p id=\"elk-e1ebf8da-d92d-11f1-8780-2d797ea14038\">The world of Artificial Intelligence (AI) is moving so fast that even WorldTour cycling teams are now using it to help understand and interpret riders&#8217; data to aid with training and racing.<\/p>\n<p>For example, Netcompany-Ineos recently announced it would use an AI-based aero testing app next year.<\/p>\n<p id=\"elk-e1ebf8da-d92d-11f1-8780-2d797ea14038-2\" aria-hidden=\"true\" class=\"kiosq-b\">AI use is commonplace now, and cyclists are using it to their advantage. Following suit, I decided to see what AI could do for me.<\/p>\n<div class=\"my-6 w-full overflow-hidden rounded-[10px] lg:my-8\" data-component-name=\"JwPlayer:Carousel\" data-jwp-carousel data-jwp-carousel-payload=\"{&quot;ids&quot;:{&quot;playerID&quot;:&quot;jYDCcabO&quot;,&quot;searchPlaylistID&quot;:&quot;gwjdoYHD&quot;,&quot;divID&quot;:&quot;botr_gwjdoYHD_jYDCcabO_div&quot;,&quot;fallbackPlaylistID&quot;:&quot;gwjdoYHD&quot;,&quot;fallbackDivID&quot;:&quot;botr_gwjdoYHD_jYDCcabO_div&quot;,&quot;key&quot;:&quot;X9\/mXVGac0NphghLH9hZaqWA5d3dhAM\/Ih07grnEyMLjuO2E&quot;,&quot;tintLogo&quot;:true,&quot;useSearchPlaylist&quot;:false,&quot;enabled&quot;:true},&quot;signPostingEnabled&quot;:true,&quot;signPostingLinkEnabled&quot;:true,&quot;waitForAdLoad&quot;:false,&quot;hidePlayerOnDesktop&quot;:false,&quot;hidePlayerOnMobile&quot;:false,&quot;hidePlayerOnTablet&quot;:false}\">\n<div class=\"flex flex-nowrap items-center justify-between gap-3 bg-zinc-900 px-[14px] py-3\" data-jwp-carousel-header>\n<div class=\"flex min-w-0 shrink items-center\"><span class=\"inline-flex items-center gap-1.5 text-sm font-article-heading capitalize leading-5 text-white whitespace-nowrap\"><span class=\"jwp-carousel-title-desktop\">Latest Videos From<\/span><span class=\"jwp-carousel-brand\">Cyclingnews<\/span><\/span><\/div>\n<\/div>\n<div class=\"min-h-[44px] bg-zinc-900 px-[14px] py-3\" data-jwp-carousel-signposting><a class=\"invisible block truncate text-sm font-bold leading-5 text-white underline decoration-solid underline-offset-2\" data-jwp-carousel-signposting-link href target=\"_blank\" rel=\"noopener noreferrer\"><span data-jwp-carousel-signposting-title>Watch full video here: <\/span><\/a><\/div>\n<\/div>\n<p aria-hidden=\"true\" class=\"kiosq-b\">My end goal was for AI to generate a bespoke training plan that could return me to my peak level of fitness, whatever that was. Simple, or so I thought. I wanted to learn about customising an AI training plan based on my own historical data, and improve my skills along the way.<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">The first challenge was choosing a platform. ChatGPT, Claude, Gemini and Microsoft Copilot were all AI assistants that I investigated.<\/p>\n<aside data-component-name=\"Recirculation:ArticleRiver\" data-recirculation-type=\"inline\" data-mrf-recirculation=\"Trending Bar\" data-nosnippet class=\"clear-both pt-2 pb-0 mb-4\"><span class=\"\n            flex\n            after:content-[&apos;&apos;] after:flex-1 after:ml-4 after:my-[0.7rem] after:border-t after:border-solid after:border-t-[#ccc]\n            before:content-[&apos;&apos;] before:flex-1 before:mr-4 before:my-[0.7rem] before:border-t before:border-solid before:border-t-[#ccc]\n            font-article-heading pb-0 text-[length:var(--article-river-title--font-size,1em)] uppercase md:text-[length:var(--article-river-title--font-size,0.875em)] font-bold\n        \"><br \/>\n            You may like<br \/>\n        <\/span><\/p>\n<ul class=\"flex flex-col gap-0 m-0 max-w-full\">\n<li class=\"m-0 list-none border-b border-solid border-[#ededed] py-2\" data-recirculation-id=\"recirculation-card-1\" id=\"recirculation-inline-1\" data-analytics-id=\"recirculation-inline-1\" data-mrf-recirculation=\"recirculation-inline-1\">\n    <source type=\"image\/webp\" srcset=\"https:\/\/cdn.mos.cms.futurecdn.net\/hxXVjkuJPd3h2VM5jFbJ7V-250-80.jpg.webp 250w, https:\/\/cdn.mos.cms.futurecdn.net\/hxXVjkuJPd3h2VM5jFbJ7V-150-80.jpg.webp 150w\" sizes=\"150px\" \/><span class=\"w-full text-base font-[var(--article-river-item--font-weight,500)] font-article-heading line-clamp-3 md:line-clamp-2\">Wahoo CEO talks finances, artificial intelligence and the company&#8217;s &#8216;next big opportunity&#8217;<\/span><\/li>\n<li class=\"m-0 list-none border-b border-solid border-[#ededed] py-2\" data-recirculation-id=\"recirculation-card-2\" id=\"recirculation-inline-2\" data-analytics-id=\"recirculation-inline-2\" data-mrf-recirculation=\"recirculation-inline-2\">\n    <source type=\"image\/webp\" srcset=\"https:\/\/cdn.mos.cms.futurecdn.net\/YBHichqmEYXX9VoRbx6fff-250-80.jpg.webp 250w, https:\/\/cdn.mos.cms.futurecdn.net\/YBHichqmEYXX9VoRbx6fff-150-80.jpg.webp 150w\" sizes=\"150px\" \/><span class=\"w-full text-base font-[var(--article-river-item--font-weight,500)] font-article-heading line-clamp-3 md:line-clamp-2\">Indoor cycling setup checklist &#8211; How to optimise your indoor training space<\/span><\/li>\n<li class=\"m-0 list-none border-b border-solid border-[#ccc] py-2\" data-recirculation-id=\"recirculation-card-3\" id=\"recirculation-inline-3\" data-analytics-id=\"recirculation-inline-3\" data-mrf-recirculation=\"recirculation-inline-3\">\n    <source type=\"image\/webp\" srcset=\"https:\/\/cdn.mos.cms.futurecdn.net\/iDxxugHuxR2SBQoRy8dTh6-250-80.png.webp 250w, https:\/\/cdn.mos.cms.futurecdn.net\/iDxxugHuxR2SBQoRy8dTh6-150-80.png.webp 150w\" sizes=\"150px\" \/><span class=\"w-full text-base font-[var(--article-river-item--font-weight,500)] font-article-heading line-clamp-3 md:line-clamp-2\">&#8216;AI could reverse cycling 2.0&#8217;s gains&#8217; \u2013 Why artificial intelligence could become an anti-doping scientist&#8217;s worst nightmare<\/span><\/li>\n<\/ul>\n<\/aside>\n<p aria-hidden=\"true\" class=\"kiosq-b\">Some AI engines or apps are free, some aren&#8217;t. Free versions limit what you can do and, in this case, how many files you can upload to be analysed. I paid a subscription fee as I was always going to need to use my full training history. After researching the different platforms, I settled on Claude because it could read and analyse my CSV files directly.<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">With Claude chosen, I paid for a subscription and began to see what it could do.<\/p>\n<div id=\"slice-container-newsletterForm-articleInbodyContent-e7z75U5uwa95qJXU4RfGDi\" class=\"slice-container newsletter-inbodyContent-slice newsletterForm-articleInbodyContent-e7z75U5uwa95qJXU4RfGDi slice-container-newsletterForm\">\n<div data-hydrate=\"true\" class=\"newsletter-form__wrapper newsletter-form__wrapper--inbodyContent\">\n<div class=\"newsletter-form__container\">\n<section class=\"newsletter-form__top-bar\">\n<div class=\"newsletter-form__header\">Get The Leadout Newsletter<\/div>\n<\/section>\n<section class=\"newsletter-form__main-section\">\n<p class=\"newsletter-form__strapline\">The latest race content, interviews, features, reviews and expert buying guides, direct to your inbox!<\/p>\n<footer class=\"newsletter-form__footer \">By submitting your information you agree to the Terms &amp; Conditions and Privacy Policy and are aged 16 or over.<\/footer>\n<\/section>\n<\/div>\n<\/div>\n<\/div>\n<p id=\"elk-e1ebf98e-d92d-11f1-8f78-0b274943b86f\" aria-hidden=\"true\" class=\"kiosq-b\">I decided to ask it to build me a 12-week indoor training plan using this simple prompt:<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\"><strong>&#8220;Build me a 12-week indoor cycling training plan of between 7 and 10 hours a week. I can ride 5 times a week, but not on Thursday.&#8221;<\/strong><\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">Claude then produced the plan below for me:<\/p>\n<aside data-component-name=\"Recirculation:ArticleRiver\" data-recirculation-type=\"inline\" data-mrf-recirculation=\"Trending Bar\" data-nosnippet class=\"clear-both pt-2 pb-0 mb-4\"><span class=\"\n            flex\n            after:content-[&apos;&apos;] after:flex-1 after:ml-4 after:my-[0.7rem] after:border-t after:border-solid after:border-t-[#ccc]\n            before:content-[&apos;&apos;] before:flex-1 before:mr-4 before:my-[0.7rem] before:border-t before:border-solid before:border-t-[#ccc]\n            font-article-heading pb-0 text-[length:var(--article-river-title--font-size,1em)] uppercase md:text-[length:var(--article-river-title--font-size,0.875em)] font-bold\n        \"><br \/>\n            What to read next<br \/>\n        <\/span><\/p>\n<ul class=\"flex flex-col gap-0 m-0 max-w-full\">\n<li class=\"m-0 list-none border-b border-solid border-[#ededed] py-2\" data-recirculation-id=\"recirculation-card-1\" id=\"recirculation-inline-2-1\" data-analytics-id=\"recirculation-2-inline-1\" data-mrf-recirculation=\"recirculation-2-inline-1\">\n    <source type=\"image\/webp\" srcset=\"https:\/\/cdn.mos.cms.futurecdn.net\/ecL5h6x9KNXFZT7TPtyrWU-250-80.jpg.webp 250w, https:\/\/cdn.mos.cms.futurecdn.net\/ecL5h6x9KNXFZT7TPtyrWU-150-80.jpg.webp 150w\" sizes=\"150px\" \/><span class=\"w-full text-base font-[var(--article-river-item--font-weight,500)] font-article-heading line-clamp-3 md:line-clamp-2\">TrainerRoad vs TrainingPeaks: Which is the best app to support your structured training?<\/span><\/li>\n<li class=\"m-0 list-none border-b border-solid border-[#ededed] py-2\" data-recirculation-id=\"recirculation-card-2\" id=\"recirculation-inline-2-2\" data-analytics-id=\"recirculation-2-inline-2\" data-mrf-recirculation=\"recirculation-2-inline-2\">\n    <source type=\"image\/webp\" srcset=\"https:\/\/cdn.mos.cms.futurecdn.net\/iV4HrtCzWUTgR8xb48wFk4-250-80.jpg.webp 250w, https:\/\/cdn.mos.cms.futurecdn.net\/iV4HrtCzWUTgR8xb48wFk4-150-80.jpg.webp 150w\" sizes=\"150px\" \/><span class=\"w-full text-base font-[var(--article-river-item--font-weight,500)] font-article-heading line-clamp-3 md:line-clamp-2\">Zwift reveals higher subscription tier with AI coach, adaptive training plans and real-world video<\/span><\/li>\n<li class=\"m-0 list-none border-b border-solid border-[#ccc] py-2\" data-recirculation-id=\"recirculation-card-3\" id=\"recirculation-inline-2-3\" data-analytics-id=\"recirculation-2-inline-3\" data-mrf-recirculation=\"recirculation-2-inline-3\">\n    <source type=\"image\/webp\" srcset=\"https:\/\/cdn.mos.cms.futurecdn.net\/wK9npbGQqwAxNURQH3pbFa-250-80.jpg.webp 250w, https:\/\/cdn.mos.cms.futurecdn.net\/wK9npbGQqwAxNURQH3pbFa-150-80.jpg.webp 150w\" sizes=\"150px\" \/><span class=\"w-full text-base font-[var(--article-river-item--font-weight,500)] font-article-heading line-clamp-3 md:line-clamp-2\">Zwift vs TrainerRoad: An indoor cycling head-to-head<\/span><\/li>\n<\/ul>\n<\/aside>\n<div class=\"slice-container table-wrapper slice-container-table kiosq-b\" data-component-name=\"Slice:Table\" id=\"elk-e1ebfae2-d92d-11f1-8d12-affdf587d182\" aria-hidden=\"true\">\n<div class=\"table__instruction\">\nSwipe to scroll horizontally<\/p>\n<\/div>\n<div class=\"table__container\">\n<table tabindex=\"0\" class=\"table__wrapper table__wrapper--inbodyContent table__wrapper--sticky table__wrapper--divider\">\n<tbody class=\"table__body\">\n<tr class=\"table__body__row\">\n<td class=\"table_body__data\" colspan=\"1\">\n<p><strong>Weeks<\/strong><\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p><strong>Phase <\/strong><\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p><strong>Hours per week <\/strong><\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p><strong>Main work <\/strong><\/p>\n<\/td>\n<\/tr>\n<tr class=\"table__body__row\">\n<td class=\"table_body__data\" colspan=\"1\">\n<p>1-3<\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>Base<\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>7.5 \u2192 8.5 \u2192 9.5<\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>FTP test in Week 1, then sweet spot and tempo<\/p>\n<\/td>\n<\/tr>\n<tr class=\"table__body__row\">\n<td class=\"table_body__data\" colspan=\"1\">\n<p>4<\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>Recovery<\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>7<\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>Easier riding<\/p>\n<\/td>\n<\/tr>\n<tr class=\"table__body__row\">\n<td class=\"table_body__data\" colspan=\"1\">\n<p>5-7<\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>Build<\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>8 \u2192 9 \u2192 10<\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>Threshold and over under intervals<\/p>\n<\/td>\n<\/tr>\n<tr class=\"table__body__row\">\n<td class=\"table_body__data\" colspan=\"1\">\n<p>8<\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>Recovery<\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>7<\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>Easier riding <\/p>\n<\/td>\n<\/tr>\n<tr class=\"table__body__row\">\n<td class=\"table_body__data\" colspan=\"1\">\n<p>9-11<\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>Peak<\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>8.5 \u2192 9.5 \u2192 10<\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>V02 Max intervals with some threshhold<\/p>\n<\/td>\n<\/tr>\n<tr class=\"table__body__row\">\n<td class=\"table_body__data\" colspan=\"1\">\n<p>12<\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>Taper<\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>7<\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>FTP re -test on Saturday<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p id=\"elk-f075d948-d92d-11f1-a3eb-b531ab8303a8\" aria-hidden=\"true\" class=\"kiosq-b\">The plan is perfectly acceptable, but it&#8217;s limited. It offers nothing beyond what you can find in cycling training manuals or on hundreds of websites online.<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">The plan falls short because it is not based on my own data. Without access to my training data, asking AI to build me a plan will always result in something this generic.<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">Granted, you can input parameters such as how many rides you intend to do each week, how many hours you have available for training, and which days suit you best, but beyond that, the output will always be limited.<\/p>\n<figure class=\"van-image-figure inline-layout kiosq-b\" data-bordeaux-image-check id=\"elk-87d48114-d937-11f1-bd8b-8db1b3b10aa9\" aria-hidden=\"true\">\n<div class=\"image-full-width-wrapper\">\n<div class=\"image-widthsetter\">\n<p class=\"vanilla-image-block\">\n<source type=\"image\/webp\" srcset=\"https:\/\/cdn.mos.cms.futurecdn.net\/C5RmA7kZnYPhoRnYCVX3yQ-1200-80.jpg.webp 1200w, https:\/\/cdn.mos.cms.futurecdn.net\/C5RmA7kZnYPhoRnYCVX3yQ-1024-80.jpg.webp 1024w, https:\/\/cdn.mos.cms.futurecdn.net\/C5RmA7kZnYPhoRnYCVX3yQ-970-80.jpg.webp 970w, https:\/\/cdn.mos.cms.futurecdn.net\/C5RmA7kZnYPhoRnYCVX3yQ-650-80.jpg.webp 650w, https:\/\/cdn.mos.cms.futurecdn.net\/C5RmA7kZnYPhoRnYCVX3yQ-480-80.jpg.webp 480w, https:\/\/cdn.mos.cms.futurecdn.net\/C5RmA7kZnYPhoRnYCVX3yQ-320-80.jpg.webp 320w\" sizes=\"(min-width: 1000px) 970px, calc(100vw - 40px)\" \/><\/p>\n<\/div>\n<\/div><figcaption class=\" inline-layout\"><span class=\"credit\">(Image credit: AI generated image)<\/span><\/figcaption><\/figure>\n<h2 id=\"data-is-key-3\" aria-hidden=\"true\" class=\"kiosq-b\">Data is key<\/h2>\n<p id=\"elk-0f7416ac-d92e-11f1-91b6-2106c8d5d488\" aria-hidden=\"true\" class=\"kiosq-b\">To create a bespoke plan and something tailored to my requirements, I realised that I needed to provide AI with my training data. Only with this could AI produce a bespoke plan. And for that, I knew where to go:<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">My Strava account held almost all my training data, and with the functionality to download it, I could then take the relevant files and have AI analyse them and utilise my training and riding history.<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">[Ed. Since undertaking this project, but prior to publishing, Strava launched its MCP connector, allowing direct plugin to AI assistants, enabling the sharing of historic datam, plus future data in perpetuity].<\/p>\n<h2 id=\"a-data-side-quest-3\" aria-hidden=\"true\" class=\"kiosq-b\">A data side quest<\/h2>\n<p id=\"elk-0f741724-d92e-11f1-9fbf-f3fe8ef895af\" aria-hidden=\"true\" class=\"kiosq-b\">However, I had to undertake a slight side quest first. Strava did not have all my data. My early years of training results were held on spreadsheets, so I had to get these uploaded into Strava using a third-party app.<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">I reformatted the spreadsheets got the data uploaded into Strava, using a third-party go between. I then requested my complete set of training data from Strava. An email link soon arrived with a 1.7 GB archive, though I only needed one file from it.<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">The summary file was called &#8220;activities.csv&#8221; and contained enough data to enable AI to produce a tailored plan for me.<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">To download your own data in Strava, go to Settings &gt; My Account &gt; Download or Delete Your Account, then select Request Your Archive. Strava then emails you a link to the data.<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">Only activities.csv is needed, so there&#8217;s no need to upload the whole thing. If you have many years of riding and the file is too large to upload, delete the oldest rows, but keep your best season so the AI can compare against it.<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">A word of caution: activities.csv includes heart-rate data, which is personal health information. I recommend checking your AI platform&#8217;s privacy and data settings before you upload it.<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">Power figures only appear in activities.csv files for rides recorded with a power meter or smart trainer. Without them, the AI&#8217;s FTP estimates and power targets will be much less reliable, so bear this in mind too.<\/p>\n<figure class=\"van-image-figure inline-layout kiosq-b\" data-bordeaux-image-check id=\"elk-7ffa9088-d9c7-11f1-92ea-69ab4345a169\" aria-hidden=\"true\">\n<div class=\"image-full-width-wrapper\">\n<div class=\"image-widthsetter\">\n<p class=\"vanilla-image-block\">\n<source type=\"image\/webp\" srcset=\"https:\/\/cdn.mos.cms.futurecdn.net\/aLBRPfbBK46LRF9xcGMTTQ-1200-80.jpg.webp 1200w, https:\/\/cdn.mos.cms.futurecdn.net\/aLBRPfbBK46LRF9xcGMTTQ-1024-80.jpg.webp 1024w, https:\/\/cdn.mos.cms.futurecdn.net\/aLBRPfbBK46LRF9xcGMTTQ-970-80.jpg.webp 970w, https:\/\/cdn.mos.cms.futurecdn.net\/aLBRPfbBK46LRF9xcGMTTQ-650-80.jpg.webp 650w, https:\/\/cdn.mos.cms.futurecdn.net\/aLBRPfbBK46LRF9xcGMTTQ-480-80.jpg.webp 480w, https:\/\/cdn.mos.cms.futurecdn.net\/aLBRPfbBK46LRF9xcGMTTQ-320-80.jpg.webp 320w\" sizes=\"(min-width: 1000px) 970px, calc(100vw - 40px)\" \/><\/p>\n<\/div>\n<\/div><figcaption class=\" inline-layout\"><span class=\"caption-text\">This is just an AI generated image, but with a simple prompt, you could ask Claude to build you a dashboard that provides similar data at a glance. <\/span><span class=\"credit\">(Image credit: AI generated image)<\/span><\/figcaption><\/figure>\n<h2 id=\"ai-and-prompts-3\" aria-hidden=\"true\" class=\"kiosq-b\">AI and prompts<\/h2>\n<p id=\"elk-0f741788-d92e-11f1-a986-e5135c420428\" aria-hidden=\"true\" class=\"kiosq-b\">The next challenge was writing the correct prompts to finesse my training programme. My first attempt was too simple. After some research, I learned that a good prompt needs four key components.<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">The first component is the persona, which assigns the AI a specific role, for example: &#8220;<em>You are an elite cycling WorldTour coach<\/em>.&#8221;<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">The second component is the specific task, such as &#8220;<em>Using my uploaded data, analyse and assess my current level and create me a 12-week training plan that gets me to and surpasses my previous best cycling fitness levels<\/em>.&#8221;<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">The third component is the context: including any important details, which in this case were the days I could train and for how many hours.<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">The fourth and final component is the format, or how I would like the answer to look.<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">The prompt I decided to use to build my specific training plan was as follows:<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">&#8220;<em>You are an elite cycling WorldTour coach. Using my uploaded data in the spreadsheet only, analyse and assess my current level and create a 12-week training plan that gets me to and surpasses my previous best cycling fitness levels.<\/em>&#8220;<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">&#8220;<em>I have 10 hours per week for training and can ride 5 times a week, with the exception of Thursday<\/em>.&#8221;<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">&#8220;<em>Sessions in the week must not last longer than 90 minutes. I would like a detailed session plan, detailing how long each session should last, power output and heart rate.<\/em>&#8220;<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">I also find that going to a separate Claude chat window and asking it to suggest its own prompt is a good way to learn the phrasing and terminology that Claude itself understands. You can iterate on its suggestion more easily than create your own from scratch, and the wording is often less vague than anything I would generate myself.<\/p>\n<figure class=\"van-image-figure inline-layout kiosq-b\" data-bordeaux-image-check id=\"elk-3579941c-d9c9-11f1-823c-1919b391dfdf\" aria-hidden=\"true\">\n<div class=\"image-full-width-wrapper\">\n<div class=\"image-widthsetter\">\n<p class=\"vanilla-image-block\">\n<source type=\"image\/webp\" srcset=\"https:\/\/cdn.mos.cms.futurecdn.net\/L9WFzGhvb4ctdzAbiJYtYA-1200-80.jpg.webp 1200w, https:\/\/cdn.mos.cms.futurecdn.net\/L9WFzGhvb4ctdzAbiJYtYA-1024-80.jpg.webp 1024w, https:\/\/cdn.mos.cms.futurecdn.net\/L9WFzGhvb4ctdzAbiJYtYA-970-80.jpg.webp 970w, https:\/\/cdn.mos.cms.futurecdn.net\/L9WFzGhvb4ctdzAbiJYtYA-650-80.jpg.webp 650w, https:\/\/cdn.mos.cms.futurecdn.net\/L9WFzGhvb4ctdzAbiJYtYA-480-80.jpg.webp 480w, https:\/\/cdn.mos.cms.futurecdn.net\/L9WFzGhvb4ctdzAbiJYtYA-320-80.jpg.webp 320w\" sizes=\"(min-width: 1000px) 970px, calc(100vw - 40px)\" \/><\/p>\n<\/div>\n<\/div><figcaption class=\" inline-layout\"><span class=\"credit\">(Image credit: AI generated image)<\/span><\/figcaption><\/figure>\n<p id=\"elk-3fa6719e-d9c9-11f1-b02c-dd55adf4e866\" aria-hidden=\"true\" class=\"kiosq-b\">I later refined these prompts into a shorter version that you can reuse:<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">&#8220;<em>You are an elite WorldTour cycling coach. Using only the rides in my attached Strava activities.csv, assess my current level against my all-time best (estimated FTP, and best 20-minute and 60-minute power), then create a 12-week plan starting [date] to beat it.&#8221;<\/em><\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\"><em>&#8220;I have 10 hours a week over 5 rides. I can&#8217;t ride on Thursday or [second rest day], and weekday rides must be 90 minutes or less. Give me my power and heart-rate zones, then a table for each week showing day, duration, session, target watts, and target heart rate. Include recovery weeks and FTP tests in weeks 1, 4, 8, and 12, and be honest about how realistic the goal is.&#8221;<\/em><\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">Before building the plan, the AI assessed my data. It estimated that my FTP had fallen from about 325\u2013329 watts at my peak (December 2021 to February 2022) to about 260 watts, a drop of around 20%, and that my weekly riding had halved from 8\u201310 hours to about 4.5 hours. That told me straight away that this plan would be built around me, not a textbook.<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">The output, generated by the first of the two prompts above, was a very detailed plan with tailored power and heart-rate targets. The table below shows Week 1; the other 11 weeks are just as detailed.<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">The plan is not fixed. After each FTP test, I can give the AI the result and ask it to recalculate my zones and update the remaining weeks, so the plan keeps pace with my fitness. With the newly added MCP Connector, this could even be automated.<\/p>\n<h2 id=\"example-block-1-rebuild-ftp-260-w-3\" aria-hidden=\"true\" class=\"kiosq-b\">Example Block 1: Rebuild (FTP 260 W)<\/h2>\n<div class=\"slice-container table-wrapper slice-container-table kiosq-b\" data-component-name=\"Slice:Table\" id=\"elk-e8027e86-d92f-11f1-84fa-fd417705d59f\" aria-hidden=\"true\">\n<div class=\"table__instruction\">\nSwipe to scroll horizontally<\/p>\n<\/div>\n<div class=\"table__container\">\n<table tabindex=\"0\" class=\"table__wrapper table__wrapper--inbodyContent table__wrapper--sticky table__wrapper--divider\">\n<caption class=\"table__caption table__caption--top table__caption--left\">\nWeek 1 (26th Oct), 8 hours, approx 430 TSS<br \/>\n<\/caption>\n<tbody class=\"table__body\">\n<tr class=\"table__body__row\">\n<td class=\"table_body__data\" colspan=\"1\">\n<p><strong>Day<\/strong><\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p><strong>Duration <\/strong><\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p><strong>Session <\/strong><\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p><strong>Power <\/strong><\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>HR<\/p>\n<\/td>\n<\/tr>\n<tr class=\"table__body__row\">\n<td class=\"table_body__data\" colspan=\"1\">\n<p>Tue <\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>75 mins<\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>20-min FTP test. 15 min Z2, 3 \u00d7 1 min at 290 W<\/p>\n<p>(1 min easy), 5 min easy, 20 min max effort (start at 265 W, build). FTP = 0.95 \u00d7 20-min average<\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>FTP TEST <\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>Rising to 165-172<\/p>\n<\/td>\n<\/tr>\n<tr class=\"table__body__row\">\n<td class=\"table_body__data\" colspan=\"1\">\n<p>Wed<\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>75 mins <\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>Z2 endurance, 85\u201395 rpm<\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>170-190 W<\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>115-133<\/p>\n<\/td>\n<\/tr>\n<tr class=\"table__body__row\">\n<td class=\"table_body__data\" colspan=\"1\">\n<p>Fri<\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>60 mins <\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>Easy, with 4 \u00d7 30 s spin-ups at 110\u2013120 rpm<\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>155-180 W<\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>&lt;128<\/p>\n<\/td>\n<\/tr>\n<tr class=\"table__body__row\">\n<td class=\"table_body__data\" colspan=\"1\">\n<p>Sat <\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>150 mins <\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>Endurance, last hour includes 2 \u00d7 10 min tempo (5 min easy between)<\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>175-190 W<br \/>210-225 W <\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>&lt;133 \/ 135 &#8211; 148<\/p>\n<\/td>\n<\/tr>\n<tr class=\"table__body__row\">\n<td class=\"table_body__data\" colspan=\"1\">\n<p>Sun<\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>120 mins <\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>Z2 endurance<\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>165-185 W <\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>&lt;133<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h2 id=\"prompts-you-may-find-useful-3\" aria-hidden=\"true\" class=\"kiosq-b\">Prompts you may find useful <\/h2>\n<h4 class=\"article-body__section kiosq-b\" id=\"section-goal-planning\" aria-hidden=\"true\"><span>Goal Planning<\/span><\/h4>\n<p id=\"elk-1de61a4e-d930-11f1-b996-115d1bb1fcdf\" aria-hidden=\"true\" class=\"kiosq-b\">This prompt gets the AI to act as your personal cycling coach and build a 12-week plan that fits around your life and moves you towards a goal, such as beating your best FTP. It is a fuller version of the short prompt above, giving you more control over the output.<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">&#8220;You are an elite WorldTour cycling coach who builds periodised, power-based plans for time-limited amateurs. Using the &#8216;Ride&#8217; and &#8216;Virtual Ride&#8217; activities in my attached Strava activities.csv, create a progressive 12-week plan to [goal, e.g., beat my previous best FTP]. I have [X] hours a week across [X] rides; I can&#8217;t ride on [days], and weekday sessions are capped at [X] minutes.<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">Remember to be specific in your demands; a degree of nuance and experience is needed here, and if you choose to experiment, the more you do, the better you will get.<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\"><strong>I asked the AI to give me:<\/strong><\/p>\n<ul id=\"elk-4797e8c8-d9d4-11f1-be6b-f96107129742\" aria-hidden=\"true\" class=\"kiosq-b\">\n<li>An assessment of my current level against my all-time best, with key numbers. Estimate FTP from Weighted Average Power in 20\u201360-minute rides, and include weekly hours, load, and consistency over the last 12 weeks.<\/li>\n<li>A zones table: % of FTP, watts, and heart rate.<\/li>\n<li>One table per week: day, duration, session (with intervals and recoveries), target watts, target heart rate, and weekly total hours. Include recovery weeks and FTP tests in weeks 1, 4, 8, and 12, with week 12 a taper that ends in the final test.<\/li>\n<li>Up to five rules on fuelling, adjusting when fatigued, and updating zones after each test.<\/li>\n<li>Be realistic about what 12 weeks can achieve.<\/li>\n<\/ul>\n<figure class=\"van-image-figure inline-layout kiosq-b\" data-bordeaux-image-check id=\"elk-567fb144-d9cb-11f1-ac8c-3db5c24a9bf4\" aria-hidden=\"true\">\n<div class=\"image-full-width-wrapper\">\n<div class=\"image-widthsetter\">\n<p class=\"vanilla-image-block\">\n<source type=\"image\/webp\" srcset=\"https:\/\/cdn.mos.cms.futurecdn.net\/uy9qauk23whRTWEW5CxPxG-1200-80.jpg.webp 1200w, https:\/\/cdn.mos.cms.futurecdn.net\/uy9qauk23whRTWEW5CxPxG-1024-80.jpg.webp 1024w, https:\/\/cdn.mos.cms.futurecdn.net\/uy9qauk23whRTWEW5CxPxG-970-80.jpg.webp 970w, https:\/\/cdn.mos.cms.futurecdn.net\/uy9qauk23whRTWEW5CxPxG-650-80.jpg.webp 650w, https:\/\/cdn.mos.cms.futurecdn.net\/uy9qauk23whRTWEW5CxPxG-480-80.jpg.webp 480w, https:\/\/cdn.mos.cms.futurecdn.net\/uy9qauk23whRTWEW5CxPxG-320-80.jpg.webp 320w\" sizes=\"(min-width: 1000px) 970px, calc(100vw - 40px)\" \/><\/p>\n<\/div>\n<\/div><figcaption class=\" inline-layout\"><span class=\"credit\">(Image credit: AI generated image)<\/span><\/figcaption><\/figure>\n<h4 class=\"article-body__section kiosq-b\" id=\"section-recovery-assessment\" aria-hidden=\"true\"><span>Recovery Assessment<\/span><\/h4>\n<p id=\"elk-2b942a82-d930-11f1-ab9d-c7ee6f9a24cc\" aria-hidden=\"true\" class=\"kiosq-b\">This prompt uses your data to check whether you&#8217;ve been riding too hard too often over the past month without enough easy days or rest between hard rides. The aim is to catch fatigue before it leads to poor performance, illness, or burnout.<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">&#8220;You are a cycling physiologist specialising in recovery and fatigue monitoring. Using the &#8216;Ride&#8217; and &#8216;Virtual Ride&#8217; activities in my attached Strava activities.csv file from the last 30 days, find the days where my recovery was probably not enough. My FTP is [X] W, and my threshold heart rate is [X] bpm. Classify each ride as hard (above 85% of FTP), moderate, or easy (below 70% of FTP), using Weighted Average Power, Relative Effort, and heart rate, and treat a heart rate of 0 as not recorded. Flag hard days back-to-back, more than three hard rides in any seven days, and heart rate out of line with power.&#8221;<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\"><strong>I also asked my AI coach to give me:<\/strong><\/p>\n<ul id=\"elk-4797e9ae-d9d4-11f1-8933-c9cbe0727b1a\" aria-hidden=\"true\" class=\"kiosq-b\">\n<li>A 30-day calendar table: date, ride, duration, Weighted Average Power, and Hard\/Moderate\/Easy\/Rest.<\/li>\n<li>Each day where recovery was not enough, with a one-line reason.<\/li>\n<li>My hard-to-easy ratio compared with 80\/20.<\/li>\n<li>Three changes to my weekly structure.<\/li>\n<\/ul>\n<h4 class=\"article-body__section kiosq-b\" id=\"section-event-preparation\" aria-hidden=\"true\"><span>Event Preparation<\/span><\/h4>\n<p id=\"elk-4797ea76-d9d4-11f1-abf3-31526c76d17a\" aria-hidden=\"true\" class=\"kiosq-b\">This prompt checks whether your recent riding has prepared you for a specific event, such as a sportive, road race, or time trial, and tells you what to work on in the four weeks before it.<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">&#8220;You are an experienced cycling coach who prepares riders for races and sportives. Look at my rides from the last 12 weeks in the attached Strava activities.csv file. I&#8217;m riding [event, e.g., a 120 km sportive with 2,000 m of climbing] on [date]; my goal is [goal, e.g., finish under 4 hours], and my FTP is about [X] W. Tell me whether my training so far has prepared me for this event.<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\"><strong>I also asked my AI coach to give me:<\/strong><\/p>\n<ul id=\"elk-4797eae4-d9d4-11f1-b25d-cb1734b392e4\" aria-hidden=\"true\" class=\"kiosq-b\">\n<li>A short summary of how fit I am now, in three or four sentences.<\/li>\n<li>A table of my last 12 weeks: hours ridden, longest ride, total climbing, and number of hard sessions (Weighted Average Power above 85% of FTP) each week.<\/li>\n<li>What&#8217;s missing. Check whether I&#8217;ve done enough long rides, enough climbing, enough long steady, hard efforts, and enough short bursts for attacks. For each gap, show the evidence from my data and why it matters for this event.<\/li>\n<li>A four-week plan to fix those gaps, with the key sessions, the long ride for each week, and power and heart-rate targets.<\/li>\n<li>An honest one-line answer on whether my goal is realistic.<\/li>\n<\/ul>\n<h3 id=\"a-word-on-agentic-ai-3\" aria-hidden=\"true\" class=\"kiosq-b\">A word on agentic AI<\/h3>\n<p id=\"elk-4797eba2-d9d4-11f1-81aa-a1a6a4b36605\" aria-hidden=\"true\" class=\"kiosq-b\">Rather than building all of the above as a self-serve chat-based coach that you ask questions of and manually prompt when you want it to adjust or analyse your work, it could even be built agentically. An overarching AI Agent could be given the primary prompt, the database of Strava workouts uploaded as resources alongside your preferences, and improvements to your power duration curve or your FTP can be its reward signal.<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">The trio of prompts above &#8211; alongside others &#8211; could then be created as &#8216;skills&#8217; &#8211; essentially tools that the LLM can call upon, and automations can be built to check your progress periodically, update the plan in real time, and flag whenever you&#8217;re off track.<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">If you wanted, you could even connect it to your Whoop (if you use one), and your Calendar app of choice to slot the workout into your day.<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">There&#8217;s a lot of potential here, and although the build essentially seeks to mimic much of what&#8217;s already been achieved by TrainerRoad, Zwift Plus, Vekta, FasCat, Xert et al, there&#8217;s a certain enjoyment and pride in building it yourself (even if Claude is doing the hard yards), and being able to tweak it to your liking.<\/p>\n<h2 id=\"conclusion-3\" aria-hidden=\"true\" class=\"kiosq-b\">Conclusion<\/h2>\n<p id=\"elk-2b942afa-d930-11f1-8899-1973f9c3682f\" aria-hidden=\"true\" class=\"kiosq-b\">AI can be a valuable tool for cyclists to understand their training and improve performance, and many are already experimenting with ways to use AI to improve their training.<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">The results are going to depend on the input. While generating a basic training plan is easy, creating a genuinely bespoke one is harder.<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">The real insights come when AI accesses your historical training data. It analyses past performances, assesses your current state, and builds a plan around your ambitions, time, and individual needs. This results in a more detailed and personalised approach.<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">For the plans and outputs to be relevant, the data must be accurate, prompts carefully constructed, and output critically evaluated. Training recommendations are only as useful as their underlying information and assumptions. AI should not replace professional coaching or understanding your body&#8217;s response to training.<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">There&#8217;s also a cost, both for AI platform subscriptions and the time to organise data and refine prompts. Yet, for cyclists willing to invest the initial effort, the reward is a plan built around their own numbers rather than a generic one.<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">I aimed to see if AI could help me regain peak fitness. I now have a structured, data-driven 12-week plan designed to do just that. Its success will ultimately be determined on the bike in the coming weeks.<\/p>\n<\/div>\n<div class=\"block mb-5\" id=\"articleTag\" data-component-name=\"PostArticleLinks\" data-nosnippet data-mrf-recirculation=\"post-article-links\">\n<div class=\"border-b border-b-black border-solid py-2.5 text-black font-bold uppercase\">TOPICS<\/div>\n<nav class=\"py-2.5 flex gap-2.5 flex-wrap\" data-analytics-id=\"article-tag\" data-mrf-recirculation=\"article-tag\">\n<p>Tech<\/p>\n<\/nav>\n<\/div>\n<div id=\"slice-container-authorBio-e7z75U5uwa95qJXU4RfGDi\" class=\"slice-container slice-author-bio authorBio-e7z75U5uwa95qJXU4RfGDi slice-container-authorBio\">\n<div class=\"slice-container slice-author-bio authorBio slice-container-authorBio\" id=\"slice-container-authorBio\" data-component-name=\"Slice:AuthorBio\">\n<div class=\"author author__default-layout author--separator author--collapsible\" data-author-bio-max-height=\"250\" data-author-bio-read-more=\"Read more\" data-author-bio-read-less=\"Read less\">\n<div class=\"author__header\">\n<div class=\"author__heading\">\n<div class=\"author__name\">\n<p>Tim Perkin<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n<div class=\"relative max-w-[1070px] viafoura-twig-component mt-6 mx-4 lg:mx-0\" data-component-name=\"Viafoura:Comments\" data-nosnippet data-community-guidelines-text=\"&lt;p class=&apos;vfcustom-community-guidelines&apos;&gt;Please follow our &lt;a href=&quot;https:\/\/www.cyclingnews.com\/about\/#section-community-guidelines&quot; target=&quot;_blank&quot;&gt;community guidelines&lt;\/a&gt;.&lt;\/p&gt;\" data-join-the-conversation-text=\"Join the Conversation\">\n<div class=\"absolute top-0 left-0 w-full h-full flex items-center justify-center z-50 bg-white\/90 border-1 rounded-b-[var(--comment-widget-border-radius,0)]\">\n<div class=\"p-2 text-center\">\n<p class=\"mb-3 text-lg!\">You must confirm your public display name before commenting<\/p>\n<p class=\"mb-3 text-sm!\">Please logout and then login again, you will then be prompted to enter your display name.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<section class=\"mx-2 my-5 md:mx-0\">\n<aside class=\"w-full\" data-nosnippet data-mrf-recirculation=\"article-river-stacked\">\n<div data-recirc-id=\"article-river-stacked-adviser:hybrid\">\n<div class=\"text-white py-4 px-3 mb-4 bg-[#333] uppercase font-bold custom-header-styles\">Read more<\/div>\n<div class=\"grid grid-cols-1 gap-4 mt-4 mb-5\">\n<div>\n<div class=\"aspect-[var(--img-listing-aspect-ratio,16\/9)] relative mb-3.5\">\n    <source type=\"image\/webp\" srcset=\"https:\/\/cdn.mos.cms.futurecdn.net\/hxXVjkuJPd3h2VM5jFbJ7V-840-80.jpg.webp 840w, https:\/\/cdn.mos.cms.futurecdn.net\/hxXVjkuJPd3h2VM5jFbJ7V-650-80.jpg.webp 650w, https:\/\/cdn.mos.cms.futurecdn.net\/hxXVjkuJPd3h2VM5jFbJ7V-500-80.jpg.webp 500w, https:\/\/cdn.mos.cms.futurecdn.net\/hxXVjkuJPd3h2VM5jFbJ7V-450-80.jpg.webp 450w, https:\/\/cdn.mos.cms.futurecdn.net\/hxXVjkuJPd3h2VM5jFbJ7V-320-80.jpg.webp 320w\" sizes=\"(min-width: 900px) 925px, (min-width: 700px) 450px, calc(100vw - 48px)\" \/><\/div>\n<p><span class=\"custom-subheading-styles\">Training<\/span><span class=\"text-base text-black font-bold mx-0 my-2.5 p-0 block custom-text-styles\">Wahoo CEO talks finances, artificial intelligence and the company&#8217;s &#8216;next big opportunity&#8217;<\/span><\/div>\n<div class=\"relative recirc-feed sponsored-card min-h-[250px]\" data-recirc-id=\"article-river-stacked-ads:native-cards\" data-mrf-recirculation=\"article-river-ads\" data-nosnippet data-ad-slot-path=\"feed-sponsored-post\" data-attribute-device=\"all\">\n<div class=\"max-w-full sponsored-post--placeholder animate-pulse\">\n<div class=\"relative!\"><span class=\"text-base text-black font-bold mx-0 my-2.5 p-0 block bg-gray-100\">\u00a0<br \/>\u00a0<\/span><\/div>\n<\/div>\n<\/div>\n<div>\n<div class=\"aspect-[var(--img-listing-aspect-ratio,16\/9)] relative mb-3.5\">\n    <source type=\"image\/webp\" srcset=\"https:\/\/cdn.mos.cms.futurecdn.net\/YBHichqmEYXX9VoRbx6fff-840-80.jpg.webp 840w, https:\/\/cdn.mos.cms.futurecdn.net\/YBHichqmEYXX9VoRbx6fff-650-80.jpg.webp 650w, https:\/\/cdn.mos.cms.futurecdn.net\/YBHichqmEYXX9VoRbx6fff-500-80.jpg.webp 500w, https:\/\/cdn.mos.cms.futurecdn.net\/YBHichqmEYXX9VoRbx6fff-450-80.jpg.webp 450w, https:\/\/cdn.mos.cms.futurecdn.net\/YBHichqmEYXX9VoRbx6fff-320-80.jpg.webp 320w\" sizes=\"(min-width: 900px) 925px, (min-width: 700px) 450px, calc(100vw - 48px)\" \/><\/div>\n<p><span class=\"custom-subheading-styles\">Training<\/span><span class=\"text-base text-black font-bold mx-0 my-2.5 p-0 block custom-text-styles\">Indoor cycling setup checklist &#8211; How to optimise your indoor training space<\/span><\/div>\n<div class=\"relative recirc-feed sponsored-card min-h-[250px]\" data-recirc-id=\"article-river-stacked-ads:native-cards\" data-mrf-recirculation=\"article-river-ads\" data-nosnippet data-ad-slot-path=\"feed-sponsored-post\" data-attribute-device=\"all\">\n<div class=\"max-w-full sponsored-post--placeholder animate-pulse\">\n<div class=\"relative!\"><span class=\"text-base text-black font-bold mx-0 my-2.5 p-0 block bg-gray-100\">\u00a0<br \/>\u00a0<\/span><\/div>\n<\/div>\n<\/div>\n<div>\n<div class=\"aspect-[var(--img-listing-aspect-ratio,16\/9)] relative mb-3.5\">\n    <source type=\"image\/webp\" srcset=\"https:\/\/cdn.mos.cms.futurecdn.net\/iDxxugHuxR2SBQoRy8dTh6-840-80.png.webp 840w, https:\/\/cdn.mos.cms.futurecdn.net\/iDxxugHuxR2SBQoRy8dTh6-650-80.png.webp 650w, https:\/\/cdn.mos.cms.futurecdn.net\/iDxxugHuxR2SBQoRy8dTh6-500-80.png.webp 500w, https:\/\/cdn.mos.cms.futurecdn.net\/iDxxugHuxR2SBQoRy8dTh6-450-80.png.webp 450w, https:\/\/cdn.mos.cms.futurecdn.net\/iDxxugHuxR2SBQoRy8dTh6-320-80.png.webp 320w\" sizes=\"(min-width: 900px) 925px, (min-width: 700px) 450px, calc(100vw - 48px)\" \/><\/div>\n<p><span class=\"custom-subheading-styles\">Doping<\/span><span class=\"text-base text-black font-bold mx-0 my-2.5 p-0 block custom-text-styles\">&#8216;AI could reverse cycling 2.0&#8217;s gains&#8217; \u2013 Why artificial intelligence could become an anti-doping scientist&#8217;s worst nightmare<\/span><\/div>\n<div class=\"relative recirc-feed sponsored-card min-h-[250px]\" data-recirc-id=\"article-river-stacked-ads:native-cards\" data-mrf-recirculation=\"article-river-ads\" data-nosnippet data-ad-slot-path=\"feed-sponsored-post\" data-attribute-device=\"all\">\n<div class=\"max-w-full sponsored-post--placeholder animate-pulse\">\n<div class=\"relative!\"><span class=\"text-base text-black font-bold mx-0 my-2.5 p-0 block bg-gray-100\">\u00a0<br \/>\u00a0<\/span><\/div>\n<\/div>\n<\/div>\n<div>\n<div class=\"aspect-[var(--img-listing-aspect-ratio,16\/9)] relative mb-3.5\">\n    <source type=\"image\/webp\" srcset=\"https:\/\/cdn.mos.cms.futurecdn.net\/ecL5h6x9KNXFZT7TPtyrWU-840-80.jpg.webp 840w, https:\/\/cdn.mos.cms.futurecdn.net\/ecL5h6x9KNXFZT7TPtyrWU-650-80.jpg.webp 650w, https:\/\/cdn.mos.cms.futurecdn.net\/ecL5h6x9KNXFZT7TPtyrWU-500-80.jpg.webp 500w, https:\/\/cdn.mos.cms.futurecdn.net\/ecL5h6x9KNXFZT7TPtyrWU-450-80.jpg.webp 450w, https:\/\/cdn.mos.cms.futurecdn.net\/ecL5h6x9KNXFZT7TPtyrWU-320-80.jpg.webp 320w\" sizes=\"(min-width: 900px) 925px, (min-width: 700px) 450px, calc(100vw - 48px)\" \/><\/div>\n<p><span class=\"custom-subheading-styles\">Smart Trainers<\/span><span class=\"text-base text-black font-bold mx-0 my-2.5 p-0 block custom-text-styles\">TrainerRoad vs TrainingPeaks: Which is the best app to support your structured training?<\/span><\/div>\n<div class=\"relative recirc-feed sponsored-card min-h-[250px]\" data-recirc-id=\"article-river-stacked-ads:native-cards\" data-mrf-recirculation=\"article-river-ads\" data-nosnippet data-ad-slot-path=\"feed-sponsored-post\" data-attribute-device=\"all\">\n<div class=\"max-w-full sponsored-post--placeholder animate-pulse\">\n<div class=\"relative!\"><span class=\"text-base text-black font-bold mx-0 my-2.5 p-0 block bg-gray-100\">\u00a0<br \/>\u00a0<\/span><\/div>\n<\/div>\n<\/div>\n<div>\n<div class=\"aspect-[var(--img-listing-aspect-ratio,16\/9)] relative mb-3.5\">\n    <source type=\"image\/webp\" srcset=\"https:\/\/cdn.mos.cms.futurecdn.net\/iV4HrtCzWUTgR8xb48wFk4-840-80.jpg.webp 840w, https:\/\/cdn.mos.cms.futurecdn.net\/iV4HrtCzWUTgR8xb48wFk4-650-80.jpg.webp 650w, https:\/\/cdn.mos.cms.futurecdn.net\/iV4HrtCzWUTgR8xb48wFk4-500-80.jpg.webp 500w, https:\/\/cdn.mos.cms.futurecdn.net\/iV4HrtCzWUTgR8xb48wFk4-450-80.jpg.webp 450w, https:\/\/cdn.mos.cms.futurecdn.net\/iV4HrtCzWUTgR8xb48wFk4-320-80.jpg.webp 320w\" sizes=\"(min-width: 900px) 925px, (min-width: 700px) 450px, calc(100vw - 48px)\" \/><\/div>\n<p><span class=\"custom-subheading-styles\">Training<\/span><span class=\"text-base text-black font-bold mx-0 my-2.5 p-0 block custom-text-styles\">Zwift reveals higher subscription tier with AI coach, adaptive training plans and real-world video<\/span><\/div>\n<div class=\"relative recirc-feed sponsored-card min-h-[250px]\" data-recirc-id=\"article-river-stacked-ads:native-cards\" data-mrf-recirculation=\"article-river-ads\" data-nosnippet data-ad-slot-path=\"feed-sponsored-post\" data-attribute-device=\"all\">\n<div class=\"max-w-full sponsored-post--placeholder animate-pulse\">\n<div class=\"relative!\"><span class=\"text-base text-black font-bold mx-0 my-2.5 p-0 block bg-gray-100\">\u00a0<br \/>\u00a0<\/span><\/div>\n<\/div>\n<\/div>\n<div>\n<div class=\"aspect-[var(--img-listing-aspect-ratio,16\/9)] relative mb-3.5\">\n    <source type=\"image\/webp\" srcset=\"https:\/\/cdn.mos.cms.futurecdn.net\/wK9npbGQqwAxNURQH3pbFa-840-80.jpg.webp 840w, https:\/\/cdn.mos.cms.futurecdn.net\/wK9npbGQqwAxNURQH3pbFa-650-80.jpg.webp 650w, https:\/\/cdn.mos.cms.futurecdn.net\/wK9npbGQqwAxNURQH3pbFa-500-80.jpg.webp 500w, https:\/\/cdn.mos.cms.futurecdn.net\/wK9npbGQqwAxNURQH3pbFa-450-80.jpg.webp 450w, https:\/\/cdn.mos.cms.futurecdn.net\/wK9npbGQqwAxNURQH3pbFa-320-80.jpg.webp 320w\" sizes=\"(min-width: 900px) 925px, (min-width: 700px) 450px, calc(100vw - 48px)\" \/><\/div>\n<p><span class=\"custom-subheading-styles\">Smart Trainers<\/span><span class=\"text-base text-black font-bold mx-0 my-2.5 p-0 block custom-text-styles\">Zwift vs TrainerRoad: An indoor cycling head-to-head<\/span><\/div>\n<div class=\"relative recirc-feed sponsored-card min-h-[250px]\" data-recirc-id=\"article-river-stacked-ads:native-cards\" data-mrf-recirculation=\"article-river-ads\" data-nosnippet data-ad-slot-path=\"feed-sponsored-post\" data-attribute-device=\"all\">\n<div class=\"max-w-full sponsored-post--placeholder animate-pulse\">\n<div class=\"relative!\"><span class=\"text-base text-black font-bold mx-0 my-2.5 p-0 block bg-gray-100\">\u00a0<br \/>\u00a0<\/span><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/aside>\n<aside class=\"w-full\" data-nosnippet data-mrf-recirculation=\"article-river-stacked\">\n<div data-recirc-id=\"article-river-stacked-solr:latest-category\">\n<div class=\"text-white py-4 px-3 mb-4 bg-[#333] uppercase font-bold custom-header-styles\">Latest in Training<\/div>\n<div class=\"grid grid-cols-1 gap-4 mt-4 mb-5\">\n<div>\n<div class=\"aspect-[var(--img-listing-aspect-ratio,16\/9)] relative mb-3.5\">\n    <source type=\"image\/webp\" srcset=\"https:\/\/cdn.mos.cms.futurecdn.net\/hxXVjkuJPd3h2VM5jFbJ7V-840-80.jpg.webp 840w, https:\/\/cdn.mos.cms.futurecdn.net\/hxXVjkuJPd3h2VM5jFbJ7V-650-80.jpg.webp 650w, https:\/\/cdn.mos.cms.futurecdn.net\/hxXVjkuJPd3h2VM5jFbJ7V-500-80.jpg.webp 500w, https:\/\/cdn.mos.cms.futurecdn.net\/hxXVjkuJPd3h2VM5jFbJ7V-450-80.jpg.webp 450w, https:\/\/cdn.mos.cms.futurecdn.net\/hxXVjkuJPd3h2VM5jFbJ7V-320-80.jpg.webp 320w\" sizes=\"(min-width: 900px) 925px, (min-width: 700px) 450px, calc(100vw - 48px)\" \/><\/div>\n<p><span class=\"custom-subheading-styles\">Training<\/span><span class=\"text-base text-black font-bold mx-0 my-2.5 p-0 block custom-text-styles\">Wahoo CEO talks finances, artificial intelligence and the company&#8217;s &#8216;next big opportunity&#8217;<\/span><\/div>\n<div class=\"relative recirc-feed sponsored-card min-h-[250px]\" data-recirc-id=\"article-river-stacked-ads:native-cards\" data-mrf-recirculation=\"article-river-ads\" data-nosnippet data-ad-slot-path=\"feed-sponsored-post\" data-attribute-device=\"all\">\n<div class=\"max-w-full sponsored-post--placeholder animate-pulse\">\n<div class=\"relative!\"><span class=\"text-base text-black font-bold mx-0 my-2.5 p-0 block bg-gray-100\">\u00a0<br \/>\u00a0<\/span><\/div>\n<\/div>\n<\/div>\n<div>\n<div class=\"aspect-[var(--img-listing-aspect-ratio,16\/9)] relative mb-3.5\">\n    <source type=\"image\/webp\" srcset=\"https:\/\/cdn.mos.cms.futurecdn.net\/iV4HrtCzWUTgR8xb48wFk4-840-80.jpg.webp 840w, https:\/\/cdn.mos.cms.futurecdn.net\/iV4HrtCzWUTgR8xb48wFk4-650-80.jpg.webp 650w, https:\/\/cdn.mos.cms.futurecdn.net\/iV4HrtCzWUTgR8xb48wFk4-500-80.jpg.webp 500w, https:\/\/cdn.mos.cms.futurecdn.net\/iV4HrtCzWUTgR8xb48wFk4-450-80.jpg.webp 450w, https:\/\/cdn.mos.cms.futurecdn.net\/iV4HrtCzWUTgR8xb48wFk4-320-80.jpg.webp 320w\" sizes=\"(min-width: 900px) 925px, (min-width: 700px) 450px, calc(100vw - 48px)\" \/><\/div>\n<p><span class=\"custom-subheading-styles\">Training<\/span><span class=\"text-base text-black font-bold mx-0 my-2.5 p-0 block custom-text-styles\">Zwift reveals higher subscription tier with AI coach, adaptive training plans and real-world video<\/span><\/div>\n<div class=\"relative recirc-feed sponsored-card min-h-[250px]\" data-recirc-id=\"article-river-stacked-ads:native-cards\" data-mrf-recirculation=\"article-river-ads\" data-nosnippet data-ad-slot-path=\"feed-sponsored-post\" data-attribute-device=\"all\">\n<div class=\"max-w-full sponsored-post--placeholder animate-pulse\">\n<div class=\"relative!\"><span class=\"text-base text-black font-bold mx-0 my-2.5 p-0 block bg-gray-100\">\u00a0<br \/>\u00a0<\/span><\/div>\n<\/div>\n<\/div>\n<div>\n<div class=\"aspect-[var(--img-listing-aspect-ratio,16\/9)] relative mb-3.5\">\n    <source type=\"image\/webp\" srcset=\"https:\/\/cdn.mos.cms.futurecdn.net\/YBHichqmEYXX9VoRbx6fff-840-80.jpg.webp 840w, https:\/\/cdn.mos.cms.futurecdn.net\/YBHichqmEYXX9VoRbx6fff-650-80.jpg.webp 650w, https:\/\/cdn.mos.cms.futurecdn.net\/YBHichqmEYXX9VoRbx6fff-500-80.jpg.webp 500w, https:\/\/cdn.mos.cms.futurecdn.net\/YBHichqmEYXX9VoRbx6fff-450-80.jpg.webp 450w, https:\/\/cdn.mos.cms.futurecdn.net\/YBHichqmEYXX9VoRbx6fff-320-80.jpg.webp 320w\" sizes=\"(min-width: 900px) 925px, (min-width: 700px) 450px, calc(100vw - 48px)\" \/><br \/>\n    <source type=\"image\/webp\" srcset=\"https:\/\/cdn.mos.cms.futurecdn.net\/jorsDMGQatsjhfmJg4omCc-200-100.png.webp\" \/><\/div>\n<p><span class=\"custom-subheading-styles\">Training<\/span><span class=\"text-base text-black font-bold mx-0 my-2.5 p-0 block custom-text-styles\">Indoor cycling setup checklist &#8211; How to optimise your indoor training space<\/span><\/div>\n<div class=\"relative recirc-feed sponsored-card min-h-[250px]\" data-recirc-id=\"article-river-stacked-ads:native-cards\" data-mrf-recirculation=\"article-river-ads\" data-nosnippet data-ad-slot-path=\"feed-sponsored-post\" data-attribute-device=\"all\">\n<div class=\"max-w-full sponsored-post--placeholder animate-pulse\">\n<div class=\"relative!\"><span class=\"text-base text-black font-bold mx-0 my-2.5 p-0 block bg-gray-100\">\u00a0<br \/>\u00a0<\/span><\/div>\n<\/div>\n<\/div>\n<div>\n<div class=\"aspect-[var(--img-listing-aspect-ratio,16\/9)] relative mb-3.5\">\n    <source type=\"image\/webp\" srcset=\"https:\/\/cdn.mos.cms.futurecdn.net\/Xvnx6YDNeXCDDEbgJRpCPV-840-80.jpg.webp 840w, https:\/\/cdn.mos.cms.futurecdn.net\/Xvnx6YDNeXCDDEbgJRpCPV-650-80.jpg.webp 650w, https:\/\/cdn.mos.cms.futurecdn.net\/Xvnx6YDNeXCDDEbgJRpCPV-500-80.jpg.webp 500w, https:\/\/cdn.mos.cms.futurecdn.net\/Xvnx6YDNeXCDDEbgJRpCPV-450-80.jpg.webp 450w, https:\/\/cdn.mos.cms.futurecdn.net\/Xvnx6YDNeXCDDEbgJRpCPV-320-80.jpg.webp 320w\" sizes=\"(min-width: 900px) 925px, (min-width: 700px) 450px, calc(100vw - 48px)\" \/><br \/>\n    <source type=\"image\/webp\" srcset=\"https:\/\/cdn.mos.cms.futurecdn.net\/jorsDMGQatsjhfmJg4omCc-200-100.png.webp\" \/><\/div>\n<p><span class=\"custom-subheading-styles\">Training<\/span><span class=\"text-base text-black font-bold mx-0 my-2.5 p-0 block custom-text-styles\">It&#8217;s indoor cycling week at Cyclingnews<\/span><\/div>\n<div class=\"relative recirc-feed sponsored-card min-h-[250px]\" data-recirc-id=\"article-river-stacked-ads:native-cards\" data-mrf-recirculation=\"article-river-ads\" data-nosnippet data-ad-slot-path=\"feed-sponsored-post\" data-attribute-device=\"all\">\n<div class=\"max-w-full sponsored-post--placeholder animate-pulse\">\n<div class=\"relative!\"><span class=\"text-base text-black font-bold mx-0 my-2.5 p-0 block bg-gray-100\">\u00a0<br \/>\u00a0<\/span><\/div>\n<\/div>\n<\/div>\n<div>\n<div class=\"aspect-[var(--img-listing-aspect-ratio,16\/9)] relative mb-3.5\">\n    <source type=\"image\/webp\" srcset=\"https:\/\/cdn.mos.cms.futurecdn.net\/N4P8e3mRbKfvLFnZHihRxg-840-80.png.webp 840w, https:\/\/cdn.mos.cms.futurecdn.net\/N4P8e3mRbKfvLFnZHihRxg-650-80.png.webp 650w, https:\/\/cdn.mos.cms.futurecdn.net\/N4P8e3mRbKfvLFnZHihRxg-500-80.png.webp 500w, https:\/\/cdn.mos.cms.futurecdn.net\/N4P8e3mRbKfvLFnZHihRxg-450-80.png.webp 450w, https:\/\/cdn.mos.cms.futurecdn.net\/N4P8e3mRbKfvLFnZHihRxg-320-80.png.webp 320w\" sizes=\"(min-width: 900px) 925px, (min-width: 700px) 450px, calc(100vw - 48px)\" \/><\/div>\n<p><span class=\"custom-subheading-styles\">Training<\/span><span class=\"text-base text-black font-bold mx-0 my-2.5 p-0 block custom-text-styles\">The indoor cycling app scene is evolving, so what options are currently out there and do they challenge Zwift&#8217;s dominance?<\/span><\/div>\n<div class=\"relative recirc-feed sponsored-card min-h-[250px]\" data-recirc-id=\"article-river-stacked-ads:native-cards\" data-mrf-recirculation=\"article-river-ads\" data-nosnippet data-ad-slot-path=\"feed-sponsored-post\" data-attribute-device=\"all\">\n<div class=\"max-w-full sponsored-post--placeholder animate-pulse\">\n<div class=\"relative!\"><span class=\"text-base text-black font-bold mx-0 my-2.5 p-0 block bg-gray-100\">\u00a0<br \/>\u00a0<\/span><\/div>\n<\/div>\n<\/div>\n<div>\n<div class=\"aspect-[var(--img-listing-aspect-ratio,16\/9)] relative mb-3.5\">\n    <source type=\"image\/webp\" srcset=\"https:\/\/cdn.mos.cms.futurecdn.net\/KEAHW6hcGZkvaEd9zj8QxU-840-80.png.webp 840w, https:\/\/cdn.mos.cms.futurecdn.net\/KEAHW6hcGZkvaEd9zj8QxU-650-80.png.webp 650w, https:\/\/cdn.mos.cms.futurecdn.net\/KEAHW6hcGZkvaEd9zj8QxU-500-80.png.webp 500w, https:\/\/cdn.mos.cms.futurecdn.net\/KEAHW6hcGZkvaEd9zj8QxU-450-80.png.webp 450w, https:\/\/cdn.mos.cms.futurecdn.net\/KEAHW6hcGZkvaEd9zj8QxU-320-80.png.webp 320w\" sizes=\"(min-width: 900px) 925px, (min-width: 700px) 450px, calc(100vw - 48px)\" \/><\/div>\n<p><span class=\"custom-subheading-styles\">Training<\/span><span class=\"text-base text-black font-bold mx-0 my-2.5 p-0 block custom-text-styles\">The 5 training metrics you\u2019re forgetting to pay attention to that could unlock your performance<\/span><\/div>\n<div class=\"relative recirc-feed sponsored-card min-h-[250px]\" data-recirc-id=\"article-river-stacked-ads:native-cards\" data-mrf-recirculation=\"article-river-ads\" data-nosnippet data-ad-slot-path=\"feed-sponsored-post\" data-attribute-device=\"all\">\n<div class=\"max-w-full sponsored-post--placeholder animate-pulse\">\n<div class=\"relative!\"><span class=\"text-base text-black font-bold mx-0 my-2.5 p-0 block bg-gray-100\">\u00a0<br \/>\u00a0<\/span><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/aside>\n<aside class=\"w-full\" data-nosnippet data-mrf-recirculation=\"article-river-stacked\">\n<div data-recirc-id=\"article-river-stacked-solr:latest-articletype\">\n<div class=\"text-white py-4 px-3 mb-4 bg-[#333] uppercase font-bold custom-header-styles\">Latest in Features<\/div>\n<div class=\"grid grid-cols-1 gap-4 mt-4 mb-5\">\n<div>\n<div class=\"aspect-[var(--img-listing-aspect-ratio,16\/9)] relative mb-3.5\">\n    <source type=\"image\/webp\" srcset=\"https:\/\/cdn.mos.cms.futurecdn.net\/zynmugmNnNmAP9st9Uyr5Z-840-80.jpg.webp 840w, https:\/\/cdn.mos.cms.futurecdn.net\/zynmugmNnNmAP9st9Uyr5Z-650-80.jpg.webp 650w, https:\/\/cdn.mos.cms.futurecdn.net\/zynmugmNnNmAP9st9Uyr5Z-500-80.jpg.webp 500w, https:\/\/cdn.mos.cms.futurecdn.net\/zynmugmNnNmAP9st9Uyr5Z-450-80.jpg.webp 450w, https:\/\/cdn.mos.cms.futurecdn.net\/zynmugmNnNmAP9st9Uyr5Z-320-80.jpg.webp 320w\" sizes=\"(min-width: 900px) 925px, (min-width: 700px) 450px, calc(100vw - 48px)\" \/><\/div>\n<p><span class=\"custom-subheading-styles\">Bikes<\/span><span class=\"text-base text-black font-bold mx-0 my-2.5 p-0 block custom-text-styles\">Early access: Watch our video review of the new Argon 18 Nitrogen Pro before anyone else<\/span><\/div>\n<div class=\"relative recirc-feed sponsored-card min-h-[250px]\" data-recirc-id=\"article-river-stacked-ads:native-cards\" data-mrf-recirculation=\"article-river-ads\" data-nosnippet data-ad-slot-path=\"feed-sponsored-post\" data-attribute-device=\"all\">\n<div class=\"max-w-full sponsored-post--placeholder animate-pulse\">\n<div class=\"relative!\"><span class=\"text-base text-black font-bold mx-0 my-2.5 p-0 block bg-gray-100\">\u00a0<br \/>\u00a0<\/span><\/div>\n<\/div>\n<\/div>\n<div>\n<div class=\"aspect-[var(--img-listing-aspect-ratio,16\/9)] relative mb-3.5\">\n    <source type=\"image\/webp\" srcset=\"https:\/\/cdn.mos.cms.futurecdn.net\/zpRx98Pkeek5sU4Xh6yhuV-840-80.jpg.webp 840w, https:\/\/cdn.mos.cms.futurecdn.net\/zpRx98Pkeek5sU4Xh6yhuV-650-80.jpg.webp 650w, https:\/\/cdn.mos.cms.futurecdn.net\/zpRx98Pkeek5sU4Xh6yhuV-500-80.jpg.webp 500w, https:\/\/cdn.mos.cms.futurecdn.net\/zpRx98Pkeek5sU4Xh6yhuV-450-80.jpg.webp 450w, https:\/\/cdn.mos.cms.futurecdn.net\/zpRx98Pkeek5sU4Xh6yhuV-320-80.jpg.webp 320w\" sizes=\"(min-width: 900px) 925px, (min-width: 700px) 450px, calc(100vw - 48px)\" \/><\/div>\n<p><span class=\"custom-subheading-styles\">Teams &amp; Riders<\/span><span class=\"text-base text-black font-bold mx-0 my-2.5 p-0 block custom-text-styles\">Who will actually ride the Giro d\u2019Italia in 2027? Analysing the choices facing Poga\u010dar, Vingegaard, Seixas, Evenepoel, Del Toro and more<\/span><\/div>\n<div class=\"relative recirc-feed sponsored-card min-h-[250px]\" data-recirc-id=\"article-river-stacked-ads:native-cards\" data-mrf-recirculation=\"article-river-ads\" data-nosnippet data-ad-slot-path=\"feed-sponsored-post\" data-attribute-device=\"all\">\n<div class=\"max-w-full sponsored-post--placeholder animate-pulse\">\n<div class=\"relative!\"><span class=\"text-base text-black font-bold mx-0 my-2.5 p-0 block bg-gray-100\">\u00a0<br \/>\u00a0<\/span><\/div>\n<\/div>\n<\/div>\n<div>\n<div class=\"aspect-[var(--img-listing-aspect-ratio,16\/9)] relative mb-3.5\">\n    <source type=\"image\/webp\" srcset=\"https:\/\/cdn.mos.cms.futurecdn.net\/ALD3tNadfHfKZfQG9XuyAV-840-80.jpg.webp 840w, https:\/\/cdn.mos.cms.futurecdn.net\/ALD3tNadfHfKZfQG9XuyAV-650-80.jpg.webp 650w, https:\/\/cdn.mos.cms.futurecdn.net\/ALD3tNadfHfKZfQG9XuyAV-500-80.jpg.webp 500w, https:\/\/cdn.mos.cms.futurecdn.net\/ALD3tNadfHfKZfQG9XuyAV-450-80.jpg.webp 450w, https:\/\/cdn.mos.cms.futurecdn.net\/ALD3tNadfHfKZfQG9XuyAV-320-80.jpg.webp 320w\" sizes=\"(min-width: 900px) 925px, (min-width: 700px) 450px, calc(100vw - 48px)\" \/><\/div>\n<p><span class=\"custom-subheading-styles\">Racing<\/span><span class=\"text-base text-black font-bold mx-0 my-2.5 p-0 block custom-text-styles\">The Giro d&#8217;Italia&#8217;s most feared climb \u2013 A closer look at the mighty Monte Zoncolan ahead of its return in 2027<\/span><\/div>\n<div class=\"relative recirc-feed sponsored-card min-h-[250px]\" data-recirc-id=\"article-river-stacked-ads:native-cards\" data-mrf-recirculation=\"article-river-ads\" data-nosnippet data-ad-slot-path=\"feed-sponsored-post\" data-attribute-device=\"all\">\n<div class=\"max-w-full sponsored-post--placeholder animate-pulse\">\n<div class=\"relative!\"><span class=\"text-base text-black font-bold mx-0 my-2.5 p-0 block bg-gray-100\">\u00a0<br \/>\u00a0<\/span><\/div>\n<\/div>\n<\/div>\n<div>\n<div class=\"aspect-[var(--img-listing-aspect-ratio,16\/9)] relative mb-3.5\">\n    <source type=\"image\/webp\" srcset=\"https:\/\/cdn.mos.cms.futurecdn.net\/bedm7DKwLWbRuJYmmRKMzc-840-80.jpg.webp 840w, https:\/\/cdn.mos.cms.futurecdn.net\/bedm7DKwLWbRuJYmmRKMzc-650-80.jpg.webp 650w, https:\/\/cdn.mos.cms.futurecdn.net\/bedm7DKwLWbRuJYmmRKMzc-500-80.jpg.webp 500w, https:\/\/cdn.mos.cms.futurecdn.net\/bedm7DKwLWbRuJYmmRKMzc-450-80.jpg.webp 450w, https:\/\/cdn.mos.cms.futurecdn.net\/bedm7DKwLWbRuJYmmRKMzc-320-80.jpg.webp 320w\" sizes=\"(min-width: 900px) 925px, (min-width: 700px) 450px, calc(100vw - 48px)\" \/><\/div>\n<p><span class=\"custom-subheading-styles\">Women&#8217;s Cycling<\/span><span class=\"text-base text-black font-bold mx-0 my-2.5 p-0 block custom-text-styles\">Turned up to 11 \u2013 The 2027 Giro d\u2019Italia Women route is tough, but it risks producing a race without crucial jeopardy<\/span><\/div>\n<div class=\"relative recirc-feed sponsored-card min-h-[250px]\" data-recirc-id=\"article-river-stacked-ads:native-cards\" data-mrf-recirculation=\"article-river-ads\" data-nosnippet data-ad-slot-path=\"feed-sponsored-post\" data-attribute-device=\"all\">\n<div class=\"max-w-full sponsored-post--placeholder animate-pulse\">\n<div class=\"relative!\"><span class=\"text-base text-black font-bold mx-0 my-2.5 p-0 block bg-gray-100\">\u00a0<br \/>\u00a0<\/span><\/div>\n<\/div>\n<\/div>\n<div>\n<div class=\"aspect-[var(--img-listing-aspect-ratio,16\/9)] relative mb-3.5\">\n    <source type=\"image\/webp\" srcset=\"https:\/\/cdn.mos.cms.futurecdn.net\/37PhNQZUbY6GgTpHTL7AbZ-840-80.jpg.webp 840w, https:\/\/cdn.mos.cms.futurecdn.net\/37PhNQZUbY6GgTpHTL7AbZ-650-80.jpg.webp 650w, https:\/\/cdn.mos.cms.futurecdn.net\/37PhNQZUbY6GgTpHTL7AbZ-500-80.jpg.webp 500w, https:\/\/cdn.mos.cms.futurecdn.net\/37PhNQZUbY6GgTpHTL7AbZ-450-80.jpg.webp 450w, https:\/\/cdn.mos.cms.futurecdn.net\/37PhNQZUbY6GgTpHTL7AbZ-320-80.jpg.webp 320w\" sizes=\"(min-width: 900px) 925px, (min-width: 700px) 450px, calc(100vw - 48px)\" \/><\/div>\n<p><span class=\"custom-subheading-styles\">Women&#8217;s Cycling<\/span><span class=\"text-base text-black font-bold mx-0 my-2.5 p-0 block custom-text-styles\">&#8216;I felt quite lost and desperate&#8217; \u2013 How Ashleigh Moolman Pasio re-wrote the ending of her 17-year career, and how she&#8217;s re-writing the future for African cyclists<\/span><\/div>\n<div class=\"relative recirc-feed sponsored-card min-h-[250px]\" data-recirc-id=\"article-river-stacked-ads:native-cards\" data-mrf-recirculation=\"article-river-ads\" data-nosnippet data-ad-slot-path=\"feed-sponsored-post\" data-attribute-device=\"all\">\n<div class=\"max-w-full sponsored-post--placeholder animate-pulse\">\n<div class=\"relative!\"><span class=\"text-base text-black font-bold mx-0 my-2.5 p-0 block bg-gray-100\">\u00a0<br \/>\u00a0<\/span><\/div>\n<\/div>\n<\/div>\n<div>\n<div class=\"aspect-[var(--img-listing-aspect-ratio,16\/9)] relative mb-3.5\">\n    <source type=\"image\/webp\" srcset=\"https:\/\/cdn.mos.cms.futurecdn.net\/hAA2edDJG8qUtHcQr4TvkU-840-80.png.webp 840w, https:\/\/cdn.mos.cms.futurecdn.net\/hAA2edDJG8qUtHcQr4TvkU-650-80.png.webp 650w, https:\/\/cdn.mos.cms.futurecdn.net\/hAA2edDJG8qUtHcQr4TvkU-500-80.png.webp 500w, https:\/\/cdn.mos.cms.futurecdn.net\/hAA2edDJG8qUtHcQr4TvkU-450-80.png.webp 450w, https:\/\/cdn.mos.cms.futurecdn.net\/hAA2edDJG8qUtHcQr4TvkU-320-80.png.webp 320w\" sizes=\"(min-width: 900px) 925px, (min-width: 700px) 450px, calc(100vw - 48px)\" \/><\/div>\n<p><span class=\"custom-subheading-styles\">Road Bikes<\/span><span class=\"text-base text-black font-bold mx-0 my-2.5 p-0 block custom-text-styles\">Zero to hero? Wind tunnel testing the new Look 795 Blade RS<\/span><\/div>\n<div class=\"relative recirc-feed sponsored-card min-h-[250px]\" data-recirc-id=\"article-river-stacked-ads:native-cards\" data-mrf-recirculation=\"article-river-ads\" data-nosnippet data-ad-slot-path=\"feed-sponsored-post\" data-attribute-device=\"all\">\n<div class=\"max-w-full sponsored-post--placeholder animate-pulse\">\n<div class=\"relative!\"><span class=\"text-base text-black font-bold mx-0 my-2.5 p-0 block bg-gray-100\">\u00a0<br \/>\u00a0<\/span><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/aside>\n<\/section>\n<\/div>\n<\/div>\n<\/div>\n<div id=\"widgetArea17\" class=\"widget-area md:basis-1\/3 widget-area-g-md-vp-1-3 widget-area-g-lg-vp-1-3 widget-area-g-xl-vp-1-3 page-widget-area-17\">\n<div data-widget-type=\"dynamic\" id=\"popular-data\" class=\"clear-both widget widget-dynamic widget-popular-data widget-dynamic-popular-data widget-dynamic-fter-popular-box\">\n<div class=\"wdn-fte-pb pos-relative space-t20\n\"><\/p>\n<div class=\"slice-container popular-box-slice\">\n<section class=\"popular-box\" data-component-name=\"Slice:PopularBox\">\n<div class=\"popular-box__label\">\n<div class=\"popular-box__label__tab popular-box__label__tab--active\" role=\"heading\">\nLATEST ARTICLES\n<\/div>\n<\/div>\n<ol class=\"popular-box__articles-list popular-box__articles-list--active\">\n<li class=\"popular-box__article-list\">\n<div class=\"popular-box__article-list__container\">\n<div class=\"popular-box__article-list__image-wrapper\">\n<div>\n<source type=\"image\/webp\" srcset=\"https:\/\/cdn.mos.cms.futurecdn.net\/wyn7PHuveeWpE4A4zf3fE5-1280-80.jpg.webp 1280w, https:\/\/cdn.mos.cms.futurecdn.net\/wyn7PHuveeWpE4A4zf3fE5-720-80.jpg.webp 720w, https:\/\/cdn.mos.cms.futurecdn.net\/wyn7PHuveeWpE4A4zf3fE5-640-80.jpg.webp 640w, https:\/\/cdn.mos.cms.futurecdn.net\/wyn7PHuveeWpE4A4zf3fE5-320-80.jpg.webp 320w\" sizes=\"99vw\" \/><\/div>\n<\/div>\n<div class=\"popular-box__article-list__content\">\n<div class=\"popular-box__article-list__number-text\">1<\/div>\n<div class=\"popular-box__article-list__heading\">\n<p>Michael Vanthourenhout fined for post-race clash with Cameron Mason at Middelkerke cyclo-cross<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/li>\n<li class=\"popular-box__article-list\">\n<div class=\"popular-box__article-list__container\">\n<div class=\"popular-box__article-list__content\">\n<div class=\"popular-box__article-list__number-text\">2<\/div>\n<div class=\"popular-box__article-list__heading\">\n<p>TrainerRoad vs TrainingPeaks: Which is the best app to support your structured training?<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/li>\n<li class=\"popular-box__article-list\">\n<div class=\"popular-box__article-list__container\">\n<div class=\"popular-box__article-list__content\">\n<div class=\"popular-box__article-list__number-text\">3<\/div>\n<div class=\"popular-box__article-list__heading\">\n<p>&#8216;Tom&#8217;s pace is pretty mind-blowing&#8217; \u2013 Tom Pidcock swaps two wheels for four to tackle fearsome N\u00fcrburgring Nordschleife race track in Porsche 911<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/li>\n<li class=\"popular-box__article-list\">\n<div class=\"popular-box__article-list__container\">\n<div class=\"popular-box__article-list__content\">\n<div class=\"popular-box__article-list__number-text\">4<\/div>\n<div class=\"popular-box__article-list__heading\">\n<p>How to turn an AI into your personal coach: Goal-specific prompts and setup instructions<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/li>\n<li class=\"popular-box__article-list\">\n<div class=\"popular-box__article-list__container\">\n<div class=\"popular-box__article-list__content\">\n<div class=\"popular-box__article-list__number-text\">5<\/div>\n<div class=\"popular-box__article-list__heading\">\n<p>&#8216;I felt quite lost and desperate&#8217; \u2013 How Ashleigh Moolman Pasio re-wrote the ending of her 17-year career, and how she&#8217;s re-writing the future for African cyclists<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/li>\n<\/ol>\n<\/section>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/article>\n<div class=\"news-article\">\n<header data-component-name=\"Article:Hero\">\n<nav data-component-name=\"UI:Breadcrumbs\" aria-label=\"Breadcrumbs\" class=\"type-breadcrumbs-sm md:type-breadcrumbs-md mb-5\" data-palette=\"brand\">\n<ol class=\"inline-flex flex-wrap items-center align-top gap-1\">\n<li class=\"inline-flex items-center gap-1\">\nCycling Culture<\/p>\n<\/li>\n<li class=\"inline-flex items-center gap-1\">\nTraining\n<\/li>\n<\/ol>\n<\/nav>\n<h1>How to turn an AI into your personal coach: Goal-specific prompts and setup instructions<\/h1>\n<div class=\"byline-social\">\n<div class=\"vds-byline-block flex flex-row flex-nowrap my-1.5 gap-2 text-left items-start justify-start\" data-component-name=\"Article:BylineBlock\">\n<p>Features<\/p>\n<div class=\"my-auto vds-simple-byline\"><span class=\"inline-block vds-author\"><br \/>\nBy<br \/>\nTim Perkin <\/span><\/p>\n<div class=\"flex gap-1 vds-byline-with-avatar__meta\"><span class=\"vds-date block font-normal tracking-normal normal-case text-xs\"><br \/>\nPublished<br \/>\n<time data-component-name=\"UI:DateTime\" datetime=\"2026-11-06T11:29:10Z\" class=\"relative-date\"><br \/>\n6 November 2026<br \/>\n<\/time><\/span><\/div>\n<\/div>\n<\/div>\n<p class=\"strapline\">Would you use AI to analyse your historical riding data? <\/p>\n<\/div>\n<aside class=\"text-gray-700 flex items-center mx-0 my-5 p-0 justify-start text-left\" id=\"affiliate-disclaimer\" data-component-name=\"AffiliateDisclaimer\" data-hawk-message=\"Affiliate disclaimer removed because hawk deemed there are no affiliate links on this page\">\n<p class=\"text-[color:var(--affiliate-disclaimer--text-color,inherit)] mb-2 text-[length:var(--affiliate-disclaimer--font-size,0.75rem)] leading-[18px] md:text-[13px] [&amp;&gt;a]:text-inherit [&amp;&gt;a]:underline\">\nWhen you purchase through links on our site, we may earn an affiliate commission. Here\u2019s how it works.\n<\/p>\n<\/aside>\n<\/header>\n<\/div>\n<div id=\"article-body\" class=\"text-copy bodyCopy auto paywall-locker\">\n<div data-analytics-id=\"utility-bar\" id=\"utility-bar\" class=\"font-ui-heading flex justify-between items-center py-2 border-t border-b border-gray-300 border-solid mb-5 mx-auto\" data-component-name=\"UtilityBar\" data-mrf-recirculation=\"utility-bar\">\n<div class=\"flex gap-2 text-[#333] subcontainer\"><span data-component-name=\"UI:Tooltip\" class=\"group relative inline-flex\"><\/p>\n<div data-component-name=\"Social:Dropdown\" role=\"menu\" id=\"utilitybar__dropdown--share\" aria-labelledby=\"utilitybar__button--share\" class=\"absolute left-0 top-full w-44 bg-white rounded-md shadow-md border border-neutral-200 z-[9996] list-none m-0 py-2 px-3 border-solid\">\n<ul class=\"m-0!\">\n<li class=\"!p-0 !m-0 list-none border-b border-gray-200 border-solid\">\n<li class=\"!p-0 !m-0 list-none border-b border-gray-200 border-solid\">\n<p>Facebook<\/p>\n<\/li>\n<li class=\"!p-0 !m-0 list-none border-b border-gray-200 border-solid\">\n<p>X<\/p>\n<\/li>\n<li class=\"!p-0 !m-0 list-none border-b border-gray-200 border-solid\">\n<p>Pinterest<\/p>\n<\/li>\n<li class=\"!p-0 !m-0 list-none border-b border-gray-200 border-solid\">\n<p>Email<\/p>\n<\/li>\n<\/ul>\n<\/div>\n<p><span class=\"pointer-events-none absolute z-10 opacity-0 transition-opacity duration-fast-02 ease-enter group-hover:opacity-100 group-has-[:focus-visible]:opacity-100 left-1\/2 bottom-full mb-1.5 -translate-x-1\/2\" aria-hidden=\"true\"><\/p>\n<div class=\"inline-flex flex-col items-center\" data-palette=\"brand\">\n<div class=\"block w-max max-w-xs px-2.5 py-1.5 rounded-lg bg-surface-brand-black text-on-brand-black type-tooltip\"><span class=\"line-clamp-2\">Share this article<\/span><\/div>\n<\/div>\n<p><\/span><\/span><span data-component-name=\"UI:Tooltip\" class=\"group relative inline-flex\"><span class=\"ml-1 inline-flex h-5 px-2 shrink-0 items-center justify-center self-center overflow-hidden whitespace-nowrap rounded-[10px] bg-primary-500 text-[11px] leading-none font-ui-heading font-semibold text-white\">0<\/span><span class=\"pointer-events-none absolute z-10 opacity-0 transition-opacity duration-fast-02 ease-enter group-hover:opacity-100 group-has-[:focus-visible]:opacity-100 left-1\/2 bottom-full mb-1.5 -translate-x-1\/2\" aria-hidden=\"true\"><\/p>\n<div class=\"inline-flex flex-col items-center\" data-palette=\"brand\">\n<div class=\"block w-max max-w-xs px-2.5 py-1.5 rounded-lg bg-surface-brand-black text-on-brand-black type-tooltip\"><span class=\"line-clamp-2\">Join the conversation<\/span><\/div>\n<\/div>\n<p><\/span><\/span><\/div>\n<div class=\"flex gap-2 text-[#333] subcontainer\"><span data-component-name=\"UI:Tooltip\" class=\"group relative inline-flex\"><\/p>\n<p>Follow us<\/p>\n<p><span class=\"pointer-events-none absolute z-10 opacity-0 transition-opacity duration-fast-02 ease-enter group-hover:opacity-100 group-has-[:focus-visible]:opacity-100 left-1\/2 bottom-full mb-1.5 -translate-x-1\/2\" aria-hidden=\"true\"><\/p>\n<div class=\"inline-flex flex-col items-center\" data-palette=\"brand\">\n<div class=\"block w-max max-w-xs px-2.5 py-1.5 rounded-lg bg-surface-brand-black text-on-brand-black type-tooltip\"><span class=\"line-clamp-2\">Add us as a preferred source on Google<\/span><\/div>\n<\/div>\n<p><\/span><\/span><span data-component-name=\"UI:Tooltip\" class=\"group relative inline-flex\"><span class=\"pointer-events-none absolute z-10 opacity-0 transition-opacity duration-fast-02 ease-enter group-hover:opacity-100 group-has-[:focus-visible]:opacity-100 left-1\/2 bottom-full mb-1.5 -translate-x-1\/2\" aria-hidden=\"true\"><\/p>\n<div class=\"inline-flex flex-col items-center\" data-palette=\"brand\">\n<div class=\"block w-max max-w-xs px-2.5 py-1.5 rounded-lg bg-surface-brand-black text-on-brand-black type-tooltip\"><span class=\"line-clamp-2\">Subscribe to our newsletter<\/span><\/div>\n<\/div>\n<p><\/span><\/span><\/div>\n<\/div>\n<p id=\"elk-e1ebf8da-d92d-11f1-8780-2d797ea14038\">The world of Artificial Intelligence (AI) is moving so fast that even WorldTour cycling teams are now using it to help understand and interpret riders&#8217; data to aid with training and racing.<\/p>\n<p>For example, Netcompany-Ineos recently announced it would use an AI-based aero testing app next year.<\/p>\n<p id=\"elk-e1ebf8da-d92d-11f1-8780-2d797ea14038-2\" aria-hidden=\"true\" class=\"kiosq-b\">AI use is commonplace now, and cyclists are using it to their advantage. Following suit, I decided to see what AI could do for me.<\/p>\n<div class=\"my-6 w-full overflow-hidden rounded-[10px] lg:my-8\" data-component-name=\"JwPlayer:Carousel\" data-jwp-carousel data-jwp-carousel-payload=\"{&quot;ids&quot;:{&quot;playerID&quot;:&quot;jYDCcabO&quot;,&quot;searchPlaylistID&quot;:&quot;gwjdoYHD&quot;,&quot;divID&quot;:&quot;botr_gwjdoYHD_jYDCcabO_div&quot;,&quot;fallbackPlaylistID&quot;:&quot;gwjdoYHD&quot;,&quot;fallbackDivID&quot;:&quot;botr_gwjdoYHD_jYDCcabO_div&quot;,&quot;key&quot;:&quot;X9\/mXVGac0NphghLH9hZaqWA5d3dhAM\/Ih07grnEyMLjuO2E&quot;,&quot;tintLogo&quot;:true,&quot;useSearchPlaylist&quot;:false,&quot;enabled&quot;:true},&quot;signPostingEnabled&quot;:true,&quot;signPostingLinkEnabled&quot;:true,&quot;waitForAdLoad&quot;:false,&quot;hidePlayerOnDesktop&quot;:false,&quot;hidePlayerOnMobile&quot;:false,&quot;hidePlayerOnTablet&quot;:false}\">\n<div class=\"flex flex-nowrap items-center justify-between gap-3 bg-zinc-900 px-[14px] py-3\" data-jwp-carousel-header>\n<div class=\"flex min-w-0 shrink items-center\"><span class=\"inline-flex items-center gap-1.5 text-sm font-article-heading capitalize leading-5 text-white whitespace-nowrap\"><span class=\"jwp-carousel-title-desktop\">Latest Videos From<\/span><span class=\"jwp-carousel-brand\">Cyclingnews<\/span><\/span><\/div>\n<\/div>\n<div class=\"min-h-[44px] bg-zinc-900 px-[14px] py-3\" data-jwp-carousel-signposting><a class=\"invisible block truncate text-sm font-bold leading-5 text-white underline decoration-solid underline-offset-2\" data-jwp-carousel-signposting-link href target=\"_blank\" rel=\"noopener noreferrer\"><span data-jwp-carousel-signposting-title>Watch full video here: <\/span><\/a><\/div>\n<\/div>\n<p aria-hidden=\"true\" class=\"kiosq-b\">My end goal was for AI to generate a bespoke training plan that could return me to my peak level of fitness, whatever that was. Simple, or so I thought. I wanted to learn about customising an AI training plan based on my own historical data, and improve my skills along the way.<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">The first challenge was choosing a platform. ChatGPT, Claude, Gemini and Microsoft Copilot were all AI assistants that I investigated.<\/p>\n<aside data-component-name=\"Recirculation:ArticleRiver\" data-recirculation-type=\"inline\" data-mrf-recirculation=\"Trending Bar\" data-nosnippet class=\"clear-both pt-2 pb-0 mb-4\"><span class=\"\n            flex\n            after:content-[&apos;&apos;] after:flex-1 after:ml-4 after:my-[0.7rem] after:border-t after:border-solid after:border-t-[#ccc]\n            before:content-[&apos;&apos;] before:flex-1 before:mr-4 before:my-[0.7rem] before:border-t before:border-solid before:border-t-[#ccc]\n            font-article-heading pb-0 text-[length:var(--article-river-title--font-size,1em)] uppercase md:text-[length:var(--article-river-title--font-size,0.875em)] font-bold\n        \"><br \/>\n            You may like<br \/>\n        <\/span><\/p>\n<ul class=\"flex flex-col gap-0 m-0 max-w-full\">\n<li class=\"m-0 list-none border-b border-solid border-[#ededed] py-2\" data-recirculation-id=\"recirculation-card-1\" id=\"recirculation-inline-1\" data-analytics-id=\"recirculation-inline-1\" data-mrf-recirculation=\"recirculation-inline-1\">\n    <source type=\"image\/webp\" srcset=\"https:\/\/cdn.mos.cms.futurecdn.net\/hxXVjkuJPd3h2VM5jFbJ7V-250-80.jpg.webp 250w, https:\/\/cdn.mos.cms.futurecdn.net\/hxXVjkuJPd3h2VM5jFbJ7V-150-80.jpg.webp 150w\" sizes=\"150px\" \/><span class=\"w-full text-base font-[var(--article-river-item--font-weight,500)] font-article-heading line-clamp-3 md:line-clamp-2\">Wahoo CEO talks finances, artificial intelligence and the company&#8217;s &#8216;next big opportunity&#8217;<\/span><\/li>\n<li class=\"m-0 list-none border-b border-solid border-[#ededed] py-2\" data-recirculation-id=\"recirculation-card-2\" id=\"recirculation-inline-2\" data-analytics-id=\"recirculation-inline-2\" data-mrf-recirculation=\"recirculation-inline-2\">\n    <source type=\"image\/webp\" srcset=\"https:\/\/cdn.mos.cms.futurecdn.net\/YBHichqmEYXX9VoRbx6fff-250-80.jpg.webp 250w, https:\/\/cdn.mos.cms.futurecdn.net\/YBHichqmEYXX9VoRbx6fff-150-80.jpg.webp 150w\" sizes=\"150px\" \/><span class=\"w-full text-base font-[var(--article-river-item--font-weight,500)] font-article-heading line-clamp-3 md:line-clamp-2\">Indoor cycling setup checklist &#8211; How to optimise your indoor training space<\/span><\/li>\n<li class=\"m-0 list-none border-b border-solid border-[#ccc] py-2\" data-recirculation-id=\"recirculation-card-3\" id=\"recirculation-inline-3\" data-analytics-id=\"recirculation-inline-3\" data-mrf-recirculation=\"recirculation-inline-3\">\n    <source type=\"image\/webp\" srcset=\"https:\/\/cdn.mos.cms.futurecdn.net\/iDxxugHuxR2SBQoRy8dTh6-250-80.png.webp 250w, https:\/\/cdn.mos.cms.futurecdn.net\/iDxxugHuxR2SBQoRy8dTh6-150-80.png.webp 150w\" sizes=\"150px\" \/><span class=\"w-full text-base font-[var(--article-river-item--font-weight,500)] font-article-heading line-clamp-3 md:line-clamp-2\">&#8216;AI could reverse cycling 2.0&#8217;s gains&#8217; \u2013 Why artificial intelligence could become an anti-doping scientist&#8217;s worst nightmare<\/span><\/li>\n<\/ul>\n<\/aside>\n<p aria-hidden=\"true\" class=\"kiosq-b\">Some AI engines or apps are free, some aren&#8217;t. Free versions limit what you can do and, in this case, how many files you can upload to be analysed. I paid a subscription fee as I was always going to need to use my full training history. After researching the different platforms, I settled on Claude because it could read and analyse my CSV files directly.<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">With Claude chosen, I paid for a subscription and began to see what it could do.<\/p>\n<div id=\"slice-container-newsletterForm-articleInbodyContent-e7z75U5uwa95qJXU4RfGDi\" class=\"slice-container newsletter-inbodyContent-slice newsletterForm-articleInbodyContent-e7z75U5uwa95qJXU4RfGDi slice-container-newsletterForm\">\n<div data-hydrate=\"true\" class=\"newsletter-form__wrapper newsletter-form__wrapper--inbodyContent\">\n<div class=\"newsletter-form__container\">\n<section class=\"newsletter-form__top-bar\">\n<div class=\"newsletter-form__header\">Get The Leadout Newsletter<\/div>\n<\/section>\n<section class=\"newsletter-form__main-section\">\n<p class=\"newsletter-form__strapline\">The latest race content, interviews, features, reviews and expert buying guides, direct to your inbox!<\/p>\n<footer class=\"newsletter-form__footer \">By submitting your information you agree to the Terms &amp; Conditions and Privacy Policy and are aged 16 or over.<\/footer>\n<\/section>\n<\/div>\n<\/div>\n<\/div>\n<p id=\"elk-e1ebf98e-d92d-11f1-8f78-0b274943b86f\" aria-hidden=\"true\" class=\"kiosq-b\">I decided to ask it to build me a 12-week indoor training plan using this simple prompt:<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\"><strong>&#8220;Build me a 12-week indoor cycling training plan of between 7 and 10 hours a week. I can ride 5 times a week, but not on Thursday.&#8221;<\/strong><\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">Claude then produced the plan below for me:<\/p>\n<aside data-component-name=\"Recirculation:ArticleRiver\" data-recirculation-type=\"inline\" data-mrf-recirculation=\"Trending Bar\" data-nosnippet class=\"clear-both pt-2 pb-0 mb-4\"><span class=\"\n            flex\n            after:content-[&apos;&apos;] after:flex-1 after:ml-4 after:my-[0.7rem] after:border-t after:border-solid after:border-t-[#ccc]\n            before:content-[&apos;&apos;] before:flex-1 before:mr-4 before:my-[0.7rem] before:border-t before:border-solid before:border-t-[#ccc]\n            font-article-heading pb-0 text-[length:var(--article-river-title--font-size,1em)] uppercase md:text-[length:var(--article-river-title--font-size,0.875em)] font-bold\n        \"><br \/>\n            What to read next<br \/>\n        <\/span><\/p>\n<ul class=\"flex flex-col gap-0 m-0 max-w-full\">\n<li class=\"m-0 list-none border-b border-solid border-[#ededed] py-2\" data-recirculation-id=\"recirculation-card-1\" id=\"recirculation-inline-2-1\" data-analytics-id=\"recirculation-2-inline-1\" data-mrf-recirculation=\"recirculation-2-inline-1\">\n    <source type=\"image\/webp\" srcset=\"https:\/\/cdn.mos.cms.futurecdn.net\/ecL5h6x9KNXFZT7TPtyrWU-250-80.jpg.webp 250w, https:\/\/cdn.mos.cms.futurecdn.net\/ecL5h6x9KNXFZT7TPtyrWU-150-80.jpg.webp 150w\" sizes=\"150px\" \/><span class=\"w-full text-base font-[var(--article-river-item--font-weight,500)] font-article-heading line-clamp-3 md:line-clamp-2\">TrainerRoad vs TrainingPeaks: Which is the best app to support your structured training?<\/span><\/li>\n<li class=\"m-0 list-none border-b border-solid border-[#ededed] py-2\" data-recirculation-id=\"recirculation-card-2\" id=\"recirculation-inline-2-2\" data-analytics-id=\"recirculation-2-inline-2\" data-mrf-recirculation=\"recirculation-2-inline-2\">\n    <source type=\"image\/webp\" srcset=\"https:\/\/cdn.mos.cms.futurecdn.net\/iV4HrtCzWUTgR8xb48wFk4-250-80.jpg.webp 250w, https:\/\/cdn.mos.cms.futurecdn.net\/iV4HrtCzWUTgR8xb48wFk4-150-80.jpg.webp 150w\" sizes=\"150px\" \/><span class=\"w-full text-base font-[var(--article-river-item--font-weight,500)] font-article-heading line-clamp-3 md:line-clamp-2\">Zwift reveals higher subscription tier with AI coach, adaptive training plans and real-world video<\/span><\/li>\n<li class=\"m-0 list-none border-b border-solid border-[#ccc] py-2\" data-recirculation-id=\"recirculation-card-3\" id=\"recirculation-inline-2-3\" data-analytics-id=\"recirculation-2-inline-3\" data-mrf-recirculation=\"recirculation-2-inline-3\">\n    <source type=\"image\/webp\" srcset=\"https:\/\/cdn.mos.cms.futurecdn.net\/wK9npbGQqwAxNURQH3pbFa-250-80.jpg.webp 250w, https:\/\/cdn.mos.cms.futurecdn.net\/wK9npbGQqwAxNURQH3pbFa-150-80.jpg.webp 150w\" sizes=\"150px\" \/><span class=\"w-full text-base font-[var(--article-river-item--font-weight,500)] font-article-heading line-clamp-3 md:line-clamp-2\">Zwift vs TrainerRoad: An indoor cycling head-to-head<\/span><\/li>\n<\/ul>\n<\/aside>\n<div class=\"slice-container table-wrapper slice-container-table kiosq-b\" data-component-name=\"Slice:Table\" id=\"elk-e1ebfae2-d92d-11f1-8d12-affdf587d182\" aria-hidden=\"true\">\n<div class=\"table__instruction\">\nSwipe to scroll horizontally<\/p>\n<\/div>\n<div class=\"table__container\">\n<table tabindex=\"0\" class=\"table__wrapper table__wrapper--inbodyContent table__wrapper--sticky table__wrapper--divider\">\n<tbody class=\"table__body\">\n<tr class=\"table__body__row\">\n<td class=\"table_body__data\" colspan=\"1\">\n<p><strong>Weeks<\/strong><\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p><strong>Phase <\/strong><\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p><strong>Hours per week <\/strong><\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p><strong>Main work <\/strong><\/p>\n<\/td>\n<\/tr>\n<tr class=\"table__body__row\">\n<td class=\"table_body__data\" colspan=\"1\">\n<p>1-3<\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>Base<\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>7.5 \u2192 8.5 \u2192 9.5<\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>FTP test in Week 1, then sweet spot and tempo<\/p>\n<\/td>\n<\/tr>\n<tr class=\"table__body__row\">\n<td class=\"table_body__data\" colspan=\"1\">\n<p>4<\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>Recovery<\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>7<\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>Easier riding<\/p>\n<\/td>\n<\/tr>\n<tr class=\"table__body__row\">\n<td class=\"table_body__data\" colspan=\"1\">\n<p>5-7<\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>Build<\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>8 \u2192 9 \u2192 10<\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>Threshold and over under intervals<\/p>\n<\/td>\n<\/tr>\n<tr class=\"table__body__row\">\n<td class=\"table_body__data\" colspan=\"1\">\n<p>8<\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>Recovery<\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>7<\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>Easier riding <\/p>\n<\/td>\n<\/tr>\n<tr class=\"table__body__row\">\n<td class=\"table_body__data\" colspan=\"1\">\n<p>9-11<\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>Peak<\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>8.5 \u2192 9.5 \u2192 10<\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>V02 Max intervals with some threshhold<\/p>\n<\/td>\n<\/tr>\n<tr class=\"table__body__row\">\n<td class=\"table_body__data\" colspan=\"1\">\n<p>12<\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>Taper<\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>7<\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>FTP re -test on Saturday<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p id=\"elk-f075d948-d92d-11f1-a3eb-b531ab8303a8\" aria-hidden=\"true\" class=\"kiosq-b\">The plan is perfectly acceptable, but it&#8217;s limited. It offers nothing beyond what you can find in cycling training manuals or on hundreds of websites online.<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">The plan falls short because it is not based on my own data. Without access to my training data, asking AI to build me a plan will always result in something this generic.<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">Granted, you can input parameters such as how many rides you intend to do each week, how many hours you have available for training, and which days suit you best, but beyond that, the output will always be limited.<\/p>\n<figure class=\"van-image-figure inline-layout kiosq-b\" data-bordeaux-image-check id=\"elk-87d48114-d937-11f1-bd8b-8db1b3b10aa9\" aria-hidden=\"true\">\n<div class=\"image-full-width-wrapper\">\n<div class=\"image-widthsetter\">\n<p class=\"vanilla-image-block\">\n<source type=\"image\/webp\" srcset=\"https:\/\/cdn.mos.cms.futurecdn.net\/C5RmA7kZnYPhoRnYCVX3yQ-1200-80.jpg.webp 1200w, https:\/\/cdn.mos.cms.futurecdn.net\/C5RmA7kZnYPhoRnYCVX3yQ-1024-80.jpg.webp 1024w, https:\/\/cdn.mos.cms.futurecdn.net\/C5RmA7kZnYPhoRnYCVX3yQ-970-80.jpg.webp 970w, https:\/\/cdn.mos.cms.futurecdn.net\/C5RmA7kZnYPhoRnYCVX3yQ-650-80.jpg.webp 650w, https:\/\/cdn.mos.cms.futurecdn.net\/C5RmA7kZnYPhoRnYCVX3yQ-480-80.jpg.webp 480w, https:\/\/cdn.mos.cms.futurecdn.net\/C5RmA7kZnYPhoRnYCVX3yQ-320-80.jpg.webp 320w\" sizes=\"(min-width: 1000px) 970px, calc(100vw - 40px)\" \/><\/p>\n<\/div>\n<\/div><figcaption class=\" inline-layout\"><span class=\"credit\">(Image credit: AI generated image)<\/span><\/figcaption><\/figure>\n<h2 id=\"data-is-key-3\" aria-hidden=\"true\" class=\"kiosq-b\">Data is key<\/h2>\n<p id=\"elk-0f7416ac-d92e-11f1-91b6-2106c8d5d488\" aria-hidden=\"true\" class=\"kiosq-b\">To create a bespoke plan and something tailored to my requirements, I realised that I needed to provide AI with my training data. Only with this could AI produce a bespoke plan. And for that, I knew where to go:<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">My Strava account held almost all my training data, and with the functionality to download it, I could then take the relevant files and have AI analyse them and utilise my training and riding history.<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">[Ed. Since undertaking this project, but prior to publishing, Strava launched its MCP connector, allowing direct plugin to AI assistants, enabling the sharing of historic datam, plus future data in perpetuity].<\/p>\n<h2 id=\"a-data-side-quest-3\" aria-hidden=\"true\" class=\"kiosq-b\">A data side quest<\/h2>\n<p id=\"elk-0f741724-d92e-11f1-9fbf-f3fe8ef895af\" aria-hidden=\"true\" class=\"kiosq-b\">However, I had to undertake a slight side quest first. Strava did not have all my data. My early years of training results were held on spreadsheets, so I had to get these uploaded into Strava using a third-party app.<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">I reformatted the spreadsheets got the data uploaded into Strava, using a third-party go between. I then requested my complete set of training data from Strava. An email link soon arrived with a 1.7 GB archive, though I only needed one file from it.<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">The summary file was called &#8220;activities.csv&#8221; and contained enough data to enable AI to produce a tailored plan for me.<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">To download your own data in Strava, go to Settings &gt; My Account &gt; Download or Delete Your Account, then select Request Your Archive. Strava then emails you a link to the data.<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">Only activities.csv is needed, so there&#8217;s no need to upload the whole thing. If you have many years of riding and the file is too large to upload, delete the oldest rows, but keep your best season so the AI can compare against it.<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">A word of caution: activities.csv includes heart-rate data, which is personal health information. I recommend checking your AI platform&#8217;s privacy and data settings before you upload it.<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">Power figures only appear in activities.csv files for rides recorded with a power meter or smart trainer. Without them, the AI&#8217;s FTP estimates and power targets will be much less reliable, so bear this in mind too.<\/p>\n<figure class=\"van-image-figure inline-layout kiosq-b\" data-bordeaux-image-check id=\"elk-7ffa9088-d9c7-11f1-92ea-69ab4345a169\" aria-hidden=\"true\">\n<div class=\"image-full-width-wrapper\">\n<div class=\"image-widthsetter\">\n<p class=\"vanilla-image-block\">\n<source type=\"image\/webp\" srcset=\"https:\/\/cdn.mos.cms.futurecdn.net\/aLBRPfbBK46LRF9xcGMTTQ-1200-80.jpg.webp 1200w, https:\/\/cdn.mos.cms.futurecdn.net\/aLBRPfbBK46LRF9xcGMTTQ-1024-80.jpg.webp 1024w, https:\/\/cdn.mos.cms.futurecdn.net\/aLBRPfbBK46LRF9xcGMTTQ-970-80.jpg.webp 970w, https:\/\/cdn.mos.cms.futurecdn.net\/aLBRPfbBK46LRF9xcGMTTQ-650-80.jpg.webp 650w, https:\/\/cdn.mos.cms.futurecdn.net\/aLBRPfbBK46LRF9xcGMTTQ-480-80.jpg.webp 480w, https:\/\/cdn.mos.cms.futurecdn.net\/aLBRPfbBK46LRF9xcGMTTQ-320-80.jpg.webp 320w\" sizes=\"(min-width: 1000px) 970px, calc(100vw - 40px)\" \/><\/p>\n<\/div>\n<\/div><figcaption class=\" inline-layout\"><span class=\"caption-text\">This is just an AI generated image, but with a simple prompt, you could ask Claude to build you a dashboard that provides similar data at a glance. <\/span><span class=\"credit\">(Image credit: AI generated image)<\/span><\/figcaption><\/figure>\n<h2 id=\"ai-and-prompts-3\" aria-hidden=\"true\" class=\"kiosq-b\">AI and prompts<\/h2>\n<p id=\"elk-0f741788-d92e-11f1-a986-e5135c420428\" aria-hidden=\"true\" class=\"kiosq-b\">The next challenge was writing the correct prompts to finesse my training programme. My first attempt was too simple. After some research, I learned that a good prompt needs four key components.<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">The first component is the persona, which assigns the AI a specific role, for example: &#8220;<em>You are an elite cycling WorldTour coach<\/em>.&#8221;<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">The second component is the specific task, such as &#8220;<em>Using my uploaded data, analyse and assess my current level and create me a 12-week training plan that gets me to and surpasses my previous best cycling fitness levels<\/em>.&#8221;<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">The third component is the context: including any important details, which in this case were the days I could train and for how many hours.<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">The fourth and final component is the format, or how I would like the answer to look.<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">The prompt I decided to use to build my specific training plan was as follows:<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">&#8220;<em>You are an elite cycling WorldTour coach. Using my uploaded data in the spreadsheet only, analyse and assess my current level and create a 12-week training plan that gets me to and surpasses my previous best cycling fitness levels.<\/em>&#8220;<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">&#8220;<em>I have 10 hours per week for training and can ride 5 times a week, with the exception of Thursday<\/em>.&#8221;<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">&#8220;<em>Sessions in the week must not last longer than 90 minutes. I would like a detailed session plan, detailing how long each session should last, power output and heart rate.<\/em>&#8220;<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">I also find that going to a separate Claude chat window and asking it to suggest its own prompt is a good way to learn the phrasing and terminology that Claude itself understands. You can iterate on its suggestion more easily than create your own from scratch, and the wording is often less vague than anything I would generate myself.<\/p>\n<figure class=\"van-image-figure inline-layout kiosq-b\" data-bordeaux-image-check id=\"elk-3579941c-d9c9-11f1-823c-1919b391dfdf\" aria-hidden=\"true\">\n<div class=\"image-full-width-wrapper\">\n<div class=\"image-widthsetter\">\n<p class=\"vanilla-image-block\">\n<source type=\"image\/webp\" srcset=\"https:\/\/cdn.mos.cms.futurecdn.net\/L9WFzGhvb4ctdzAbiJYtYA-1200-80.jpg.webp 1200w, https:\/\/cdn.mos.cms.futurecdn.net\/L9WFzGhvb4ctdzAbiJYtYA-1024-80.jpg.webp 1024w, https:\/\/cdn.mos.cms.futurecdn.net\/L9WFzGhvb4ctdzAbiJYtYA-970-80.jpg.webp 970w, https:\/\/cdn.mos.cms.futurecdn.net\/L9WFzGhvb4ctdzAbiJYtYA-650-80.jpg.webp 650w, https:\/\/cdn.mos.cms.futurecdn.net\/L9WFzGhvb4ctdzAbiJYtYA-480-80.jpg.webp 480w, https:\/\/cdn.mos.cms.futurecdn.net\/L9WFzGhvb4ctdzAbiJYtYA-320-80.jpg.webp 320w\" sizes=\"(min-width: 1000px) 970px, calc(100vw - 40px)\" \/><\/p>\n<\/div>\n<\/div><figcaption class=\" inline-layout\"><span class=\"credit\">(Image credit: AI generated image)<\/span><\/figcaption><\/figure>\n<p id=\"elk-3fa6719e-d9c9-11f1-b02c-dd55adf4e866\" aria-hidden=\"true\" class=\"kiosq-b\">I later refined these prompts into a shorter version that you can reuse:<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">&#8220;<em>You are an elite WorldTour cycling coach. Using only the rides in my attached Strava activities.csv, assess my current level against my all-time best (estimated FTP, and best 20-minute and 60-minute power), then create a 12-week plan starting [date] to beat it.&#8221;<\/em><\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\"><em>&#8220;I have 10 hours a week over 5 rides. I can&#8217;t ride on Thursday or [second rest day], and weekday rides must be 90 minutes or less. Give me my power and heart-rate zones, then a table for each week showing day, duration, session, target watts, and target heart rate. Include recovery weeks and FTP tests in weeks 1, 4, 8, and 12, and be honest about how realistic the goal is.&#8221;<\/em><\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">Before building the plan, the AI assessed my data. It estimated that my FTP had fallen from about 325\u2013329 watts at my peak (December 2021 to February 2022) to about 260 watts, a drop of around 20%, and that my weekly riding had halved from 8\u201310 hours to about 4.5 hours. That told me straight away that this plan would be built around me, not a textbook.<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">The output, generated by the first of the two prompts above, was a very detailed plan with tailored power and heart-rate targets. The table below shows Week 1; the other 11 weeks are just as detailed.<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">The plan is not fixed. After each FTP test, I can give the AI the result and ask it to recalculate my zones and update the remaining weeks, so the plan keeps pace with my fitness. With the newly added MCP Connector, this could even be automated.<\/p>\n<h2 id=\"example-block-1-rebuild-ftp-260-w-3\" aria-hidden=\"true\" class=\"kiosq-b\">Example Block 1: Rebuild (FTP 260 W)<\/h2>\n<div class=\"slice-container table-wrapper slice-container-table kiosq-b\" data-component-name=\"Slice:Table\" id=\"elk-e8027e86-d92f-11f1-84fa-fd417705d59f\" aria-hidden=\"true\">\n<div class=\"table__instruction\">\nSwipe to scroll horizontally<\/p>\n<\/div>\n<div class=\"table__container\">\n<table tabindex=\"0\" class=\"table__wrapper table__wrapper--inbodyContent table__wrapper--sticky table__wrapper--divider\">\n<caption class=\"table__caption table__caption--top table__caption--left\">\nWeek 1 (26th Oct), 8 hours, approx 430 TSS<br \/>\n<\/caption>\n<tbody class=\"table__body\">\n<tr class=\"table__body__row\">\n<td class=\"table_body__data\" colspan=\"1\">\n<p><strong>Day<\/strong><\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p><strong>Duration <\/strong><\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p><strong>Session <\/strong><\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p><strong>Power <\/strong><\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>HR<\/p>\n<\/td>\n<\/tr>\n<tr class=\"table__body__row\">\n<td class=\"table_body__data\" colspan=\"1\">\n<p>Tue <\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>75 mins<\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>20-min FTP test. 15 min Z2, 3 \u00d7 1 min at 290 W<\/p>\n<p>(1 min easy), 5 min easy, 20 min max effort (start at 265 W, build). FTP = 0.95 \u00d7 20-min average<\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>FTP TEST <\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>Rising to 165-172<\/p>\n<\/td>\n<\/tr>\n<tr class=\"table__body__row\">\n<td class=\"table_body__data\" colspan=\"1\">\n<p>Wed<\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>75 mins <\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>Z2 endurance, 85\u201395 rpm<\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>170-190 W<\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>115-133<\/p>\n<\/td>\n<\/tr>\n<tr class=\"table__body__row\">\n<td class=\"table_body__data\" colspan=\"1\">\n<p>Fri<\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>60 mins <\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>Easy, with 4 \u00d7 30 s spin-ups at 110\u2013120 rpm<\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>155-180 W<\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>&lt;128<\/p>\n<\/td>\n<\/tr>\n<tr class=\"table__body__row\">\n<td class=\"table_body__data\" colspan=\"1\">\n<p>Sat <\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>150 mins <\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>Endurance, last hour includes 2 \u00d7 10 min tempo (5 min easy between)<\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>175-190 W<br \/>210-225 W <\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>&lt;133 \/ 135 &#8211; 148<\/p>\n<\/td>\n<\/tr>\n<tr class=\"table__body__row\">\n<td class=\"table_body__data\" colspan=\"1\">\n<p>Sun<\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>120 mins <\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>Z2 endurance<\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>165-185 W <\/p>\n<\/td>\n<td class=\"table_body__data\" colspan=\"1\">\n<p>&lt;133<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h2 id=\"prompts-you-may-find-useful-3\" aria-hidden=\"true\" class=\"kiosq-b\">Prompts you may find useful <\/h2>\n<h4 class=\"article-body__section kiosq-b\" id=\"section-goal-planning\" aria-hidden=\"true\"><span>Goal Planning<\/span><\/h4>\n<p id=\"elk-1de61a4e-d930-11f1-b996-115d1bb1fcdf\" aria-hidden=\"true\" class=\"kiosq-b\">This prompt gets the AI to act as your personal cycling coach and build a 12-week plan that fits around your life and moves you towards a goal, such as beating your best FTP. It is a fuller version of the short prompt above, giving you more control over the output.<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">&#8220;You are an elite WorldTour cycling coach who builds periodised, power-based plans for time-limited amateurs. Using the &#8216;Ride&#8217; and &#8216;Virtual Ride&#8217; activities in my attached Strava activities.csv, create a progressive 12-week plan to [goal, e.g., beat my previous best FTP]. I have [X] hours a week across [X] rides; I can&#8217;t ride on [days], and weekday sessions are capped at [X] minutes.<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">Remember to be specific in your demands; a degree of nuance and experience is needed here, and if you choose to experiment, the more you do, the better you will get.<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\"><strong>I asked the AI to give me:<\/strong><\/p>\n<ul id=\"elk-4797e8c8-d9d4-11f1-be6b-f96107129742\" aria-hidden=\"true\" class=\"kiosq-b\">\n<li>An assessment of my current level against my all-time best, with key numbers. Estimate FTP from Weighted Average Power in 20\u201360-minute rides, and include weekly hours, load, and consistency over the last 12 weeks.<\/li>\n<li>A zones table: % of FTP, watts, and heart rate.<\/li>\n<li>One table per week: day, duration, session (with intervals and recoveries), target watts, target heart rate, and weekly total hours. Include recovery weeks and FTP tests in weeks 1, 4, 8, and 12, with week 12 a taper that ends in the final test.<\/li>\n<li>Up to five rules on fuelling, adjusting when fatigued, and updating zones after each test.<\/li>\n<li>Be realistic about what 12 weeks can achieve.<\/li>\n<\/ul>\n<figure class=\"van-image-figure inline-layout kiosq-b\" data-bordeaux-image-check id=\"elk-567fb144-d9cb-11f1-ac8c-3db5c24a9bf4\" aria-hidden=\"true\">\n<div class=\"image-full-width-wrapper\">\n<div class=\"image-widthsetter\">\n<p class=\"vanilla-image-block\">\n<source type=\"image\/webp\" srcset=\"https:\/\/cdn.mos.cms.futurecdn.net\/uy9qauk23whRTWEW5CxPxG-1200-80.jpg.webp 1200w, https:\/\/cdn.mos.cms.futurecdn.net\/uy9qauk23whRTWEW5CxPxG-1024-80.jpg.webp 1024w, https:\/\/cdn.mos.cms.futurecdn.net\/uy9qauk23whRTWEW5CxPxG-970-80.jpg.webp 970w, https:\/\/cdn.mos.cms.futurecdn.net\/uy9qauk23whRTWEW5CxPxG-650-80.jpg.webp 650w, https:\/\/cdn.mos.cms.futurecdn.net\/uy9qauk23whRTWEW5CxPxG-480-80.jpg.webp 480w, https:\/\/cdn.mos.cms.futurecdn.net\/uy9qauk23whRTWEW5CxPxG-320-80.jpg.webp 320w\" sizes=\"(min-width: 1000px) 970px, calc(100vw - 40px)\" \/><\/p>\n<\/div>\n<\/div><figcaption class=\" inline-layout\"><span class=\"credit\">(Image credit: AI generated image)<\/span><\/figcaption><\/figure>\n<h4 class=\"article-body__section kiosq-b\" id=\"section-recovery-assessment\" aria-hidden=\"true\"><span>Recovery Assessment<\/span><\/h4>\n<p id=\"elk-2b942a82-d930-11f1-ab9d-c7ee6f9a24cc\" aria-hidden=\"true\" class=\"kiosq-b\">This prompt uses your data to check whether you&#8217;ve been riding too hard too often over the past month without enough easy days or rest between hard rides. The aim is to catch fatigue before it leads to poor performance, illness, or burnout.<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">&#8220;You are a cycling physiologist specialising in recovery and fatigue monitoring. Using the &#8216;Ride&#8217; and &#8216;Virtual Ride&#8217; activities in my attached Strava activities.csv file from the last 30 days, find the days where my recovery was probably not enough. My FTP is [X] W, and my threshold heart rate is [X] bpm. Classify each ride as hard (above 85% of FTP), moderate, or easy (below 70% of FTP), using Weighted Average Power, Relative Effort, and heart rate, and treat a heart rate of 0 as not recorded. Flag hard days back-to-back, more than three hard rides in any seven days, and heart rate out of line with power.&#8221;<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\"><strong>I also asked my AI coach to give me:<\/strong><\/p>\n<ul id=\"elk-4797e9ae-d9d4-11f1-8933-c9cbe0727b1a\" aria-hidden=\"true\" class=\"kiosq-b\">\n<li>A 30-day calendar table: date, ride, duration, Weighted Average Power, and Hard\/Moderate\/Easy\/Rest.<\/li>\n<li>Each day where recovery was not enough, with a one-line reason.<\/li>\n<li>My hard-to-easy ratio compared with 80\/20.<\/li>\n<li>Three changes to my weekly structure.<\/li>\n<\/ul>\n<h4 class=\"article-body__section kiosq-b\" id=\"section-event-preparation\" aria-hidden=\"true\"><span>Event Preparation<\/span><\/h4>\n<p id=\"elk-4797ea76-d9d4-11f1-abf3-31526c76d17a\" aria-hidden=\"true\" class=\"kiosq-b\">This prompt checks whether your recent riding has prepared you for a specific event, such as a sportive, road race, or time trial, and tells you what to work on in the four weeks before it.<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">&#8220;You are an experienced cycling coach who prepares riders for races and sportives. Look at my rides from the last 12 weeks in the attached Strava activities.csv file. I&#8217;m riding [event, e.g., a 120 km sportive with 2,000 m of climbing] on [date]; my goal is [goal, e.g., finish under 4 hours], and my FTP is about [X] W. Tell me whether my training so far has prepared me for this event.<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\"><strong>I also asked my AI coach to give me:<\/strong><\/p>\n<ul id=\"elk-4797eae4-d9d4-11f1-b25d-cb1734b392e4\" aria-hidden=\"true\" class=\"kiosq-b\">\n<li>A short summary of how fit I am now, in three or four sentences.<\/li>\n<li>A table of my last 12 weeks: hours ridden, longest ride, total climbing, and number of hard sessions (Weighted Average Power above 85% of FTP) each week.<\/li>\n<li>What&#8217;s missing. Check whether I&#8217;ve done enough long rides, enough climbing, enough long steady, hard efforts, and enough short bursts for attacks. For each gap, show the evidence from my data and why it matters for this event.<\/li>\n<li>A four-week plan to fix those gaps, with the key sessions, the long ride for each week, and power and heart-rate targets.<\/li>\n<li>An honest one-line answer on whether my goal is realistic.<\/li>\n<\/ul>\n<h3 id=\"a-word-on-agentic-ai-3\" aria-hidden=\"true\" class=\"kiosq-b\">A word on agentic AI<\/h3>\n<p id=\"elk-4797eba2-d9d4-11f1-81aa-a1a6a4b36605\" aria-hidden=\"true\" class=\"kiosq-b\">Rather than building all of the above as a self-serve chat-based coach that you ask questions of and manually prompt when you want it to adjust or analyse your work, it could even be built agentically. An overarching AI Agent could be given the primary prompt, the database of Strava workouts uploaded as resources alongside your preferences, and improvements to your power duration curve or your FTP can be its reward signal.<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">The trio of prompts above &#8211; alongside others &#8211; could then be created as &#8216;skills&#8217; &#8211; essentially tools that the LLM can call upon, and automations can be built to check your progress periodically, update the plan in real time, and flag whenever you&#8217;re off track.<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">If you wanted, you could even connect it to your Whoop (if you use one), and your Calendar app of choice to slot the workout into your day.<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">There&#8217;s a lot of potential here, and although the build essentially seeks to mimic much of what&#8217;s already been achieved by TrainerRoad, Zwift Plus, Vekta, FasCat, Xert et al, there&#8217;s a certain enjoyment and pride in building it yourself (even if Claude is doing the hard yards), and being able to tweak it to your liking.<\/p>\n<h2 id=\"conclusion-3\" aria-hidden=\"true\" class=\"kiosq-b\">Conclusion<\/h2>\n<p id=\"elk-2b942afa-d930-11f1-8899-1973f9c3682f\" aria-hidden=\"true\" class=\"kiosq-b\">AI can be a valuable tool for cyclists to understand their training and improve performance, and many are already experimenting with ways to use AI to improve their training.<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">The results are going to depend on the input. While generating a basic training plan is easy, creating a genuinely bespoke one is harder.<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">The real insights come when AI accesses your historical training data. It analyses past performances, assesses your current state, and builds a plan around your ambitions, time, and individual needs. This results in a more detailed and personalised approach.<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">For the plans and outputs to be relevant, the data must be accurate, prompts carefully constructed, and output critically evaluated. Training recommendations are only as useful as their underlying information and assumptions. AI should not replace professional coaching or understanding your body&#8217;s response to training.<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">There&#8217;s also a cost, both for AI platform subscriptions and the time to organise data and refine prompts. Yet, for cyclists willing to invest the initial effort, the reward is a plan built around their own numbers rather than a generic one.<\/p>\n<p aria-hidden=\"true\" class=\"kiosq-b\">I aimed to see if AI could help me regain peak fitness. I now have a structured, data-driven 12-week plan designed to do just that. Its success will ultimately be determined on the bike in the coming weeks.<\/p>\n<\/div>\n<p>[analyse_source url=&#8221;https:\/\/www.cyclingnews.com\/cycling-culture\/training\/how-to-turn-an-ai-into-your-personal-coach-discipline-specific-prompts-and-setup-instructions\/&#8221;]<\/p>\n","protected":false},"excerpt":{"rendered":"<p>[analyse_image type=&#8221;featured&#8221; src=&#8221;https:\/\/cdn.mos.cms.futurecdn.net\/R6qu7nBSZD8s5MLhhHKDX6-2560-80.jpg&#8221;] 1 Wahoo CEO talks finances, artificial intelligence and the company&#8217;s &#8216;next big opportunity&#8217; 2 From scandals and scepticism to parasocial belief \u2013 I&#8217;ve witnessed cycling&#8217;s perception of doping shift dramatically over the last decade, but is that OK? 3 Ask our Labs experts anything about wind tunnel testing, aero bikes, equipment and [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[],"class_list":["post-2241399","post","type-post","status-publish","format-standard","hentry","category-politics"],"_links":{"self":[{"href":"https:\/\/analyse.optim.biz\/index.php?rest_route=\/wp\/v2\/posts\/2241399","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/analyse.optim.biz\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/analyse.optim.biz\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/analyse.optim.biz\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/analyse.optim.biz\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2241399"}],"version-history":[{"count":0,"href":"https:\/\/analyse.optim.biz\/index.php?rest_route=\/wp\/v2\/posts\/2241399\/revisions"}],"wp:attachment":[{"href":"https:\/\/analyse.optim.biz\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2241399"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/analyse.optim.biz\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2241399"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/analyse.optim.biz\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2241399"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}