Measurements
Part of the Vigor
Measurements: part of the Vigor suite, on the shared “vigor-en” data.
data space «vigor-en» — this micro app reads and writes the suite’s shared data space.
What it records
- Weight (kg)
- Blood pressure (e.g. 120/80)
The other micro apps in the same suite
How it works
This is a Reactive app: a plain text document that your browser turns into a working app — forms, live data, tables, statistics and even charts, with nothing to install or configure.
- Use it right away. Hit “Use this app”: it opens right in your browser, ready to go, with data saved only on your device.
- Your data stays yours. Everything is stored locally on your device, kept separate for each app: no account, no server, nothing to set up.
- Make it your own. The text below is the entire app: copy it, tweak fields, views and words, and your changes become interactive instantly.
- Share it as a file. An app is a simple file: save it, export it or share it with a link; and with encrypted collaboration several people edit the same data in real time.
The app’s source
# ⚖️ Measurements
## The measurements diary
::::form{path="measurements" id="fmi"}
::input{form="fmi" field="date" type="date" required="true" legend="Day"}
::input{form="fmi" field="weight" type="number" placeholder="Weight (kg)" required="true"}
::input{form="fmi" field="pressure" placeholder="Blood pressure (e.g. 120/80)"}
::add-form{form="fmi" path="measurements" label="Log"}
::::
:::table{path="measurements" headers="Day,Weight,Pressure" deletable="true" editform="fmi"}
{date} | {weight} kg | {pressure}
:::
:::python{data="measurements" packages="matplotlib"}
```
import matplotlib.pyplot as plt
rows = data.get("measurements", [])
series = sorted(
((r.get("date", ""), float(r.get("weight", 0) or 0)) for r in rows if r.get("weight")),
key=lambda x: x[0],
)
if len(series) < 2:
print("Log at least two weigh-ins to see the trend.")
else:
fig, ax = plt.subplots(figsize=(6, 3))
ax.plot([d for d, _ in series], [p for _, p in series], marker="o")
ax.set_ylabel("kg")
ax.set_title("Weight trend")
plt.xticks(rotation=30)
plt.tight_layout()
```
:::