What does “mg/L” mean?
mg/L means milligrams of caffeine per liter.
The app uses mg/L as a practical “concentration-like” score:
it’s easier to interpret than total mg alone, because body weight influences how strong caffeine feels.
- The same drink affects people differently
- Body weight changes concentration
- Concentration makes thresholds easier to understand
The widget shows your current estimated caffeine level in mg/L.
The graph shows how caffeine decays over time and when you drop below your sleep-safe threshold.
Important: This is an estimate. Garmin watches can’t measure caffeine in blood.
The model is designed to be practical and useful, not medical-grade.
What the levels mean (thresholds)
Everyone reacts differently, but these thresholds work well as practical guideposts:
Sleep-safe target
A practical “aim to be below” level before sleep. Most people can fall asleep without issues at this level, while keeping sleep disruption minimal — even if you’re sensitive to caffeine.
Stimulation starts
Around this level, many people begin to feel noticeable stimulation, such as increased alertness or reduced sleepiness.
High level
A high caffeine level where side effects become more likely, including jitters, nervousness, or an elevated heart rate.
Very high level
Very high caffeine level associated with strong stimulation and a high risk of adverse health effects, including anxiety, tremor, and heart palpitations. Additional caffeine is likely to worsen symptoms.
Tip: If you’re primarily optimizing sleep, treat 0.3 mg/L as your main target and use the “when will I drop below it?” time as your guardrail.
Premium personalization
Premium unlocks advanced personalization so the model matches your habits and metabolism better:
- Custom drinks & caffeine amounts (Premium) — add your own drinks with exact mg (e.g., Energy Drink 500 ml — 160 mg).
- Adjustable caffeine half-life (Premium) — choose one of the supported presets below.
Supported half-life settings (Premium):
4 hours • 5.5 hours • 7.5 hours • 10 hours
Premium: add custom drinks so your logged caffeine matches what you actually drink.
Premium: choose a half-life preset to better match how fast you metabolize caffeine.
Computation algorithm (simplified)
Internally, the app keeps a running estimate of your current caffeine level and updates it whenever time passes or you log a drink.
The model is based on exponential decay (half-life).
Step 1: Start with the last known level
The app stores your last computed caffeine level and its timestamp.
Step 2: Let it decay over time (half-life)
When the widget updates, the level is reduced based on how much time has passed since the last update:
Decay formula:
levelNow = levelPrev × 0.5^(Δt / halfLife)
Where Δt is time elapsed (in the same units as halfLife).
Step 3: Add newly logged drinks
When you log a drink, its caffeine amount (mg) is converted into a level increase using your body weight,
and added on top of the current decayed level:
Update rule:
levelNow = levelNow + drinkDelta
drinkDelta is derived from the drink’s caffeine (mg) and your configured weight-based normalization.
Step 4: Predict “sleep-safe time”
To estimate when you’ll fall below a chosen threshold, the app solves the decay equation for time:
Sleep-safe prediction:
timeToThreshold = halfLife × log2(levelNow / threshold)
If levelNow ≤ threshold, timeToThreshold is 0 (already below).
Background updates:
The app refreshes your estimate automatically (e.g., every 5 minutes), so your current level stays accurate without manual refresh.