
[{"content":" Making Changes # In early 2025, staring down 45 while overweight and out of shape, I decided I needed to make some changes.\nI wasn’t trying to become a cyclist. I wasn’t dreaming about century rides or FTP targets or training plans. Mostly, I just felt increasingly aware that I was headed in the wrong direction physically, and that ignoring it probably wasn’t going to improve with age.\nSo I started small.\nI signed up for OrangeTheory Fitness and started attending classes a few times a week. I immediately liked the structured nature of the workouts. Somebody else had already decided what the session was going to be, which meant I could stop thinking and just execute. More importantly, I could actually see progress happening. Within a few months, I was running faster on the treadmill, recovering more quickly between intervals, and feeling less winded during hard efforts.\nThat early progress mattered a lot psychologically. Fitness stopped feeling abstract.\nBuying a Bike # A few months later, my older kid needed a bike for a school cycling trip. I didn’t own a bike myself — the one I’d had 20 years earlier had long since been stolen — so I picked up a cheap $200 bike from Craigslist so I could help with practice rides around the neighborhood. I intentionally bought something inexpensive because I didn’t want to become the guy who bought an expensive aspirational bike only to let it collect dust and regret in the garage.\nI replaced the tires, tuned it up a little, and figured it was good enough.\nAt the same time, I had started experimenting with ChatGPT. One of the first things I used it for was helping define a few goals that would justify buying a nicer bike someday:\nride 1000 miles complete the Lake Washington Loop reach 2.1 W/kg (2W/kg is often cited as the threshold for an enthusiest) At the time, all three goals felt improbably far away.\nThe Lake Washington Loop is roughly a 50-mile ride around Seattle and the east side suburbs, and even thinking about riding that distance sounded vaguely absurd to me. The 1000-mile goal felt similarly unrealistic. And the power-to-weight target — combining both fitness improvements and weight loss into a single metric — seemed more like a conceptual benchmark than something I actually expected to reach quickly.\nAs I learned more about training and endurance physiology, I started using ChatGPT heavily as a learning tool — not as a replacement for primary sources, but as a way to sharpen my understanding and ask questions interactively. I wanted to understand why certain training approaches worked. If I was going to invest significant time and effort into this, I wanted to understand what adaptations I was actually trying to produce.\nBy the end of April, I had used ChatGPT to help build my first structured cycling training block. It wasn’t especially complicated:\none or two interval sessions per week one or two bike commutes one progressively longer weekend ride The plan was intentionally modest because I was still figuring out what was realistic and sustainable in my life. The early long rides were only about 60–90 minutes, but over time they slowly stretched toward two-hour and eventually three-hour rides.\nCommuting to Work # About 20 years earlier, I had occasionally bike commuted to work, and I still had the panniers and clip-in shoes sitting around in storage. I looked up the route in Google Maps and saw that the ride was about 35 minutes and almost entirely protected bike lanes or trails. My normal drive was already 15–20 minutes, parking cost $22 a day, and my office had secure bike parking and showers. It felt possible.\nI wasn’t especially worried about the ride to work. Seattle’s topography was helping me there. The ride home, however, finished with about a 200-foot hill climb, and I distinctly remember wondering whether I’d actually be able to make it all the way up without stopping.\nLooking back at the ride data now, my heart rate spiked to 154 bpm almost immediately on those early climbs. At the time, that felt awful. I remember crawling uphill at around 4 mph in my easiest gear, gasping for air and wondering whether this whole idea had been overly ambitious.\nAt one point, a group of pedestrians noticed the visible suffering happening on my face and started cheering me on. I understood they were being kind, but I remember feeling deeply conflicted about the whole experience. I didn’t particularly want my commute home to be a spectator sport.\nI also remember another cyclist passing me on that same hill. He wasn’t sprinting or showing off. He just looked comfortable. Relaxed. In control. He was climbing steadily at a decent pace while looking completely unbothered by the hill that was currently dismantling me. I remember thinking very clearly: I want to be able to do that.\nLearning to Train # Up until that point, fitness had felt mostly fixed — something people either had or didn’t. But the combination of early progress at OrangeTheory and those first difficult bike commutes started changing my perspective. I wasn’t becoming fit all at once, but I could clearly see movement in the right direction.\nOne of the first moments where I genuinely thought oh, this is working actually happened on a treadmill before cycling became the centerpiece of the story. One of the OrangeTheory workouts built toward a short sprint interval after progressively increasing incline and speed, and I remember hitting that final 30-second effort and realizing I could actually push hard all the way through it instead of immediately falling apart. That feeling of capability was new.\nMy resting heart rate in Apple Health started gradually drifting downward. Heart rate recovery improved noticeably too. That one was especially striking because I could feel it physiologically before I fully understood it intellectually. I had spent years being accustomed to my heart rate staying elevated for a long time after hard efforts — even things like climbing multiple flights of stairs — so it felt strange watching it settle back down quickly after harder rides.\nI also started learning more about training physiology. Initially, I assumed fitness mostly came from brutal high-intensity workouts, but as I learned more about aerobic training and Zone 2 riding, the whole thing started feeling much more approachable. Long, lower-intensity rides designed to build aerobic capacity and mitochondrial adaptation sounded sustainable in a way that endless maximal suffering did not.\nCycling started turning from “exercise” into something I was actively curious about.\nLake Washington Loop # The first truly intimidating endurance milestone was the Lake Washington Loop - one of my goals for a new bike.\nInitially, I had planned to attempt it later in the summer, but my calendar was starting to fill up with travel and other commitments. I used ChatGPT to help think through whether it was realistic to move the ride earlier. Instead of simply saying “yes” or “no,” it helped me build a progression toward it: a series of increasingly longer weekend rides, including a shorter loop around the north side of Lake Washington as a kind of go/no-go checkpoint before attempting the full loop.\nThat progression made the whole thing feel much safer and more manageable psychologically. The Loop stopped feeling like a giant leap and started feeling like the next logical step in a sequence.\nIt also forced me to start thinking more seriously about endurance logistics. Fueling strategy, hydration, electrolyte intake, pacing, water capacity, break timing — all the things that barely matter on shorter rides suddenly became very relevant once I was spending multiple hours on the bike.\nI completed the Lake Washington Loop on July 6th, 2025.\nThe ride was hard. Nearly four and a half hours of moving time felt enormous to me at that point. I got through it, but the last 10–15 miles became a real mental struggle. My body hurt. I was exhausted. By the end, I remember thinking very clearly that there was absolutely no way I could repeat that ride again the next day.\nThat thought stuck with me because I had already started thinking about Seattle to Portland — a two-day ride with back-to-back century distances. At the time, that seemed completely unimaginable.\nStill, the Loop changed something psychologically. A few months earlier, even attempting a 50-mile ride sounded absurd. Now I had done it. Not comfortably, not gracefully, but successfully. The boundary of what felt possible had expanded.\nData and AI # The data became incredibly useful for reducing uncertainty.\nI paced many of my early long rides entirely using heart rate because I didn’t yet own a power meter. I would simply lock into a sustainable heart rate zone and ride at whatever speed that effort allowed.\nAs rides became longer, I started noticing a recurring pattern: everything felt fine until suddenly, near the end of the ride, things became dramatically harder. That led to a series of conversations with ChatGPT about hydration, fueling, electrolytes, and endurance physiology. I’d share screenshots from rides and use them to reason through what might be happening physiologically.\nWhen I eventually added power data into the mix, concepts like heart-rate decoupling became incredibly useful tools for identifying when something was starting to go sideways physiologically. Over time, the numbers stopped feeling abstract and started feeling practical. Data wasn’t replacing intuition; it was helping sharpen it.\nOne of the things I appreciated most about using ChatGPT this way was its ability to adapt plans dynamically. Work trips, vacations, fatigue, and life logistics all forced adjustments throughout the year. Instead of treating training plans as rigid documents, I could continuously iterate on them and reason through tradeoffs interactively.\nThat made structured training feel much more approachable and sustainable.\nBuilding Endurance # Over the following months, longer rides stopped feeling intimidating in the same way. Three-hour rides became normal. Nutrition and pacing stopped feeling mysterious. The limiting factor gradually shifted from whether I could ride long distances to simply how much time I had available.\nBy August, I had purchased an indoor trainer and completed my first FTP ramp test. I exceeded the original goal I had set months earlier, reaching roughly 2.3 W/kg. By October, I had crossed 1000 miles.\nI also started riding more socially. In the fall of 2025, I began joining group rides with the Cascade Bicycle Club. More recently, I’ve found a regular group of friends to ride with. A year earlier, I don’t think I would have had the confidence to join group rides at all. Now they’ve become one of my favorite ways to explore new roads and spend time with friends.\nMy original Craigslist bike is still around too. At this point it’s become a bit of a Bike of Theseus — the frame and fork are original, but most of the other components have gradually been replaced or upgraded over time. Ironically, it’s now my commuter bike, and I still ride it multiple days per week.\nThe Century Ride # The [century ride I completed on day 363 of this journey wasn’t really an endpoint. It was part of a larger progression toward my current goal: completing Seattle to Portland later this summer.\nTo prepare for that ride, I’ve been using ChatGPT to help build another progressive endurance block. The progression started with another 50-mile Lake Washington Loop and gradually added roughly 10 miles per week, building toward the century ride. Including STP itself, I currently expect to ride seven centuries this summer.\nA year ago, that sentence would have sounded completely absurd to me.\nWhat’s funny is that the century itself didn’t feel dramatic. There was no real doubt in my mind that I would finish it. A year earlier, I absolutely would not have believed I was capable of riding 100 miles confidently and finishing strong. But by the time the century arrived, it no longer felt like some impossible fantasy version of myself. It just felt like the next logical step.\nThe best part came near the end.\nThat same hill I had once crawled up at 4 mph with a heart rate pinned in the 150s showed up again around mile 92 of the century route. Except this time, I rode up it at over 8 mph while casually chatting with a friend, averaging a heart rate around 134 bpm. I\u0026rsquo;m now that guy that I wished I was.\nA year earlier, I wasn’t sure I could make it home up that hill. A year later, I rode up it after already completing ninety-two miles. The hill didn’t get easier overnight. It got easier gradually.\nThe rides felt small at the time, but the months added up faster than I expected. No single workout transformed me. No single ride changed my life. But the accumulation of small, repeatable efforts — combined with systems that made consistency easier — gradually changed what felt normal and possible.\nThe century was never really the goal. It was just a milestone along the way.\n","date":"11 May 2026","externalUrl":null,"permalink":"/posts/sedentary-to-century/","section":"Posts","summary":"","title":"From Sedentary to Century","type":"posts"},{"content":"What started with a simple AI prompt - \u0026ldquo;I\u0026rsquo;d like to live forever and have fun doing it\u0026rdquo; - sent me down a rabbit hole of data-driven fitness: structured training, AI-assisted planning and analysis, endurance riding, bike tech, and gear. I write about that journey in posts here.\nI\u0026rsquo;m Andrew - a cyclist, technology nerd, and curious human trying to build fitness and enjoy the process along the way. As I\u0026rsquo;ve shared the story of my cycling journey with others, they\u0026rsquo;ve expressed curiosity - this blog is my attempt to share what I\u0026rsquo;ve learned with others.\nRead about my first year journey: Sedentary to Century\n","date":"11 May 2026","externalUrl":null,"permalink":"/","section":"","summary":"","title":"","type":"page"},{"content":"","date":"11 May 2026","externalUrl":null,"permalink":"/tags/ai/","section":"Tags","summary":"","title":"Ai","type":"tags"},{"content":"","date":"11 May 2026","externalUrl":null,"permalink":"/tags/bike-commuting/","section":"Tags","summary":"","title":"Bike-Commuting","type":"tags"},{"content":"","date":"11 May 2026","externalUrl":null,"permalink":"/categories/","section":"Categories","summary":"","title":"Categories","type":"categories"},{"content":"","date":"11 May 2026","externalUrl":null,"permalink":"/tags/cycling/","section":"Tags","summary":"","title":"Cycling","type":"tags"},{"content":"","date":"11 May 2026","externalUrl":null,"permalink":"/tags/endurance/","section":"Tags","summary":"","title":"Endurance","type":"tags"},{"content":"","date":"11 May 2026","externalUrl":null,"permalink":"/tags/fitness/","section":"Tags","summary":"","title":"Fitness","type":"tags"},{"content":"","date":"11 May 2026","externalUrl":null,"permalink":"/tags/intervals-icu/","section":"Tags","summary":"","title":"Intervals-Icu","type":"tags"},{"content":"","date":"11 May 2026","externalUrl":null,"permalink":"/posts/","section":"Posts","summary":"","title":"Posts","type":"posts"},{"content":"","date":"11 May 2026","externalUrl":null,"permalink":"/categories/reflections/","section":"Categories","summary":"","title":"Reflections","type":"categories"},{"content":"","date":"11 May 2026","externalUrl":null,"permalink":"/tags/","section":"Tags","summary":"","title":"Tags","type":"tags"},{"content":"","date":"11 May 2026","externalUrl":null,"permalink":"/tags/training/","section":"Tags","summary":"","title":"Training","type":"tags"},{"content":"","date":"11 May 2026","externalUrl":null,"permalink":"/tags/zwift/","section":"Tags","summary":"","title":"Zwift","type":"tags"},{"content":"","date":"10 May 2026","externalUrl":null,"permalink":"/categories/ai--data/","section":"Categories","summary":"","title":"AI \u0026 Data","type":"categories"},{"content":"","date":"10 May 2026","externalUrl":null,"permalink":"/tags/apple-watch/","section":"Tags","summary":"","title":"Apple Watch","type":"tags"},{"content":" Reducing Friction # Over the past year, I’ve accidentally built a fairly elaborate cycling data pipeline. The funny thing is that the entire point of this setup is to make riding feel simpler, not more complicated.\nAt this point, nearly every ride and workout I do gets automatically captured somewhere: bike commutes, long weekend rides, indoor trainer sessions, walks, strength training, and even my morning weigh-ins eventually flow through the same ecosystem. Not because I’m trying to become a professional athlete, but because I’ve found that automatic tracking is surprisingly useful over time. I like being able to see training load accumulate, look back at old rides, track gear mileage, and understand how consistently I’m actually exercising instead of relying on vague memory and optimism.\nAt the same time, I don’t want fitness tracking to become homework. I don’t want to manually export files between apps, I don’t want every bike ride to require charging half a dozen devices first, and I definitely don’t want every bike to feel like the cockpit of a small aircraft. Over time, I ended up optimizing for one thing above all else: low friction.\nMost of this setup is automatic. The only thing I really need to remember is to start a ride on either my watch or bike computer — and both of those are smart enough to nag me if I forget and start moving anyway.\nThis also isn’t intended as a guide to the objectively best ecosystem. I’m not especially loyal to Apple, Wahoo, Zwift, or any of the other tools involved here. This is simply the collection of devices and apps that made sense to me as I gradually fell down the cycling rabbit hole over the past year. You could absolutely build something very similar with Garmin or other platforms. The interesting part isn’t the individual gadgets — it’s how the pieces fit together.\nTwo Bikes, Two Philosophies # One thing I realized fairly quickly is that different bikes should optimize for different experiences. My commuter bike and my “nice bike” serve completely different purposes, and the technology attached to them evolved accordingly.\nMy commuter bike is intentionally simple. It’s built around reliability and removing as much friction as possible. It has a 1x drivetrain because I value simplicity over maximizing gear range, and a dynamo hub powering permanently mounted lights, which means I never have to think about charging them — they just turn on automatically whenever the bike moves. I have a phone mount for navigation if I need it, but otherwise the goal is simple: grab the bike and leave.\nI don’t want to strap on a heart rate monitor on my commute. I don’t want to remember to charge a bike computer. My commute is only about 25–30 minutes each way and most rides are fairly relaxed anyway, so I intentionally keep the experience lightweight.\nFor ride tracking, I simply use my Apple Watch running Apple’s built-in Workout app in Outdoor Cycling mode. The watch records GPS, speed, duration, and heart rate automatically. I also have a 4iiii Precision 3+ power meter installed on the bike, which pairs directly to the watch over Bluetooth and adds power and cadence data to the ride.\nThat might sound mildly ridiculous for a commuter bike, and honestly it probably is. But the power meter has an enormous battery life, supports Apple Find My, and quietly future-proofs the bike in case I ever decide to use it for longer rides or training. The end result is that even my casual commute rides end up with a surprisingly complete set of data with almost no effort required on my part.\nThat’s really the key idea behind the whole setup: the technology should disappear into the background. I think this is especially important for commuter bikes. The best commuter setup is usually the one with the fewest excuses attached to it.\nMy other bike — the one I use for long rides, structured training, and events — is a completely different story. That bike is built around richer telemetry and more intentional riding. When I head out for a long weekend ride or an interval session, I do care about detailed ride metrics and performance analysis, so the setup becomes correspondingly more sophisticated.\nFor those rides, I typically use a Wahoo ELEMNT ROAM v3 bike computer, a Wahoo TRACKR heart rate strap, and Favero Assioma pedal-based power meters. Unlike my commuter setup, I generally don’t wear my Apple Watch on these rides at all — the bike computer becomes the primary recording device.\nThis gives me much richer ride data: power, cadence, heart rate, GPS position, navigation, interval timing, elevation, and all the other metrics that become useful once a ride shifts from “transportation” into “training.”\nThe important distinction is that I’m not trying to maximize data collection equally on every bike. The commuter bike is optimized around reducing friction, while the training bike is optimized around collecting richer performance data. Both approaches are valid — they’re just solving different problems.\nWhy I Track Everything # There are two main reasons I track my rides so obsessively: training load and gear mileage.\nThe training side is probably the more obvious one. Once I started riding consistently, especially after adding structured indoor workouts and longer weekend rides, I found it genuinely useful to have all of my exercise history in one place. Being able to see training load accumulate over weeks and months gives me a much better sense of how consistent I’m actually being, how much fatigue I’m carrying, and whether I’m gradually building fitness or just randomly exercising.\nI’ve also found that automatic tracking subtly changes behavior in a good way. It’s much easier to stay consistent when the data exists somewhere and forms a visible history over time. A 30-minute commute ride might not feel particularly meaningful on its own, but after a few months you realize those “small” rides quietly added up to hundreds of miles and a substantial amount of training load.\nThe second reason is much nerdier, but honestly just as practical: maintenance tracking.\nBecause all of my rides eventually flow into Intervals.icu, the app can track mileage on individual pieces of equipment. That means I get reminders when chains, tires, brake pads, or other components cross service intervals. I’m much more likely to maintain a bike correctly when software politely nags me about it.\nThis becomes especially useful once you own more than one bike. Trying to mentally track when each chain was last replaced or how many miles are on a set of tires gets surprisingly difficult surprisingly quickly.\nOne thing I don’t do, however, is push every workout to social media.\nAll of my activities eventually end up in Intervals so I have a complete personal training history, but only some activities get shared publicly to Strava. My commute rides, treadmill workouts, walks, and strength training sessions generally stay private. Long rides, events, scenic routes, and indoor interval sessions are much more likely to get posted publicly.\nI didn’t make this distinction intentionally at first, but over time I realized I preferred it this way. Intervals became my private training database, while Strava became more of a curated social layer. Not every piece of exercise needs to become content for the internet.\nThat said, I’ll admit there’s one funny psychological exception: indoor interval workouts. Those do get uploaded to Strava, partly because the mild social pressure of other cyclists potentially seeing my workout history somehow makes me more likely to finish difficult interval sessions honestly. I have no idea why this works, but it absolutely does.\nHow the Data Actually Flows # The interesting part of this whole setup isn’t really the devices themselves — it’s how the data moves between them.\nMy commuter bike follows a very Apple-centric flow. I record rides using the Apple Watch and Apple’s native Workout app, with the 4iiii Precision 3+ paired directly to the watch over Bluetooth. That workout gets saved into Apple Health automatically.\nFrom there, I use HealthFit to sync activities from Apple Health into Intervals.icu. I originally chose HealthFit simply because I needed a reliable way to bridge Apple Health into Intervals and it seemed to be a commonly recommended solution, but I’ve ended up appreciating it quite a bit. It quietly handles synchronization in the background and can also sync broader health metrics like weight, resting heart rate, HRV, and sleep duration.\nThat same pipeline also captures non-cycling workouts recorded on my watch. Walks, treadmill sessions, and strength workouts all end up flowing into Intervals automatically through the same path. I even have a Withings smart scale that syncs weight data into Apple Health, which then eventually flows into Intervals through HealthFit as well. Once the plumbing exists, adding additional passive health data becomes surprisingly easy.\nMy “nice bike” uses a completely different recording flow. On those rides, the Wahoo ELEMNT ROAM v3 bike computer becomes the primary recording device, pulling data from my heart rate monitor and Favero Assioma pedals. The ride uploads automatically through the Wahoo ecosystem once I finish riding.\nI have the Wahoo app connected to both Intervals and Strava, so those rides automatically get sent to both platforms. Intervals receives the ride for long-term analysis and record keeping, while Strava gets the social-facing version of the activity.\nIndoor riding follows yet another path. I use a Wahoo KICKR CORE with Zwift for structured training sessions during the darker and wetter parts of the Seattle year. Zwift is connected directly to both Intervals and Strava, so completed workouts automatically flow into both services once the ride ends.\nThe important thing is that despite these different ingestion paths, everything eventually converges into a single place. Every ride, indoor or outdoor, easy or hard, structured or casual, ultimately ends up in Intervals. That gives me one consistent training history across all bikes and activities without requiring much active effort on my part beyond remembering to hit “Start Ride.”\nWhy Intervals.icu Became My Source of Truth # At the center of all of this is Intervals.icu.\nI originally started using it for a very simple reason: it was free, and people on cycling forums kept saying surprisingly good things about it. At the time, I mostly just wanted a place where all of my rides could end up together regardless of whether they came from my Apple Watch, Zwift, or bike computer.\nOver time, though, it gradually became the dashboard I open almost every day.\nPart of what I like about Intervals is that it feels very focused on analysis and training rather than social engagement. Strava is great for seeing where friends rode, discovering routes, and sharing interesting activities. Intervals feels more like a personal training notebook that happens to be extremely data-aware.\nIt’s where I look at long-term fitness trends, training load, power curves, weekly volume, fatigue, equipment mileage, and workout history. It’s also where I plan workouts and think about future training blocks. I’m barely scratching the surface of what it can do, honestly, and I’ll probably write a separate post specifically about how I use it.\nOne thing I particularly appreciate is that Intervals doesn’t really care where the data came from. Outdoor rides, indoor rides, walks, strength sessions, and health metrics all quietly coexist in the same timeline. Once everything flows into a single system consistently, interesting patterns start to emerge almost accidentally.\nI’ve also found that having a unified history becomes increasingly motivating over time. There’s something deeply satisfying about opening an app and realizing that hundreds of rides, workouts, and small decisions have quietly accumulated into a meaningful body of work.\nThat’s probably the biggest lesson I’ve learned from all of this: consistency compounds in ways that are difficult to notice day-to-day but become obvious in aggregate.\nWhat I Learned Building This Setup # If there’s one theme running through this entire system, it’s that automation matters far more than perfection.\nThe biggest failure mode for fitness tracking isn’t inaccurate data — it’s friction. Every extra manual step becomes another opportunity for the system to quietly fail. If syncing requires exporting files manually, charging too many devices, or remembering complicated workflows, eventually you stop doing it consistently.\nThat’s why I’ve become such a fan of passive data collection. Most of my rides and workouts now flow through the system automatically with almost no thought required on my part. The less effort the system requires, the more sustainable it becomes long term.\nI’ve also learned that it’s completely okay to mix ecosystems.\nCycling internet discussions sometimes make it sound like you need to fully commit to a single vendor universe — Apple or Garmin, Wahoo or Hammerhead, Strava or TrainingPeaks. In practice, most of these platforms are surprisingly interoperable if you spend a little time thinking about the data flow itself instead of the individual devices.\nMy setup ended up being a weird mixture of Apple, Wahoo, Zwift, Strava, Intervals, Withings, 4iiii, and Favero products mostly because those were the tools that happened to make sense to me at the moment I bought them. There was never some grand architectural plan behind any of this.\nI also think separating private analytics from public sharing was healthier than I expected.\nIntervals contains essentially my complete exercise history, including the boring stuff: commute rides, treadmill walks, recovery rides, strength workouts, and random bits of movement throughout the week. Strava, meanwhile, has become more of a highlight reel — long rides, scenic routes, events, and interval sessions that feel more interesting to share socially.\nThat separation makes both platforms feel more useful to me.\nAnd finally: I’ve learned that the point of all this data isn’t to obsess over numbers constantly. The point is to reduce mental overhead and make consistency easier. The technology works best when it fades into the background and quietly supports the habit itself.\nThe real goal isn’t building the perfect fitness dashboard.\nThe real goal is riding more bikes.\n","date":"10 May 2026","externalUrl":null,"permalink":"/posts/bike-to-cloud-data-pipeline/","section":"Posts","summary":"","title":"Bike → Cloud: My Cycling Data Pipeline","type":"posts"},{"content":" Planning a Training Cycle # One of the hardest parts of structured training isn’t the intervals themselves.\nIt’s deciding to do them.\nAfter a long workday, there’s a certain kind of mental negotiation that starts to happen. Maybe today should be an easier ride. Maybe I’ll move the workout to tomorrow. Maybe I’m too tired. Maybe I should just pedal around in Zone 2 instead.\nSometimes those are legitimate adjustments. Life happens, recovery matters, and not every workout should be forced. But I’ve found that consistency gets much easier when “present me” has to make fewer decisions in the moment.\nOver the past year, I’ve gradually built a system where past me plans workouts for present me.\nThe overall structure starts with longer training cycles. I typically work in roughly 16-week cycles focused around a broader goal: building endurance for longer rides, improving climbing power, increasing FTP, preparing for an event, or raising my aerobic ceiling. Before each cycle starts, I will use ChatGPT to define what the goal of the block actually is and what constraints exist in my real life.\nThat last part matters a lot because I’m very much a time-crunched cyclist. I’m not training 15 hours a week, and I’m not trying to optimize my life around cycling at all costs. Early on, we converged on a sustainable structure that usually looks something like:\none or two structured interval sessions per week a longer weekend ride consistent commute riding That’s an amount of training I can realistically absorb into my life without the entire system collapsing after a busy week or unexpected work trip.\nOnce I\u0026rsquo;ve locked in on the broader goals and constraints, I use ChatGPT to generate a week-by-week progression for the entire 16-week cycle. Those plans include structured interval sessions, long ride progressions, recovery weeks, and estimated training load. I’ll usually do some sanity checking and ask questions or tweak details if something doesn’t feel quite right, but by and large the planning process is collaborative and iterative.\nImportantly, I don\u0026rsquo;t have ChatGPT directly controlling anything. I’m still very much the human in the loop. I save it\u0026rsquo;s output to a note on my computer initially, just to have as a reference.\nExample Week-by-Week Schedule Intervals.icu as the Operational Layer # Once I’m satisfied with the plan, I start building it out in Intervals.icu. That’s where the whole thing becomes operational instead of theoretical.\nOne of the things I’ve come to appreciate about Intervals is that it sits in a really useful middle ground between planning and execution.\nChatGPT helps me think strategically about the structure of a training cycle, but Intervals is where the actual workouts get scheduled, tracked, and forecasted against reality.\nI place all of my planned workouts into the Intervals calendar: interval sessions, long rides, commute rides, and recovery weeks. Structured workouts automatically generate estimated Load/TSS values, while longer outdoor rides get rough estimates based on expected duration and intensity. My commute rides are consistent enough at this point that I already know approximately how much training load they contribute each week.\nOnce everything is placed on the calendar, Intervals can project the Fitness and Fatigue trends forward into the future. That turns out to be incredibly useful when planning longer cycles because you can see potential problems emerging weeks ahead of time instead of discovering them accidentally after you’re already exhausted.\nI’ve found myself iterating on plans pretty frequently after looking at the forecasted Fitness graph. Sometimes the fatigue ramp looks too aggressive. Sometimes a planned travel week creates an awkward training gap. Sometimes I realize a long ride progression became unrealistic once it collided with real life. In those cases, I’ll go back to ChatGPT, revise the structure, and then update the calendar accordingly.\nThat iterative loop has become one of my favorite parts of the whole process. The plan isn’t static, but it also isn’t random. There’s enough structure to create progression and consistency, while still leaving room for reality to intervene. And reality absolutely intervenes.\nI definitely miss workouts from time to time. Sometimes work gets busy, sometimes family schedules explode, sometimes I’m simply too tired to execute a hard interval session properly. I try to stay consistent, but I’ve also learned that a sustainable training system needs enough flexibility to survive imperfect weeks.\nOne unexpectedly useful part of this setup is that my Intervals calendar also syncs directly into my phone’s calendar using iCal. That means all of my planned workouts simply show up alongside the rest of my life.\nI don’t think this changed my behavior in some dramatic productivity-hacker way, but it did subtly change how I prepare for workouts. Seeing an interval session sitting on my evening calendar gives me time to mentally prepare for it. Sometimes that just means getting into the right headspace. Other times it’s a reminder to make sure I’m fueling appropriately during the day or that I have enough background content queued up to survive an hour on the indoor trainer.\nThat kind of preparation sounds minor, but I think it reduces friction more than people realize. Structured workouts are mentally easier when they stop feeling like surprises.\nText-Based Workout Creation # To build the actual workouts, Intervals.icu has a surprisingly simple text-based workout format for defining intervals: duration, power targets, cadence targets, repeat blocks, recovery periods, and so on. There are graphical workout builders too — both Intervals and Zwift have drag-and-drop editors — but I’ve found the text approach dramatically faster and less frustrating.\nMost workouts are iterative variations of previous workouts anyway. Maybe this week’s threshold session is just last week’s workout with slightly longer intervals or slightly higher targets. In a graphical editor, that often turns into a lot of clicking, dragging, zooming, resizing, and fiddling around with tiny blocks. In the text editor, I can usually copy a previous workout, tweak a few numbers, and be done in seconds.\nThat workflow feels much more natural to me. Here\u0026rsquo;s an example of a 4x4 VO2Max session with 4 mintues at 110% FTP, 4 minutes at 40% FTP, repeated 4 times. It starts with a 10 minute ramp up and ends with a 10 minute cool down:\nWarmup - 10m ramp 40%-65% 4x - 4m @ 110% - 4m @ 40% Cool Down - 10m @ 40% The format is very straight forward, and is well documented. Once you understand the structure, workouts become quick to read, quick to modify, and quick to experiment with.\nI think this also subtly lowers the barrier to adjusting workouts intelligently. When editing a workout feels lightweight, I’m much more willing to tweak interval durations, recovery periods, cadence targets, or progression details instead of treating workouts as fixed artifacts that are annoying to modify.\nThat’s become especially useful when iterating on plans with ChatGPT. We might adjust progression timing, alter workout density, or slightly reshape interval structures over the course of a training cycle. Because the workouts are text-based, operationalizing those changes inside Intervals is quick and painless instead of becoming another layer of friction.\nThe Magic Moment: Workouts Automatically Appearing in Zwift # The single most satisfying part of this entire setup was the first time a planned workout automatically appeared in Zwift.\nThat sounds ridiculous to say out loud, but it genuinely changed how approachable structured training felt.\nOnce I connected Intervals and Zwift together, scheduled workouts simply started showing up automatically inside Zwift on the correct day. No exporting workout files. No importing workouts manually. No rebuilding interval structures twice in different apps. The workout I planned was simply… there.\nThat reduced a surprising amount of startup friction.\nAt this point, I can usually clip into the bike on my indoor trainer, start pedaling while Zwift wakes everything up, and have my planned workout running in under a minute. When the weather is dark, cold, or wet — which is a substantial part of the year in Seattle — that reduction in friction matters enormously.\nI should also admit that I use Zwift somewhat differently than many people seem to. I’m not especially invested in the social features, virtual world exploration, or racing side of the platform, though the one race I did participate in was an absolutely brutal workout in the best possible way.\nFor me, Zwift primarily functions as an execution environment for structured training. It’s the place where planned workouts become something tangible and difficult and sweaty.\nAnd because the workout is already waiting for me when I launch the app, there’s much less room for negotiation or procrastination.\nPast me already decided what today’s workout was supposed to be.\nOutdoor Workouts on the Bike Computer # The same planned workouts also sync directly to my Wahoo ELEMNT ROAM v3 bike computer.\nI’ve only done outdoor structured intervals a handful of times because, honestly, executing clean intervals outside is much harder than doing them indoors. Traffic lights, hills, cars, intersections, wind, pedestrians, and terrain all conspire to make precision pacing considerably messier than it is on an indoor trainer.\nStill, when I have done outdoor intervals, having the workout sync automatically to the bike computer has been extremely useful.\nThe Wahoo switches into a dedicated workout mode that provides countdown timers, interval targets, and color-coded power guidance showing whether I’m above or below the prescribed range. That turns the head unit into something closer to a live coach than just a navigation screen.\nI don’t think outdoor intervals will ever feel quite as clean or controlled as indoor trainer sessions, but having the workouts automatically available on the bike computer removes a lot of operational friction there too. I don’t need to memorize interval structures or tape workout instructions to my stem like it’s 2007.\nThe broader pattern here is something I’ve noticed repeatedly throughout this whole ecosystem: every time a manual step disappears, consistency gets slightly easier.\nWhat I Learned Building This Workflow # The biggest thing I’ve learned from all of this is that reducing friction matters far more than maximizing sophistication.\nA lot of fitness technology marketing focuses on features, precision, optimization, and analytics depth. And to be fair, I genuinely enjoy a lot of those things. I clearly wouldn’t be writing blog posts about cycling data pipelines otherwise.\nBut over time, I’ve become increasingly convinced that the systems which survive long term are usually the ones that require the least ongoing effort.\nThe real enemy of consistency isn’t imperfect training.\nIt’s activation energy.\nIf every workout requires rebuilding interval structures manually, exporting files between systems, hunting for the correct route, or deciding what to do that day, eventually the whole process starts feeling mentally expensive. And when training starts feeling mentally expensive, it becomes much easier to negotiate your way out of it after a long day at work.\nThat’s why the “workouts automatically appearing in Zwift” moment mattered so much to me. Technically, it’s a very small feature. Psychologically, it eliminates an entire category of excuses.\nI’ve also learned that planning ahead changes the emotional texture of training in useful ways.\nWhen a 16-week cycle already exists on the calendar, workouts stop feeling like isolated acts of motivation and start feeling more like steps inside a broader progression. That makes it easier to accept that some workouts will feel hard, some weeks will feel messy, and some sessions simply won’t happen. The important thing becomes returning to the structure consistently instead of trying to execute every workout perfectly.\nAnd honestly, the iterative nature of the process has become one of my favorite parts.\nThe plan is never truly finished. Life changes, fatigue accumulates differently than expected, work trips appear, motivation fluctuates, fitness improves, goals evolve. ChatGPT and I end up adjusting things constantly throughout a training block. But because the overall workflow is lightweight and flexible, those adjustments feel manageable instead of disruptive.\nI also think there’s something valuable about separating strategic thinking from moment-to-moment execution.\nPast me is generally calmer, more rational, and better at long-term thinking than present me standing next to an indoor trainer at 7 PM after a stressful workday. Past me can think about progression, fatigue management, event preparation, and sustainability. Present me mostly needs a system that makes it easy to clip in and start pedaling.\nThat division of responsibility has turned out to be surprisingly effective.\nAnd importantly: none of this requires a perfectly integrated ecosystem or cutting-edge hardware. The core ideas here would still work with different devices, different apps, or different training platforms. The specifics matter less than the overall philosophy:\nreduce friction automate repetitive tasks plan ahead leave room for real life make consistency easier Because ultimately, the goal isn’t building the world’s most sophisticated training infrastructure. The goal is making it easier to keep riding bikes consistently for years.\n","date":"10 May 2026","externalUrl":null,"permalink":"/posts/cloud-to-bike-data-pipeline/","section":"Posts","summary":"","title":"Cloud → Bike: Planning Workouts","type":"posts"},{"content":"","date":"10 May 2026","externalUrl":null,"permalink":"/tags/data/","section":"Tags","summary":"","title":"Data","type":"tags"},{"content":"","date":"10 May 2026","externalUrl":null,"permalink":"/tags/intervals.icu/","section":"Tags","summary":"","title":"Intervals.icu","type":"tags"},{"content":"","date":"10 May 2026","externalUrl":null,"permalink":"/tags/strava/","section":"Tags","summary":"","title":"Strava","type":"tags"},{"content":"","date":"10 May 2026","externalUrl":null,"permalink":"/tags/structured-training/","section":"Tags","summary":"","title":"Structured-Training","type":"tags"},{"content":"","date":"10 May 2026","externalUrl":null,"permalink":"/tags/wahoo/","section":"Tags","summary":"","title":"Wahoo","type":"tags"},{"content":" About Me # I’m Andrew — a middle-aged guy with a job, a house, a couple of kids, and all of life\u0026rsquo;s distractions.\nLike a lot of people, I spent years slowly becoming more sedentary than I wanted to be. Work got busy, life got busy, and fitness wasn\u0026rsquo;t a priority. Eventually, I hit the point where I knew I needed to make a change — not because I wanted to become an elite athlete, but because I wanted to feel healthier, stronger, more capable, and more energetic in everyday life.\nCycling ended up becoming the thing that clicked for me.\nWhat started as a slightly intimidating five-mile bike commute turned into a genuine hobby, then a serious fitness journey, and eventually a full-on obsession with training, endurance, gear, nutrition, and data. In my first year of cycling, I lost a substantial amount of weight, built more fitness than I honestly thought I was capable of at this stage of life, and discovered that endurance sports can be both deeply rewarding and ridiculously fun.\nAlong the way, I also discovered that I really enjoy the “systems” side of training.\nI’m a nerd at heart. I like graphs, metrics, workflows, experiments, and optimization. I enjoy understanding how things work and figuring out how to make steady, sustainable progress over long periods of time. That started with AI tools like ChatGPT and then led toward tools like Apple Health and Intervals.icu for capturing data, and eventually Zwift and a power meter for structured intervals and pacing,\nOne of the things that surprised me most during this process was how powerful modern tools can be when you combine them thoughtfully. Not in a “replace human expertise” kind of way, but in a “help ordinary people train more intentionally” kind of way. AI has been incredibly useful for helping me think through training plans, adapt to schedule changes, analyze rides, understand fitness concepts, organize ideas, and generally stay engaged with the process.\nAbout this Blog # This blog is an attempt to share what I’ve learned while navigating all of that. Data-Driven Endurance.\nYou’ll find posts about cycling training, fitness data, endurance riding, AI-assisted coaching, Intervals.icu workflows, nutrition experiments, bike gear, long-ride preparation, and the small practical systems that make consistency easier. Some posts will be technical. Some will be experimental. Some will probably just be me overthinking bicycles on the internet.\nTo be very clear: I’m not a coach, nutritionist, physiologist, or doctor. I don’t have secret expertise or miracle methods. I’m just a curious guy who likes riding bikes, enjoys learning, and wants to document the process honestly — including the mistakes, adjustments, dead ends, and lessons learned along the way.\nMost of all, I hope this site is useful for people who feel like they started “late,” people balancing fitness with careers and families, or people who enjoy combining technology and training in thoughtful ways. You absolutely do not need to be a professional athlete to improve your health, build meaningful fitness, or do hard and rewarding things.\nSometimes you just need a bike, some consistency, and enough curiosity to keep going.\n","date":"9 May 2026","externalUrl":null,"permalink":"/about/","section":"","summary":"","title":"About...","type":"page"},{"content":"","externalUrl":null,"permalink":"/authors/","section":"Authors","summary":"","title":"Authors","type":"authors"},{"content":"","externalUrl":null,"permalink":"/series/","section":"Series","summary":"","title":"Series","type":"series"}]