basarorsel.com
HealthFit exports become an embedded training ledger. Python aggregates the record; dependency-free SVG draws volume, routes and inferred routine exposure.
Mathematics, code and a map in hand.
I’m Başar Örsel, a mathematician, programmer and athlete based in Urla, İzmir, Turkey. I study B.Sc. Mathematics at İzmir Institute of Technology (İYTE), build websites and small systems, and train for orienteering, mountains and water. These are three parts of the same life. Here I keep the training I record and the things I build.
Former national orienteer for Turkey. Rebuilding toward the senior-elite men's team, E21E, in 2027.
Current state: detrained. Previous selection is history, not evidence of current fitness. The work now is restoring running capacity and bringing it back to the map.
The running gate is 3000 m under 10:00. It is a target, not an achieved result or a guarantee of selection.
The log below shows what the watch recorded. It cannot tell you how cleanly I navigated or whether I am ready to race.
Running and swimming sit alongside mountaineering, strength and mobility in my training. I’m rebuilding from where I am now.
orienteering · mountaineering · swim + run · strength · mobility
Volume, pace, heart rate and the gaps between recorded sessions. This is a dated snapshot of watch data, not a live feed.
Historical bests do not describe today's fitness.
Deduplicated sessions, grouped by FIT sport and display category. Unrecognized sports stay visible. Sub-sports retain the export's labels.
| Discipline | FIT sport | Sub-sports | Sessions | Hours | km | Ascent / m |
|---|---|---|---|---|---|---|
| hiking | hiking | generic | 6 | 22.116 | 31.7 | 2,499 |
| jump rope | jump rope | generic | 1 | 0.101 | — | — |
| mind and body | fitness equipment | pilates | 4 | 2.049 | — | — |
| mind and body | training | flexibility training, yoga | 13 | 4.603 | — | — |
| other | generic | generic | 20 | 5.186 | — | — |
| running | running | generic | 129 | 120.599 | 1,010.189 | 3,016 (54/129 recorded) |
| strength | training | strength training | 42 | 14.435 | — | — |
| swimming | swimming | open water | 3 | 1.256 | 1.732 | — |
| walking | walking | generic, indoor walking | 127 | 45.707 | 229.776 | 1,997 (120/127 recorded) |
Hours use recorded timer time. Distance and ascent are sums of recorded fields only; — means unrecorded, not zero. Partial sums show their session coverage. Indoor zero distances are export values, not inferred travel. Display precision is not sensor accuracy.
Every number below is computed from this FIT export, not typed by hand. "Recorded" means the watch captured it; it is not a certified race result. Ties list every date.
| Achievement | Value | Date(s) |
|---|---|---|
| Fastest 1 km | 253 s | 2026-05-14 |
| Fastest 3 km | 878 s | 2026-05-14 |
| Fastest 5 km | 1500 s | 2026-05-10 |
| Fastest 10 km | 3099 s | 2026-05-10 |
| Fastest half marathon | 6759 s | 2026-05-10 |
| Longest run | 31.01 km | 2026-05-17 |
| Biggest running week | 72.8 km | 2026-W09 |
| Biggest running month | 225.1 km | 2026-04 |
| Highest recorded heart rate | 202 bpm | 2026-08-25 |
| Biggest single-session ascent | 1067 m | 2026-08-05 |
| Biggest ascent day | 1110 m | 2026-08-05 |
| Longest hike | 6.25 km | 2026-08-04 |
| Longest swim | 0.97 km | 2026-06-15 |
| Fastest swim pace | 140.9 s/100m | 2026-08-06 |
| Most strength sessions in a week | 7 | 2025-12-22 |
| Most strength sessions in a month | 12 | 2025-12 |
| Most mobility sessions in a week | 3 | 2026-03-02, 2026-07-13 |
| Hike longest timer session | 6:20:35 | 2026-08-05 |
| Strength longest timer session | 0:54:58 | 2026-03-12 |
| Mobility longest timer session | 0:37:49 | 2026-08-12 |
| Most mobility sessions in a month | 5 | 2026-03, 2026-07 |
| Longest mapped swim / recorded session distance | 0.969 km | 2026-06-15 |
Rolling split coverage (qualifying windows / runs): k1: 120/129; k3: 116/129; k5: 95/129; k10: 34/129; hm: 6/129. Other field coverage is listed in Data coverage below; discipline tabs include record-specific measured counts.
Running splits are sampled rolling elapsed-time windows with plausibility filters, not certified race PBs. Running totals use recorded distance; highest HR uses session maxima. Discipline records exclude missing fields; measured counts and tied dates are detailed in each discipline tab. Longest time on feet uses timer time, excluding pauses. Swim pace uses paired positive timer and distance; conditions differ.
Outlined break-point markers indicate likely stops / break points: speed below 0.5 m/s for more than 120 seconds. GPS gaps over 30 seconds are excluded; slow movement and GPS error can still look like stops.
Recorded swims, with distance and pace where the watch supplied them. Pool and open-water conditions differ.
| Sessions | Recorded km | Timer hours |
|---|---|---|
| 132 | 1,011.922 | 121.854 |
Distance is a sum across disciplines, not an equivalent training load or an event result.
Dates and calendar periods: Europe/Istanbul. Durations are timer time, excluding pauses. Partial totals identify measurement coverage.
Distance-weighted pace uses paired positive distance and timer time: 3/3 sessions. Pool and open-water conditions are not equivalent; this is whole-session pace, not a fastest split.
Bests in this export, not current fitness or certified results. All tied dates are listed. Missing measurements are excluded; partial-day ascent is a recorded sum.
2026-06-15 · 3/3 measured / eligible
2026-06-15 · 3/3 measured / eligible
2026-08-06 · 3/3 measured / eligible
| Month | Sessions | Timer hours (coverage) |
|---|---|---|
| 2026-06 | 1 | 0.608 (1/1 recorded) |
| 2026-07 | 1 | 0.594 (1/1 recorded) |
| 2026-08 | 1 | 0.054 (1/1 recorded) |
| Date | FIT sport | FIT sub-sport | Timer / h:mm:ss | km | Pace / min:sec per 100 m |
|---|---|---|---|---|---|
| 2026-06-15 | swimming | open_water | 0:36:29 | 0.969 | 3:46 /100 m |
| 2026-07-27 | swimming | open_water | 0:35:38 | 0.626 | 5:42 /100 m |
| 2026-08-06 | swimming | open_water | 0:03:13 | 0.137 | 2:21 /100 m |
Simplified, projected GPS traces; no basemap, not for navigation. Swim type comes from FIT metadata, not the shape of a trace. Sessions without GPS say “no GPS trace recorded”; pool GPS is not plotted.
Running record: 129 runs · 1,010.189 km · 120.599 h. Running dashboard →
No cycling data in this FIT export. A bike split is not claimed; triathlon-oriented training here means swim + run only.
Mountaineering is inferred from FIT hiking and recorded ascent, not a distinct mountaineering sport. Recorded ascent, not summit elevation or a claim of technical climbing.
Dates and calendar periods: Europe/Istanbul. Durations are timer time, excluding pauses. Partial totals identify measurement coverage.
Bests in this export, not current fitness or certified results. All tied dates are listed. Missing measurements are excluded; partial-day ascent is a recorded sum.
2026-08-05 · 6/6 measured / eligible
2026-08-04 · 6/6 measured / eligible
2026-08-05 · 6/6 measured / eligible
2026-08-05 [2026-08-05: 2/2 sessions measured] · 4/4 measured / eligible
| Month | Sessions | Timer hours (coverage) |
|---|---|---|
| 2026-08 | 6 | 22.116 (6/6 recorded) |
| Date | FIT sport | FIT sub-sport | Timer / h:mm:ss | km | Ascent / m |
|---|---|---|---|---|---|
| 2026-08-04 | hiking | generic | 3:49:18 | 6.248 | 655 |
| 2026-08-05 | hiking | generic | 6:20:35 | 6.047 | 1,067 |
| 2026-08-05 | hiking | generic | 3:26:57 | 2.349 | 43 |
| 2026-08-06 | hiking | generic | 2:57:51 | 5.188 | 350 |
| 2026-08-06 | hiking | generic | 3:20:59 | 6.073 | 360 |
| 2026-08-08 | hiking | generic | 2:11:18 | 5.796 | 24 |
Simplified, projected GPS traces; no basemap, not for navigation. Sessions without GPS say "no GPS trace recorded".
Watch-derived altitude by distance; can contain GPS altitude error.
Dates and calendar periods: Europe/Istanbul. Durations are timer time, excluding pauses. Partial totals identify measurement coverage.
Bests in this export, not current fitness or certified results. All tied dates are listed. Missing measurements are excluded; partial-day ascent is a recorded sum.
2026-03-12 · 42/42 measured / eligible
2025-12-22 · 19/19 measured / eligible
2025-12 · 10/10 measured / eligible
| Month | Sessions | Timer hours (coverage) |
|---|---|---|
| 2025-04 | 5 | 0.742 (5/5 recorded) |
| 2025-05 | 1 | 0.149 (1/1 recorded) |
| 2025-06 | 3 | 0.492 (3/3 recorded) |
| 2025-11 | 2 | 0.651 (2/2 recorded) |
| 2025-12 | 12 | 3.018 (12/12 recorded) |
| 2026-02 | 2 | 1.358 (2/2 recorded) |
| 2026-03 | 5 | 2.866 (5/5 recorded) |
| 2026-04 | 3 | 1.42 (3/3 recorded) |
| 2026-07 | 5 | 1.939 (5/5 recorded) |
| 2026-08 | 4 | 1.8 (4/4 recorded) |
| Date | FIT sport | FIT sub-sport | Timer / h:mm:ss |
|---|---|---|---|
| 2025-04-27 | training | strength_training | 0:08:54 |
| 2025-04-27 | training | strength_training | 0:08:51 |
| 2025-04-28 | training | strength_training | 0:08:49 |
| 2025-04-30 | training | strength_training | 0:09:05 |
| 2025-04-30 | training | strength_training | 0:08:51 |
| 2025-05-01 | training | strength_training | 0:08:55 |
| 2025-06-01 | training | strength_training | 0:09:55 |
| 2025-06-10 | training | strength_training | 0:09:44 |
| 2025-06-11 | training | strength_training | 0:09:53 |
| 2025-11-27 | training | strength_training | 0:30:00 |
| 2025-11-28 | training | strength_training | 0:09:05 |
| 2025-12-07 | training | strength_training | 0:33:22 |
| 2025-12-11 | training | strength_training | 0:02:00 |
| 2025-12-14 | training | strength_training | 0:25:43 |
| 2025-12-19 | training | strength_training | 0:30:00 |
| 2025-12-21 | training | strength_training | 0:30:00 |
| 2025-12-22 | training | strength_training | 0:05:00 |
| 2025-12-23 | training | strength_training | 0:05:00 |
| 2025-12-24 | training | strength_training | 0:05:00 |
| 2025-12-25 | training | strength_training | 0:05:00 |
| 2025-12-26 | training | strength_training | 0:05:00 |
| 2025-12-27 | training | strength_training | 0:05:00 |
| 2025-12-28 | training | strength_training | 0:30:00 |
| 2026-02-10 | training | strength_training | 0:50:00 |
| 2026-02-16 | training | strength_training | 0:31:29 |
| 2026-03-09 | training | strength_training | 0:27:00 |
| 2026-03-10 | training | strength_training | 0:30:00 |
| 2026-03-11 | training | strength_training | 0:30:00 |
| 2026-03-12 | training | strength_training | 0:54:58 |
| 2026-03-13 | training | strength_training | 0:30:00 |
| 2026-04-01 | training | strength_training | 0:05:00 |
| 2026-04-20 | training | strength_training | 0:40:26 |
| 2026-04-27 | training | strength_training | 0:39:47 |
| 2026-07-18 | training | strength_training | 0:35:00 |
| 2026-07-19 | training | strength_training | 0:30:00 |
| 2026-07-19 | training | strength_training | 0:15:24 |
| 2026-07-19 | training | strength_training | 0:15:54 |
| 2026-07-20 | training | strength_training | 0:20:01 |
| 2026-08-12 | training | strength_training | 0:47:47 |
| 2026-08-13 | training | strength_training | 0:20:02 |
| 2026-08-21 | training | strength_training | 0:20:07 |
| 2026-08-22 | training | strength_training | 0:20:04 |
Inferred by matching workout timestamps/dates against the routine log; a programmatic estimate, not biometric measurement. Historical sessions use the approved routine union, not exercise-level FIT evidence.
Intensity means attributed sessions, not force, fatigue or measured muscle activation. Equal historical intensities reflect the mapping assumption.
Schematic body model, not anatomical segmentation. Pale = fewer sessions; solid = the largest count in this view. Outlined = no attributed sessions.
Mind-and-body FIT categories are a mobility proxy, not proof of a specific mobility exercise or measured range of motion. Original sport labels are retained below.
Dates and calendar periods: Europe/Istanbul. Durations are timer time, excluding pauses. Partial totals identify measurement coverage.
Bests in this export, not current fitness or certified results. All tied dates are listed. Missing measurements are excluded; partial-day ascent is a recorded sum.
2026-08-12 · 17/17 measured / eligible
2026-03-02, 2026-07-13 · 9/9 measured / eligible
2026-03, 2026-07 · 5/5 measured / eligible
| Month | Sessions | Timer hours (coverage) |
|---|---|---|
| 2025-12 | 1 | 0.522 (1/1 recorded) |
| 2026-02 | 3 | 1.38 (3/3 recorded) |
| 2026-03 | 5 | 2.28 (5/5 recorded) |
| 2026-07 | 5 | 1.194 (5/5 recorded) |
| 2026-08 | 3 | 1.277 (3/3 recorded) |
| Date | FIT sport | FIT sub-sport | Timer / h:mm:ss |
|---|---|---|---|
| 2025-12-31 | fitness_equipment | pilates | 0:31:18 |
| 2026-02-16 | training | yoga | 0:28:00 |
| 2026-02-27 | training | flexibility_training | 0:24:08 |
| 2026-02-27 | fitness_equipment | pilates | 0:30:39 |
| 2026-03-02 | training | yoga | 0:28:32 |
| 2026-03-05 | fitness_equipment | pilates | 0:32:36 |
| 2026-03-07 | training | flexibility_training | 0:23:34 |
| 2026-03-10 | training | yoga | 0:23:45 |
| 2026-03-12 | fitness_equipment | pilates | 0:28:21 |
| 2026-07-17 | training | flexibility_training | 0:19:09 |
| 2026-07-18 | training | flexibility_training | 0:11:27 |
| 2026-07-19 | training | flexibility_training | 0:12:38 |
| 2026-07-20 | training | flexibility_training | 0:16:35 |
| 2026-07-22 | training | flexibility_training | 0:11:48 |
| 2026-08-12 | training | flexibility_training | 0:37:49 |
| 2026-08-21 | training | flexibility_training | 0:16:26 |
| 2026-08-22 | training | flexibility_training | 0:22:20 |
Inferred by matching workout timestamps/dates against the routine log; a programmatic estimate, not biometric measurement. Historical sessions use the approved routine union, not exercise-level FIT evidence.
Intensity means attributed sessions, not force, fatigue or measured muscle activation. Equal historical intensities reflect the mapping assumption.
Schematic body model, not anatomical segmentation. Pale = fewer sessions; solid = the largest count in this view. Outlined = no attributed sessions.
Counts describe what the FIT export contains, not what happened outside the watch. Recorded zero values count as present. GPS counts require a usable projected route; indoor routes are excluded. Elevation counts describe retained profiles, not every altitude sample. HR includes summary or record samples.
| Category | Sessions | Distance | Timer | Ascent | HR | GPS route | Elevation profile | Exercise detail |
|---|---|---|---|---|---|---|---|---|
| hiking | 6 | 6 | 6 | 6 | 6 | 6 | 6 | 0 |
| jump_rope | 1 | 0 | 1 | 0 | 1 | 0 | 0 | 0 |
| mind_and_body | 17 | 0 | 17 | 0 | 17 | 0 | 0 | 0 |
| other | 20 | 0 | 20 | 0 | 20 | 0 | 0 | 0 |
| running | 129 | 129 | 129 | 54 | 129 | 117 | 6 | 0 |
| strength | 42 | 0 | 42 | 0 | 41 | 0 | 0 | 0 |
| swimming | 3 | 3 | 3 | 0 | 3 | 3 | 0 | 0 |
| walking | 127 | 127 | 127 | 120 | 127 | 122 | 0 | 0 |
Exercise detail counts sessions containing FIT set messages. Routine attribution is separate evidence from routines.md; it does not supply recorded sets, repetitions or load.
Europe/Istanbul calendar months. Missing timer fields are excluded; empty months mean no sessions in this export. Hours compare recorded duration, not effort.
running · walking · hiking · swimming · strength · mobility · other
| Month | running | walking | hiking | swimming | strength | mobility | other | Timer / sessions |
|---|---|---|---|---|---|---|---|---|
| 2023-09 | 0 | 0 | 0 | 0 | 0 | 0 | 0.599 | 2/2 |
| 2023-10 | 0 | 1.848 | 0 | 0 | 0 | 0 | 0 | 3/3 |
| 2023-11 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0/0 |
| 2023-12 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0/0 |
| 2024-01 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0/0 |
| 2024-02 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0/0 |
| 2024-03 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0/0 |
| 2024-04 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0/0 |
| 2024-05 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0/0 |
| 2024-06 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0/0 |
| 2024-07 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0/0 |
| 2024-08 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0/0 |
| 2024-09 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0/0 |
| 2024-10 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0/0 |
| 2024-11 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0/0 |
| 2024-12 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0/0 |
| 2025-01 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0/0 |
| 2025-02 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0/0 |
| 2025-03 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0/0 |
| 2025-04 | 0 | 0.235 | 0 | 0 | 0.742 | 0 | 0 | 6/6 |
| 2025-05 | 0 | 0 | 0 | 0 | 0.149 | 0 | 0 | 1/1 |
| 2025-06 | 0 | 0 | 0 | 0 | 0.492 | 0 | 0 | 3/3 |
| 2025-07 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0/0 |
| 2025-08 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0/0 |
| 2025-09 | 7.386 | 0.787 | 0 | 0 | 0 | 0 | 0 | 14/14 |
| 2025-10 | 1.493 | 0 | 0 | 0 | 0 | 0 | 0 | 2/2 |
| 2025-11 | 1.674 | 0 | 0 | 0 | 0.651 | 0 | 0.116 | 6/6 |
| 2025-12 | 11.858 | 0 | 0 | 0 | 3.018 | 0.522 | 0 | 31/31 |
| 2026-01 | 11.163 | 3.664 | 0 | 0 | 0 | 0 | 0 | 24/24 |
| 2026-02 | 24.041 | 10.434 | 0 | 0 | 1.358 | 1.38 | 0.371 | 62/62 |
| 2026-03 | 21.147 | 10.217 | 0 | 0 | 2.866 | 2.28 | 0.508 | 78/78 |
| 2026-04 | 24.779 | 11.783 | 0 | 0 | 1.42 | 0 | 0.752 | 54/54 |
| 2026-05 | 9.958 | 1.324 | 0 | 0 | 0 | 0 | 1.846 | 14/14 |
| 2026-06 | 1.321 | 0 | 0 | 0.608 | 0 | 0 | 0.101 | 3/3 |
| 2026-07 | 3.978 | 0.897 | 0 | 0.594 | 1.939 | 1.194 | 0.994 | 21/21 |
| 2026-08 | 1.235 | 3.944 | 22.116 | 0.054 | 1.8 | 1.277 | 0 | 18/18 |
| 2026-09 | 0.565 | 0.574 | 0 | 0 | 0 | 0 | 0 | 3/3 |
229.776 recorded km · 45.707 timer hours.
122/127 sessions have usable GPS. Simplified, projected traces; no basemap, not for navigation. Recorded session distance is not measured from the drawing.
Historical attribution applies before 2026-09-08 in Europe/Istanbul. Exact timestamp logs take precedence over date logs. After the cutoff, unmatched sessions remain unmatched. Historical muscle groups are program attribution, not proof of exercise or biometric load.
| Routine | Category | Attributed muscle groups |
|---|---|---|
| Full Body | strength | chest, back, shoulders, quads, hamstrings, glutes, core |
| Leg | strength | quads, hamstrings, glutes, calves |
| Core | strength | abdominals, obliques, lower-back |
| Neck | strength | neck-flexors, neck-extensors, upper-traps |
| Daily Mobility | mobility | hips, spine, shoulders, ankles, wrists, neck |
| Category | Historical routine union | Historical matches | Logged matches | Unmatched |
|---|---|---|---|---|
| strength | Full Body, Leg, Core, Neck | 42 | 0 | 0 |
| mobility | Daily Mobility | 17 | 0 | 0 |
Session summaries supply distance and timer time. Duplicate start-time/sport records are removed. Distance totals reconcile against monthly and weekly sums, within rounding tolerance. Weeks without a recorded run remain visible.
Best splits use a rolling distance window between sampled record frames. They are not race results. Route drawings use simplified, projected GPS traces; they omit a basemap and are not for navigation. Only location clusters are drawn; other traces are counted separately.
Banister TRIMP uses average heart rate, the highest recorded HR and an explicitly assumed resting HR. The load curves are exponentially weighted averages, initialized at zero. They are not measured fitness or a prescription. The form value is chronic minus acute load.
Decoupling compares speed/HR between halves, after excluding the warm-up and filtering movement records. Quarterly averages combine different routes, conditions and intensities; pace and HR have separate scales. Elevation is watch-derived and can contain altitude error. Calories are watch estimates.
Targets in Athlete are goals, not telemetry. The current-state description is self-reported. This snapshot does not establish readiness for selection.
Read the parser & calculations ↗ · Download this aggregate ↓
I build hand-coded websites and small systems, including Raspberry Pi and RFID experiments. Through Orsel Studio, I work on WooCommerce, AI and search. The projects below link to their source and explain their scope.
HealthFit exports become an embedded training ledger. Python aggregates the record; dependency-free SVG draws volume, routes and inferred routine exposure.
The identity page. One hand-coded document, hash navigation, a local-hour theme and the same signature and visual rhythm as this portfolio.
An event and society registration experiment with an RFID reader script. Related RHT_RFID code includes Arduino and Python server components. These are prototypes, not verified production attendance systems.
The raspberry-pi-web-server repository records a Pi hosting experiment. RFID and object detection also appear in the InoReg fork below; that implementation has upstream authors and is not presented as my original work.
A receipt-analysis and carbon-estimation experiment with Python, a web interface and tests. Its estimates, accuracy and compliance claims have not been independently validated; this is not a certified environmental accounting tool.
I study topology and knot theory, and I’m interested in machine learning and LLM evaluation. This is ongoing study; I don’t present it as a finished research project.
A fork of NOMANSAEEDSOOMRO/Attendance-System: RFID and object detection using Raspberry Pi. Listed as a study reference, not an original implementation or a verified deployment by me.
AutoGPT and esp-rfid are upstream projects represented by forks in my account. Their functionality and authorship belong to their maintainers; a fork is not a contribution claim.
HealthFit → FIT → Python → JSON → SVG / self-contained HTML.
Raw FIT files stay local. The aggregate contains training summaries and simplified route shapes. No framework, CDN, tracker, account or runtime network request is required.
I’m Başar Örsel, a mathematician, programmer and athlete based in Urla, İzmir, Turkey. I study B.Sc. Mathematics at İzmir Institute of Technology (İYTE), build websites and small systems, and train for orienteering, mountains and water. These are three parts of the same life. My interests in mathematics include topology, knot theory, machine learning and LLM evaluation. I use he/him pronouns.
The person: mathematics, sport, current direction and contact.
Self-recorded training data, projects and public source code.
WooCommerce, AI/search optimization and complete websites. Business belongs there, not in the training log.
Questions, ideas, a route worth running, or a problem worth solving — I read everything and reply when there is something to say.