Good concept for tracking progress in Tiddlywiki?

Hi all,

In my TW for workouts I want to track my progress.
This progress-tracking I want for 2 parts: 1) The exercises and 2) the muscles /cardio /mobility.

So, when I finish exercise A, then I create a journal-tiddler with todays-date by button. And fill in values from the workout.
Some of these values are only related to the exercise (f.e. how many repetitions, how often in the last weeks I did this one).
Some of the values are only related to the muscles (f.e. how often did I trained this muscle, how does the muscle feel now).
Some of the values are related to both.

With these values I want to create some kind of visual progress-tracking (graphs).

Which tracking-concept makes more sense in Tiddlywiki for longterm-use?

  1. To create separate journal-tiddlers?: 1 for each exercise with the exercise-values and 1 for each related muscle with the muscle-values? That would end in a huge amount of journal-tiddlers…
  2. Or 1 journal-tiddler after each exercise with all values (muscle-related values and exercise-related values)? Is it then possible (and how?) to create graphs for all these values. So that I can see visually the progress of muscle A and of muscle B and of exercise A and exercise B and so on?
  3. Or even only 1 journal-tiddler at the end of the workout? How to build that?

And additional question (for later):
I know, these journal-tiddlers don’t make the TW get huge in size. But nevertheless I want to avoid to get millions of them. And also after some time, it just doesn’t make sense anymore to keep all of them for the graphs.
So, I am thinking of deleting them after a time. And build a kind of overview.
At the beginning keeping everyday-journal-tiddlers.
After, maybe 6 months summarise them and only save the average. And after 1 year the same again.

Is there any experience with such? >Workflow, concept, automation?

Please tell me your experiences /workflow. Thanks :slight_smile:

Perhaps creat a tiddler for each session eg once a day and add a field to that tiddler for each exercise done in that session. This will allow you to change the exercises over time yet maintain full records.

Since you may do the same repetitions for the same exercise indefinitely you can create a button to repeat the same from last session and or your goal.

Basical a journal tiddler with an option for more sessions can be driven via a template that shows the exercise buttons but only when you have a session exercise result will a field value be added to the session tiddler.

Hmmm, thanks for your thoughts about the concept-options!
How could I implement this concept with the many fields in both- the exercise-tiddlers as well as in the muscle-tiddlers.
For example:
The exercises have the fields: sets, repetitions, weight, last training-day for that exercise, and some more fields.
The muscles have the fields: How did the muscle feel, last training-day for that muscle, and some more fields.

So, if I write only 1 journal-tiddler per trainingsession. Then I do exercise “Crunch” with the related muscle “Abs”. And the exercise “Jumping Jack” with the related muscles “shoulder” and “leg”.

How do I then write all these fields with all related exercises & muscles into the journal-tiddler?
Would it be something like:
Fieldname “Crunch >sets”: Value “3”
Fieldname “Crunch >repetitions”: Value “10”
Fieldname "Crunch >weight ": Value “1”
Fieldname “Crunch >last-training”: Value “12.10.2026”
Fieldname “Abs >last-training”: Value “12.10.2026”
Fieldname “Abs >rir”: Value “2”
Fieldname “Abs >rpe”: Value “5”
…
And the same for “Jumping Jack” & “shoulders” & “legs”?
And so on?
And how to write these fields automatically by clicking button. (I know how to write text to fields by button). But in a way, that it is possible, to get all these values and build graphs out of it?
So, that I can see the progress of the field “repetitions” of “Crunch” f.e.?

I really have a knot in my head…

Hi @Noushka — I found this a fun problem, so rather than just describe an approach I built a small proof-of-concept you can poke at:

:link: Live demo: Exercise Log

Start on the Overview tiddler, then try Log Session and Progress.

The short recommendation

@TW_Tones’ instinct — a tiddler per session — is the right starting point. I’d push it one step further: make the atomic unit one tiddler per data point, rather than one field per exercise on the session tiddler. It creates more tiddlers, but every metric ends up in a flat, regular field, which is what makes the data trivially queryable and graphable later. That queryability is really the whole game here.

