This year most of my attention went to building the app, so training took a back seat. Last year I underwent heart surgery (I might write about that in a separate blog post). I had no clear competitive goals for the season; the main task was simply not to stop training and to get out to races from time to time so as not to lose fitness.
After the âBright Verticalâ race I started preparing for the next season. It was on New Year's Eve that the idea of an AI coach was born â a coach that does not simply generate text but analyzes your goals and reports, and only then gives recommendations and helps build season plans â everything an experienced coach would do. Work beganâŚ
As usual, I decided to experiment and try training with a well-known large language model (LLM). I sat down to develop the project and at the same time began testing the ChatGPT API together with the program from Jack Daniels' periodization book. I worked with text prompts only â no real data or files, no SQL, JSON or GPX attachments. It is also important to note that I had no practical development experience before this: I was âaround ITâ since childhood but never wrote code. I worked at several IT companies, mostly with graphics and cartography software. The whole project â from idea to release â was a lesson and practice at the same time.
What I added to the AI context so it would better understand my current form accumulated in 2024:
Phase I: base preparation (December 10, 2024 â midâJanuary 2025), Phase II: transition to intensity (midâJanuary â midâFebruary), Phase III: specific preparation (March 2025), Phase IV: taper to the main race (April 2025).
Supplements and vitamins: started taking D3 5000 IU. Polar fitness test readings: 68, 69, 69 VOâmax (three measurements); morning measurement showed 73.
Statistics for 2024: total distance 4,726 km (+15% vs 2023), total elevation gain 38,322 m (+52% vs 2023), total time under load 657 h (+35% vs 2023). Trail running 2,147 km, walking 474 km, cross-country running 902 km, strength and general physical preparation (GPP) 61 h 38 m, hiking 189 km. Heart rate: 57 bpm â avg. at rest, 148 bpm â avg. at peak efforts. Calories: 911 avg. active kcal, 1,944 avg. resting kcal, 2,856 avg. total kcal. Steps: 5,465,425 total steps, 6,217.6 km total distance, 15,139 average steps/day, 105,104 average steps/week. Sleep: 8 h 47 m â average sleep duration per week.
Each week I gave the model short text reports with numbers and sensations so it would stay updated about how I felt. The idea is to keep a training diary and create plans that the AI coach can analyze and, based on that, suggest loads suited to you. Yes, now an LLM can not only read but also fill in the diary and plans for you â just enable âread and writeâ in the chat settings, then you can submit a report and ask it to populate specific dates. This saves manual work, but the model can make mistakes. Always doubleâcheck what it writes.
You have probably tried image generation (DALL¡E, Midjourney) â those models âpaintâ pictures. And you have likely used ChatGPT â it âwritesâ text. But creating training plans is different: for a plan to work reliably, models must do more than produce words â they must operate on your training history, metrics, test results and coach rules. Without that, the result will look like âwise wordsâ rather than a practical plan that withstands load and injury risk.
Diffusion models (images) â like starting from white noise and slowly and carefully âbrushing off the dustâ until the desired image appears. It is an iterative âdenoisingâ of the entire image.
LLMs (text) â like a smart set of building blocks: the model places a word after a word; each next choice depends on what has already been said â and thus the text emerges. This is sequential construction.
Both techniques are good at their tasks: diffusion works great for coherent whole images, transformers/LLMs are great for coherent language. But generating a plan is not just âwriting textâ: it involves querying history, checking constraints (injuries, load), calculating workloads and implementing adaptation logic. You need a system where the LLM is the front-end/synthesizer, and the âmemoryâ and calculations live in a database and functional modules.
Back to training. The year began in Phase II: transition to intensity (midâJanuary â midâFebruary) to take part in the Bison Trail Silichy. The plan was a 10K, and the key sessions I would name were several long runs of 20â29 km on snow and several tempo and interval sessions (similar to what I did in 2023 and 2024, but this year I moved 95% of sessions from asphalt and treadmill to offâtrail). In this phase I also did GPP and strength sessions and managed to do several hillâspecific sessions (SBU).
For the second year in a row I fell ill before the same race, and the day before it was decided to switch from 10K to 5K. I followed the AI's race tactics:
In practice I followed the plan, but at 4â5 km I lost the tape several times and got off course; nasal and throat congestion interfered with running â my airways clogged and I had to stop several times for 10â20 seconds. At 5â6 km I couldn't give everything; I ran in my own tempo.
It was the worst leadâin I have ever had. A totally bad transition between seasons â "the poet's genius" failed me. If I hadn't had prior experience preparing for 5â10K with a real coach, I would not have made it. Yes, I managed to take first place, but it is my weakest victory. Without databases, GPT cannot correctly analyze your form even from reports, because it analyzes text in your reports, not your actual physiological history. Without the full picture and real links between presentâme and pastâme, it could not provide correct workouts and plans. I had to learn PostgreSQLâŚ
Bison Trail Silichy
Phase III: specific preparation (March 2025). This was preparation for the Jucki Trail 5K (a trail relay as part of the âThree Catsâ team).
Key sessions in preparation: trails + hillâspecific SBU, a long 22 km trail in mud with variable pace inserts, long progressive trails, and several trail speed sessions.
The race tactic was to run fast at threshold effort. I had experience running on narrow trails where overtaking is difficult, so it is better to take the lead early. That worked until the first muddy section around 2 km, after which speed dropped. At the 5 km mark the mucus again closed my airways and stopped me. This was my curse for the rest of the year; ENT specialists shrug, and in practice only seawater via snorkel helps me â but in damp climates it returns.
Team victory in the relay and the secondâfastest absolute time among all participants.
Jucki Trail
Phase IV: taper to the main race (April 2025). The target race was Bison Trail Lahojsk.
Key sessions included an 11 km trail during the snow cyclone Zion. I love running in a snowstorm; it is especially beautiful in nature at that time and you can really test your form in extreme conditions. I also started taking creatine. I did several interval sessions. IT band syndrome resurfaced; I began recovery and managed to be ready, starting the race painâfree.
The tactic was simple: stay in the lead pack. But again the main earlyâseason race did not go as planned. From the start, on a long climb, it didn't work out â perhaps I didn't warm up enough. I let the leader go and didn't chase with maximal effort. 2nd place overall.
The course wasn't hard â it seemed easier than Elkpath in the same area. I didn't push myself; I kept heart rate within threshold, not above 180. In hindsight I lacked sufficient strength and tempo sessions. At the end of April ITBS flared up, so I reduced running load and added more cycling.
Bison Trail Lahojsk
Transition phase April 28 â May 5: gradual increase of specific load, control of monotony, and general special phase May 6 â July 5. Development of climbing power, explosive strength and preparation for speed work.
This period was preparation for the Museum Run and again the 3Ă5 km relay with the "Three Cats" team. There were strong competitors, but so few teams that after this race the organizers rethought the trailârelay concept and did not hold them in 2025. I regret that â it was the best format I ever ran!
Museum Run
During this phase I thought I would stop running entirely â I had neither the strength nor the time. But I remembered a passage in Lydiard's book about a young athlete losing strength during a race and preparing to quit. Lydiard, instead of allowing him to withdraw, pushed him by another means â he told him not to slow down but to try to increase pace and catch the leaders. The athlete tried, increased speed, caught the group and eventually overtook rivals â winning the race. The episode illustrates a coaching technique: psychological push plus faith in preparation can restore or even improve performance. I did the same, not for one race but for the whole preparation. Instead of stopping training, 5NA1L found a new program and I decided to increase volume and try running twice a day. Before that I had run twice a day only once â summer 2022 â and I didn't like it. The maximum weekly volume before this had been 113 km, and that was everything I had. If in the previous year I did 4-5 running sessions per week with lower volumes, in this year there were only 1-2 sessions per week. Thus began a summer highâvolume period of 100â160 km per week. The AI assistant suggested taking a public ready plan, for example "81â100 miles per week: 12âweek plan" from Faster Road Racing: 5K to Half Marathon by Pete Pfitzinger and Philip Latter, and adapt it to forest terrain. Yes, during this period I ran exclusively offâtrail, which I believe saved me from injuries this season. Of course I couldn't follow the elite plan exactly â it was more like something between the 61â84 mile plan and the 81â100 mile plan per week. Naturally, everything was controlled only by my sensations and capabilities â no sessions by strict pace.
I used to think I had enough endurance. How wrong I was. Endurance wasn't even close. Only by trying volumes up to 160 km/week did I understand that endurance is the ability to keep running continuously, especially when fatigued. There is huge potential in that, because building endurance is generally easier than building speed. For me personally it is less interesting. That's why recreational runners prefer marathons over sprint distances.
Key highlights: a 30 km trail (avg HR 130) in heavy rain; several long tempo sessions such as 22 minutes + 18 minutes with a 10 km warmâup and 5 km coolâdown. Two recovery sessions on the days between hard sessions. A few runs in heat. I did virtually no GPP/strength work â I consider that a mistake.
This was the build for Kaspersky Race 20 km and I hesitated whether to run 10K, 20K or a multiâstage event. Since it was a plan targeting the half marathon, I chose the half marathon.
Race day was very hot â I was already a bit wilted during the warmâup. Thanks to the base and long heat training we managed to take first place. But again it was a wooden medal â I ran far below my capability. There was preparation, motivation and great form, but for some reason I didn't realize it. 20 km â 01:18:08; first half on forest trails, second half on gravel road, mostly downhill with two decent climbs. Most of the race I ran at planned pace ~3:35â3:45, but heat (+27 °C) and the last 2 km with a +44 m climb did their job; pace dropped closer to 4:30. The course and terrain were very similar to those near my home training area. I believe on that day I again failed to hit peak form.
Kaspersky Race
General-purpose LLMs such as ChatGPT, Claude or Gemini demonstrate strong capability at general language and logical tasks. Without adaptation to a specific domain (via fineâtuning or loading structured domain data) they do not guarantee stable and correct operation in narrow specialized scenarios â for example, designing training plans for trail running. The pretrained weights and training corpora of such models rarely include deep domain context, specific terminology, or accumulated practical coaching experience â all of which are necessary for accurate personalization.
Modern LLMs can process very large contexts (tens or even hundreds of thousands of tokens), but that is not equivalent to deep understanding of data. In practice, analysis quality degrades as text volume grows due to increased noise and âcontext rotâ â when the model loses the ability to connect facts across a long context. Therefore, approaches that dump everything to the model â long logs, journals, training histories â do not improve quality until semantic search, filtering and hierarchical summarization methods are used.
That is why I built an app focused on one domain â trail running. Only by collecting and preserving reports, normalizing and merging them into a single structure, and then using language models as a synthesis layer, can you create correct, adaptive plans. Coaching expertise is built over years and thousands of athlete interactions; my task is to approximate that level for a model via a systematic athlete history: profile metrics, power and cardio profiles, real behavior on courses and route characteristics.
General LLMs are fine for general advice, but for reliable planning, route analysis and adaptive tracking they need integration into domain âskillsâ â formalized workflows and rules â and access to structured athlete data (training history, profile tests, route characteristics). Without that, there is a risk of missing important context, offering unsuitable recommendations or making a critical error; consequently, the practical value of âbareâ LLMs in trail running is limited until they are provided with specialized skills and data. With limited compute resources, you should design a system where the LLM is a conversational and synthesizing layer, while reliability is achieved by typed skills, verifiers and an auditable data history.
On September 21, after finishing the â81â100 milesâ weekly block, I reduced volume while maintaining intensity with the â61â84 milesâ weekly block. With the onset of autumn I allowed myself to relax. Project stress and the release process were heavy, so I chose not to add physical stress on top of mental stress. If I couldn't run, I didn't; if I could, I ran easy. For the first time in several years of competition I skipped 2â3 days without running; previously that happened only with injury or illness.
I had no more races planned for the rest of the year, but the âcatsâ invited me to run with the team, even though it wasn't a relay. Bright Vertical is clearly not my specialty. I caught a cold before the race and took a lot of pills. I ran very poorly; after the tenth floor I began to walk intermittently.
Result: I didn't even qualify. The team dragged me onto the podium in the team classification â third place â and I got a scolding from the manager. A perfect end to the season!
Bright Vertical
The next day we held our first group training under the Run the Fuckville project (see the events page). A few guys showed up and we did a long run through a snowy forest, hitting several steep climbs. Before the run I took ibuprofen and an isotonic drink â the run felt great. It is worth noting that I had not run in groups before, and I found that during conversations breathing is a more objective indicator of intensity than heart rate. Heart rate was mostly at the end of zone 2. In my view, the classic method of intensity zones based purely on heart rate is not precise; instead, it is better to use the ability to hold a conversation without needing breaks. Group runs are an excellent way to focus on this. If you can talk without breaks during a session â that is zone 2; if you need pauses â you have crossed into zone 3. Traditional heart rate zones do not reflect the physiological essence of processes happening in the body. Breathing should be the main guide. The transition from being able to speak with some effort to being unable to speak without gasping corresponds to the threshold between zones 2 and 3. At the same time, heart rate can be used to mark the moment of transition between zones 2 and 3, but it is a relatively âfloatingâ metric that depends heavily on:
The heart rate corresponding to the transition from zone 2 to zone 3 can vary considerably between individuals â roughly from 120 to 160 bpm. Therefore, relying solely on heart rate to assess intensity is not advisable. Using breathing as the main indicator helps assess training more objectively and adjust load for effective and safe endurance development.
I should also note a new approach to strength work. Previously, before focusing on running, I trained intensively in the gym and at outdoor calisthenics parks. In this offâseason I decided to experiment with a kettlebell. I started right away with a 16 kg bell â I had no other option. I did highâintensity workouts (HIIT) to additionally develop endurance through strength and to strengthen all muscles and connective tissues comprehensively, which I had depleted during highâvolume running. I focused on core muscles, abductors and trunk stability. In this block I did not do a specific adaptation for trail running. Kettlebell exercises are mainly performed standing, so the whole system is engaged: balance and stabilizers work. And of course the compound effect on muscle groups also taxes the cardio system. I liked it â it seemed the kettlebell was more convenient than the gym and in less time you can load more muscle groups.
It is important to note that highâintensity interval training (zones 4â6) stimulates quantitative mitochondrial growth and gives rapid effects with less time investment, but it requires a base. Without gradual buildâup through zone 2, the risk of injury and inefficiency of highâintensity work is high. Regularity, gradual progression and an individual approach are key principles for training for health and longevity. We'll see what comes of this next yearâŚ
After this block I fully switched to preparing for the next season and will try to make it as raceâdense as possible. After all, the best training is racing. See you at the starts!