Tag-based logging is Unfair's structured way of capturing the qualitative context around a dose or a check-in — symptoms, meal state, travel, training load, sleep disruption, mood events — using a small fixed vocabulary of two-tap labels rather than free-form prose. Two tags per day, captured in under five seconds, produce a log that is actually searchable and that the ranking model can group. A weekly paragraph in a notes field produces a log that reads well once and is unusable at cycle review.
Why free text is the wrong tool
Free-form journals fail in two ways that compound. They are inconsistent — "headache," "head hurt," "dull pain behind eyes," and "pressure" all end up describing the same thing across four weeks, and none of them cluster. And they are slow — a paragraph takes 90 seconds of attention that most users will not give, so entries drop out the moment life gets busy. A tag library fixes both failures: the vocabulary is fixed, so day 4's "headache" and day 40's "headache" are the same atom, and the entry is a tap, so the user actually makes it. Free text still belongs inside Unfair for exceptional events, but it is a supplement to tags, not a substitute.
The default tag taxonomy
Unfair ships a 24-tag default library organized into four categories. Each tag serves a different role in the model and a different question at cycle review.
| Category | Role in review | Example tags | What it answers |
|---|---|---|---|
| Mood and affect | Annotates subjective proxy scores with same-day affect context | flow, flat, irritable, anxious, low, elevated | Is this focus score reflecting the stack or the day? |
| Context and confounders | Flags days where something outside the stack dominated the outcome | poor sleep, travel, illness, deadline, social event, late caffeine | Does this dip belong to the compound or to the confounder? |
| Side effects | Clusters adverse-effect signals so the ranking model can down-weight the source | headache, GI upset, jitteriness, insomnia, flush, rash, brain fog, palpitations | Is this a recurring side-effect pattern worth flagging? |
| Meal and training context | Explains timing-sensitive swings in focus, energy, or recovery | fasted, high fat, high carb, late meal, rest day, zone 2, heavy lift, first session back | Is this a dose-effect or a meal-and-training-effect? |
Users can add custom tags, but the library has a soft cap. A vocabulary of 60 becomes unscannable and fragments the categorical signal; 20–30 well-chosen tags is the right range. Unfair warns at 40 and prompts a cleanup at 60.
Rules for tags versus free text
Tags and free text answer different questions and should not be used interchangeably.
- Use a tag when the concept is likely to repeat (any mood, any side effect, any meal or training state). Repetition is what makes the tag valuable.
- Use free text for one-time context that will not repeat (a specific travel week, an unusual medication change, a particular product lot concern). These are notes, not data.
- Promote recurring free text to a tag after the same concept has been written three times. Unfair suggests the promotion automatically once a free-text phrase clusters.
- Never log a severity score inside a tag. The Likert rating captures how much; the tag captures about what. Mixing the two breaks both.
How tags improve signal
Tags let the feedback loop separate compound effects from confounders. A drop in energy on a "poor sleep" or "illness" day is context and does not penalize the stack. Two weeks of "jitteriness" tags clustered inside the dose window of a new pre-workout is a side-effect pattern worth isolating, and the ranking model responds by down-weighting that compound's confidence until the cluster resolves or the dose is changed. Context tags also protect adherence signal — a "travel" day with a missed dose is coded differently from a routine miss, which keeps the correlation metadata honest and feeds cleaner inputs to the recommendation ranking.
Tag hygiene over time
A tag library that started tidy at onboarding will drift after two months of real use. Unfair runs a lightweight cleanup prompt every 60 days that does four things — merges near-duplicate tags ("headache" and "head pain"), archives tags with zero uses in the last 45 days, flags tags with more than 150 uses for subcategory review, and asks the user to retire custom tags they have added but stopped using. The goal is a library that stays readable, not a library that grows forever.
A numeric example
A user on a pre-workout trial rates focus 4/10 on three days in week 2. Without tags, those three scores drag the trend toward "ineffective." With tags, the picture is different — day 9 is tagged "poor sleep, deadline," day 11 is tagged "new pre-workout, jittery, GI upset," and day 13 is tagged "fasted, heavy lift." The model treats day 9 as confounded, day 11 as a side-effect cluster against the new compound, and day 13 as a meal-state artefact. The single rating becomes three different pieces of information. In practice, that is the difference between abandoning a compound and identifying a dose-timing fix.
Rules for when a tag triggers a ranking change
Not every tag moves the model. A single "headache" tag on a busy day does nothing; a repeated pattern is what the feedback loop treats as signal. The thresholds are intentionally conservative to avoid penalizing a compound for one bad day:
- Three or more occurrences of the same side-effect tag inside a 14-day window, with at least two of them inside the active dose window of a specific compound, down-weights that compound's ranking confidence.
- Two or more severe-symptom tags (regardless of window) suspend the compound from the ranked feed and surface a clinician resource.
- Context tags never penalize a compound — they only prevent the day's outcome scores from being counted against it.
How this appears in Unfair
Tags are available inside the daily check-in, attached to any dose event from one-tap dose logging via the long-press action, and available as standalone ad-hoc entries from the Today tab. The review screen filters and groups by tag so patterns across a stack cycle are legible at a glance, and clustered side-effect tags feed directly into the compound-level confidence scoring that shapes the recommendation ranking.
Clinical safety note
A small set of severe-symptom tags (chest pain, syncope, rash spreading, severe abdominal pain, suicidal ideation) is not routine data. When any of these tags fire, Unfair pauses optimization nudges and surfaces clinician and crisis resources immediately. These are flags for human care, not inputs to a ranking cycle.