Two kinds of tiddler

Definitions (you maintain these — they’re your reusable vocabulary):

  • Exercise — lists the metrics to capture (e.g. Reps Weight Sets) and the muscles it works
  • Metric — a measurable quantity, with caption, unit, type
  • Muscle

Log data (the form writes these; I tucked them under $:/log/... so they stay out of the way):

  • a session → $:/log/2026-06-15 (kind: session)
  • a performance datapoint → $:/log/2026-06-15/Squat (kind: perf), one per sessionĂ—exercise, with a flat field per metric (Reps, Weight, Sets)
  • a soreness datapoint → $:/log/2026-06-15/soreness/Quads (kind: soreness), one per sessionĂ—muscle

An Exercise lists the muscles it works, but only to pre-seed the soreness inputs — you can still add any other muscle ad-hoc (the classic “why are my calves sore after curls?” case).

Why one-tiddler-per-datapoint

Because the fields are flat and each datapoint carries its own date, any series you’d want is a one-line filter. The progress table for an exercise is literally:

[kind[perf]exercise[Squat]sort[date]]

…reading get[Weight] for each row. The muscle-soreness matrix is the same idea on the soreness datapoints.

:camera_with_flash: Screenshot 1 — the Log Session form: dropdown to add exercises, metric inputs per exercise, and the 0–5 soreness pickers (pre-seeded muscles + an “add muscle” picker).

:camera_with_flash: Screenshot 2 — the Progress page: the per-exercise progress table (columns driven by that exercise’s metrics list) and the soreness matrix (one column per muscle that’s been logged).

Graphs and a dashboard are a small step from here

I deliberately stopped at tables, but the point is that a chart is just a second rendering of the same filter. Feed [kind[perf]exercise[Squat]sort[date]] / get[Weight] into any of the charting plugins (Chart.js, Apexcharts, etc.) and you have a progress graph with zero schema changes. Likewise, the Progress page could easily grow into a dashboard — per-muscle weekly volume, “days since last trained”, soreness trends — all just more filters over the same datapoints.

On archiving old entries

You asked about summarising/archiving after ~6 months. With this model you mostly don’t need to: since every datapoint has a date, “last 6 months” is just a filter, and old data doesn’t slow down recent views. If you did want a rolled-up summary tiddler, that’s again just a filter over a date range — the raw datapoints can stay or go independently.

A couple of implementation notes for anyone building similar

  • Enter ratings with buttons, not a bare <$edit-text>. A button’s <$action-setfield> can stamp kind, date, session, muscle and the value together. A plain edit-text would create a soreness tiddler missing kind: soreness, so it’d silently vanish from every [kind[soreness]...] query.
  • get[…] doesn’t de-duplicate, so the “list of muscles worked today” needs a unique[] (or each[]) — otherwise you get a column per entry instead of per muscle.

This is very much a proof of concept :slightly_smiling_face:

It demonstrates the data model and the round-trip (enter → query → display), but a “real” version would want plenty more: input validation and units, editing/managing the definitions from the UI, handling more than one session per day, nicer styling, the actual charts, maybe per-set logging rather than aggregate, bodyweight/RPE/rest tracking, and so on. Treat it as a skeleton to argue about rather than something to use as-is.

Hello @Scott_Sauyet
I’m really blown away and feel quite embarrassed. How detailed your answer is, how good your explanation is, wow! I really appreciate it- thanks a lot!
But unfortunately… sorry…, I want to be honest…
I haven’t been able to go the way in any kind like TW_Tones suggested. I had really absolutely no idea how to do that, not at all.
So I tried to walk by myself for reaching my goal. I felt like “well very probably it’s not the best way and quite probably even not a good way not at all- but ok, I will try to go”.

And now I already went the biggest part of it- I think and hope. And this way goes in a different direction to the one you’re suggesting :flushed_face:

Like you wrote- I also thought: I have the need to think from the end-goal- and what is needed for this end-goal. In this case begin to think from the needed graphs at the end.
So I have been looking for possibilities to build graphs in my TW. With the question “can I implement such without asking anybody for help”.
My first approach also was in direction to filters- such kind of filters you wrote. But I could not find out, if I could build a graph with a filter I am able to build.
But then I found a graph-solution, which I understood and was able to work with: Chartist. And this has a completely different approach: Writing value-pairs into dictionary-tiddlers. So, everything, what I want to track, gets its own dictionary-tiddler. This will produce a huge amount of tiddlers over time. But they are completely flat, not complicated nested structure or a lot of fields. And at least half or third of them I can restrict to stay small by “let only the last 30 entries remain”. In the others… in about 6 months I will need to delete entries / get averages of them. I’ll look into this after these 6 months.

Don’t be sorry. I applaud you for wanting to work this through in your own way.

And my solution does include something you said you specifically wanted to avoid: a proliferation of tiddlers. I think it’s justified, but there’s no reason for you to agree with me on that. As Lindsey Buckingham said, go your own way!


But I have to admit that in answering this, I also had two ulterior motives. First, I try hard to push a certain data approach in discussions here, and this looked to me to be another case where this approach makes things easier.

Second, and more importantly, a few months ago, I started work on a problem that’s been a thorn in the community’s side for far too long: how to create and manage commonly needed editions of TiddlyWiki. My first step was to create a Recipes edition. I’m happy with how that came out, but it was only meant to be a first step. The important bit is the editions management piece for that, but I feel I need to get some more useful editions under my belt before I approach that. And this sounded like a right-size problem: something clearly useful to a lot of people, and maybe slightly less involved than the Recipe one.

So my approach was to start this as though I might build it into a community edition. The techniques used here match well with skills I already have, so I was able to do this quickly. To be a real useful edition, I think it would need a lot of work, but I feel it’s designed to allow that work without a lot of rework.


So please, continue on your path, ask questions when you want – or when you feel you must! – and if anything from this version is useful to you feel free to borrow, steal, fold, spindle, or mutilate it.

@Scott_Sauyet Thank you for understanding :slight_smile: !
I still agree -and not only agree, it is still my own opinion- I definately want to avoid the increasing of the wiki gets out of my hand- and even with content, that is not anymore important.
And: It does not matter, if it’s my opinion or my liking to hold the TW small. Instead it is just a fact: If I do not delete content and add more or less everyday content- then… one day… it won’t work anymore in a good usable way, because there are millions of tiddlers. And then beginning to delete- that would be a pain.
But, because I already went another way and almost completed that, I need to try finding solutions to reach that deleting of unneeded old content in another way.

I like your idea of different TW editions :+1: !
I often miss such things.
And yes, I have been really surprised, that I did not find any kind of solution for workouts with TW or- a bit similar- for habit tracking (for that I found only one mentioned, which is not anymore existing).
It has reasons, why I use TW, in which way I came to Tiddlywiki. This was from an end user need. For years I have been searching for Apps /Software /Possibilities to fulfill that need. And tried all of them. And finally reached my goal with Tiddlywiki :slight_smile: .

Now I also use Obsidian. Both have their advantages & disadvantages, both are not perfect. A mix of both would be almost perfect :laughing: .
One thing, TiddlyWiki is definately guilty for: I never knew before, that it is so fascinating & enthusiastic for me, that it makes me feel so happy & proud to write codes and to find solutions with that. As an end user, who even did not know before what html is. Often I stop eating, stop going to toilet, trying to find that one needle in the haystack for hours in the middle of the night while working with TW :rofl: :zany_face: . TiddlyWiki opened a new world for me :slight_smile:
My first two TWs I use now for about 10 years and they are almost perfect for me. Meanwhile a have several TWs for several needs. No other software reached that, I replaced several apps, because I have now my own, haha :rofl: :smiling_face_with_sunglasses:

Whoah! Very, very useful. I been looking at the way it works.
Looks quite easy to adopt for all sorts of measures / targets.
Very helpful indeed to see a set of examples so fully worked through.

Best, TT